@clickview/lite 0.104.0-rc.6 → 0.104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +807 -806
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{Dnz8CbEu.chunk.js → -QIG2ZHc.chunk.js} +3 -3
- package/dist/scripts/{Dnz8CbEu.chunk.js.map → -QIG2ZHc.chunk.js.map} +1 -1
- package/dist/scripts/{CEv1_bDW.chunk.js → -brFp4w1.chunk.js} +2 -2
- package/dist/scripts/{CEv1_bDW.chunk.js.map → -brFp4w1.chunk.js.map} +1 -1
- package/dist/scripts/{CX6c7KRp2.chunk.js → 0mx04bmJ2.chunk.js} +2 -2
- package/dist/scripts/{CX6c7KRp2.chunk.js.map → 0mx04bmJ2.chunk.js.map} +1 -1
- package/dist/scripts/{CMHxOVI7.chunk.js → 41LJfkjO.chunk.js} +2 -2
- package/dist/scripts/{CMHxOVI7.chunk.js.map → 41LJfkjO.chunk.js.map} +1 -1
- package/dist/scripts/{BBWnpWNB2.chunk.js → 7uvJMXC12.chunk.js} +2 -2
- package/dist/scripts/{BBWnpWNB2.chunk.js.map → 7uvJMXC12.chunk.js.map} +1 -1
- package/dist/scripts/{CaCm4N_d2.chunk.js → B-HfRX562.chunk.js} +2 -2
- package/dist/scripts/{CaCm4N_d2.chunk.js.map → B-HfRX562.chunk.js.map} +1 -1
- package/dist/scripts/{D9wxi5or2.chunk.js → B2_RD6Px2.chunk.js} +2 -2
- package/dist/scripts/{D9wxi5or2.chunk.js.map → B2_RD6Px2.chunk.js.map} +1 -1
- package/dist/scripts/{DSPMbDdF.chunk.js → B3_lC6bW.chunk.js} +2 -2
- package/dist/scripts/{DSPMbDdF.chunk.js.map → B3_lC6bW.chunk.js.map} +1 -1
- package/dist/scripts/{8JGe5Ug_2.chunk.js → B5GEXNkP2.chunk.js} +2 -2
- package/dist/scripts/{8JGe5Ug_2.chunk.js.map → B5GEXNkP2.chunk.js.map} +1 -1
- package/dist/scripts/{0Fek4oFk.chunk.js → BLE8DLAY.chunk.js} +2 -2
- package/dist/scripts/{0Fek4oFk.chunk.js.map → BLE8DLAY.chunk.js.map} +1 -1
- package/dist/scripts/{BgPye7Nd2.chunk.js → BRt-Kdnn2.chunk.js} +2 -2
- package/dist/scripts/{BgPye7Nd2.chunk.js.map → BRt-Kdnn2.chunk.js.map} +1 -1
- package/dist/scripts/BTWmC6pW.chunk.js +5 -0
- package/dist/scripts/BTWmC6pW.chunk.js.map +1 -0
- package/dist/scripts/{D3ncynN72.chunk.js → BVBpDZoT2.chunk.js} +3 -3
- package/dist/scripts/{D3ncynN72.chunk.js.map → BVBpDZoT2.chunk.js.map} +1 -1
- package/dist/scripts/{5PKjjI4Y.chunk.js → BapoiGsj.chunk.js} +2 -2
- package/dist/scripts/{5PKjjI4Y.chunk.js.map → BapoiGsj.chunk.js.map} +1 -1
- package/dist/scripts/{CNfmLVE82.chunk.js → Bc1JT5Y-2.chunk.js} +2 -2
- package/dist/scripts/{CNfmLVE82.chunk.js.map → Bc1JT5Y-2.chunk.js.map} +1 -1
- package/dist/scripts/{cDv6zuhh.chunk.js → BhE5KhcC.chunk.js} +2 -2
- package/dist/scripts/{cDv6zuhh.chunk.js.map → BhE5KhcC.chunk.js.map} +1 -1
- package/dist/scripts/{Bzk4AwVx2.chunk.js → BncgzKKQ2.chunk.js} +2 -2
- package/dist/scripts/{Bzk4AwVx2.chunk.js.map → BncgzKKQ2.chunk.js.map} +1 -1
- package/dist/scripts/{CV-fOLNI2.chunk.js → Bpf3Tyy12.chunk.js} +2 -2
- package/dist/scripts/{CV-fOLNI2.chunk.js.map → Bpf3Tyy12.chunk.js.map} +1 -1
- package/dist/scripts/{DPZnaz74.chunk.js → C1OiUBQI.chunk.js} +2 -2
- package/dist/scripts/{DPZnaz74.chunk.js.map → C1OiUBQI.chunk.js.map} +1 -1
- package/dist/scripts/{B1TqilLB.chunk.js → C6z8ii6C.chunk.js} +2 -2
- package/dist/scripts/{B1TqilLB.chunk.js.map → C6z8ii6C.chunk.js.map} +1 -1
- package/dist/scripts/{fMgBORUX.chunk.js → C8x-QH43.chunk.js} +2 -2
- package/dist/scripts/{fMgBORUX.chunk.js.map → C8x-QH43.chunk.js.map} +1 -1
- package/dist/scripts/{BiWUSyJr.chunk.js → CAkqvKfy.chunk.js} +2 -2
- package/dist/scripts/{BiWUSyJr.chunk.js.map → CAkqvKfy.chunk.js.map} +1 -1
- package/dist/scripts/{CjOMeOwb2.chunk.js → CGv0OFnc2.chunk.js} +2 -2
- package/dist/scripts/{CjOMeOwb2.chunk.js.map → CGv0OFnc2.chunk.js.map} +1 -1
- package/dist/scripts/{B82m7K0U.chunk.js → CJGWbJ4m.chunk.js} +2 -2
- package/dist/scripts/{B82m7K0U.chunk.js.map → CJGWbJ4m.chunk.js.map} +1 -1
- package/dist/scripts/{D-iyHqNw2.chunk.js → CLvImDXv2.chunk.js} +3 -3
- package/dist/scripts/{D-iyHqNw2.chunk.js.map → CLvImDXv2.chunk.js.map} +1 -1
- package/dist/scripts/{Cqq1N9xw.chunk.js → CM8248d7.chunk.js} +2 -2
- package/dist/scripts/{Cqq1N9xw.chunk.js.map → CM8248d7.chunk.js.map} +1 -1
- package/dist/scripts/Cr6TXzQQ2.chunk.js.map +1 -1
- package/dist/scripts/{B_TE5XUR2.chunk.js → CvilnM0u2.chunk.js} +2 -2
- package/dist/scripts/{B_TE5XUR2.chunk.js.map → CvilnM0u2.chunk.js.map} +1 -1
- package/dist/scripts/{AEOAlemi.chunk.js → Cwocc8uV.chunk.js} +2 -2
- package/dist/scripts/{AEOAlemi.chunk.js.map → Cwocc8uV.chunk.js.map} +1 -1
- package/dist/scripts/{Bld7iWR52.chunk.js → D-pn0sNx2.chunk.js} +2 -2
- package/dist/scripts/{Bld7iWR52.chunk.js.map → D-pn0sNx2.chunk.js.map} +1 -1
- package/dist/scripts/{Cyit3dMk.chunk.js → D78QEASE.chunk.js} +2 -2
- package/dist/scripts/{Cyit3dMk.chunk.js.map → D78QEASE.chunk.js.map} +1 -1
- package/dist/scripts/{Dtag-27K.chunk.js → DER8311r.chunk.js} +2 -2
- package/dist/scripts/{Dtag-27K.chunk.js.map → DER8311r.chunk.js.map} +1 -1
- package/dist/scripts/{CAD-W-lP.chunk.js → DFFJpTVB.chunk.js} +2 -2
- package/dist/scripts/{CAD-W-lP.chunk.js.map → DFFJpTVB.chunk.js.map} +1 -1
- package/dist/scripts/{CmnbQiBA.chunk.js → DSZaceCq.chunk.js} +2 -2
- package/dist/scripts/{CmnbQiBA.chunk.js.map → DSZaceCq.chunk.js.map} +1 -1
- package/dist/scripts/{CfNYFxJl2.chunk.js → D_1m0b_a2.chunk.js} +2 -2
- package/dist/scripts/{CfNYFxJl2.chunk.js.map → D_1m0b_a2.chunk.js.map} +1 -1
- package/dist/scripts/{-KvTbeQV.chunk.js → DhcRnxkp.chunk.js} +2 -2
- package/dist/scripts/{-KvTbeQV.chunk.js.map → DhcRnxkp.chunk.js.map} +1 -1
- package/dist/scripts/{DKDWcWxk.chunk.js → Dqn0sInF.chunk.js} +2 -2
- package/dist/scripts/{DKDWcWxk.chunk.js.map → Dqn0sInF.chunk.js.map} +1 -1
- package/dist/scripts/{DICsRDM42.chunk.js → Dz8KlJhf2.chunk.js} +2 -2
- package/dist/scripts/{DICsRDM42.chunk.js.map → Dz8KlJhf2.chunk.js.map} +1 -1
- package/dist/scripts/{D0b_r0MV.chunk.js → KjTtF4IH.chunk.js} +2 -2
- package/dist/scripts/{D0b_r0MV.chunk.js.map → KjTtF4IH.chunk.js.map} +1 -1
- package/dist/scripts/{CAs2Sere2.chunk.js → MW7W80HY2.chunk.js} +2 -2
- package/dist/scripts/{CAs2Sere2.chunk.js.map → MW7W80HY2.chunk.js.map} +1 -1
- package/dist/scripts/{CwFYdvvA.chunk.js → Okf3Hn0s.chunk.js} +2 -2
- package/dist/scripts/{CwFYdvvA.chunk.js.map → Okf3Hn0s.chunk.js.map} +1 -1
- package/dist/scripts/{Dt5731Ay.chunk.js → _lqYS5Jx.chunk.js} +2 -2
- package/dist/scripts/{Dt5731Ay.chunk.js.map → _lqYS5Jx.chunk.js.map} +1 -1
- package/dist/scripts/{app-DxHnJ6f2.js → app-H3wSQ-PR.js} +4 -4
- package/dist/scripts/{app-DxHnJ6f2.js.map → app-H3wSQ-PR.js.map} +1 -1
- package/dist/scripts/{Bkp6sdnZ2.chunk.js → dVOiGqhu2.chunk.js} +2 -2
- package/dist/scripts/{Bkp6sdnZ2.chunk.js.map → dVOiGqhu2.chunk.js.map} +1 -1
- package/dist/scripts/{B3AhKFfz.chunk.js → ftYw2FVB.chunk.js} +2 -2
- package/dist/scripts/{B3AhKFfz.chunk.js.map → ftYw2FVB.chunk.js.map} +1 -1
- package/dist/scripts/{DyE6EUDb.chunk.js → kjRiUKIL.chunk.js} +2 -2
- package/dist/scripts/{DyE6EUDb.chunk.js.map → kjRiUKIL.chunk.js.map} +1 -1
- package/dist/scripts/{B3y60nT5.chunk.js → pDWQ8Uj5.chunk.js} +2 -2
- package/dist/scripts/{B3y60nT5.chunk.js.map → pDWQ8Uj5.chunk.js.map} +1 -1
- package/dist/scripts/{BCqRKj1E2.chunk.js → s6NJOjzU2.chunk.js} +2 -2
- package/dist/scripts/{BCqRKj1E2.chunk.js.map → s6NJOjzU2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/DCT6XY8t.chunk.js +0 -5
- package/dist/scripts/DCT6XY8t.chunk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfNYFxJl2.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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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'> </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'> </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/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/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/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":"qzDAUA,SAAgB,EAAoB,EAAiB,CACnD,GAAM,CAAE,qBAAoB,YAAa,EAAe,EAExD,EAAM,cAAgB,CACf,GAGc,EAAmB,EAAe,YAEjD,IAAe,aAGnB,EAAmB,QAAQ,CACzB,YAAa,EAAY,UACzB,OAAQ,EAAQ,SAAS,mBACzB,KAAM,CAAC,CAAO,CAChB,CAAC,CACH,EAAG,CAAC,CAAQ,CAAC,CACf,CCfA,SAAgB,GAAqB,EAAiB,CACpD,GAAM,CAAC,GAAoB,EAAsB,EAAoB,kBAAkB,EAEjF,EAAa,EACjB,EAAqB,aAAa,CAAO,CAC3C,EAEM,EAAe,EAAgB,CAAO,EAEtC,EAAU,EAAW,MAAM,IAAI,GAAK,EAAE,MAAM,CAAC,CAAC,OAAO,GAAM,CAAC,CAAC,CAAE,GAAK,CAAC,EACrE,EAAQ,EAAwB,EAAS,EAAa,OAAO,EAEnE,SAAS,EAAY,EAAyB,CAc5C,OAbI,EAAE,OACS,EAAM,QAAQ,EAAE,SAGpB,CAAE,GAAI,EAAE,OAAQ,QAAS,EAAK,EAKrB,EAAa,QAAQ,EAAE,YAIpC,CAAE,UAAW,EAAE,SAAU,CAClC,CAEA,IAAM,EAAU,CACd,GAAG,EAAa,MAChB,GAAG,EAAM,KACX,EAmBA,MAAO,CACL,WAlByB,EAAW,MAAM,OAAO,GAAK,CACtD,IAAM,EAAO,EAAQ,EAAE,QAAU,EAAE,WAUnC,OARK,GAIY,EAAK,WACL,GAAK,EACb,KAEF,CACT,CAAC,CAAC,CAAC,OAAO,GAAK,CAAC,CAAC,CAAC,EAOhB,MALc,EACb,MAAM,IAAI,IAAM,CAAE,GAAG,EAAY,CAAC,EAAG,WAAY,EAAE,cAAe,EAAE,EAKrE,aACE,EAAW,cACX,EAAa,eACZ,CAAC,GAAS,QAAU,EAAM,aAE/B,CACF,WCnCM,GAAY,EAAgB,iBAAiB,wBAAS,EAM5D,SAAgB,EAAoB,EAAiC,CACnE,GAAM,CAAC,GAAkB,EAAsB,EAAc,eAAe,EACtE,CAAC,GAAoB,EAAsB,EAAc,kBAAkB,EAEjF,EAAoB,EAEpB,GAAM,CAAE,iBAAgB,sBAAuB,EAAe,EAExD,EAAQ,EAA4B,EAAc,SAAS,EAAM,OAAO,CAAC,EAEzE,EAAc,EAAY,wBAAwB,EAAM,IAAI,EAC5D,EAAY,EAAgC,GAAe,EAAkB,aAAa,CAAW,CAAC,EAEtG,EAAoB,EAA6B,EAAM,OAAO,EAG9D,EAAQ,EADO,EAAM,MAAQ,EAAY,gBAAgB,EAAM,KAAK,SAAU,EAAM,KAAK,YAAY,CAChD,EAErD,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAa,EACjB,EAAY,MAAQ,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC7E,EAcM,EADiB,EAXO,EAAY,cAAc,EAAM,IAAI,GAAK,EAA2B,eAAe,CAC/G,aAAc,CAAC,EAAM,IAAI,CAAC,CAAC,IAAI,IAAQ,CACrC,cAAe,EAAI,cACnB,WAAY,EAAI,GAChB,QAAS,EAAM,OACjB,EAAE,EACF,QAAS,CACP,kBAAmB,EAAY,KAAK,WACpC,cAAe,EAAY,KAAK,EAClC,CACF,CAAC,CAEuB,CAAA,CAAe,OAAO,EAAE,EAAE,mBAAqB,EAEjE,EAAsB,EAC1B,EAAqB,wBAAwB,EAAM,OAAO,CAC5D,EAEM,CAAE,QAAO,aAAY,gBAAiB,GAAqB,EAAM,OAAO,EAExE,EAAkB,EACtB,EAAqB,iBAAiB,EAAM,QAAS,YAAY,CACnE,EAEM,EAAU,EACd,EAAM,MAAM,UACZ,EAAe,cAAc,EAAM,KAAK,SAAU,EAAY,YAAY,CAC5E,EAEA,EAAmB,CAAE,MAAO,EAAM,KAAO,GAAU,YAAa,CAAE,MAAO,EAAM,MAAM,IAAK,CAAC,EAAI,IAAK,CAAC,EACrG,EAAqB,CAAE,EAAO,CAAM,CAAC,EACrC,EAAoB,EAAM,OAAO,EAEjC,IAAM,EACJ,EAAM,cACN,EAAM,cACN,EAAO,cACP,EAAoB,cACpB,EAAgB,cAChB,EAAQ,cACR,EAAW,aAEb,SAAS,GAAkB,CAIzB,OAHI,EAAM,MAAM,eAAiB,EAAW,YACnC,EAA2B,EAAM,KAAM,SAAS,EAElD,EAAqB,EAAM,KAAM,SAAS,CACnD,CAEA,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAM,KACb,KAAM,EAAgB,EACtB,mBAAoB,EAAe,EAAe,mBAAmB,EACrE,gBAAiB,EAAO,MAAM,gBAC9B,MAAO,EAAM,KACb,WAAY,EAAW,KACvB,UAAW,EAAU,KACJ,kBACjB,QAAS,CAAC,CAAC,GAAY,OACvB,4BAA6B,EAAmB,EAAe,YAAY,CAC5E,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,oBAAqB,EAAoB,KACzC,qBAAsB,EACtB,WAAY,EAAgB,KAC5B,OAAQ,EAAO,KACR,QACP,QAAS,EAAQ,KACF,gBACf,gBAAiB,EACD,iBAChB,kBAAmB,EAAkB,MACnB,kBACnB,CAAA,CACE,GAET,CC5IA,SAAgB,GAA+B,EAAc,EAAqB,CAChF,MAAO,CACL,eAAgB,EAA2B,EAAO,KAAM,CAAM,EAC9D,iBAAkB,EAA4B,EAAO,KAAM,CAAM,EACjE,eAAgB,EAA0B,EAAO,KAAM,CAAM,CAC/D,CACF,CCwBA,IAAM,GAAY,EAAgB,iBAAiB,0CAAS,EAM5D,SAAgB,GAAgC,EAAqC,CACnF,GAAM,CAAC,GAAkB,EAAsB,EAAoB,eAAe,EAElF,EAAoB,EAEpB,GAAM,CAAE,iBAAgB,sBAAuB,EAAe,EAExD,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAa,EACjB,EAAY,MAAQ,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC7E,EAEM,EAAQ,EAA4B,EAAc,SAAS,EAAM,OAAO,CAAC,EAEzE,EAAc,EAAY,wBAAwB,EAAM,IAAI,EAC5D,EAAY,EAAgC,GAAe,EAAkB,aAAa,CAAW,CAAC,EAEtG,EAAoB,EAA6B,EAAM,OAAO,EAE9D,EAAsB,EAC1B,EAAM,MAAM,UACZ,EAAoB,oBAAoB,EAAM,KAAK,QAAQ,CAC7D,EAEM,EAAc,EAClB,EAAoB,MAAM,eAC1B,EAAoB,YAAY,EAAoB,KAAK,aAAa,CACxE,EAEM,EAAU,EAA8B,EAAM,OAAO,EAErD,EAAa,EACjB,EAAqB,aAAa,EAAM,OAAO,CACjD,EAEM,EAAsB,EAC1B,EAAqB,wBAAwB,EAAM,OAAO,CAC5D,EAEM,EAAU,EACd,EAAqB,iBAAiB,EAAM,QAAS,SAAS,CAChE,EAEA,EAAmB,CAAE,MAAO,EAAoB,KAAO,GAAU,YAAa,CAAE,MAAO,EAAoB,MAAM,IAAK,CAAC,EAAI,IAAK,CAAC,EAEjI,EAAqB,CAAE,EAAO,EAAa,CAAoB,CAAC,EAChE,EAAoB,EAAM,OAAO,EAEjC,IAAM,EACJ,EAAO,cACP,EAAoB,cACpB,EAAY,MACZ,EAAoB,cACpB,EAAW,cACX,EAAQ,cACR,EAAQ,cACR,EAAW,aAEP,EAA8B,GAA+B,EAAM,IAAI,EAEvE,EAAgB,GAAiB,EAAc,EAAY,KAAM,EAAQ,KAAM,CAAsB,EACrG,EAAkB,GAAiB,EAAc,gBAAgB,OAAS,EAEhF,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAoB,KAC3B,KAAM,EAA2B,EAAM,KAAM,UAAU,EACvD,mBAAoB,EAAe,EAAe,mBAAmB,EACrE,gBAAiB,EAAO,MAAM,gBAC9B,MAAO,EAAM,KACb,WAAY,EAAW,KACvB,UAAW,EAAU,KACJ,kBACjB,QAAS,CAAC,CAAC,EAAQ,MAAM,SAAS,OAClC,4BAA6B,EAAmB,EAAe,YAAY,CAC5E,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,oBAAqB,EAAoB,KACzC,qBAAsB,EAAW,KACjC,YAAa,EAAY,KACzB,oBAAqB,EAAoB,KACZ,8BAC7B,kBAAmB,EAAkB,MACrC,QAAS,EAAQ,KACjB,QAAS,EAAQ,KACjB,OAAQ,EAAO,KACC,iBACD,gBACf,MAAO,EAAM,IACd,CAAA,CACE,GAET,CCzGA,IAAM,GAAY,EAAgB,iBAAiB,yCAAS,EAQ5D,SAAgB,GAAiC,EAA8C,CAC7F,GAAM,CAAC,GAAkB,EAAsB,EAAoB,eAAe,EAElF,EAAoB,EAEpB,GAAM,CAAE,iBAAgB,sBAAuB,EAAe,EAExD,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAa,EACjB,EAAY,MAAQ,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC7E,EAEM,EAAQ,EAA4B,EAAc,SAAS,EAAM,OAAO,CAAC,EAEzE,EAAc,EAAY,wBAAwB,EAAM,IAAI,EAC5D,EAAY,EAAgC,GAAe,EAAkB,aAAa,CAAW,CAAC,EAEtG,EAAsB,EAC1B,EAAM,MAAM,UACZ,EAAoB,oBAAoB,EAAM,MAAM,QAAQ,CAC9D,EAEM,EAAc,EAAkC,EAAoB,MAAM,eAC9E,EAAoB,YAAY,EAAoB,KAAK,aAAa,CAAC,EAEnE,EAAU,EAA8B,EAAM,OAAO,EAE3D,EAAmB,CAAE,MAAO,EAAoB,KAAO,GAAU,YAAa,CAAE,MAAO,EAAoB,MAAM,IAAK,CAAC,EAAI,IAAK,CAAC,EACjI,EAAqB,CAAE,EAAO,EAAa,CAAoB,CAAC,EAChE,EAAoB,EAAM,OAAO,EAEjC,IAAM,EAAgB,EAAY,MAAQ,EAAoB,MAAQ,CAAC,CAAC,EAAQ,MAAQ,CAAC,CAAC,EAAW,KAE/F,EAAgB,GAAiB,EAAc,EAAY,KAAM,EAAQ,KAAM,CAAsB,EACrG,EAAkB,GAAiB,EAAc,gBAAgB,OAAS,EAEhF,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EAA2B,EAAM,KAAM,WAAW,EACxD,MAAO,EAAoB,KAC3B,mBAAoB,EAAe,EAAe,mBAAmB,EACrE,gBAAiB,EAAO,MAAM,gBAC9B,MAAO,EAAM,KACb,WAAY,EAAW,KACvB,UAAW,EAAU,KACJ,kBACjB,QAAS,CAAC,CAAC,EAAQ,MAAM,SAAS,OAClC,4BAA6B,EAAmB,EAAe,YAAY,CAC5E,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,YAAa,EAAY,KACzB,oBAAqB,EAAoB,KACzC,cAAe,EAAM,cACrB,OAAQ,EAAO,KACf,OAAQ,EAAM,OACd,WAAY,CAAC,EAAQ,cAAgB,EAAY,WACjC,iBAChB,QAAS,EAAQ,KACF,eAChB,CAAA,CACE,GAET,CCrEA,IAAM,GAAY,EAAgB,iBAAiB,sCAAS,EAQ5D,SAAgB,GAAgC,EAA6C,CAC3F,GAAM,CAAC,GAAkB,EAAsB,EAAoB,eAAe,EAC5E,CAAC,GAAoB,EAAsB,EAAoB,kBAAkB,EAEjF,CAAE,iBAAgB,sBAAuB,EAAe,EAExD,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAa,EACjB,EAAY,MAAQ,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC7E,EAEM,EAAQ,EAA4B,EAAc,SAAS,EAAM,OAAO,CAAC,EAEzE,EAAc,EAAY,wBAAwB,EAAM,IAAI,EAC5D,EAAY,EAAgC,GAAe,EAAkB,aAAa,CAAW,CAAC,EAEtG,EAAsB,EAC1B,EAAM,MAAM,UACZ,EAAoB,oBAAoB,EAAM,KAAK,QAAQ,CAC7D,EAEM,EAAc,EAAkC,EAAoB,MAAM,eAC9E,EAAoB,YAAY,EAAoB,KAAK,aAAa,CAAC,EAEnE,EAAU,EAA8B,EAAM,OAAO,EAErD,EAAgB,EAAY,MAAQ,EAAoB,MAAQ,CAAC,CAAC,EAAQ,MAAQ,CAAC,CAAC,EAAW,KAE/F,EAAgB,GAAiB,EAAc,EAAY,KAAM,EAAQ,KAAM,CAAsB,EACrG,EAAkB,GAAiB,EAAc,gBAAgB,OAAS,EAEhF,EAAmB,CAAE,MAAO,EAAoB,KAAO,GAAU,YAAa,CAAE,MAAO,EAAoB,MAAM,IAAK,CAAC,EAAI,IAAK,CAAC,EACjI,EAAqB,CAAE,EAAO,EAAa,CAAoB,CAAC,EAChE,EAAoB,EAAM,OAAO,EAEjC,SAAS,EACP,EACA,EACA,EACA,CACA,EAAmB,QAAQ,CACzB,YAAa,EAAY,UACzB,OAAQ,EAAQ,SAAS,4BACzB,OAAQ,CACN,UAAW,EAAK,GAChB,QAAS,EAAM,QACf,gBACA,UAAW,EAAK,SAClB,CACF,CAAC,CACH,CAEA,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EAA2B,EAAM,KAAM,SAAS,EACtD,MAAO,EAAoB,KAC3B,mBAAoB,EAAe,EAAe,mBAAmB,EACrE,gBAAiB,EAAO,MAAM,gBAC9B,MAAO,EAAM,KACb,WAAY,EAAW,KACvB,UAAW,EAAU,KACJ,kBACjB,QAAS,CAAC,CAAC,EAAQ,MAAM,SAAS,OAClC,4BAA6B,EAAmB,EAAe,YAAY,CAC5E,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,oBAAqB,EAAoB,KACrB,qBACpB,YAAa,EAAY,KACzB,QAAS,EAAQ,KACjB,SAAU,EAAM,SAChB,OAAQ,EAAM,OAEd,WAAY,EAAQ,WACJ,iBACD,gBACf,OAAQ,EAAO,KACG,kBACnB,CAAA,CACE,GAET,CCrHA,IAAM,GAAY,EAAgB,iBAAiB,kCAAS,EAW5D,SAAgB,GAA0B,EAAuC,CAC/E,IAAM,EAAqB,EAAM,UAAU,OAAO,GAAW,CAAC,EAAM,YAAY,SAAS,EAAQ,EAAE,CAAC,GAAK,CAAC,EAE1G,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,GAAU,OAAO,EACxB,IAAK,GACL,aAAa,oCAEb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,SAAU,EACV,YAAa,EAAM,YACnB,SAAU,EAAM,SAChB,YAAa,GAAU,iBAAiB,EACxC,eAAgB,EAAM,cACvB,CAAA,CACU,CAAA,CAEjB,CC7BA,IAAM,EAAY,EAAgB,iBAAiB,+BAAS,EAU5D,SAAgB,GAAuB,EAA4B,CACjE,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAU,OAAO,EACxB,IAAK,GACL,aAAa,8BACb,MAAO,EAAM,SAAS,iBAEtB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,SAAU,EAAM,SAChB,YAAa,EAAM,YACnB,SAAU,EAAM,SAChB,YAAa,EAAU,iBAAiB,EACxC,QAAS,EAAM,eACf,YAAa,EAAU,SAAS,EAChC,eAAgB,EAAM,cACvB,CAAA,CACU,CAAA,CAEjB,oDEpCA,SAAgB,IAA+B,CAC7C,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,8CAAqC,MAAU,CAAA,GAC7D,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yBACb,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,mBACb,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,gBAAgB,oCAA2C,CAAA,CAClF,CAAA,CACF,CAAA,GAEL,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,8CAAqC,MAAU,CAAA,GAC7D,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,wBAAf,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,gBAAgB,oCAA2C,CAAA,CAClF,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,gBAAgB,oCAA2C,CAAA,CAClF,CAAA,CACF,GACF,CAAA,CAAA,CAET,CCLA,IAAM,GAAY,iCAiBlB,SAAgB,GAAsB,EAAmC,CACvE,IAAM,EAAU,EAAM,eAAiB,CAAC,CAAC,EAAM,SAAS,OAExD,SAAS,GAAkB,CAGzB,OAFK,EAAM,QAEJ,OAAO,OAAO,EAAM,OAAO,EAFP,CAAC,CAG9B,CAEA,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,EAAM,gBAAiB,EAAA,EAAA,IAAA,CAAC,GAAD,CAA+B,CAAA,EAEvD,EAAM,gBACL,EAAA,EAAA,KAAA,CAAC,GAAD,CAAmB,MAAO,EAAM,MAAgB,UAAS,MAAO,EAAM,eAAtE,EACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,gBAAnB,EACE,EAAA,EAAA,KAAA,CAAC,KAAD,CAAI,UAAU,cAAd,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,aAAW,OAAO,gBAAkB,CAAA,GACrD,EAAA,EAAA,KAAA,CAAC,OAAD,CAAA,SAAA,CAAM,KAAG,EAAgB,CAAC,CAAC,OAAQ,EAAM,kBAAoB,IAAI,EAAM,kBAAkB,SAAW,EAAS,CAAA,CAAA,CAC3G,KACJ,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mBAAf,CACG,CAAC,CAAC,EAAM,mBAAmB,SAC1B,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,0BACb,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,SAAU,EAAM,kBAChB,WAAY,EAAM,SAAS,IAAI,GAAK,EAAE,EAAE,EACxC,YAAa,EAAM,OAAO,YAC1B,eAAgB,EAAM,sBAAsB,eAC5C,SAAU,EAAU,SAAS,OAC7B,eAAgB,EAAM,cACvB,CAAA,CACE,CAAA,GAEP,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,0BACb,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,SAAU,EAAgB,EAC1B,YAAa,EAAM,OAAO,YAC1B,eAAgB,EAAM,sBAAsB,eAC5C,SAAU,EAAU,SAAS,OAC7B,eAAgB,EAAM,cACvB,CAAA,CACE,CAAA,CACF,GACE,KACT,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,gBAAnB,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,eACZ,EAAA,EAAA,IAAA,CAAC,EAAD,CACa,aACX,OAAQ,EAAM,cAAgB,kBAAoB,YACnD,CAAA,CACC,CAAA,GACJ,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mBAAf,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACb,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,QAAS,EAAM,OAChB,CAAA,CACE,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACb,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,WAAY,EAAM,oBAClB,eAAgB,EAAM,sBAAsB,eAC5C,eAAgB,EAAkB,EAAM,oBAAoB,CAC7D,CAAA,CACE,CAAA,CACF,GACE,GACQ,GAErB,CAAA,CAAA,CAEN,CCrGA,SAAgB,GAAyB,EAAc,EAAqB,CAC1E,MAAO,CACL,eAAgB,EAA0B,EAAO,KAAM,CAAM,CAC/D,CACF,CCyBA,IAAM,GAAY,EAAgB,iBAAiB,oCAAS,EAM5D,SAAgB,GAA0B,EAA+B,CACvE,GAAM,CAAC,GAAkB,EAAsB,EAAoB,eAAe,EAElF,EAAoB,EAEpB,GAAM,CAAE,iBAAkB,EAAY,IAAI,EAEpC,CAAE,iBAAgB,sBAAuB,EAAe,EAExD,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAa,EACjB,EAAY,MAAQ,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC7E,EAEM,EAAQ,EAA4B,EAAc,SAAS,EAAM,OAAO,CAAC,EAEzE,EAAc,EAAY,wBAAwB,EAAM,IAAI,EAC5D,EAAY,EAAgC,GAAe,EAAkB,aAAa,CAAW,CAAC,EAEtG,EAAoB,EAA6B,EAAM,OAAO,EAG9D,EAAQ,EADO,EAAM,MAAQ,EAAY,gBAAgB,EAAM,KAAK,SAAU,EAAM,KAAK,YAAY,CAChD,EAE3D,EAAmB,CAAE,MAAO,EAAM,KAAO,GAAU,YAAa,CAAE,MAAO,EAAM,MAAM,IAAK,CAAC,EAAI,IAAK,CAAC,EACrG,EAAqB,CAAE,EAAO,CAAM,CAAC,EACrC,EAAoB,EAAM,OAAO,EAEjC,IAAM,EAAa,EACjB,EAAqB,aAAa,EAAM,OAAO,CACjD,EAEM,EAAsB,EAC1B,EAAqB,wBAAwB,EAAM,OAAO,CAC5D,EAEM,EAAU,EACd,EAAqB,iBAAiB,EAAM,QAAS,SAAS,CAChE,EAEM,CAAE,QAAO,gBAAiB,GAAqB,EAAM,OAAO,EAE5D,EACJ,EAAO,cACP,EAAM,cACN,EAAW,cACX,EAAoB,cACpB,EAAQ,cACR,EAAW,MACX,EAEI,EAAwB,GAAyB,EAAM,IAAI,EAEjE,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAM,KACb,UAAW,EAAU,KACrB,KAAM,EAAqB,EAAM,KAAM,UAAU,EACjD,mBAAoB,EAAe,EAAe,mBAAmB,EACrE,gBAAiB,EAAO,MAAM,gBAC9B,MAAO,EAAM,KACb,WAAY,EAAW,KACvB,QAAS,GAAiB,CAAC,CAAC,GAAO,OACnC,4BAA6B,EAAmB,EAAe,YAAY,CAC5E,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,cAAe,CAAC,CAAC,EACF,gBACC,iBACO,wBACvB,OAAQ,EAAO,KACf,MAAO,EAAM,KACb,kBAAmB,EAAkB,MACrC,QAAS,EACT,qBAAsB,EAAW,KACjC,oBAAqB,EAAoB,KACzC,MAAO,EAAM,KACb,QAAS,EAAQ,IAClB,CAAA,CACE,GAET,CCpGA,IAAM,GAA+B,EAClC,EAAW,OAAQ,CAClB,SAAU,IAAO,EAAA,EAAA,IAAA,CAAC,GAAD,CAA2B,QAAS,EAAI,MAAM,OAAU,CAAA,EACzE,QAAS,IAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,QAAS,EAAI,MAAM,OAAU,CAAA,CACpE,GACC,EAAW,MAAO,CACjB,SAAU,IAAO,EAAA,EAAA,IAAA,CAAC,GAAD,CAA2B,QAAS,EAAI,MAAM,OAAU,CAAA,EACzE,QAAS,IAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,QAAS,EAAI,MAAM,OAAU,CAAA,CACpE,GACC,EAAW,aAAc,CACxB,SAAU,IAAO,EAAA,EAAA,IAAA,CAAC,GAAD,CAAiC,QAAS,EAAI,MAAM,OAAU,CAAA,EAC/E,QAAS,IAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,QAAS,EAAI,MAAM,OAAU,CAAA,EAClE,UAAW,IACT,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,cAAe,EAAI,cACnB,OAAQ,EAAI,OACZ,QAAS,EAAI,MAAM,OACpB,CAAA,EAEH,QAAS,IACP,EAAA,EAAA,IAAA,CAAC,GAAD,CACE,SAAU,EAAI,SACd,OAAQ,EAAI,OACZ,QAAS,EAAI,MAAM,OACpB,CAAA,CAEL,CACF,EAOA,SAAgB,GAAgB,EAA8C,CAC5E,GAAM,CAAE,QAAO,OAAQ,EACjB,EAAS,GAAe,GAAO,aAAa,GAAG,GAKrD,OAHI,EACK,EAAO,CAAO,GAEhB,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CACb,CChCA,SAAgB,GAAiB,EAA2C,CAC1E,IAAM,EAAQ,EAA4B,EAAc,SAAS,EAAM,OAAO,CAAC,EACzE,CAAE,iBAAgB,YAAa,EAAe,EAE9C,EAAO,GAAgB,CAC3B,MAAO,EAAM,KACb,IAAK,EAAM,IACX,cAAe,EAAM,cACrB,OAAQ,EAAM,OACd,SAAU,EAAM,QAClB,CAAC,EAgCD,OA3BA,EAAM,cAAgB,CAEpB,GADI,CAAC,EAAM,kBACP,CAAC,EAAM,KAAM,OAEjB,IAAM,EAAU,EAAuB,EAAM,IAAI,EAE5C,GAEL,EAAmB,QAAQ,CAAO,CACpC,EAAG,CAAE,EAAM,KAAM,EAAM,gBAAiB,CAAC,EAKzC,EAAM,cAAgB,CACf,IACD,EAAe,CAAE,EAAe,aAAc,EAAe,aAAc,CAAC,GAEhF,EAAmB,QAAQ,CACzB,YAAa,EAAY,UACzB,OAAQ,EAAQ,SAAS,IAC3B,CAAC,EACH,EAAG,CAAC,CAAQ,CAAC,EAER,GAIH,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAA,SACG,CACD,CAAA,GALK,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAOf"}
|
|
1
|
+
{"version":3,"file":"D_1m0b_a2.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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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'> </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'> </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/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/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share/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/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/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share/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,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{n as t}from"./snXCXfT6.chunk.js";import{t as n}from"./CQyJ7YGa.chunk.js";import{t as r}from"./C2w0pmFW.chunk.js";import{t as i}from"./wrLrTezN.chunk.js";import{t as a}from"./C1SLt-ar.chunk.js";import{t as o}from"./C5j5LRut2.chunk.js";import{t as s}from"./DQgG9njb.chunk.js";import{t as ee}from"./7-GJWRH82.chunk.js";import{n as te}from"./BIzu5ufQ.chunk.js";import{t as c}from"./BUnh3rN0.chunk.js";import{t as l}from"./BJZXCSV9.chunk.js";import{n as u}from"./CpFtf-tI2.chunk.js";import{t as ne}from"./CSl1Z1eB.chunk.js";import{n as d,t as f}from"./C94Mz27A2.chunk.js";import{t as p}from"./8vQxuiYy2.chunk.js";import{t as m}from"./XBYhZGTN.chunk.js";import{f as h,i as g,m as _,t as re}from"./DKDWcWxk.chunk.js";import{n as ie,t as ae}from"./0Fek4oFk.chunk.js";import"./cDv6zuhh.chunk.js";import{a as v,c as y,i as b,n as x,o as oe,r as se,s as S,t as C}from"./B3ox8pZ0.chunk.js";import{n as w,t as T}from"./Dkw9Ir-p.chunk.js";import{t as E}from"./v4yEqcBz.chunk.js";import"./CNfmLVE82.chunk.js";var D=e(r()),O={heatMap:`_heatMap_u3po2_1`,avatarContainer:`_avatarContainer_u3po2_4`,cogIcon:`_cogIcon_u3po2_8`},k=i(),A=n.encloseNamespace(`shared.engagementTable`),ce={heatMap:[],engagementRate:0,viewCount:0};function j(e){return(0,k.jsx)(`div`,{className:`${e.className??``}`,children:e.children})}function M(e){return(0,k.jsx)(j,{className:`d-inline-block ${e.column.isSorted?`fw-bold`:``}`,children:A(e.phraseKey)})}function N(e){let t=0;return e.forEach(e=>{let n=Math.max(...e.heatMap);n>t&&(t=n)}),t}function P(e){if(e.type)return e.type;if(e.userId===null||e.userId===void 0)return`anon`}function F(e){switch(e){case`student-reach`:return A(`classroomViews`);case`anon`:return A(`anonymous`);default:return null}}function I(e,t,n){if(n){let t=F(n);if(t&&!e?.name)return{name:t,surname:``}}let r=d(e,t).split(` `).filter(e=>!!e);return{name:r[0],surname:r.slice(1).join(` `)}}function L(e){return D.useMemo(()=>{let n=N(e.engagement);return[...e.showSeparateNameColumns?[{id:`firstName`,Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`firstName`}),accessor:`user`,width:63,sortType:(t,n)=>{let r=P(t.original),i=P(n.original),{name:a}=I(t.values.firstName,e.anonymiseUsers,r),{name:o}=I(n.values.firstName,e.anonymiseUsers,i);return a>o?1:-1},Cell:({value:n,row:{original:r}})=>{let i=P(r),{name:a,surname:s}=I(n,e.anonymiseUsers,i);return(0,k.jsxs)(j,{className:`d-flex align-items-center h-100`,children:[(0,k.jsx)(`span`,{className:O.avatarContainer,children:(0,k.jsx)(f,{type:i,imageCdnUrl:e.imageCdnUrl,initials:o.getInitials(a,s),imageUrl:!e.anonymiseUsers&&!i&&n?.avatar?.url,anonymiseUsers:e.anonymiseUsers})}),(0,k.jsx)(`span`,{className:`ms-2 clamp-1`,children:a}),i===`student-reach`&&e.classroomViewsAppLink&&(0,k.jsx)(c,{customSize:!0,svg:E,svgSize:t.Standard,appLink:e.classroomViewsAppLink,className:O.cogIcon,tooltip:e.classroomViewsTooltip,tooltipTrigger:[`hover`],ariaLabel:e.classroomViewsTooltip})]})}},{id:`surname`,Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`surname`}),accessor:`user`,width:68,sortType:(t,n)=>{let r=P(t.original),i=P(n.original),{surname:a}=I(t.values.surname,e.anonymiseUsers,r),{surname:o}=I(n.values.surname,e.anonymiseUsers,i);return a>o?1:-1},Cell:({value:t,row:{original:n}})=>{let{surname:r}=I(t,e.anonymiseUsers,P(n));return(0,k.jsx)(j,{className:`d-flex align-items-center h-100`,children:(0,k.jsx)(`span`,{className:`clamp-1`,children:r||``})})}}]:[{id:`name`,Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`name`}),accessor:`user`,width:22,sortType:(t,n)=>{let r=P(t.original),i=P(n.original);return(r?F(r):d(t.values.user,e.anonymiseUsers))>(i?F(i):d(n.values.user,e.anonymiseUsers))?1:-1},Cell:({value:n,row:{original:r}})=>{let i=P(r),{name:a,surname:s}=I(n,e.anonymiseUsers,i);return(0,k.jsxs)(j,{className:`d-flex align-items-center h-100`,children:[(0,k.jsx)(`span`,{className:O.avatarContainer,children:(0,k.jsx)(f,{type:i,imageCdnUrl:e.imageCdnUrl,initials:o.getInitials(a,s),imageUrl:!e.anonymiseUsers&&!i&&n?.avatar?.url,anonymiseUsers:e.anonymiseUsers})}),(0,k.jsxs)(`span`,{className:`ms-2 clamp-1 me-1`,children:[a,` `,s]}),i===`student-reach`&&e.classroomViewsAppLink&&(0,k.jsx)(c,{customSize:!0,svg:E,svgSize:t.Standard,appLink:e.classroomViewsAppLink,className:O.cogIcon,tooltip:e.classroomViewsTooltip,tooltipTrigger:[`hover`],ariaLabel:e.classroomViewsTooltip})]})}}],{Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`views`}),accessor:`viewCount`,width:e.showSeparateNameColumns?47:15,sortType:`basic`,sortDescFirst:!0,Cell:({value:e})=>(0,k.jsx)(j,{className:`d-flex align-items-center h-100`,children:(0,k.jsx)(`div`,{children:e})})},{Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`engagement`}),accessor:`engagementRate`,width:e.showSeparateNameColumns?79:20,sortDescFirst:!0,Cell:({value:e})=>(0,k.jsx)(j,{className:`w-33`,children:(0,k.jsx)(T,{percentage:e,layout:w.LabelBefore})})},{Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`heatMap`}),accessor:`heatMap`,width:e.showSeparateNameColumns?230:48,disableSortBy:!0,Cell:({row:{original:e}})=>(0,k.jsx)(j,{className:`d-flex align-items-center h-100`,children:(0,k.jsx)(v,{engagement:e,max:n,className:`${O.heatMap} flex-grow-1`})})}]},[e.anonymiseUsers,e.showSeparateNameColumns])}function R(e,t,n){return D.useMemo(()=>{let r=[],i=new Set;if(e?.forEach(e=>{let n=t?.find(t=>t.id&&t.id===e.userId?(i.add(t.id),!0):!!(t.sessionId&&t.sessionId===e.sessionId));r.push({...e,user:n})}),n?.length){let e=n.filter(e=>!i.has(e.id)).map(e=>({...ce,userId:e.id,user:e}));r.push(...e)}return r},[e,t,n])}var z={table:`bg-white rounded px-0`,header:`border-bottom`,headerCell:`m-3`,cell:`mx-3 my-2`};function B(e){let t=L({engagement:e.engagement,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,showSeparateNameColumns:e.showSeparateNameColumns,classroomViewsAppLink:e.classroomViewsAppLink,classroomViewsTooltip:e.classroomViewsTooltip}),n=R(e.engagement,e.users,e.classroomStudents);return n.length?(0,k.jsx)(p,{columns:t,data:n,theme:{...z,table:e.border?`${z.table} border`:z.table},enableSort:e.enableSort}):(0,k.jsx)(k.Fragment,{})}function V(e){return(0,k.jsx)(T,{layout:e.layout,className:e.className,percentage:0,customLabel:`--%`})}var H=`shared.insightAmountWatched`,U=n.encloseNamespace(H);function W(e){let t=S(e.engagement),n=Math.round(t*100);return(0,k.jsx)(b,{title:U(`title`),svg:s,svgClassName:`bg-light-green text-green`,children:(0,k.jsxs)(`div`,{className:`d-flex flex-column align-items-center my-auto gap-2`,children:[!!e.engagement&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(T,{percentage:t,layout:w.LabelInside}),(0,k.jsx)(`p`,{className:`text-center`,children:typeof t==`number`?(0,k.jsx)(u,{namespace:H,phrase:`everyoneWatched`,options:{percentage:n}}):(0,k.jsx)(u,{namespace:H,phrase:`notWatched`})})]}),!e.engagement&&(0,k.jsx)(k.Fragment,{children:(0,k.jsx)(V,{layout:w.LabelInside})})]})})}var G=e(se()),le=x(),K=[`#FF9300`,`#38A2E8`,`#7A76E8`,`#B679C7`,`#F7847B`,`#D9584F`,`#FFCD52`,`#5DC786`,`#40BCC3`,`#40C2BB`];function ue(e){return e.map((e,t)=>({...e,color:K[t%K.length]}))}function de(e,t,n,r){let i={};return e[t]?.forEach(e=>{let t=e.name||`Unknown`;!t||n?.includes(t.toLowerCase())||(i[t]=i[t]??0,i[t]+=e.count)}),ue(a.sortBy(Object.keys(i).map(e=>({name:r?r(e):e,y:i[e],type:`pie`})),`name`))}function q(e){let t=e.findIndex(e=>e.name===`Staff`);if(t>-1){let[n]=e.splice(t,1);e.push(n)}return e.sort((e,t)=>parseInt(e.name.match(/\d+/)?.[0])-parseInt(t.name.match(/\d+/)?.[0]))}function fe(e){return e?.reduce((e,t)=>e+t.y,0)??null}var J=`shared.insightTotalViews`,Y=n.encloseNamespace(J);function pe(e){return e===`Unknown`?Y(`anon`):e}var me={title:{text:null},credits:{enabled:!1},chart:{backgroundColor:`transparent`,spacing:[0,0,0,0]},legend:{itemStyle:C,itemDistance:8},plotOptions:{pie:{allowPointSelect:!0,cursor:`pointer`,dataLabels:{enabled:!1},showInLegend:!0,borderWidth:1,borderColor:`#ffffff`,borderRadius:0,size:`80%`}}};function he(e){let t=q(de(e.events,`yearGroupCount`,e.hideStaffResults?[`staff`]:[],pe)),n=fe(t);function r(e){return{...me,series:[{type:`pie`,name:Y(`title`),data:e}]}}return(0,k.jsx)(b,{title:Y(`title`),svgClassName:`bg-light-blue text-blue`,svg:ne,children:t?.length?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`mb-0`,children:(0,k.jsx)(u,{namespace:J,phrase:`totalViews`,options:{totalViews:n}})}),(0,k.jsx)(`div`,{className:`d-flex justify-content-center h-75`,children:(0,k.jsx)(le.HighchartsReact,{highcharts:G.default,options:r(t),containerProps:{className:`w-100`}})})]}):(0,k.jsxs)(l,{className:`pt-0 my-auto`,children:[(0,k.jsx)(l.Image,{src:e.emptyStateImage,className:`w-75 h-auto`}),(0,k.jsx)(l.Heading,{className:`h4`,children:(0,k.jsx)(u,{namespace:J,phrase:`noViews`})}),(0,k.jsx)(l.Info,{className:`w-100`,children:(0,k.jsx)(u,{namespace:J,phrase:`notWatched`})})]})})}var X={partialInsights:`_partialInsights_1vk2g_1`,videoContainer:`_videoContainer_1vk2g_4`};function ge(){return(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`row g-3 mb-3`,children:[(0,k.jsx)(`div`,{className:`col`,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})}),(0,k.jsx)(`div`,{className:`col`,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})}),(0,k.jsx)(`div`,{className:X.videoContainer,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})})]}),(0,k.jsx)(`div`,{className:`row g-3 mb-5`,children:(0,k.jsx)(`div`,{className:`col-12`,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})})})]})}var _e=_.getComponent(`MenuItem`),Z=class extends _e{constructor(e,t){super(e,t),this.overlayVisible=t.overlayVisible,this.toggle(this.overlayVisible)}handleToggle(){this.toggle(!this.overlayVisible)}toggle(e){e?this.toggleOn():this.toggleOff()}toggleOn(){_.dom.addClass(this.toggleEl,`on`),this.overlayVisible=!0,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().addClass(`cv-reports-player-overlay-visible`)}toggleOff(){_.dom.removeClass(this.toggleEl,`on`),this.overlayVisible=!1,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().removeClass(`cv-reports-player-overlay-visible`)}handleClick(e){e.stopImmediatePropagation()}createEl(e,t,n){this.handlerBound||=(this.handleToggle=this.handleToggle.bind(this),!0),this.toggleEl&&this.toggleEl.removeEventListener(`click`,this.handleToggle),this.toggleEl=_.dom.createEl(`div`,{className:`custom-toggle custom-toggle-info toggle-option float-end`,innerHTML:`<span class="handle"></span></div>`}),this.toggleEl.addEventListener(`click`,this.handleToggle);let r=super.createEl(e,{className:`vjs-menu-item cv-cog-menu-item`,innerHTML:`
|
|
1
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{n as t}from"./snXCXfT6.chunk.js";import{t as n}from"./CQyJ7YGa.chunk.js";import{t as r}from"./C2w0pmFW.chunk.js";import{t as i}from"./wrLrTezN.chunk.js";import{t as a}from"./C1SLt-ar.chunk.js";import{t as o}from"./C5j5LRut2.chunk.js";import{t as s}from"./DQgG9njb.chunk.js";import{t as ee}from"./7-GJWRH82.chunk.js";import{n as te}from"./BIzu5ufQ.chunk.js";import{t as c}from"./BUnh3rN0.chunk.js";import{t as l}from"./BJZXCSV9.chunk.js";import{n as u}from"./CpFtf-tI2.chunk.js";import{t as ne}from"./CSl1Z1eB.chunk.js";import{n as d,t as f}from"./C94Mz27A2.chunk.js";import{t as p}from"./8vQxuiYy2.chunk.js";import{t as m}from"./XBYhZGTN.chunk.js";import{f as h,i as g,m as _,t as re}from"./Dqn0sInF.chunk.js";import{n as ie,t as ae}from"./BLE8DLAY.chunk.js";import"./BhE5KhcC.chunk.js";import{a as v,c as y,i as b,n as x,o as oe,r as se,s as S,t as C}from"./B3ox8pZ0.chunk.js";import{n as w,t as T}from"./Dkw9Ir-p.chunk.js";import{t as E}from"./v4yEqcBz.chunk.js";import"./Bc1JT5Y-2.chunk.js";var D=e(r()),O={heatMap:`_heatMap_u3po2_1`,avatarContainer:`_avatarContainer_u3po2_4`,cogIcon:`_cogIcon_u3po2_8`},k=i(),A=n.encloseNamespace(`shared.engagementTable`),ce={heatMap:[],engagementRate:0,viewCount:0};function j(e){return(0,k.jsx)(`div`,{className:`${e.className??``}`,children:e.children})}function M(e){return(0,k.jsx)(j,{className:`d-inline-block ${e.column.isSorted?`fw-bold`:``}`,children:A(e.phraseKey)})}function N(e){let t=0;return e.forEach(e=>{let n=Math.max(...e.heatMap);n>t&&(t=n)}),t}function P(e){if(e.type)return e.type;if(e.userId===null||e.userId===void 0)return`anon`}function F(e){switch(e){case`student-reach`:return A(`classroomViews`);case`anon`:return A(`anonymous`);default:return null}}function I(e,t,n){if(n){let t=F(n);if(t&&!e?.name)return{name:t,surname:``}}let r=d(e,t).split(` `).filter(e=>!!e);return{name:r[0],surname:r.slice(1).join(` `)}}function L(e){return D.useMemo(()=>{let n=N(e.engagement);return[...e.showSeparateNameColumns?[{id:`firstName`,Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`firstName`}),accessor:`user`,width:63,sortType:(t,n)=>{let r=P(t.original),i=P(n.original),{name:a}=I(t.values.firstName,e.anonymiseUsers,r),{name:o}=I(n.values.firstName,e.anonymiseUsers,i);return a>o?1:-1},Cell:({value:n,row:{original:r}})=>{let i=P(r),{name:a,surname:s}=I(n,e.anonymiseUsers,i);return(0,k.jsxs)(j,{className:`d-flex align-items-center h-100`,children:[(0,k.jsx)(`span`,{className:O.avatarContainer,children:(0,k.jsx)(f,{type:i,imageCdnUrl:e.imageCdnUrl,initials:o.getInitials(a,s),imageUrl:!e.anonymiseUsers&&!i&&n?.avatar?.url,anonymiseUsers:e.anonymiseUsers})}),(0,k.jsx)(`span`,{className:`ms-2 clamp-1`,children:a}),i===`student-reach`&&e.classroomViewsAppLink&&(0,k.jsx)(c,{customSize:!0,svg:E,svgSize:t.Standard,appLink:e.classroomViewsAppLink,className:O.cogIcon,tooltip:e.classroomViewsTooltip,tooltipTrigger:[`hover`],ariaLabel:e.classroomViewsTooltip})]})}},{id:`surname`,Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`surname`}),accessor:`user`,width:68,sortType:(t,n)=>{let r=P(t.original),i=P(n.original),{surname:a}=I(t.values.surname,e.anonymiseUsers,r),{surname:o}=I(n.values.surname,e.anonymiseUsers,i);return a>o?1:-1},Cell:({value:t,row:{original:n}})=>{let{surname:r}=I(t,e.anonymiseUsers,P(n));return(0,k.jsx)(j,{className:`d-flex align-items-center h-100`,children:(0,k.jsx)(`span`,{className:`clamp-1`,children:r||``})})}}]:[{id:`name`,Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`name`}),accessor:`user`,width:22,sortType:(t,n)=>{let r=P(t.original),i=P(n.original);return(r?F(r):d(t.values.user,e.anonymiseUsers))>(i?F(i):d(n.values.user,e.anonymiseUsers))?1:-1},Cell:({value:n,row:{original:r}})=>{let i=P(r),{name:a,surname:s}=I(n,e.anonymiseUsers,i);return(0,k.jsxs)(j,{className:`d-flex align-items-center h-100`,children:[(0,k.jsx)(`span`,{className:O.avatarContainer,children:(0,k.jsx)(f,{type:i,imageCdnUrl:e.imageCdnUrl,initials:o.getInitials(a,s),imageUrl:!e.anonymiseUsers&&!i&&n?.avatar?.url,anonymiseUsers:e.anonymiseUsers})}),(0,k.jsxs)(`span`,{className:`ms-2 clamp-1 me-1`,children:[a,` `,s]}),i===`student-reach`&&e.classroomViewsAppLink&&(0,k.jsx)(c,{customSize:!0,svg:E,svgSize:t.Standard,appLink:e.classroomViewsAppLink,className:O.cogIcon,tooltip:e.classroomViewsTooltip,tooltipTrigger:[`hover`],ariaLabel:e.classroomViewsTooltip})]})}}],{Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`views`}),accessor:`viewCount`,width:e.showSeparateNameColumns?47:15,sortType:`basic`,sortDescFirst:!0,Cell:({value:e})=>(0,k.jsx)(j,{className:`d-flex align-items-center h-100`,children:(0,k.jsx)(`div`,{children:e})})},{Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`engagement`}),accessor:`engagementRate`,width:e.showSeparateNameColumns?79:20,sortDescFirst:!0,Cell:({value:e})=>(0,k.jsx)(j,{className:`w-33`,children:(0,k.jsx)(T,{percentage:e,layout:w.LabelBefore})})},{Header:({column:e})=>(0,k.jsx)(M,{column:e,phraseKey:`heatMap`}),accessor:`heatMap`,width:e.showSeparateNameColumns?230:48,disableSortBy:!0,Cell:({row:{original:e}})=>(0,k.jsx)(j,{className:`d-flex align-items-center h-100`,children:(0,k.jsx)(v,{engagement:e,max:n,className:`${O.heatMap} flex-grow-1`})})}]},[e.anonymiseUsers,e.showSeparateNameColumns])}function R(e,t,n){return D.useMemo(()=>{let r=[],i=new Set;if(e?.forEach(e=>{let n=t?.find(t=>t.id&&t.id===e.userId?(i.add(t.id),!0):!!(t.sessionId&&t.sessionId===e.sessionId));r.push({...e,user:n})}),n?.length){let e=n.filter(e=>!i.has(e.id)).map(e=>({...ce,userId:e.id,user:e}));r.push(...e)}return r},[e,t,n])}var z={table:`bg-white rounded px-0`,header:`border-bottom`,headerCell:`m-3`,cell:`mx-3 my-2`};function B(e){let t=L({engagement:e.engagement,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,showSeparateNameColumns:e.showSeparateNameColumns,classroomViewsAppLink:e.classroomViewsAppLink,classroomViewsTooltip:e.classroomViewsTooltip}),n=R(e.engagement,e.users,e.classroomStudents);return n.length?(0,k.jsx)(p,{columns:t,data:n,theme:{...z,table:e.border?`${z.table} border`:z.table},enableSort:e.enableSort}):(0,k.jsx)(k.Fragment,{})}function V(e){return(0,k.jsx)(T,{layout:e.layout,className:e.className,percentage:0,customLabel:`--%`})}var H=`shared.insightAmountWatched`,U=n.encloseNamespace(H);function W(e){let t=S(e.engagement),n=Math.round(t*100);return(0,k.jsx)(b,{title:U(`title`),svg:s,svgClassName:`bg-light-green text-green`,children:(0,k.jsxs)(`div`,{className:`d-flex flex-column align-items-center my-auto gap-2`,children:[!!e.engagement&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(T,{percentage:t,layout:w.LabelInside}),(0,k.jsx)(`p`,{className:`text-center`,children:typeof t==`number`?(0,k.jsx)(u,{namespace:H,phrase:`everyoneWatched`,options:{percentage:n}}):(0,k.jsx)(u,{namespace:H,phrase:`notWatched`})})]}),!e.engagement&&(0,k.jsx)(k.Fragment,{children:(0,k.jsx)(V,{layout:w.LabelInside})})]})})}var G=e(se()),le=x(),K=[`#FF9300`,`#38A2E8`,`#7A76E8`,`#B679C7`,`#F7847B`,`#D9584F`,`#FFCD52`,`#5DC786`,`#40BCC3`,`#40C2BB`];function ue(e){return e.map((e,t)=>({...e,color:K[t%K.length]}))}function de(e,t,n,r){let i={};return e[t]?.forEach(e=>{let t=e.name||`Unknown`;!t||n?.includes(t.toLowerCase())||(i[t]=i[t]??0,i[t]+=e.count)}),ue(a.sortBy(Object.keys(i).map(e=>({name:r?r(e):e,y:i[e],type:`pie`})),`name`))}function q(e){let t=e.findIndex(e=>e.name===`Staff`);if(t>-1){let[n]=e.splice(t,1);e.push(n)}return e.sort((e,t)=>parseInt(e.name.match(/\d+/)?.[0])-parseInt(t.name.match(/\d+/)?.[0]))}function fe(e){return e?.reduce((e,t)=>e+t.y,0)??null}var J=`shared.insightTotalViews`,Y=n.encloseNamespace(J);function pe(e){return e===`Unknown`?Y(`anon`):e}var me={title:{text:null},credits:{enabled:!1},chart:{backgroundColor:`transparent`,spacing:[0,0,0,0]},legend:{itemStyle:C,itemDistance:8},plotOptions:{pie:{allowPointSelect:!0,cursor:`pointer`,dataLabels:{enabled:!1},showInLegend:!0,borderWidth:1,borderColor:`#ffffff`,borderRadius:0,size:`80%`}}};function he(e){let t=q(de(e.events,`yearGroupCount`,e.hideStaffResults?[`staff`]:[],pe)),n=fe(t);function r(e){return{...me,series:[{type:`pie`,name:Y(`title`),data:e}]}}return(0,k.jsx)(b,{title:Y(`title`),svgClassName:`bg-light-blue text-blue`,svg:ne,children:t?.length?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`mb-0`,children:(0,k.jsx)(u,{namespace:J,phrase:`totalViews`,options:{totalViews:n}})}),(0,k.jsx)(`div`,{className:`d-flex justify-content-center h-75`,children:(0,k.jsx)(le.HighchartsReact,{highcharts:G.default,options:r(t),containerProps:{className:`w-100`}})})]}):(0,k.jsxs)(l,{className:`pt-0 my-auto`,children:[(0,k.jsx)(l.Image,{src:e.emptyStateImage,className:`w-75 h-auto`}),(0,k.jsx)(l.Heading,{className:`h4`,children:(0,k.jsx)(u,{namespace:J,phrase:`noViews`})}),(0,k.jsx)(l.Info,{className:`w-100`,children:(0,k.jsx)(u,{namespace:J,phrase:`notWatched`})})]})})}var X={partialInsights:`_partialInsights_1vk2g_1`,videoContainer:`_videoContainer_1vk2g_4`};function ge(){return(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`row g-3 mb-3`,children:[(0,k.jsx)(`div`,{className:`col`,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})}),(0,k.jsx)(`div`,{className:`col`,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})}),(0,k.jsx)(`div`,{className:X.videoContainer,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})})]}),(0,k.jsx)(`div`,{className:`row g-3 mb-5`,children:(0,k.jsx)(`div`,{className:`col-12`,children:(0,k.jsx)(`div`,{className:`${X.partialInsights} rounded partial-loading-background`})})})]})}var _e=_.getComponent(`MenuItem`),Z=class extends _e{constructor(e,t){super(e,t),this.overlayVisible=t.overlayVisible,this.toggle(this.overlayVisible)}handleToggle(){this.toggle(!this.overlayVisible)}toggle(e){e?this.toggleOn():this.toggleOff()}toggleOn(){_.dom.addClass(this.toggleEl,`on`),this.overlayVisible=!0,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().addClass(`cv-reports-player-overlay-visible`)}toggleOff(){_.dom.removeClass(this.toggleEl,`on`),this.overlayVisible=!1,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().removeClass(`cv-reports-player-overlay-visible`)}handleClick(e){e.stopImmediatePropagation()}createEl(e,t,n){this.handlerBound||=(this.handleToggle=this.handleToggle.bind(this),!0),this.toggleEl&&this.toggleEl.removeEventListener(`click`,this.handleToggle),this.toggleEl=_.dom.createEl(`div`,{className:`custom-toggle custom-toggle-info toggle-option float-end`,innerHTML:`<span class="handle"></span></div>`}),this.toggleEl.addEventListener(`click`,this.handleToggle);let r=super.createEl(e,{className:`vjs-menu-item cv-cog-menu-item`,innerHTML:`
|
|
2
2
|
<span class="vjs-menu-item-text">Heat Map</span>
|
|
3
3
|
<span class="cv-toggle-container"></span>`},n);return r.children[1].appendChild(this.toggleEl),r}};_.registerComponent(`EngagementOverlayMenuItem`,Z);var ve=e(te(),1),Q=3;function ye(e){let t=e.interactive.timepoints.find(t=>{let n=t.visibleAt/1e3;return Math.floor(e.time)===Math.floor(n)||Math.ceil(e.time)===Math.ceil(n)});if(!t?.interactions?.length)return(0,k.jsx)(k.Fragment,{});let n=t.interactions.length>Q?t.interactions.slice(0,Q-1):t.interactions,r=t.interactions.length-n.length;return(0,k.jsxs)(`div`,{className:`d-flex justify-content-end ms-2`,children:[n.map((e,t)=>(0,k.jsx)(m,{interaction:e,showQuestion:!1,iconClassName:`ms-1`},t)),!!r&&(0,k.jsx)(`div`,{className:`interaction-type-icon d-flex justify-content-center align-items-center border border-dark text-body ms-1`,children:`+${r}`})]})}var be={title:{text:null},xAxis:{visible:!1,minPadding:0,maxPadding:0},legend:{enabled:!1},credits:{enabled:!1},defs:{gradient:{tagName:`linearGradient`,id:`area-gradient`,x1:0,y1:1,x2:0,y2:0,children:[{tagName:`stop`,offset:0},{tagName:`stop`,offset:1}]}}};function xe(e,t){return{styledMode:!0,spacing:[15,0,0,0],width:e,height:t}}function Se(e){return{max:Math.max(...e)*1.05,min:0,minPadding:0,maxPadding:0,allowDecimals:!0,startOnTick:!1,endOnTick:!1,visible:!1}}function Ce(e){return{formatter:function(){let t=e?Te(e,this.x):``;return`<div class="cv-engagement-tooltip bg-white rounded"><div class="d-flex justify-content-between"><strong>${g(this.x)}</strong>${t}</div><div class="d-flex justify-content-between rounded bg-light cv-view-count-container"><strong>Views</strong> <span class="cv-view-count">${this.y}</span></div></div>`},positioner:function(e,t,n){let r=this.chart.plotWidth-e,i=n.plotX-e/2;return{x:Math.min(Math.max(i,0),r),y:this.chart.plotTop}},useHTML:!0,padding:0}}function we(e){return{area:{point:{events:{mouseOver:function(){e(this.x)},mouseOut:function(){e(null)}}}},series:{marker:{enabled:!1}}}}function Te(e,t){return(0,ve.renderToStaticMarkup)((0,k.jsx)(ye,{time:t,interactive:e}))}var Ee=_.getComponent(`Component`);G.default.AST.allowedTags.push(`g`),G.default.AST.allowedAttributes.push(`viewBox`,`transform`);var De=class extends Ee{constructor(e,t){super(e,t),this.initialize(),this.bindListeners()}initialize(){this.player().ready(()=>this.buildChart())}buildCSSClass(){return`cv-engagement-overlay`}createEl(e,t,n){return super.createEl(e,{...t,className:this.buildCSSClass(),innerHTML:`<div class="cv-engagement-chart"></div><div class="cv-engagement-timepoint-indicator"></div>`},n)}toggleChart(e){e?this.buildChart():this.destroyChart()}bindListeners(){this.handleClick=this.handleClick.bind(this),this.resizeChart=this.resizeChart.bind(this),this.player().on(`playerresize`,this.resizeChart),this.on(this.el(),`mouseup`,this.handleClick),this.player().on(`dispose`,()=>{this.player().off(`playerresize`,this.resizeChart),this.off(this.el(),`mouseup`,this.handleClick)})}handleClick(e){if(_.dom.isSingleLeftClick(e)){if(this.player().paused()){this.player().play();return}this.player().pause()}}buildChart(){if(this.chart)return;let e=this.getChartDimensions();if(!e){this.player().one(`play`,()=>this.buildChart());return}let t=this.el().querySelector(`.cv-engagement-chart`);this.chart=G.default.chart(t,this.getHighchartOptions(e))}resizeChart(){let e=this.getChartDimensions();!this.chart||!e||this.chart.setSize(e.width,e.height)}destroyChart(){this.chart?.destroy(),this.chart=null}getChartDimensions(){let e=this.player().getChild(`collapserator`)?.currentHeight(),t=this.el().clientWidth;if(!e||!t)return null;let{height:n}=this.player().currentDimensions();return{width:t,height:n-e}}getHighchartOptions({width:e,height:t}){return{...be,chart:xe(e,t),yAxis:Se(this.options_.heatMap),tooltip:Ce(this.options_.interactive),plotOptions:we(this.moveTimepointIndicator.bind(this)),series:[{type:`area`,data:this.options_.heatMap}]}}moveTimepointIndicator(e){this.options_.onTimepointHover&&this.options_.onTimepointHover(e);let t=this.el().querySelector(`.cv-engagement-timepoint-indicator`);if(e===null){_.dom.removeClass(t,`cv-engagement-timepoint-indicator-visible`);return}_.dom.addClass(t,`cv-engagement-timepoint-indicator-visible`),t.style.left=`${e/this.options_.heatMap.length*100}%`}};_.registerComponent(`EngagementOverlay`,De);var Oe=_.getPlugin(`plugin`),ke=class extends Oe{constructor(e,t){super(e,t),this.options=t,e.ready(()=>{this.initialize()})}initialize(){this.hasHeatMapData()&&(this.player.addChild(`engagementOverlay`,{heatMap:this.options.heatMap,interactive:this.options.interactive,onTimepointHover:this.options.onTimepointHover}),(this.player.getChild(`collapserator`)?.getChild(`cogButton`)).addItem({ctor:Z,name:`EngagementOverlayMenuItem`,options:{overlayVisible:!0}}))}toggleOverlay(e){this.player.getChild(`engagementOverlay`)?.toggleChart(e)}hasHeatMapData(){return this.options.heatMap?.reduce((e,t)=>e+t,0)>0}};_.registerPlugin(`engagementOverlayPlugin`,ke);var Ae=_.getPlugin(`plugin`),je=class extends Ae{constructor(e,t){super(e),this.options=t,this.player.one(`loadedmetadata`,()=>this.player.ready(this.initialize.bind(this)))}initialize(){h.useMetadataTrack(this.player,`interactive`,this.onTrackLoaded.bind(this)),this.player.addClass(`cv-interactive-plugin`)}onTrackLoaded(e){this.addChildren(e)}addChildren(e){this.player.controlBar.getChild(`progressControl`).getChild(`SeekBar`).addChild(new ae(this.player,{interactive:this.options.interactive,track:e}))}};_.registerPlugin(`interactiveSeekBarPlugin`,je);var Me=class extends re{constructor(e,t){super(e,t)}getPlayerClassName(){return`cv-reports-player`}getAnalyticsPlayerType(){return`reports-player`}async additionalSetup(e){super.additionalSetup(e),this.setupEngagementOverlayPlugin(e),this.setupUpClipPlugin(e),this.setupInteractiveSeekBarPlugin(e)}setupEngagementOverlayPlugin(e){this.player.engagementOverlayPlugin({heatMap:this.options.heatMap,interactive:e.additionalData?.interactive,onTimepointHover:this.options.onTimepointHover})}setupUpClipPlugin(e){let t=e.mediaType===`MasterClip`,n=e.mediaType===`MasterInteractive`;if(!t&&!n)return;let r;if(t&&(r=e.additionalData),!(n&&(r=e.additionalData?.clipData,!r))){if(!r)throw Error(`Invalid clip data`);this.player.clipPlugin({startTime:r.startTime,endTime:r.endTime})}}setupInteractiveSeekBarPlugin(e){let t=e.additionalData?.interactive;e.additionalData?.interactive&&(this.track=ie.getInteractiveTrack(this.player,e),this.player.interactiveSeekBarPlugin({interactive:t}))}getSeekBarOptions(){return{ignoreChapters:!0}}};function Ne(e){let t=D.useRef(null),n=D.useRef(null);return D.useEffect(()=>{n.current=new Me(t.current,e)},[]),(0,k.jsx)(`div`,{ref:t})}var $={playerContainer:`_playerContainer_odup3_1`,playerPlaceholder:`_playerPlaceholder_odup3_8`,heatMap:`_heatMap_odup3_12`,heatMapTimepointIndicator:`_heatMapTimepointIndicator_odup3_15`,heatMapTimepointIndicatorVisible:`_heatMapTimepointIndicatorVisible_odup3_24`,partialLoadingContainer:`_partialLoadingContainer_odup3_28`},Pe=n.encloseNamespace(`shared.videoEngagementOverlay`);function Fe(e){let t=D.useRef(null),n=y(e.engagement);function r(e){let r=t.current;if(r){if(e===null){r.classList.remove($.heatMapTimepointIndicatorVisible);return}r.classList.add($.heatMapTimepointIndicatorVisible),r.style.left=`${e/n.length*100}%`}}return(0,k.jsxs)(`div`,{className:`bg-white border rounded overflow-hidden h-100`,children:[(0,k.jsxs)(`div`,{className:`position-relative`,children:[(0,k.jsx)(`div`,{className:$.playerPlaceholder}),(0,k.jsx)(`div`,{className:$.playerContainer,children:(0,k.jsx)(Ne,{viewKey:e.viewKey,playerApi:new URL(e.playerApiUrl),hotkeyElQuerySelector:`body`,heatMap:n,onTimepointHover:r,aspectRatio:`16:9`})})]}),(0,k.jsxs)(`div`,{className:`p-3`,children:[(0,k.jsxs)(`div`,{className:`position-relative`,children:[(0,k.jsx)(v,{engagement:e.engagement,className:$.heatMap}),(0,k.jsx)(`div`,{ref:t,className:$.heatMapTimepointIndicator})]}),(0,k.jsxs)(`div`,{className:`d-flex justify-content-between mt-2`,children:[(0,k.jsx)(`strong`,{children:Pe(`heatmap`)}),(0,k.jsx)(`div`,{className:`w-33`,children:(0,k.jsx)(oe,{})})]})]})]})}var Ie={videoContainer:`_videoContainer_1lnnd_1`};function Le(e){return(0,k.jsxs)(k.Fragment,{children:[!e.hasDataLoaded&&(0,k.jsx)(ge,{}),(0,k.jsxs)(`div`,{className:`row g-3 mb-3`,children:[e.hasDataLoaded&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`col`,children:(0,k.jsx)(he,{events:{yearGroupCount:e.yearGroups},emptyStateImage:ee.EmptyStates.MY_VIDEOS,hideStaffResults:e.hideStaffResults})}),(0,k.jsx)(`div`,{className:`col`,children:(0,k.jsx)(W,{engagement:e.individualEngagement})}),(0,k.jsx)(`div`,{className:Ie.videoContainer,children:(0,k.jsx)(Fe,{engagement:e.aggregateEngagement,viewKey:e.viewKey.viewKey,playerApiUrl:e.config.playerApiUrl,imageCdnUrl:e.config.imageCdnUrl})})]}),e.tableDataLoaded&&(0,k.jsx)(`div`,{className:`col-12`,children:(0,k.jsx)(B,{engagement:e.individualEngagement,users:e.users,imageCdnUrl:e.config?.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,classroomStudents:e.classroomStudents,border:!0,enableSort:!0,showSeparateNameColumns:!0})})]})]})}export{Le as t};
|
|
4
|
-
//# sourceMappingURL
|
|
4
|
+
//# sourceMappingURL=DhcRnxkp.chunk.js.map
|