@clickview/lite 0.82.2 → 0.83.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1074-fdce06d863-lite.chunk.js +2 -0
  4. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +1 -0
  5. package/dist/scripts/{1199-da55d69853-lite.chunk.js → 1199-01cc084886-lite.chunk.js} +1 -1
  6. package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map} +1 -1
  7. package/dist/scripts/{2664-87c8cbfa7f-lite.chunk.js → 2664-907153c03b-lite.chunk.js} +2 -2
  8. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +1 -0
  9. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +2 -0
  10. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 3392-f7f8cb65e5-lite.chunk.js} +3 -3
  12. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +1 -0
  13. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +2 -0
  14. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{4177-285ddf9ae3-lite.chunk.js → 4177-2d876c7b14-lite.chunk.js} +2 -2
  16. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{1336-1826f6e582-lite.chunk.js → 4208-0706461da6-lite.chunk.js} +2 -2
  18. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{4578-7578bcf17a-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
  20. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
  21. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +2 -0
  22. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +1 -0
  23. package/dist/scripts/{4621-1f79d94416-lite.chunk.js → 4621-7fb0a05bcb-lite.chunk.js} +2 -2
  24. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +1 -0
  25. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +2 -0
  26. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js → 4948-ba684e5f4f-lite.chunk.js} +1 -1
  28. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js.map → 4948-ba684e5f4f-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +2 -0
  30. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5554-17bb3b86fc-lite.chunk.js → 5554-f1f3baf822-lite.chunk.js} +2 -2
  32. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +1 -0
  33. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +2 -0
  34. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +1 -0
  35. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +2 -0
  36. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{6909-a9b8930e37-lite.chunk.js → 6909-ba75701156-lite.chunk.js} +2 -2
  38. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +1 -0
  39. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +2 -0
  40. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +1 -0
  41. package/dist/scripts/7568-55e9b01367-lite.chunk.js +3 -0
  42. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-211f084b70-lite.chunk.js} +2 -2
  44. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +1 -0
  45. package/dist/scripts/7742-514844bd1a-lite.chunk.js +2 -0
  46. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +1 -0
  47. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +2 -0
  48. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +1 -0
  49. package/dist/scripts/8077-870bd8e245-lite.chunk.js +3 -0
  50. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +1 -0
  51. package/dist/scripts/843-4dbc5df109-lite.chunk.js +3 -0
  52. package/dist/scripts/843-4dbc5df109-lite.chunk.js.LICENSE.txt +1 -0
  53. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +1 -0
  54. package/dist/scripts/8735-e74a148502-lite.chunk.js +2 -0
  55. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +1 -0
  56. package/dist/scripts/8856-2d332952ae-lite.chunk.js +2 -0
  57. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +1 -0
  58. package/dist/scripts/904-2784e45cfc-lite.chunk.js +2 -0
  59. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js → 9042-fd7e79b891-lite.chunk.js} +1 -1
  61. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js.map → 9042-fd7e79b891-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +2 -0
  63. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +1 -0
  64. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +2 -0
  65. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9742-5f99d74bb0-lite.chunk.js → 9742-3f6b75484a-lite.chunk.js} +2 -2
  67. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/979-6a70a0e616-lite.chunk.js +2 -0
  69. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js → 9911-8892b6dbfe-lite.chunk.js} +2 -2
  71. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js.map → 9911-8892b6dbfe-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/bundle-f926852f33.min.js +3 -0
  73. package/dist/scripts/{bundle-9a3e49399a.min.js.map → bundle-f926852f33.min.js.map} +1 -1
  74. package/package.json +1 -1
  75. package/dist/css/2074-lite-ac8da6c78b.chunk.css +0 -4
  76. package/dist/scripts/1202-d96ad80884-lite.chunk.js +0 -2
  77. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +0 -1
  78. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +0 -1
  79. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
  80. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2888-2596e106a5-lite.chunk.js +0 -2
  83. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +0 -1
  84. package/dist/scripts/289-669c0c8222-lite.chunk.js +0 -2
  85. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +0 -1
  86. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
  87. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
  88. package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
  89. package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
  91. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +0 -1
  94. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4806-f36469abb7-lite.chunk.js +0 -2
  96. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
  98. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
  99. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +0 -1
  100. package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
  101. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +0 -1
  102. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
  103. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
  104. package/dist/scripts/6070-a390fdce21-lite.chunk.js +0 -2
  105. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +0 -1
  106. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7401-98135f09e8-lite.chunk.js +0 -2
  108. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +0 -1
  109. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
  111. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7843-f6033528ce-lite.chunk.js +0 -2
  113. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
  114. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +0 -2
  115. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +0 -2
  117. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
  119. package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
  120. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
  121. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +0 -2
  122. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +0 -1
  123. package/dist/scripts/9295-4242401e60-lite.chunk.js +0 -2
  124. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +0 -1
  125. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
  126. package/dist/scripts/979-4b893e5603-lite.chunk.js +0 -2
  127. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +0 -1
  128. package/dist/scripts/9911-9272b96e46-lite.chunk.js +0 -2
  129. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +0 -1
  130. package/dist/scripts/bundle-9a3e49399a.min.js +0 -3
  131. /package/dist/css/{787-lite-5a317efacd.chunk.css → 2970-lite-5a317efacd.chunk.css} +0 -0
  132. /package/dist/css/{6070-lite-45dc286aab.chunk.css → 6550-lite-45dc286aab.chunk.css} +0 -0
  133. /package/dist/css/{2888-lite-856c02f000.chunk.css → 7148-lite-856c02f000.chunk.css} +0 -0
  134. /package/dist/css/{8364-lite-db31e36b79.chunk.css → 843-lite-db31e36b79.chunk.css} +0 -0
  135. /package/dist/css/{9911-lite-856c02f000.chunk.css → 8735-lite-856c02f000.chunk.css} +0 -0
  136. /package/dist/css/{5579-lite-f8e496136d.chunk.css → 8856-lite-f8e496136d.chunk.css} +0 -0
  137. /package/dist/css/{289-lite-2435a34b13.chunk.css → 904-lite-2435a34b13.chunk.css} +0 -0
  138. /package/dist/css/{1202-lite-4a892bdbf2.chunk.css → 9528-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{3612-lite-2b4142796a.chunk.css → 9911-lite-2b4142796a.chunk.css} +0 -0
  140. /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7568-55e9b01367-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 8077-870bd8e245-lite.chunk.js.LICENSE.txt} +0 -0
  143. /package/dist/scripts/{bundle-9a3e49399a.min.js.LICENSE.txt → bundle-f926852f33.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4578-27028d26eb-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/components/share-avatar/ShareAvatar.tsx","file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts","file:///app/packages/projects/lite/src/apps/assign/components/flow-controls/FlowControls.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-view-count/ShareViewCount.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount.tsx","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/previous-assignments.scss","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/PreviousAssignments.tsx","file:///app/packages/projects/lite/src/apps/assign/hooks/useAssignSharedData.ts","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/empty-states/shares-and-assignments-empty-state/SharesAndAssignmentsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/empty-states/shares-empty-state/SharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/ShowAssignmentsView.tsx","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../../enums/SharePrivacy';\nimport { ShareType } from '../../enums/ShareType';\n\nconst namespace = 'sharev2.shareAvatar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.Classrooms,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play,\n [ShareType.LegacyDirect]: cvSvgLibrary.Share\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'purple',\n [ShareType.Live]: 'purple',\n [ShareType.LegacyDirect]: 'indigo'\n};\n\nconst shareTypeTitlePhraseMap = {\n [ShareType.Open]: 'openShareType',\n [ShareType.Link]: 'linkShareType',\n [ShareType.Classroom]: 'classroomShareType',\n [ShareType.Live]: 'liveShareType',\n [ShareType.LegacyDirect]: 'legacyDirectShareType'\n};\n\nfunction getTitle({ type, classroomName, additionalTitleText, openClassroomName }: ShareAvatarProps) {\n if (type === ShareType.Open && openClassroomName)\n return openClassroomName;\n \n if (type === ShareType.Classroom && classroomName)\n return classroomName;\n\n let title = getPhrase(shareTypeTitlePhraseMap[type]);\n\n if (additionalTitleText)\n title += ' ' + additionalTitleText;\n\n return title;\n}\n\nfunction getClassroomSubtitle(classroomGroupCount: number, studentCount: number): string {\n if (classroomGroupCount && studentCount)\n return `${getPhrase('classroomGroupCount', { smartCount: classroomGroupCount })}, ${getPhrase('studentSubTitle', { smartCount: studentCount })}`;\n\n if (classroomGroupCount)\n return getPhrase('groupSubTitle', { smartCount: classroomGroupCount });\n\n if (studentCount)\n return getPhrase('studentSubTitle', { smartCount: studentCount });\n\n return getPhrase('allStudentsSubTitle');\n}\n\nfunction getLinkSubtitle(privacy: SharePrivacy) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(privacy))\n return getPhrase('respectRatingsSubTitle');\n\n if (privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return getPhrase('anyoneInSchoolSubTitle');\n\n if (privacy === SharePrivacy.ProtectedOverrideRestriction)\n return getPhrase('anyoneSignedInSubTitle');\n\n if (privacy === SharePrivacy.Public)\n return getPhrase('anyoneWithLinkSubTitle');\n\n if (privacy === SharePrivacy.PinCode)\n return getPhrase('anyoneWithPinSubTitle');\n}\n\nfunction getSubtitle({ type, privacy, studentCount = 0, classroomGroupCount = 0 }: ShareAvatarProps) {\n switch (type) {\n case ShareType.Classroom:\n return getClassroomSubtitle(classroomGroupCount, studentCount);\n\n case ShareType.Open:\n return getPhrase('openShareTypeSubTitle');\n\n case ShareType.Link:\n return getLinkSubtitle(privacy);\n \n case ShareType.Live:\n return getPhrase('liveShareTypeSubTitle');\n\n case ShareType.LegacyDirect:\n return getPhrase('legacyDirectTypeSubTitle');\n\n default:\n return getPhrase('publicShareTypeSubTitle');\n }\n}\n\ninterface ShareAvatarProps {\n type: ShareType;\n privacy: SharePrivacy;\n studentCount?: number;\n classroomGroupCount?: number;\n classroomName?: string;\n openClassroomName?: string;\n hideSubtitle?: boolean;\n subtitleText?: string;\n svgSize?: SvgContainerSize;\n additionalTitleText?: string;\n className?: string;\n titleClassName?: string;\n showIconCircle?: boolean;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n const title = getTitle(props);\n return (\n <div className={classNames('d-flex align-items-center gap-2', props.className)}>\n <div>\n <IconCircle\n svgName={icons[props.type]}\n variant={iconColours[props.type]}\n textVariant={'white'}\n svgWrapperClassName='p-1'\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column'>\n <p className={classNames('m-0', props.titleClassName)} title={title}>{title}</p>\n {!props.hideSubtitle && <span className='text-secondary'>{props.subtitleText ?? getSubtitle(props)}</span>}\n </div>\n </div>\n );\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsOptions, EntityType } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper as OldShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport type { Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventScrubbing: boolean;\n immediateFeedback: boolean;\n}\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n /**\n * Only interactive entities can update share settings currently\n */\n canAddPolicies(type: SharableEntityType): boolean {\n return ['interactive'].includes(type);\n },\n\n getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n },\n\n getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n return {\n preventScrubbing: share?.options?.preventScrubbing ?? interactive?.preventScrubbing ?? false,\n immediateFeedback: share?.options?.immediateFeedback ?? interactive?.immediateFeedback ?? false\n };\n },\n \n getEnabledSettingsField(entityType: SharableEntityType): {[key in `show${Capitalize<keyof ShareSettingsFormFields>}Field`]: boolean} {\n return {\n showImmediateFeedbackField: entityType === 'interactive',\n showPreventScrubbingField: entityType === 'interactive'\n };\n },\n\n getSharableEntityType(share: Share): SharableEntityType {\n switch (share.objectTypeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Playlist:\n return 'playlist';\n case MasterType.Subject:\n return 'subject';\n case MasterType.Series:\n return 'series';\n case MasterType.Interactive:\n return 'interactive';\n case MasterType.Clip:\n return 'clip';\n }\n },\n\n /**\n * Methods from old ShareViewHelper imported here for namespacing\n */\n getFetchFunctionByType: (type: SharableEntityType) => {\n switch (type) {\n case 'playlist': {\n return (id: string) => Flight.useBasicFetch<Playlist>(PlaylistRequests.playlistWithThumbnailAndCount(id));\n }\n\n case 'series': {\n return (id: string) => Flight.useBasicFetch<Series>(SeriesRequests.seriesWithThumbnailAndCount(id));\n }\n }\n \n return OldShareViewHelper.getFetchFunctionByType(type);\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n return OldShareViewHelper.getAnalyticsEntity(entityType);\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return OldShareViewHelper.getAnalyticsOptions(entityType);\n }\n};","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'assign.flowControls';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FlowControlsProps {\n showSpinner?: boolean;\n hideNextButton?: boolean;\n hideBackButton?: boolean;\n disableNextButton?: boolean;\n disableBackButton?: boolean;\n backButtonText?: string;\n hideCreateClassroomButton?: boolean;\n nextButtonText?: string;\n nextButtonTooltip?: string;\n onClickNext?: () => void;\n onClickBack?: () => void;\n onClickCreateClassroom?: () => void;\n leftComponent?: JSX.Element;\n}\n\nexport function FlowControls(props: FlowControlsProps): JSX.Element {\n const hideBackButton = props.hideBackButton || !props.onClickBack;\n const hideNextButton = props.hideNextButton || !props.onClickNext;\n const hideCreateClassroomButton = props.hideCreateClassroomButton || !props.onClickCreateClassroom;\n \n if (hideBackButton && hideNextButton && hideCreateClassroomButton)\n return <></>;\n \n return (\n <PopupButtons className='justify-content-between'>\n <div>\n {!!props.leftComponent && props.leftComponent}\n {!hideCreateClassroomButton && (\n <PopupButtons.Submit variant='link' onClick={props.onClickCreateClassroom} text={getPhrase('createClassroom')} className='text-info p-0' />\n )}\n </div>\n <div className='d-flex'>\n {!hideBackButton && (\n <PopupButtons.Cancel variant='link' onClick={props.onClickBack} text={props.backButtonText || getPhrase('back')} />\n )}\n {!hideNextButton && (\n <Tooltip title={props.nextButtonTooltip} disable={!props.nextButtonTooltip} placement='top' spanHack>\n <PopupButtons.Submit\n variant='dark'\n onClick={props.onClickNext}\n text={props.nextButtonText || getPhrase('next')}\n disabled={props.disableNextButton}\n showSpinner={props.showSpinner}\n />\n </Tooltip>\n )}\n </div>\n </PopupButtons>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nconst namespace = 'sharev2.shareViewCount';\n\ninterface ShareViewCountProps {\n share: Share;\n}\n\nexport function ShareViewCount(props: ShareViewCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n \n if (isCollection)\n return <span>-</span>;\n\n return <Text namespace={namespace} phrase='viewCount' options={{ smartCount: props.share.viewCount || 0 }} />;\n}","import React from 'react';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface ShareViewedByCountProps {\n share: Share;\n}\n\nexport function ShareViewedByCount(props: ShareViewedByCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n\n if (isCollection)\n return <span>-</span>;\n \n function getViewCount(): string {\n const shareAccessCount = props.share.accessCount || 0;\n if (props.share.type === ShareType.Open)\n return `${shareAccessCount}`;\n\n if (props.share.type === ShareType.Classroom) {\n const totalRecipients = props.share.recipients.length;\n return `${shareAccessCount}/${totalRecipients}`;\n }\n\n return `${shareAccessCount}`;\n }\n \n return (\n <span className='d-inline-flex flex-row gap-2 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} />\n <span>{getViewCount()}</span>\n </span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"shareListItem\":\"vLROV\",\"visibleOnHover\":\"o2KJH\",\"shareAvatar\":\"zDcMp\",\"shareAvatarTitle\":\"U8yMQ\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { ShareAvatar } from 'libs/shared/apps/share-v2/components/share-avatar/ShareAvatar';\nimport { ShareViewCount } from 'libs/shared/apps/share-v2/components/share-view-count/ShareViewCount';\nimport { ShareViewedByCount } from 'libs/shared/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './previous-assignments.scss';\n\nconst namespace = 'assign.previousAssignments';\n\ninterface PreviousAssignmentsHeaderProps {\n count: number;\n show: boolean;\n onToggle: () => void;\n}\n\nfunction PreviousAssignmentsHeader(props: PreviousAssignmentsHeaderProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center justify-content-between', props.show && 'mb-3')}>\n <h3 className='h6 m-0 p-0'><Text namespace={namespace} phrase='heading' options={{ count: props.count }} /></h3>\n <IconButton\n svgName={props.show ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={props.onToggle}\n />\n </div>\n );\n}\n\nexport function PreviousAssignmentsListHeader(): JSX.Element {\n const columnClassNames = 'd-flex align-items-end justify-content-start fw-medium';\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Row className='gx-2 px-3 mb-2'>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='assignedTo' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='views' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='viewedBy' />\n </Col>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='dateCreated' />\n </Col>\n </Row>\n </LanguageNamespaceContext.Provider>\n );\n}\n\ntype ItemAnalytics = {\n data: HashObject;\n options: AnalyticsOptions;\n}\ninterface PreviousAssignmentListItemProps {\n share: Share;\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n\n getItemAnalytics?: (share: Share) => ItemAnalytics;\n className?: string;\n}\n\nfunction PreviousAssignmentListItem(props: PreviousAssignmentListItemProps): JSX.Element {\n const shareClassroom = ShareHelper.getClassroomForShare(props.share, props.classrooms);\n\n const analytics = props.getItemAnalytics?.(props.share);\n\n return (\n <AppLink\n key={props.share.shareId}\n appLink={props.getItemAppLink(props.share)}\n analyticsData={analytics?.data}\n analyticsOptions={analytics?.options}\n className={classNames('d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline', styles.shareListItem, props.className)}\n >\n <Row className='gx-2'>\n <Col xs={4} className='d-flex align-items-center'>\n <ShareAvatar\n type={props.share.type}\n privacy={props.share.privacy}\n classroomName={shareClassroom?.name}\n svgSize={SvgContainerSize.Small}\n openClassroomName={props.share.options?.openClassroomName}\n className={classNames(styles.shareAvatar)}\n titleClassName={classNames('text-truncate', styles.shareAvatarTitle)}\n hideSubtitle\n />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewCount share={props.share} />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewedByCount share={props.share} />\n </Col>\n <Col xs={4} lg={3} className='d-flex align-items-center justify-content-start'>\n <span>{formatDate(props.share.dateCreated)}</span>\n </Col>\n <Col lg={1} className='align-items-center justify-content-end d-none d-lg-flex'>\n <span className={classNames('cursor-pointer text-info hover-text-underline', styles.visibleOnHover)}>\n <Text namespace={namespace} phrase='view' />\n </span>\n </Col>\n </Row>\n </AppLink>\n );\n}\n\ninterface PreviousAssignmentsListProps {\n assignments: Share[];\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n scrollHeightMax?: number;\n}\n\nexport function PreviousAssignmentsList(props: PreviousAssignmentsListProps): JSX.Element {\n return (\n <div className={classNames(\n 'd-flex flex-column border-top rounded-top overflow-hidden'\n )}>\n <Scrollbars\n autoHeight\n autoHeightMin={0}\n autoHeightMax={props.scrollHeightMax ?? 215}\n autoHide\n >\n {props.assignments.map((share, idx) => (\n <PreviousAssignmentListItem\n share={share}\n classrooms={props.classrooms}\n getItemAppLink={props.getItemAppLink}\n getItemAnalytics={share => props.getItemAnalytics?.(share, idx)}\n className={classNames(idx % 2 === 0 && 'bg-gray-100')}\n key={share.shareId}\n />\n ))}\n </Scrollbars>\n </div>\n );\n}\n\ninterface PreviousAssignmentsProps {\n show: boolean;\n assignments: Share[];\n classrooms: Classroom[];\n onToggle: () => void;\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n}\n\nexport function PreviousAssignments(props: PreviousAssignmentsProps): JSX.Element {\n if (!props.assignments.length)\n return <></>;\n \n const noBottomPadding = props.show && props.assignments.length > 3;\n \n return (\n <div className={classNames('bg-white rounded-3 p-3', noBottomPadding && 'pb-0')}>\n <PreviousAssignmentsHeader count={props.assignments.length} onToggle={props.onToggle} show={props.show} />\n {props.show && (\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList {...props} />\n </>\n )}\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nexport interface UseAssignSharedDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function useAssignSharedData(options: UseAssignSharedDataOptions) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(options.entityType)(options.objectId, currentUser.data?.id);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n /**\n * Fetch interactive videos options to set them as defaults\n * if the interactive share data does not have any options set.\n * We only fetch this if its an interactive share entity\n */\n const interactive = Flight.useBasicFetch<Interactive>(\n MasterTypeHelper.isType<InteractiveMetadata>(entity.data, MasterType.Interactive) && entity.data.interactiveId &&\n InteractiveRequests.interactive(entity.data.interactiveId)\n );\n\n const { hasPermissions, isLoaded } = usePermissions();\n\n const hasStudentExp = hasPermissions(PermissionName.StudentExperience);\n const canCreateClassrooms = hasPermissions(PermissionName.CreateClassrooms);\n \n const dataLoaded = (\n !!currentUser.data &&\n !!entity.data &&\n !!config.data &&\n !!isLoaded\n );\n \n return {\n loaded: dataLoaded,\n currentUser,\n entity,\n interactive,\n config,\n hasStudentExp,\n canCreateClassrooms\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'assign.sharesAndAssignmentsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharesAndAssignmentsEmptyStateProps {\n assignAppLink: Core.AppLink;\n shareLinkAppLink: Core.AppLink;\n hideAssignButton?: boolean;\n}\n\nexport function SharesAndAssignmentsEmptyState(props: SharesAndAssignmentsEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='py-4'>\n <EmptyState.Image\n size='small'\n src={ImageUrls.EmptyStates.Share.MY_SHARES}\n />\n <EmptyState.Heading><Text phrase='title' namespace={namespace} /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='description' namespace={namespace} /></EmptyState.Info>\n {!props.hideAssignButton && <>\n <EmptyState.Cta\n icon={cvSvgLibrary.Classrooms}\n text={getPhrase('ctaAssign')}\n appLink={props.assignAppLink}\n />\n <EmptyState.Cta\n className='text-dark hover-text-underline mt-3 fw-medium'\n text={getPhrase('ctaShareLink')}\n appLink={props.shareLinkAppLink}\n />\n </>}\n {props.hideAssignButton &&\n <EmptyState.Cta\n icon={cvSvgLibrary.Link}\n text={getPhrase('ctaShare')}\n appLink={props.shareLinkAppLink}\n />\n }\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'assign.sharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharesEmptyStateProps {\n appLink: Core.AppLink;\n}\n\nexport function SharesEmptyState(props: SharesEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='py-4'>\n <EmptyState.Image\n size='small'\n src={ImageUrls.EmptyStates.Share.MY_SHARES}\n />\n <EmptyState.Heading><Text phrase='title' namespace={namespace} /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='description' namespace={namespace} /></EmptyState.Info>\n <EmptyState.Cta\n icon={cvSvgLibrary.Link}\n text={getPhrase('cta')}\n appLink={props.appLink}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, PopupViewProps } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { AssignHelper } from 'libs/shared/utils/AssignHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { PreviousAssignmentsList, PreviousAssignmentsListHeader } from 'apps/assign/components/previous-assignments/PreviousAssignments';\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\n\nimport { SharesAndAssignmentsEmptyState } from './empty-states/shares-and-assignments-empty-state/SharesAndAssignmentsEmptyState';\nimport { SharesEmptyState } from './empty-states/shares-empty-state/SharesEmptyState';\n\nconst namespace = 'assign.showAssignmentsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_SCROLL_HEIGHT = 400;\n\nfunction sortByDateCreated(a: Share, b: Share) {\n if (!a || !b)\n return;\n\n if (DateHelper.isSame(a.dateCreated, b.dateCreated))\n return 0;\n\n if (DateHelper.isAfter(a.dateCreated, b.dateCreated))\n return 1;\n\n return -1;\n}\n\ninterface ViewInSchoolAnalyticsButtonProps {\n href: string;\n}\n\nfunction ViewInSchoolAnalyticsButton(props: ViewInSchoolAnalyticsButtonProps): JSX.Element {\n return (\n <a href={props.href} target='_blank' className='btn btn-link text-info'>\n <span className='pe-1'><Text phrase='openInSchoolAnalytics' namespace={namespace} /></span>\n <SvgContainer svgName={cvSvgLibrary.NewWindow} size={SvgContainerSize.Small} />\n </a>\n );\n}\n\ninterface ShowAssignmentsEmptyStateProps {\n type: 'assign-and-shares' | 'shares';\n assignAppLink: Core.AppLink;\n shareAppLink: Core.AppLink;\n hideAssignButton?: boolean;\n}\n\nfunction ShowAssignmentsEmptyState(props: ShowAssignmentsEmptyStateProps): JSX.Element {\n if (props.type === 'assign-and-shares') {\n return (\n <SharesAndAssignmentsEmptyState\n assignAppLink={props.assignAppLink}\n shareLinkAppLink={props.shareAppLink}\n hideAssignButton={props.hideAssignButton}\n />\n );\n }\n \n return <SharesEmptyState appLink={props.shareAppLink} />;\n}\n\ninterface ShowAssignmentsViewProps extends PopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function ShowAssignmentsView(props: ShowAssignmentsViewProps): JSX.Element {\n const sharedData = useAssignSharedData({\n objectId: props.objectId,\n entityType: props.entityType\n });\n\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n const isTertiary = useIsTertiary();\n\n const previousShares = Flight.useBasicFetch<Share[]>(ShareRequests.getSharesByObjectId(props.objectId));\n const assignments = previousShares.data?.sort(sortByDateCreated) || [];\n const previousAssignmentClassroomIds = ArrayHelper.uniq(\n assignments.map(ShareHelper.getClassroomIdFromShare).filter(x => !!x)\n );\n const classrooms = Flight.useBasicFetch<Classroom[]>(\n previousShares.hasCompleted &&\n ClassroomRequests.getClassroomsByIds(previousAssignmentClassroomIds, sharedData.currentUser.data?.customerId)\n );\n\n function getItemAppLink(share: Share) {\n const appLink = getInsightsOverviewAppLink(share);\n if (!appLink)\n return;\n\n return appLink;\n }\n\n const analyticsUrl = AnalyticsRouteHelper.getObjectUrl(\n sharedData.config.data?.analyticsWebUrl,\n sharedData.entity.data,\n hasShareFlowV2\n );\n \n const canViewSchoolAnalytics =\n hasPermissions(PermissionName.ViewAnalyticsProduct) &&\n hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const emptyStateType = (hasShareFlowV2 && isTertiary) ? 'shares' : 'assign-and-shares';\n\n const loaded = sharedData.loaded && !!previousShares.data && !!classrooms.data;\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={!loaded}\n closePopup={props.closePopup}\n >\n {!assignments.length &&\n <ShowAssignmentsEmptyState\n assignAppLink={AssignAppLinkHelper.flowSelector({ entityType: props.entityType, objectId: props.objectId })}\n shareAppLink={{\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [props.objectId],\n params: {\n entityType: props.entityType\n }\n }}\n type={emptyStateType}\n hideAssignButton={AssignHelper.hideAssignButtonOnVideoActions(sharedData.currentUser.data)}\n />\n }\n \n {!!assignments.length &&\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList\n assignments={assignments.reverse()}\n classrooms={classrooms.data}\n getItemAppLink={getItemAppLink}\n scrollHeightMax={MAX_SCROLL_HEIGHT}\n />\n </>\n }\n <FlowControls\n hideNextButton\n hideCreateClassroomButton\n onClickBack={props.closePopup}\n backButtonText={getPhrase('close')}\n leftComponent={!!analyticsUrl && canViewSchoolAnalytics && <ViewInSchoolAnalyticsButton href={analyticsUrl} />}\n />\n </Popup>\n );\n}","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["getPhrase","icons","iconColours","shareTypeTitlePhraseMap","ShareAvatar","props","title","type","classroomName","additionalTitleText","openClassroomName","getTitle","className","svgName","variant","textVariant","svgWrapperClassName","svgSize","S","titleClassName","hideSubtitle","subtitleText","privacy","studentCount","classroomGroupCount","smartCount","getClassroomSubtitle","includes","getLinkSubtitle","getSubtitle","SharePrivacy","ShareViewHelper","canEmbed","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","filter","i","enabled","map","id","getShareSettingsInitialValues","share","interactive","preventScrubbing","options","immediateFeedback","getEnabledSettingsField","entityType","showImmediateFeedbackField","showPreventScrubbingField","getSharableEntityType","objectTypeId","getFetchFunctionByType","getAnalyticsEntity","getAnalyticsOptions","IntegrationId","IntegrationHelper","getShareIntegrations","name","settingName","FlowControls","hideBackButton","onClickBack","hideNextButton","onClickNext","hideCreateClassroomButton","onClickCreateClassroom","leftComponent","onClick","text","backButtonText","nextButtonTooltip","disable","placement","spanHack","nextButtonText","disabled","disableNextButton","showSpinner","namespace","ShareViewCount","MasterType","Text","phrase","viewCount","ShareViewedByCount","SvgContainer","shareAccessCount","accessCount","ShareType","totalRecipients","recipients","length","getViewCount","PreviousAssignmentsHeader","show","count","IconButton","onToggle","PreviousAssignmentsListHeader","columnClassNames","value","Row","Col","xs","PreviousAssignmentListItem","shareClassroom","ShareHelper","classrooms","analytics","getItemAnalytics","AppLink","key","shareId","appLink","getItemAppLink","analyticsData","data","analyticsOptions","lg","dateCreated","PreviousAssignmentsList","autoHeight","autoHeightMin","autoHeightMax","scrollHeightMax","autoHide","assignments","idx","PreviousAssignments","noBottomPadding","useAssignSharedData","currentUser","entity","objectId","config","interactiveId","hasPermissions","isLoaded","hasStudentExp","canCreateClassrooms","loaded","LanguageService","SharesAndAssignmentsEmptyState","EmptyState","size","src","ImageUrls","hideAssignButton","icon","assignAppLink","shareLinkAppLink","SharesEmptyState","MAX_SCROLL_HEIGHT","sortByDateCreated","a","b","DateHelper","ViewInSchoolAnalyticsButton","href","target","ShowAssignmentsEmptyState","shareAppLink","ShowAssignmentsView","sharedData","usePermissions","hasShareFlowV2","useSettings","isTertiary","useIsTertiary","previousShares","ShareRequests","sort","previousAssignmentClassroomIds","ArrayHelper","x","hasCompleted","ClassroomRequests","customerId","analyticsUrl","AnalyticsRouteHelper","analyticsWebUrl","canViewSchoolAnalytics","PermissionName","emptyStateType","Popup","showLoadingSpinner","closePopup","AssignAppLinkHelper","application","action","args","params","AssignHelper","reverse","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","toString","unit"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4598],{54405:(e,a,t)=>{t.d(a,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},18006:(e,a,t)=>{t.d(a,{A:()=>n});var n="GRWx6w"},9566:(e,a,t)=>{t.d(a,{$Z:()=>p,G6:()=>m,GJ:()=>g,VE:()=>f,_w:()=>v,po:()=>y,vJ:()=>h});var n=t(23481),i=t(110),r=t(33518),s=t(2510),o=t(4594),c=t(35223),d=t(14070),l=t(97291),u=n.T.encloseNamespace("myShares.demoInsights"),m={type:s.y.Link,privacy:r.e.JustMySchool,objectId:"0",objectTypeId:o.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},v=Object.assign(Object.assign({},m),{type:s.y.Open,expireDate:i.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:r.e.PinCode}),g={share:m,sharedObject:null,shareRecipients:null,dateShared:i.O.subtract(new Date,7,"days").toISOString()},p=Object.assign(Object.assign({},g),{share:v}),h={application:l.O.MY_SHARES,action:d.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},y={application:l.O.MY_SHARES,action:d.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},f={svgName:c.vn.Analytics,label:u("demoInsights"),appLink:h,group:"insights",className:"btn btn-outline-dark"}},44183:(e,a,t)=>{t.r(a),t.d(a,{InsightsHeatmapDemoView:()=>j});var n=t(32735),i=t(23481),r=t(2948),s=t(20354),o=t(26025),c=t(2510),d=t(60051),l=t(39151),u=t(54405),m=t(47812),v=t(31949),g=t(93322),p=t(79612),h=t(86702),y=t(9540),f=t(17132),b=t(18006),O=t(9566),S=t(10447);function k(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var w=i.T.encloseNamespace("shared.insightsHeatmap");function j(e){var a,t,i,j,E,I,A,D,R=(A=(0,r.D)(h.y.ANONYMISE_USERS),D=1,function(e){if(Array.isArray(e))return e}(A)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,i,r,s,o=[],c=!0,d=!1;try{if(r=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;c=!1}else for(;!(c=(n=r.call(t)).done)&&(o.push(n.value),o.length!==a);c=!0);}catch(e){d=!0,i=e}finally{try{if(!c&&null!=t.return&&(s=t.return(),Object(s)!==s))return}finally{if(d)throw i}}return o}}(A,D)||function(e,a){if(e){if("string"==typeof e)return k(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?k(e,a):void 0}}(A,D)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,g.F)();var _=s.a.useBasicFetch(v.N.currentUser()),C=s.a.useBasicFetch(u.X.interactiveMetadata()),M=s.a.useBasicFetch(l.L.config()),N=o.B.getAudienceAppLinkParams(),V=o.B.getDateRangeAppLinkParams(),B=s.a.useBasicFetch(u.X.aggregateHeatmap()),F=s.a.useBasicFetch(u.X.individualHeatmap()),L=s.a.useBasicFetch(u.X.users()),T=s.a.useBasicFetch(u.X.videoViews()),H=s.a.useBasicFetch(C.data&&m.k.createViewKey(b.A,d.f.Share));(0,p.M)({title:C.data?w("pageTitle",{video:null===(a=C.data)||void 0===a?void 0:a.name}):null});var z=!!(_.data&&T.data&&C.data&&B.data&&H.data&&L.data),G=!!F.data,U=Object.assign(Object.assign({},N),V),X=e.type===c.y.Open?O._w:O.G6;return n.createElement("div",{className:"px-3"},n.createElement(y.j,{video:C.data,tabs:(0,S.aq)(null===(t=C.data)||void 0===t?void 0:t.id,"heatmap",U,e.type),dateRangeAppLinkParams:V,share:Object.assign(Object.assign({},X),{objectId:null!==(j=null===(i=C.data)||void 0===i?void 0:i.id)&&void 0!==j?j:"0"}),yearGroups:[],markingRequired:e.type!==c.y.Open,isDemo:!0,hasData:!0}),n.createElement(f.w,{aggregateEngagement:B.data,individualEngagement:null===(E=F.data)||void 0===E?void 0:E.data,yearGroups:null===(I=T.data)||void 0===I?void 0:I.yearGroupCount,config:M.data,users:L.data,viewKey:H.data,hasDataLoaded:z,tableDataLoaded:G,anonymiseUsers:R,hideStaffResults:!1}))}}}]);
2
+ //# sourceMappingURL=4598-8f5266e4c2-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4598-8f5266e4c2-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/heatmap/InsightsHeatmapDemoView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","export const DEMO_INTERACTIVE_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapDemoViewProps {\n type?: ShareType;\n}\n\nexport function InsightsHeatmapDemoView(props: InsightsHeatmapDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(DEMO_INTERACTIVE_ID, MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params, props.type)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: video.data?.id ?? '0'\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n hideStaffResults={false}\n />\n </div>\n );\n}"],"names":["InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INTERACTIVE_ID","getPhrase","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","svgName","label","appLink","group","className","InsightsHeatmapDemoView","props","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","data","title","name","hasDataLoaded","tableDataLoaded","params","tabs","id","yearGroups","markingRequired","isDemo","hasData","yearGroupCount","hideStaffResults"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4621],{60115:(e,t,a)=>{a.d(t,{K:()=>c});var r=a(32735),n=a(50242),o=a(91967),l=400,s=a(45719);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function c(e,t,a,c,u,m){var d,g,p,v,f=(d=(0,r.useState)(0),g=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,o,l,s=[],i=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;i=!1}else for(;!(i=(r=o.call(a)).done)&&(s.push(r.value),s.length!==t);i=!0);}catch(e){c=!0,n=e}finally{try{if(!i&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(c)throw n}}return s}}(d,g)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(d,g)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=f[0],E=f[1],C=t,N=(0,s.P)(function(t){if(!e)return null;var a=e(t);return a?a.key:null},c,u);return p={fetchNextPage:function(){if(t&&e&&N)return E(function(e){return e+1}),C(N.nextCursor)},hasMore:!!(null==N?void 0:N.nextCursor),isFetching:null==N?void 0:N.isFetching,scrollContainer:m},v=function(){if(!p.isFetching){if(p.scrollContainer){var e=p.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-l)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-l)return;p.fetchNextPage()}},(0,r.useEffect)(function(){var e=o.q.throttle(v,200),t=p.scrollContainer||window;return p.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[p.hasMore,p.fetchNextPage,p.scrollContainer]),(0,r.useEffect)(function(){N&&N.shouldInitialFetch&&t&&(C(),E(function(e){return e+1}))},[null==N?void 0:N.shouldInitialFetch,t]),(0,r.useEffect)(function(){var e,t;if((null==N?void 0:N.statusCode)&&o.q.isFunction(a)){var r=+(null===(t=null===(e=N.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==n.k.ClientError&&r!==n.k.ServerError||a(h,N.statusCode)}},[null==N?void 0:N.statusCode]),{items:null==N?void 0:N.items,hasMore:!!(null==N?void 0:N.nextCursor),nextCursor:null==N?void 0:N.nextCursor,isFetching:null==N?void 0:N.isFetching,totalItems:null==N?void 0:N.totalItems,hasFirstPageCompleted:null==N?void 0:N.hasFirstPageCompleted}}},36511:(e,t,a)=>{a.d(t,{I:()=>n});var r=a(56644);function n(e){switch(e){case r.R.Pink:return"pink";case r.R.Orange:return"orange";case r.R.Green:return"green";case r.R.Blue:return"blue";case r.R.Purple:return"purple";case r.R.Indigo:return"indigo";default:return"pink"}}},73477:(e,t,a)=>{a.r(t),a.d(t,{ClassroomGroupsView:()=>K});var r=a(32735),n=a(70680),o=a(23481),l=a(20354),s=a(87801),i=a(39151),c=a(31949),u=a(79612),m=a(37802),d=a(97958),g=a(83345),p=a(35223),v=a(99742),f=a(14070),h=a(97291),E="classrooms.manageClassroomGroupsEmptyState";function C(e){return r.createElement(g.D.Provider,{value:E},r.createElement(d.u,null,r.createElement(d.u.Image,{src:v.W.EmptyStates.Classrooms.GROUPS}),r.createElement(d.u.Heading,null,r.createElement(g.x,{phrase:"heading"})),r.createElement(d.u.Info,null,r.createElement(g.x,{phrase:"info"})),r.createElement(d.u.Cta,{text:o.T.getPhrase(E,"addGroups"),icon:p.vn.Plus,appLink:{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e.classroomId]}})))}var N=a(49985),k=a(65858),b=a(91693),y=a(86764),w=a(3747),S=a(81886),x=a(11607),F=a(12528),P=a(83914),G=a(36511);const I={colourColumn:"B2Gwz",groupContainer:"RXaVm"};var O=o.T.encloseNamespace("classrooms.manageClassroomGroupItem");function L(e){var t;return r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center px-3 py-1"},r.createElement("div",{className:"".concat(I.colourColumn," flex-shrink-0 me-2")},r.createElement("div",{className:"".concat(I.groupContainer)},r.createElement(F.f,{svgName:p.vn.Group,variant:(0,G.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour)}))),r.createElement("p",{className:"mb-0 me-auto clamp-2"},e.group.name),r.createElement(x.L,{className:"me-2",onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Edit,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.EDIT_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Edit,title:O("editGroup"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(x.L,{onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Delete,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.DELETE_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Delete,title:O("deleteGroup"),tooltipPlacement:"top",tooltipSpanHack:!0}))))}const R={colourColumn:"TpyUA"};var T="classrooms.manageClassroomGroups",A=function(e){return{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e]}};function M(e){var t,a,n=(0,w.a)(y.r.XLDown);return(null===(t=e.groups)||void 0===t?void 0:t.length)?r.createElement(g.D.Provider,{value:T},r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center mb-2 ".concat(n?"":"ps-3")},r.createElement("h2",{className:"h6 mb-0 me-2 ".concat(R.colourColumn)},r.createElement(g.x,{phrase:"colour"})),r.createElement("h2",{className:"h6 mb-0"},r.createElement(g.x,{phrase:"groupName"})),r.createElement(b.h,{appLink:A(e.classroom.id),onClick:function(){N.k.logUserAction({classroomId:e.classroom.id,classroomName:e.classroom.name},{workflowPhase:k.eu.Start,entity:k.py.ClassroomGroup,actionType:k.Vw.Create,location:k.LZ.ManageClassroomGroups})},className:"btn btn-outline-dark ms-auto",svgName:p.vn.Plus},r.createElement(g.x,{phrase:"createNew"}))),r.createElement("ul",{className:"striped-list list-unstyled"},!!(null===(a=e.groups)||void 0===a?void 0:a.length)&&e.groups.map(function(t){return r.createElement("li",{key:t.id},r.createElement(L,{classroom:e.classroom,group:t}))})))):r.createElement(C,{classroomId:e.classroom.id})}var U=a(49935),H=a(95278);const _={heading:"bhtoZ",nameHeading:"vytHM",colourHeading:"yLWgp",newGroup:"r5cCZ",group:"ED2Tj",colourPicker:"AYLSY",actionIcon:"BX3vN"};function V(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat(_.heading)}),r.createElement("div",{className:"pb-3"},r.createElement(U.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(H.Z,null)),r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.nameHeading)})),r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourHeading)})),r.createElement("div",{className:"partial-loading-background ms-auto ".concat(_.newGroup)})),r.createElement("ul",{className:"list-unstyled"},Array(8).fill(null).map(function(e,t){return r.createElement("li",{key:t,className:"mb-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat(_.group)})),r.createElement("div",{className:"d-inline-block me-4"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourPicker)})),r.createElement("div",{className:"partial-loading-background me-2 ".concat(_.actionIcon)}),r.createElement("div",{className:"partial-loading-background ".concat(_.actionIcon)})))}))))}var B=a(88630),D=a(94644),j=a(69883),Z=a(60115),W=function(e){var t=l.a.useBasicFetch(c.N.currentUser()),a=(0,j.Z)(),r=(0,n.I0)(),s=function(t){return B.F.getClassroomGroups(e,t)},i=function(e){return l.a.getFetch(r)(s(e))},u=(0,Z.K)(!(!t.data||!e)&&s,i,function(e,t){if(1===e)return(0,D.r)(t);a.error(o.T.getPhrase("classrooms.hooks","error"))},function(e){return e.data});return Object.assign(Object.assign({},u),{fetchNext:i})},X=a(31491),$=a(22602),q=o.T.encloseNamespace("classrooms.classroomGroups");function K(e){var t,a,o,d,g,p=(0,m.r)(null).hasShareFlowV2,v=l.a.useBasicFetch(c.N.currentUser()),f=l.a.useBasicFetch(v.data&&B.F.getClassroom(e.id,v.data.id)),h=l.a.useBasicFetch(B.F.getClassroomStudents(e.id)),E=l.a.useBasicFetch(i.L.config()),N=W(null===(t=f.data)||void 0===t?void 0:t.id),k=(0,n.I0)();(0,u.M)({title:q("pageTitle",{classroomName:null===(a=f.data)||void 0===a?void 0:a.name})}),(0,X._)(f);var b=null===(d=null===(o=f.data)||void 0===o?void 0:o._integrations)||void 0===d?void 0:d.rostered;return f.data&&(null===(g=h.data)||void 0===g?void 0:g.data)&&N.items&&E.data?r.createElement($.R,{classroom:f.data,currentUser:v.data,onTogglePin:function(e,t,a){if(!b){var r=e?B.F.pinClassroom:B.F.unpinClassroom;l.a.fetch(k,r(f.data,t,a))}},activeTab:"groups",isRostered:b,hasShareFlowV2:p},(null==N?void 0:N.items.length)?r.createElement(r.Fragment,null,r.createElement(M,{classroom:f.data,groups:N.items}),(N.isFetching||N.nextCursor)&&r.createElement(s._,{isFetching:N.isFetching,fetchNext:N.fetchNext,nextCursor:N.nextCursor})):r.createElement(C,{classroomId:f.data.id})):r.createElement(V,null)}},99998:(e,t,a)=>{a.d(t,{R:()=>l});var r=a(16714),n=a(22902),o=a(37802);function l(){var e=(0,o.r)(null),t=e.hasShareFlowV2,a=e.hasClassrooms,l=e.isLoadingSettings,s=(0,n.T)(),i=s.hasPermissions,c=s.isLoaded,u=s.getGatedPermission;return{experience:a?"soft-gate"===u(r.C.ViewClassrooms)?"minimal":i(r.C.ViewClassrooms)?"full":t?"minimal":void 0:"none",loading:l||!c}}}}]);
2
- //# sourceMappingURL=4621-1f79d94416-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4621],{60115:(e,t,a)=>{a.d(t,{K:()=>c});var r=a(32735),n=a(50242),o=a(91967),l=400,s=a(45719);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function c(e,t,a,c,u,m){var d,g,p,v,f=(d=(0,r.useState)(0),g=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,o,l,s=[],i=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;i=!1}else for(;!(i=(r=o.call(a)).done)&&(s.push(r.value),s.length!==t);i=!0);}catch(e){c=!0,n=e}finally{try{if(!i&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(c)throw n}}return s}}(d,g)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(d,g)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=f[0],E=f[1],C=t,N=(0,s.P)(function(t){if(!e)return null;var a=e(t);return a?a.key:null},c,u);return p={fetchNextPage:function(){if(t&&e&&N)return E(function(e){return e+1}),C(N.nextCursor)},hasMore:!!(null==N?void 0:N.nextCursor),isFetching:null==N?void 0:N.isFetching,scrollContainer:m},v=function(){if(!p.isFetching){if(p.scrollContainer){var e=p.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-l)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-l)return;p.fetchNextPage()}},(0,r.useEffect)(function(){var e=o.q.throttle(v,200),t=p.scrollContainer||window;return p.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[p.hasMore,p.fetchNextPage,p.scrollContainer]),(0,r.useEffect)(function(){N&&N.shouldInitialFetch&&t&&(C(),E(function(e){return e+1}))},[null==N?void 0:N.shouldInitialFetch,t]),(0,r.useEffect)(function(){var e,t;if((null==N?void 0:N.statusCode)&&o.q.isFunction(a)){var r=+(null===(t=null===(e=N.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==n.k.ClientError&&r!==n.k.ServerError||a(h,N.statusCode)}},[null==N?void 0:N.statusCode]),{items:null==N?void 0:N.items,hasMore:!!(null==N?void 0:N.nextCursor),nextCursor:null==N?void 0:N.nextCursor,isFetching:null==N?void 0:N.isFetching,totalItems:null==N?void 0:N.totalItems,hasFirstPageCompleted:null==N?void 0:N.hasFirstPageCompleted}}},36511:(e,t,a)=>{a.d(t,{I:()=>n});var r=a(56644);function n(e){switch(e){case r.R.Pink:return"pink";case r.R.Orange:return"orange";case r.R.Green:return"green";case r.R.Blue:return"blue";case r.R.Purple:return"purple";case r.R.Indigo:return"indigo";default:return"pink"}}},73477:(e,t,a)=>{a.r(t),a.d(t,{ClassroomGroupsView:()=>K});var r=a(32735),n=a(70680),o=a(23481),l=a(20354),s=a(87801),i=a(39151),c=a(31949),u=a(79612),m=a(37802),d=a(97958),g=a(83345),p=a(35223),v=a(99742),f=a(14070),h=a(97291),E="classrooms.manageClassroomGroupsEmptyState";function C(e){return r.createElement(g.D.Provider,{value:E},r.createElement(d.u,null,r.createElement(d.u.Image,{src:v.W.EmptyStates.Classrooms.GROUPS}),r.createElement(d.u.Heading,null,r.createElement(g.x,{phrase:"heading"})),r.createElement(d.u.Info,null,r.createElement(g.x,{phrase:"info"})),r.createElement(d.u.Cta,{text:o.T.getPhrase(E,"addGroups"),icon:p.vn.Plus,appLink:{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e.classroomId]}})))}var N=a(49985),k=a(65858),b=a(91693),y=a(86764),w=a(3747),S=a(81886),x=a(11607),F=a(12528),P=a(83914),I=a(36511);const G={colourColumn:"B2Gwz",groupContainer:"RXaVm"};var O=o.T.encloseNamespace("classrooms.manageClassroomGroupItem");function L(e){var t;return r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center px-3 py-1"},r.createElement("div",{className:"".concat(G.colourColumn," flex-shrink-0 me-2")},r.createElement("div",{className:"".concat(G.groupContainer)},r.createElement(F.f,{svgName:p.vn.Group,variant:(0,I.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour)}))),r.createElement("p",{className:"mb-0 me-auto clamp-2"},e.group.name),r.createElement(x.L,{className:"me-2",onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Edit,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.EDIT_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Edit,title:O("editGroup"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(x.L,{onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Delete,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.DELETE_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Delete,title:O("deleteGroup"),tooltipPlacement:"top",tooltipSpanHack:!0}))))}const R={colourColumn:"TpyUA"};var T="classrooms.manageClassroomGroups",A=function(e){return{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e]}};function M(e){var t,a,n=(0,w.a)(y.r.XLDown);return(null===(t=e.groups)||void 0===t?void 0:t.length)?r.createElement(g.D.Provider,{value:T},r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center mb-2 ".concat(n?"":"ps-3")},r.createElement("h2",{className:"h6 mb-0 me-2 ".concat(R.colourColumn)},r.createElement(g.x,{phrase:"colour"})),r.createElement("h2",{className:"h6 mb-0"},r.createElement(g.x,{phrase:"groupName"})),r.createElement(b.h,{appLink:A(e.classroom.id),onClick:function(){N.k.logUserAction({classroomId:e.classroom.id,classroomName:e.classroom.name},{workflowPhase:k.eu.Start,entity:k.py.ClassroomGroup,actionType:k.Vw.Create,location:k.LZ.ManageClassroomGroups})},className:"btn btn-outline-dark ms-auto",svgName:p.vn.Plus},r.createElement(g.x,{phrase:"createNew"}))),r.createElement("ul",{className:"striped-list list-unstyled"},!!(null===(a=e.groups)||void 0===a?void 0:a.length)&&e.groups.map(function(t){return r.createElement("li",{key:t.id},r.createElement(L,{classroom:e.classroom,group:t}))})))):r.createElement(C,{classroomId:e.classroom.id})}var U=a(49935),H=a(95278);const _={heading:"bhtoZ",nameHeading:"vytHM",colourHeading:"yLWgp",newGroup:"r5cCZ",group:"ED2Tj",colourPicker:"AYLSY",actionIcon:"BX3vN"};function B(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat(_.heading)}),r.createElement("div",{className:"pb-3"},r.createElement(U.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(H.Z,null)),r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.nameHeading)})),r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourHeading)})),r.createElement("div",{className:"partial-loading-background ms-auto ".concat(_.newGroup)})),r.createElement("ul",{className:"list-unstyled"},Array(8).fill(null).map(function(e,t){return r.createElement("li",{key:t,className:"mb-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat(_.group)})),r.createElement("div",{className:"d-inline-block me-4"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourPicker)})),r.createElement("div",{className:"partial-loading-background me-2 ".concat(_.actionIcon)}),r.createElement("div",{className:"partial-loading-background ".concat(_.actionIcon)})))}))))}var V=a(88630),D=a(94644),j=a(69883),Z=a(60115),W=function(e){var t=l.a.useBasicFetch(c.N.currentUser()),a=(0,j.Z)(),r=(0,n.I0)(),s=function(t){return V.F.getClassroomGroups(e,t)},i=function(e){return l.a.getFetch(r)(s(e))},u=(0,Z.K)(!(!t.data||!e)&&s,i,function(e,t){if(1===e)return(0,D.r)(t);a.error(o.T.getPhrase("classrooms.hooks","error"))},function(e){return e.data});return Object.assign(Object.assign({},u),{fetchNext:i})},X=a(31491),$=a(22602),q=o.T.encloseNamespace("classrooms.classroomGroups");function K(e){var t,a,o,d,g,p=(0,m.r)(null).hasShareFlowV2,v=l.a.useBasicFetch(c.N.currentUser()),f=l.a.useBasicFetch(v.data&&V.F.getClassroom(e.id,v.data.id)),h=l.a.useBasicFetch(V.F.getClassroomStudents(e.id)),E=l.a.useBasicFetch(i.L.config()),N=W(null===(t=f.data)||void 0===t?void 0:t.id),k=(0,n.I0)();(0,u.M)({title:q("pageTitle",{classroomName:null===(a=f.data)||void 0===a?void 0:a.name})}),(0,X._)(f);var b=null===(d=null===(o=f.data)||void 0===o?void 0:o._integrations)||void 0===d?void 0:d.rostered;return f.data&&(null===(g=h.data)||void 0===g?void 0:g.data)&&N.items&&E.data?r.createElement($.R,{classroom:f.data,currentUser:v.data,onTogglePin:function(e,t,a){if(!b){var r=e?V.F.pinClassroom:V.F.unpinClassroom;l.a.fetch(k,r(f.data,t,a))}},activeTab:"groups",isRostered:b,hasShareFlowV2:p},(null==N?void 0:N.items.length)?r.createElement(r.Fragment,null,r.createElement(M,{classroom:f.data,groups:N.items}),(N.isFetching||N.nextCursor)&&r.createElement(s._,{isFetching:N.isFetching,fetchNext:N.fetchNext,nextCursor:N.nextCursor})):r.createElement(C,{classroomId:f.data.id})):r.createElement(B,null)}},99998:(e,t,a)=>{a.d(t,{R:()=>l});var r=a(16714),n=a(22902),o=a(37802);function l(){var e=(0,o.r)(null),t=e.hasShareFlowV2,a=e.hasClassrooms,l=e.isLoadingSettings,s=(0,n.T)(),i=s.hasPermissions,c=s.isLoaded;return{experience:a?i(r.C.ViewClassrooms)?"full":t?"minimal":void 0:"none",loading:l||!c}}}}]);
2
+ //# sourceMappingURL=4621-7fb0a05bcb-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4621-7fb0a05bcb-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/empty-state/ManageClassroomGroupsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-group-item/manage-classroom-group-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-group-item/ManageClassroomGroupItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/manage-classroom-groups.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/ManageClassroomGroups.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/partial-loading/partial-manage-classrooms-groups.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/partial-loading/PartialManageClassroomGroups.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useFetchClassroomGroups.ts","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-groups/ClassroomGroupsView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.manageClassroomGroupsEmptyState';\n\ninterface ManageClassroomGroupsEmptyStateProps {\n classroomId: string;\n}\n\nexport function RosteredClassroomGroupsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.GROUPS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='info' /></EmptyState.Info>\n\n {/* todo add kb link */}\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n \n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomGroupsEmptyState(props: ManageClassroomGroupsEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.GROUPS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addGroups')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [props.classroomId]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colourColumn\":\"B2Gwz\",\"groupContainer\":\"RXaVm\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './manage-classroom-group-item.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('classrooms.manageClassroomGroupItem');\n\ninterface ManageClassroomGroupItemProps {\n classroom: Classroom;\n group: ClassroomGroup;\n}\n\nexport function ManageClassroomGroupItem(props: ManageClassroomGroupItemProps): JSX.Element {\n function onClickEdit(): void {\n AnalyticsHelper.logUserAction({ id: props.group.id, name: props.group.name }, {\n entity: EntityType.ClassroomGroup,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Edit,\n location: LocationContext.ManageClassroomGroupListItem\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_GROUP,\n args: [ props.classroom.id, props.group.id ]\n });\n }\n\n function onClickDelete(): void {\n AnalyticsHelper.logUserAction({ id: props.group.id, name: props.group.name }, {\n entity: EntityType.ClassroomGroup,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Delete,\n location: LocationContext.ManageClassroomGroupListItem\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.DELETE_GROUP,\n args: [ props.classroom.id, props.group.id ]\n });\n }\n\n return (\n <>\n <div className='d-flex align-items-center px-3 py-1'>\n <div className={`${styles.colourColumn} flex-shrink-0 me-2`}>\n <div className={`${styles.groupContainer}`}>\n <IconCircle svgName={cvSvgLibrary.Group} variant={mapColourToBsVariant(props.group.metadata?.colour)} />\n </div>\n </div>\n\n <p className='mb-0 me-auto clamp-2'>{props.group.name}</p>\n\n <DivButton className='me-2' onClick={onClickEdit}>\n <SvgContainer\n svgName={cvSvgLibrary.Edit}\n title={getPhrase('editGroup')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n\n <DivButton onClick={onClickDelete}>\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={getPhrase('deleteGroup')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colourColumn\":\"TpyUA\"};","import * as React from 'react';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, ClassroomGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ManageClassroomGroupItem } from 'apps/classrooms/components/manage-classroom-group-item/ManageClassroomGroupItem';\n\nimport { ManageClassroomGroupsEmptyState } from './empty-state/ManageClassroomGroupsEmptyState';\n\nimport styles from './manage-classroom-groups.scss';\n\nconst namespace = 'classrooms.manageClassroomGroups';\n\nconst getCreateGroupAppLink = (id: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id]\n});\n\ninterface ManageClassroomGroupsProps {\n classroom: Classroom;\n groups: ClassroomGroup[];\n}\n\nexport function ManageClassroomGroups(props: ManageClassroomGroupsProps): JSX.Element {\n function onClickCreateGroup(): void {\n AnalyticsHelper.logUserAction({\n classroomId: props.classroom.id,\n classroomName: props.classroom.name\n }, {\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup,\n actionType: UserAction.Create,\n location: LocationContext.ManageClassroomGroups\n });\n }\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.groups?.length)\n return <ManageClassroomGroupsEmptyState classroomId={props.classroom.id} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='py-2'>\n <div className={`d-flex align-items-center mb-2 ${!isSmallScreen ? 'ps-3' : ''}`}>\n <h2 className={`h6 mb-0 me-2 ${styles.colourColumn}`}><Text phrase='colour' /></h2>\n <h2 className='h6 mb-0'><Text phrase='groupName' /></h2>\n <IconButton\n appLink={getCreateGroupAppLink(props.classroom.id)}\n onClick={onClickCreateGroup}\n className='btn btn-outline-dark ms-auto'\n svgName={cvSvgLibrary.Plus}\n >\n <Text phrase='createNew' />\n </IconButton>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {!!props.groups?.length && props.groups.map(group => (\n <li key={group.id}>\n <ManageClassroomGroupItem classroom={props.classroom} group={group} />\n </li>\n ))}\n </ul>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"bhtoZ\",\"nameHeading\":\"vytHM\",\"colourHeading\":\"yLWgp\",\"newGroup\":\"r5cCZ\",\"group\":\"ED2Tj\",\"colourPicker\":\"AYLSY\",\"actionIcon\":\"BX3vN\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classrooms-groups.scss';\n\nexport function PartialManageClassroomGroups(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='py-2'>\n <div className='d-flex align-items-center'>\n {/* Name heading */}\n <div className='w-25 mb-2'>\n <div className={`partial-loading-background ${styles.nameHeading}`} />\n </div>\n {/* Colour heading */}\n <div className='w-25 mb-2'>\n <div className={`partial-loading-background ${styles.colourHeading}`} />\n </div>\n\n {/* New group button */}\n <div className={`partial-loading-background ms-auto ${styles.newGroup}`} />\n </div>\n\n {/* List of partial group items */}\n <ul className='list-unstyled'>\n {Array(8).fill(null).map((group, i) => (\n <li key={i} className='mb-2'>\n <div className='d-flex align-items-center'>\n {/* Group name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.group}`} />\n </div>\n\n {/* Colour picker */}\n <div className='d-inline-block me-4'>\n <div className={`partial-loading-background ${styles.colourPicker}`} />\n </div>\n\n {/* Edit action */}\n <div className={`partial-loading-background me-2 ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`partial-loading-background ${styles.actionIcon}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}","import { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList, UseInfiniteListResult } from 'libs/shared/hooks/UseInfiniteList';\nimport { ClassroomGroup, ClassroomGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nconst namespace = 'classrooms.hooks';\n\nexport type GetClassroomsResponse = UseInfiniteListResult<ClassroomGroup> & {\n fetchNext: (cursor?: string) => void;\n};\n\nexport const useFetchClassroomGroups = (classroomId: string): GetClassroomsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const alerts = useAlerts();\n const dispatch = useDispatch();\n\n const getClassroomsRequest = (cursor?: string) => {\n return ClassroomRequests.getClassroomGroups(classroomId, cursor);\n };\n\n const fetchNextPage = (cursor?: string) => Flight.getFetch(dispatch)(getClassroomsRequest(cursor));\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const response = useInfiniteList<ClassroomGroup, ClassroomGroupCollection>(\n currentUser.data && classroomId ? getClassroomsRequest : false,\n fetchNextPage,\n onError,\n response => {\n return (response as ClassroomGroupCollection).data;\n }\n );\n\n return {\n ...response,\n fetchNext: fetchNextPage\n };\n};","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, Config, CurrentUser, UserCollection } from 'libs/shared/interfaces';\n\nimport { ManageClassroomGroupsEmptyState } from 'apps/classrooms/components/manage-classroom-groups/empty-state/ManageClassroomGroupsEmptyState';\nimport { ManageClassroomGroups } from 'apps/classrooms/components/manage-classroom-groups/ManageClassroomGroups';\nimport { PartialManageClassroomGroups } from 'apps/classrooms/components/manage-classroom-groups/partial-loading/PartialManageClassroomGroups';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useFetchClassroomGroups } from 'apps/classrooms/hooks/useFetchClassroomGroups';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomGroups';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomGroupsViewProps {\n id: string;\n}\n\nexport function ClassroomGroupsView(props: ClassroomGroupsViewProps): JSX.Element {\n const { hasShareFlowV2 } = useSettings(null);\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const students = Flight.useBasicFetch<UserCollection>(ClassroomRequests.getClassroomStudents(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const classroomGroupsResponse = useFetchClassroomGroups(classroom.data?.id);\n\n const dispatch = useDispatch();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n const isFetchingClassrooms =\n !classroom.data ||\n !students.data?.data ||\n !classroomGroupsResponse.items ||\n !config.data;\n\n if (isFetchingClassrooms)\n return <PartialManageClassroomGroups />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='groups'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n {classroomGroupsResponse?.items.length ? (\n <>\n <ManageClassroomGroups\n classroom={classroom.data}\n groups={classroomGroupsResponse.items}\n />\n {(classroomGroupsResponse.isFetching || classroomGroupsResponse.nextCursor) && (\n <InfiniteScrollFooter\n isFetching={classroomGroupsResponse.isFetching}\n fetchNext={classroomGroupsResponse.fetchNext}\n nextCursor={classroomGroupsResponse.nextCursor}\n />\n )}\n </>\n ) : <ManageClassroomGroupsEmptyState classroomId={classroom.data.id} />}\n </ClassroomLayout>\n );\n}\n","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\ntype ClassroomExperience = 'none' | 'minimal' | 'full';\n\nexport function useClassroomExperience() {\n const { hasShareFlowV2, hasClassrooms, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded } = usePermissions();\n\n function getExperience(): ClassroomExperience {\n if (!hasClassrooms)\n return 'none';\n\n if (hasPermissions(PermissionName.ViewClassrooms))\n return 'full';\n \n if (hasShareFlowV2)\n return 'minimal';\n }\n\n return {\n experience: getExperience(),\n loading: isLoadingSettings || !isLoaded\n };\n}"],"names":["SCROLL_TOLERANCE","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","key","fetchNextPage","currentVal","nextCursor","hasMore","isFetching","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","statusCode","httpStatusClass","toString","substr","HttpStatus","items","totalItems","hasFirstPageCompleted","mapColourToBsVariant","groupColour","namespace","ManageClassroomGroupsEmptyState","props","value","src","phrase","text","icon","appLink","application","action","args","classroomId","getPhrase","ManageClassroomGroupItem","className","IconCircle","svgName","variant","group","metadata","colour","name","DivButton","onClick","AnalyticsHelper","id","entity","workflowPhase","actionType","location","classroom","SvgContainer","title","tooltipPlacement","tooltipSpanHack","getCreateGroupAppLink","ManageClassroomGroups","isSmallScreen","groups","length","IconButton","classroomName","map","PartialManageClassroomGroups","numItems","PartialPillTabSelector","Array","fill","i","useFetchClassroomGroups","currentUser","UserRequests","alerts","dispatch","getClassroomsRequest","ClassroomRequests","data","pageNumber","httpStatus","error","ClassroomGroupsView","hasShareFlowV2","useSettings","students","config","ConfigRequests","classroomGroupsResponse","useSetPageMetadata","useHandleClassroomErrors","isRostered","_integrations","rostered","ClassroomLayout","onTogglePin","shouldPin","onSuccess","activeTab","InfiniteScrollFooter","useClassroomExperience","hasClassrooms","isLoadingSettings","hasPermissions","isLoaded","experience","loading"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4806],{34079:(e,t,n)=>{n.d(t,{O:()=>o});var r=n(32735),a=n(23481),l=n(40782),i=n(36532),s=a.T.encloseNamespace("interactives.pendingIndicator");function c(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function o(e){var t=e.title,n=e.showLabel,a=e.tooltipClassName,o=e.showIndicator,u=void 0===o||o,m=function(){return r.createElement("div",{className:c(e)},!!n&&r.createElement("em",null,s("pending")),!!u&&r.createElement(l.O,null))};return t?r.createElement(i.u,{title:t,spanHack:!0,spanHackClassName:a||"h-100 w-100 d-flex align-items-center"},r.createElement(m,null)):r.createElement(m,null)}},84806:(e,t,n)=>{n.d(t,{Ju:()=>Z,bB:()=>F,l8:()=>q,R7:()=>j,lE:()=>A,Fx:()=>H});var r=n(32735),a=n(23481),l=n(75896),i=n(34079),s=n(26136),c=n(39157),o=n(97364),u=n(77640),m=n(97408),d=n(40782),v=n(83914),f=n(80845),g=n(64818),p=n(26378),h=n(71151),w=n(93264),E=n(84120);function y(e){return e.duration?r.createElement(r.Fragment,null,e.interactive.timepoints.map(function(t,n){if(!t.interactions.length)return r.createElement(r.Fragment,null);var a,l,i=(a=t,l=e.selectedInteraction,a.interactions.find(function(e){return e.id===l.id})||a.interactions[0]),s=i.id===e.selectedInteraction.id,c=s?E.w.getTypeInfo(i.typeId).bgClassName:"bg-gray-500",o=t.visibleAt/1e3/e.duration*100;return r.createElement("div",{key:n,className:"".concat("Wf1bl"," text-center"),style:{left:"".concat(o,"%")}},r.createElement("div",{className:"".concat("Fpm49"," ").concat(c)}),!!s&&r.createElement("div",null,w.T.ToDisplayDuration(t.visibleAt)))})):r.createElement(r.Fragment,null)}var N=n(86572);var b=a.T.encloseNamespace("shared.interactionResultsSummary");function C(e){var t,n=r.useMemo(function(){return(0,c.nq)(e.interaction,e.results)},[e.interaction,e.results]);return r.createElement("div",{className:"px-1 pt-1"},r.createElement("div",{className:"d-flex"},r.createElement(N.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),r.createElement("div",{className:"my-4 ".concat("FCXQd")},r.createElement(y,{interactive:e.interactive,duration:(t=e.interactiveMetadata,t._parentClip?t._parentClip.endTime-t._parentClip.startTime:t._parentVideo.duration?t._parentVideo.duration/1e3:0),selectedInteraction:e.interaction})),r.createElement("div",{className:"row pt-1 pb-2"},r.createElement("div",{className:"col-6 pe-1"},r.createElement("div",{className:"bg-light rounded p-2 h-100"},!n.awaitingMarking&&r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("strong",null,b("correctlyAnswered")),r.createElement(d.O,{percentage:n.percentCorrect,layout:d.I.LabelOnly})),!!n.awaitingMarking&&r.createElement("div",{className:"d-flex align-items-center justify-content-center"},r.createElement("strong",null,r.createElement("em",null,b("pending")))))),r.createElement("div",{className:"col-6 ps-1"},r.createElement("div",{className:"bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between"},r.createElement("strong",null,b("unanswered")),r.createElement("span",null,n.unanswered)))))}var x=r.forwardRef(function(e,t){var n=e.interaction,a=e.interactive,l=e.interactiveMetadata,i=e.results,s=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n}(e,["interaction","interactive","interactiveMetadata","results"]);return r.createElement("div",{className:"popover-lg"},r.createElement(h.Z,Object.assign({id:"interaction-results-summary-".concat(n.id),ref:t},s),r.createElement(h.Z.Body,null,r.createElement(C,{interaction:n,interactive:a,interactiveMetadata:l,results:i}))))}),M=n(19912);function k(e){var t;return r.createElement(p.Z,{trigger:(null===(t=e.results.students)||void 0===t?void 0:t.length)?"click":null,placement:"bottom",overlay:r.createElement(x,{interaction:e.interaction,interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results}),rootClose:!0},r.createElement("div",{className:"text-center h-100\n d-flex align-items-center justify-content-center\n ".concat(M.Z.interactionHeaderCellInner),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave},r.createElement("div",{className:"p-1 position-relative"},e.interactionNumber)))}var I=n(28972),S=n(83140),R=n(35223);function U(e){var t="".concat(M.Z.resultsCellInner," h-100 position-relative");return e===I.w.Correct&&(t+=" ".concat(M.Z.correct)),e===I.w.Incorrect&&(t+=" ".concat(M.Z.incorrect," text-danger")),e===I.w.AwaitingMarking&&(t+=" ".concat(M.Z.awaitingMarking)),e===I.w.UnAnswered&&(t+=" ".concat(M.Z.unanswered," text-warning")),t}function B(e){var t=S.A.isInteractionCorrect(e.interaction,(0,f.j_)(e.studentResults)),n=function(e){return e===I.w.Correct?R.vn.Check:e===I.w.Incorrect?R.vn.Close:e===I.w.UnAnswered?R.vn.Minus:void 0}(t);return r.createElement("div",{className:U(t)},!!n&&r.createElement(v.x,{svgName:n}),t===I.w.AwaitingMarking&&r.createElement(i.O,null))}var O=a.T.encloseNamespace("shared.studentResultsTable"),Z=60;function T(e,t){var n;if(e.sessionId||e.deleted||t){var r=(0,s.B)(e,t).split(" ").filter(function(e){return!!e});return{name:r[0],surname:r.slice(1).join(" ")||"",avatarUrl:null}}return{name:e.displayName||e.name,surname:e.surname||"",avatarUrl:null===(n=e.avatar)||void 0===n?void 0:n.url}}function _(e){var t;return r.createElement("div",{className:"d-flex align-items-center p-2 h-100 ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function L(e){return r.createElement(_,{className:e.column.isSorted&&"fw-bold"},O(e.phraseKey))}function j(e,t,n,a){var l,c=!!(null===(l=e.students)||void 0===l?void 0:l.length);return r.useMemo(function(){var e=[];return a?e.push({id:"firstName",Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"firstName"})},accessor:function(e){return e},width:130,Cell:function(e){var a=e.value,l=T(a.user,t),i=l.name,s=l.surname,c=l.avatarUrl;return r.createElement(_,null,r.createElement("div",{className:"d-inline-block flex-shrink-0 p-1 ".concat(M.Z.avatar)},r.createElement(m.q,{imageUrl:c,imageCdnUrl:n,initials:g.l.getInitials(i,s),showAnonymousUser:!(t||!a.user.sessionId&&!a.user.deleted),anonymiseUsers:t,anonymousSvgSize:v.S.Small})),r.createElement("div",{className:"ms-2 overflow-hidden"},r.createElement("h4",{className:"font-size-normal fw-normal m-0 text-truncate"},i)))},disableSortBy:!c},{id:"surname",Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"surname"})},accessor:function(e){return e},width:130,Cell:function(e){var n=T(e.value.user,t).surname;return r.createElement(_,null,r.createElement("div",{className:"overflow-hidden"},r.createElement("h5",{className:"font-size-normal fw-normal m-0 text-truncate"},n||"")))},disableSortBy:!c}):e.push({id:"name",Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"name"})},accessor:function(e){return e},width:n?175:void 0,Cell:function(e){var a=e.value;return n?r.createElement(_,null,r.createElement(u.t,{user:a.user,imageCdnUrl:n,anonymiseUsers:t,detailsClassName:"ms-2 overflow-hidden",nameClassName:"text-truncate",showDisplayName:!0,avatarClassName:"p-1",showSubText:!1})):r.createElement(_,null,r.createElement("span",{className:"text-truncate"},(0,s.B)(a.user,t)))},disableSortBy:!c}),e.push({Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"unanswered"})},accessor:"summary.unanswered",sortType:"basic",sortDescFirst:!0,disableSortBy:!c,width:a?120:130,Cell:function(e){var t=e.value;return r.createElement(_,null,t)}},{Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"score"})},accessor:"summary",id:"score",Cell:function(e){var t=e.value;return t.awaitingMarking?r.createElement(_,null,r.createElement(i.O,{title:O("markingRequired"),className:"flex-grow-1",showLabel:!0,showIndicator:!a})):r.createElement(_,null,"".concat(t.correct,"/").concat(t.answered+t.unanswered))},width:a?80:125,sortDescFirst:!0,disableSortBy:!c},{Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"percentage"})},accessor:"summary",id:"percentage",Cell:function(e){var t=e.value;return t.awaitingMarking?r.createElement(_,null,r.createElement(i.O,{title:O("markingRequired"),className:"flex-grow-1",showLabel:!0})):r.createElement(_,null,r.createElement(d.O,{percentage:t.percentCorrect,layout:d.I.LabelBefore,className:"flex-grow-1"}))},width:125,sortDescFirst:!0,disableSortBy:!c}),e},[t,c])}function A(e,t,n,a,l){return r.useMemo(function(){return(0,f.Q)(e).map(function(l,i){return{Header:function(){return r.createElement(k,{interaction:l,results:n,interactive:e,interactiveMetadata:t,interactionNumber:i+1,onMouseEnter:function(){return a(i)},onMouseLeave:function(){return a(null)}})},accessor:"results",id:l.id,disableSortBy:!0,width:Z,Cell:function(e){var t=e.row.original;return r.createElement(B,{interaction:l,studentResults:t})}}})},[l])}function H(e,t,n,a,i,u,m){return r.useMemo(function(){var n=[];if(null==t||t.students.forEach(function(t){var r=(0,c.Rt)(e,t);u&&(0,o.C)(u,r)||n.push(Object.assign(Object.assign({},t),{summary:r}))}),"name"===(null==i?void 0:i.id)){var r=l.m.sortBy(n,function(e){return(0,s.B)(e.user,a)});return i.desc?r.reverse():r}if("firstName"===(null==i?void 0:i.id)){var m=l.m.sortBy(n,function(e){return T(e.user,a).name||"￿"});return i.desc?m.reverse():m}if("surname"===(null==i?void 0:i.id)){var d=l.m.sortBy(n,function(e){return T(e.user,a).surname||"￿"});return i.desc?d.reverse():d}if("summary.unanswered"===(null==i?void 0:i.id)){var v=l.m.sortBy(n,function(e){return e.summary.unanswered});return i.desc?v.reverse():v}if("score"===(null==i?void 0:i.id)||"percentage"===(null==i?void 0:i.id)){var f=l.m.sortBy(n,function(e){return e.summary.awaitingMarking?-1:e.summary.percentCorrect});return i.desc?f.reverse():f}return n},[n,i,a,u,m])}function F(e,t){if(e){var n=e.querySelectorAll(".".concat(M.Z.resultsRow));null==n||n.forEach(function(e){e.childNodes.forEach(function(e,n){e.classList.remove(M.Z.highlightColumn),n===t&&e.classList.add(M.Z.highlightColumn)})})}}function q(e,t){if(e){var n=e.querySelectorAll(".".concat(M.Z.resultsRow));null==n||n.forEach(function(e,n){e.classList.remove(M.Z.highlightResultsRow),n===t&&e.classList.add(M.Z.highlightResultsRow)})}}},97364:(e,t,n)=>{n.d(t,{C:()=>l,P:()=>a});var r=n(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function l(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},77640:(e,t,n)=>{n.d(t,{t:()=>f});var r=n(32735),a=n(23481),l=n(31453),i=n(26136),s=n(97408),c=n(83914),o=n(76881),u=n(86613),m=n(64818),d=n(26521),v=a.T.encloseNamespace("shared.userRecipientItemMetadata");function f(e){var t=function(e){var t,n=e.user,r=e.anonymiseUsers,a=e.showDisplayName;if(n.sessionId||n.deleted){var l=(0,i.B)(n,r),s=l.split(" ").filter(function(e){return!!e});return{name:l,surname:s.slice(1).join(" "),avatarUrl:null}}return{name:r?(0,i.B)(n,!0):a?m.l.getDisplayName(n):m.l.getFullName(n),surname:n.surname,avatarUrl:null===(t=n.avatar)||void 0===t?void 0:t.url}}(e),n=t.name,a=t.surname,f=t.avatarUrl;return r.createElement(r.Fragment,null,r.createElement("div",{className:"".concat(d.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block flex-shrink-0")},r.createElement(s.q,{imageUrl:f,imageCdnUrl:e.imageCdnUrl,initials:m.l.getInitials(n,a),showAnonymousUser:!(e.anonymiseUsers||!e.user.sessionId&&!e.user.deleted),anonymiseUsers:e.anonymiseUsers,anonymousSvgSize:c.S.Small})),r.createElement("div",{className:e.detailsClassName},r.createElement("h4",{className:(0,l.A)("font-size-normal fw-normal m-0",e.nameClassName)},n),e.showSubText&&"id"in e.user&&r.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=m.l.getUserType(e),n=m.l.getUserRole(e);if(t===o.Y.Staff)return n===u.i.Admin?v("admin"):v("staff");var r=m.l.getYearGroup(e);return(null==r?void 0:r.name)&&"Learners"!==r.name?r.name:v("student")}(e.user))))}f.defaults={showSubText:!0}},19912:(e,t,n)=>{n.d(t,{Z:()=>r});const r={header:"hnMke",avatar:"b7JCz",row:"ILLa_",fixedTable:"_fdpt",interactionHeaderCellOuter:"kjXYB",hasResults:"M4qgr",interactionHeaderCellInner:"cnFvB",resultsCellOuter:"bdzRb",correct:"xANR6",incorrect:"_44sb",awaitingMarking:"eQ9sh",unanswered:"xRUK8",highlightColumn:"f9Zqr",resultsCellInner:"LAFwi",highlightResultsRow:"TwwLO",resultsRow:"xZ5iP"}},26521:(e,t,n)=>{n.d(t,{Z:()=>r});const r={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}}}]);
2
+ //# sourceMappingURL=4806-a6f31d703c-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4806-a6f31d703c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interactions-bar/InteractionsBar.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interactions-bar/interactions-bar.scss","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/interaction-results-summary.scss","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/InteractionHeaderCell.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultCell.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/student-results-table.scss","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n showIndicator?: boolean;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const { title, showLabel, tooltipClassName, showIndicator = true } = props;\n\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n {!!showIndicator &&\n <PercentageIndicator />\n }\n </div>\n );\n\n if (!title)\n return <Indicator />;\n\n return (\n <Tooltip title={title} spanHack spanHackClassName={tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import React from 'react';\n\nimport { Interaction, Interactive, Timepoint } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\nimport { InteractionTypeHelper } from 'libs/shared/utils/interaction-type-helper/InteractionTypeHelper';\n\nimport styles from './interactions-bar.scss';\n\nfunction getInteraction(timepoint: Timepoint, selectedInteraction: Interaction): Interaction {\n return timepoint.interactions.find(i => i.id === selectedInteraction.id) || timepoint.interactions[0];\n}\n\ninterface InteractionBarProps {\n interactive: Interactive;\n duration: number;\n selectedInteraction: Interaction;\n}\n\nexport function InteractionsBar(props: InteractionBarProps): React.ReactElement {\n if (!props.duration)\n return <></>;\n\n return (\n <>\n {props.interactive.timepoints.map((t, i) => {\n if (!t.interactions.length)\n return <></>;\n\n const interaction = getInteraction(t, props.selectedInteraction);\n const isSelected = interaction.id === props.selectedInteraction.id;\n\n const bgClassName = isSelected ? (InteractionTypeHelper.getTypeInfo(interaction.typeId)).bgClassName : 'bg-gray-500';\n\n const left = ((t.visibleAt / 1000) / props.duration) * 100;\n\n return (\n <div\n key={i}\n className={`${styles.container} text-center`}\n style={{ left: `${left}%` }}\n >\n <div className={`${styles.interaction} ${bgClassName}`} />\n {!!isSelected &&\n <div>\n {DurationHelper.ToDisplayDuration(t.visibleAt)}\n </div>\n }\n </div>\n );\n })}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Wf1bl\",\"interaction\":\"Fpm49\"};","import React from 'react';\nimport { Popover } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionsBar } from 'libs/shared/apps/analytics/components/student-results/interactions-bar/InteractionsBar';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './interaction-results-summary.scss';\n\nconst namespace = 'shared.interactionResultsSummary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDuration(interactiveMetadata: InteractiveMetadata): number {\n if (interactiveMetadata._parentClip)\n return interactiveMetadata._parentClip.endTime - interactiveMetadata._parentClip.startTime;\n\n if (!interactiveMetadata._parentVideo.duration)\n return 0;\n\n return interactiveMetadata._parentVideo.duration / 1000;\n}\n\ninterface InteractionResultsSummaryProps {\n interaction: Interaction;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n}\n\nfunction InteractionResultsSummary(props: InteractionResultsSummaryProps): JSX.Element {\n const summary = React.useMemo(\n () => getInteractionResultsSummary(props.interaction, props.results),\n [ props.interaction, props.results ]\n );\n\n return (\n <div className='px-1 pt-1'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n <div className={`my-4 ${styles.bar}`}>\n <InteractionsBar\n interactive={props.interactive}\n duration={getDuration(props.interactiveMetadata)}\n selectedInteraction={props.interaction}\n />\n </div>\n <div className='row pt-1 pb-2'>\n <div className='col-6 pe-1'>\n <div className='bg-light rounded p-2 h-100'>\n {!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('correctlyAnswered')}</strong>\n <PercentageIndicator\n percentage={summary.percentCorrect}\n layout={PercentageIndicatorLayout.LabelOnly}\n />\n </div>\n }\n {!!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-center'>\n <strong>\n <em>{getPhrase('pending')}</em>\n </strong>\n </div>\n }\n </div>\n </div>\n <div className='col-6 ps-1'>\n <div className='bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('unanswered')}</strong>\n <span>{summary.unanswered}</span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nconst InteractionResultsSummaryPopover = React.forwardRef((\n { interaction, interactive, interactiveMetadata, results, ...popoverProps }: InteractionResultsSummaryProps,\n ref: React.MutableRefObject<HTMLElement>\n) => {\n return (\n <div className='popover-lg'>\n <Popover\n id={`interaction-results-summary-${interaction.id}`}\n ref={ref as any}\n {...popoverProps}\n >\n <Popover.Body>\n <InteractionResultsSummary\n interaction={interaction}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n results={results}\n />\n </Popover.Body>\n </Popover>\n </div>\n );\n});\n\nexport { InteractionResultsSummaryPopover as InteractionResultsSummary };","// extracted by mini-css-extract-plugin\nexport default {\"bar\":\"FCXQd\"};","import React from 'react';\nimport { OverlayTrigger } from 'react-bootstrap';\n\nimport { InteractionResultsSummary } from 'libs/shared/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary';\nimport { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './student-results-table.scss';\n\ninterface InteractionHeaderCellProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n interactionNumber: number;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport function InteractionHeaderCell(props: InteractionHeaderCellProps): JSX.Element {\n return (\n <OverlayTrigger\n trigger={props.results.students?.length ? 'click' : null}\n placement='bottom'\n overlay={\n <InteractionResultsSummary\n interaction={props.interaction}\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n />\n }\n rootClose\n >\n <div\n className={\n `text-center h-100\n d-flex align-items-center justify-content-center\n ${styles.interactionHeaderCellInner}`\n }\n onMouseEnter={props.onMouseEnter}\n onMouseLeave={props.onMouseLeave}\n >\n <div className='p-1 position-relative'>\n {props.interactionNumber}\n </div>\n </div>\n </OverlayTrigger>\n );\n}","import React from 'react';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { Interaction, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './student-results-table.scss';\n\nfunction getSvgName(correctness: InteractionCorrectness): string {\n if (correctness === InteractionCorrectness.Correct)\n return cvSvgLibrary.Check;\n\n if (correctness === InteractionCorrectness.Incorrect)\n return cvSvgLibrary.Close;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n return cvSvgLibrary.Minus;\n\n return;\n}\n\nfunction getClassName(correctness: InteractionCorrectness): string {\n let className = `${styles.resultsCellInner} h-100 position-relative`;\n\n if (correctness === InteractionCorrectness.Correct)\n className += ` ${styles.correct}`;\n\n if (correctness === InteractionCorrectness.Incorrect)\n className += ` ${styles.incorrect} text-danger`;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n className += ` ${styles.awaitingMarking}`;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n className += ` ${styles.unanswered} text-warning`;\n\n return className;\n}\n\ninterface StudentResultCellProps {\n interaction: Interaction;\n studentResults: StudentResults;\n}\n\nexport function StudentResultCell(props: StudentResultCellProps): JSX.Element {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n props.interaction,\n getStudentResult(props.studentResults)\n );\n\n const svgName = getSvgName(correctness);\n\n return (\n <div className={getClassName(correctness)}>\n {!!svgName && <SvgContainer svgName={svgName} />}\n {correctness === InteractionCorrectness.AwaitingMarking &&\n <PendingIndicator />\n }\n </div>\n );\n}","import React from 'react';\nimport { CellProps, Column, ColumnInstance, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, shouldFilterStudent } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InteractionHeaderCell } from './InteractionHeaderCell';\nimport { StudentResultCell } from './StudentResultCell';\n\nimport styles from './student-results-table.scss';\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const RESULTS_COL_WIDTH = 60;\n\nfunction getUserProps(user: AnonUser, anonymiseUsers: boolean) {\n if (user.sessionId || user.deleted || anonymiseUsers) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: nameParts[0],\n surname: nameParts.slice(1).join(' ') || '',\n avatarUrl: null\n };\n }\n\n return {\n name: user.displayName || user.name,\n surname: user.surname || '',\n avatarUrl: user.avatar?.url\n };\n}\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex align-items-center p-2 h-100 ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<StudentResultsWithSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function useGetFixedColumns(\n results: InteractiveResultSet,\n anonymiseUsers: boolean,\n imageCdnUrl?: string,\n showSeparateNameColumns?: boolean\n): Column<StudentResultsWithSummary>[] {\n const hasResults = !!results.students?.length;\n\n return React.useMemo(() => {\n const cols: Column<StudentResultsWithSummary>[] = [];\n\n if (showSeparateNameColumns) {\n // Add separate name and surname columns\n cols.push(\n {\n id: 'firstName',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='firstName' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n const { name, surname, avatarUrl } = getUserProps(value.user, anonymiseUsers);\n return (\n <CellWrapper>\n <div className={`d-inline-block flex-shrink-0 p-1 ${styles.avatar}`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!anonymiseUsers && (!!value.user.sessionId || !!value.user.deleted)}\n anonymiseUsers={anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n <div className='ms-2 overflow-hidden'>\n <h4 className='font-size-normal fw-normal m-0 text-truncate'>\n {name}\n </h4>\n </div>\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n },\n {\n id: 'surname',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='surname' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n const { surname } = getUserProps(value.user, anonymiseUsers);\n return (\n <CellWrapper>\n <div className='overflow-hidden'>\n <h5 className='font-size-normal fw-normal m-0 text-truncate'>\n {surname || ''}\n </h5>\n </div>\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n }\n );\n } else {\n // Add single name column (existing behavior)\n cols.push({\n id: 'name',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: imageCdnUrl ? 175 : undefined,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n if (!imageCdnUrl) {\n return (\n <CellWrapper>\n <span className='text-truncate'>{anonymiseUserName(value.user, anonymiseUsers)}</span>\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <UserRecipientItemMetadata\n user={value.user}\n imageCdnUrl={imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n detailsClassName='ms-2 overflow-hidden'\n nameClassName='text-truncate'\n showDisplayName\n avatarClassName='p-1'\n showSubText={false}\n />\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n });\n }\n\n cols.push(\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='unanswered' />,\n accessor: 'summary.unanswered' as keyof StudentResultsWithSummary,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n disableSortBy: !hasResults,\n width: showSeparateNameColumns ? 120 : 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, any>) => <CellWrapper>{value}</CellWrapper>\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'summary',\n id: 'score',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n showIndicator={!showSeparateNameColumns}\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n {`${value.correct}/${value.answered + value.unanswered}`}\n </CellWrapper>\n );\n },\n width: showSeparateNameColumns ? 80 : 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='percentage' />,\n accessor: 'summary',\n id: 'percentage',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <PercentageIndicator\n percentage={value.percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n className='flex-grow-1'\n />\n </CellWrapper>\n );\n },\n width: 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n }\n );\n\n return cols;\n }, [ anonymiseUsers, hasResults ]);\n}\n\n/**\n * Returns memoized table columns. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultColumns(\n interactive: Interactive,\n interactiveMetadata: InteractiveMetadata,\n results: InteractiveResultSet,\n onColumnHover: (index?: number) => void,\n refreshData: boolean\n): Column<StudentResultsWithSummary>[] {\n return React.useMemo(() => {\n const interactions = getInteractions(interactive);\n\n return interactions.map((interaction, index) => {\n const col: Column<StudentResultsWithSummary> = {\n Header: () => {\n return (\n <InteractionHeaderCell\n interaction={interaction}\n results={results}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n interactionNumber={index + 1}\n onMouseEnter={() => onColumnHover(index)}\n onMouseLeave={() => onColumnHover(null)}\n />\n );\n },\n accessor: 'results',\n /**\n * `onSelectStudentResponse` in `StudentResultsTable` expects the column id to the interaction id\n */\n id: interaction.id,\n disableSortBy: true,\n width: RESULTS_COL_WIDTH,\n Cell: ({ row: { original: studentResults } }) => (\n <StudentResultCell interaction={interaction} studentResults={studentResults} />\n )\n };\n return col;\n });\n }, [refreshData]);\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultsTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n anonymiseUsers: boolean,\n sortBy?: SortingRule<StudentResultsWithSummary>,\n filterBy?: FilterStudentsBy,\n showSeparateNameColumns?: boolean\n): StudentResultsWithSummary[] {\n return React.useMemo(() => {\n const students: StudentResultsWithSummary[] = [];\n\n results?.students.forEach(s => {\n const summary = getStudentResultsSummary(interactive, s);\n\n if (filterBy && shouldFilterStudent(filterBy, summary)) return;\n\n students.push({ ...s, summary });\n });\n\n if (sortBy?.id === 'name') {\n const sorted = ArrayHelper.sortBy(students, student => anonymiseUserName(student.user, anonymiseUsers));\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'firstName') {\n const sorted = ArrayHelper.sortBy(students, student => {\n const { name } = getUserProps(student.user, anonymiseUsers);\n return name || '\\uffff'; // Use high Unicode character to sort empty strings last\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'surname') {\n const sorted = ArrayHelper.sortBy(students, student => {\n const { surname } = getUserProps(student.user, anonymiseUsers);\n return surname || '\\uffff'; // Use high Unicode character to sort empty strings last\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'summary.unanswered') {\n const sorted = ArrayHelper.sortBy(students, student => student.summary.unanswered);\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'score' || sortBy?.id === 'percentage') {\n const sorted = ArrayHelper.sortBy(students, student => {\n if (student.summary.awaitingMarking)\n return -1;\n\n return student.summary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return students;\n }, [ refreshData, sortBy, anonymiseUsers, filterBy, showSeparateNameColumns ]);\n}\n\nexport function highlightColumns(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach(row => {\n row.childNodes.forEach((col: HTMLElement, colIdx: number) => {\n col.classList.remove(styles.highlightColumn);\n\n if (colIdx === highlightIndex)\n col.classList.add(styles.highlightColumn);\n });\n });\n}\n\nexport function highlightRows(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach((row, rowIdx) => {\n row.classList.remove(styles.highlightResultsRow);\n\n if (rowIdx === highlightIndex)\n row.classList.add(styles.highlightResultsRow);\n });\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: AnonUser,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if (user.sessionId || user.deleted) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: anonName,\n surname: nameParts.slice(1).join(' '),\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: AnonUser;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n nameClassName?: string;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block flex-shrink-0`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!props.anonymiseUsers && (!!props.user.sessionId || !!props.user.deleted)}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className={classNames('font-size-normal fw-normal m-0', props.nameClassName)}>\n {name}\n </h4>\n {props.showSubText && `id` in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"hnMke\",\"avatar\":\"b7JCz\",\"row\":\"ILLa_\",\"fixedTable\":\"_fdpt\",\"interactionHeaderCellOuter\":\"kjXYB\",\"hasResults\":\"M4qgr\",\"interactionHeaderCellInner\":\"cnFvB\",\"resultsCellOuter\":\"bdzRb\",\"correct\":\"xANR6\",\"incorrect\":\"_44sb\",\"awaitingMarking\":\"eQ9sh\",\"unanswered\":\"xRUK8\",\"highlightColumn\":\"f9Zqr\",\"resultsCellInner\":\"LAFwi\",\"highlightResultsRow\":\"TwwLO\",\"resultsRow\":\"xZ5iP\"};","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","title","tooltipClassName","showIndicator","Indicator","spanHack","spanHackClassName","InteractionsBar","duration","interactive","timepoints","map","t","i","interactions","length","timepoint","selectedInteraction","interaction","find","id","isSelected","bgClassName","InteractionTypeHelper","typeId","left","visibleAt","key","style","DurationHelper","LanguageService","InteractionResultsSummary","interactiveMetadata","summary","results","InteractionLabel","iconClassName","_parentClip","endTime","startTime","_parentVideo","awaitingMarking","PercentageIndicator","percentage","percentCorrect","layout","unanswered","InteractionResultsSummaryPopover","ref","popoverProps","Popover","InteractionHeaderCell","OverlayTrigger","trigger","students","placement","overlay","rootClose","onMouseEnter","onMouseLeave","interactionNumber","correctness","InteractionCorrectness","StudentResultCell","InteractiveCorrectnessHelper","studentResults","svgName","getSvgName","SvgContainer","RESULTS_COL_WIDTH","getUserProps","user","anonymiseUsers","sessionId","deleted","nameParts","split","filter","n","name","surname","slice","join","avatarUrl","displayName","avatar","url","CellWrapper","children","HeaderCell","column","isSorted","phraseKey","useGetFixedColumns","imageCdnUrl","showSeparateNameColumns","hasResults","cols","push","Header","accessor","u","width","Cell","value","Avatar","imageUrl","initials","UserHelper","showAnonymousUser","anonymousSvgSize","S","disableSortBy","undefined","UserRecipientItemMetadata","detailsClassName","nameClassName","showDisplayName","avatarClassName","showSubText","sortType","sortDescFirst","correct","answered","useGetResultColumns","onColumnHover","refreshData","index","row","original","useGetResultsTableData","sortBy","filterBy","forEach","s","sorted","ArrayHelper","student","desc","reverse","highlightColumns","tableEl","highlightIndex","rows","querySelectorAll","childNodes","col","colIdx","classList","remove","add","highlightRows","rowIdx","getSortStudents","shouldFilterStudent","anonName","getSubText","userType","role","yearGroup","defaults"],"sourceRoot":""}