@clickview/lite 0.70.1-dev.5 → 0.70.1-dev.6

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 (136) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{9583-lite-9eda71423d.chunk.css → 3878-lite-877e596a24.chunk.css} +3 -0
  3. package/dist/css/{5797-lite-1dfd2c337d.chunk.css → 5099-lite-7d7c063e62.chunk.css} +3 -0
  4. package/dist/css/{8191-lite-ee877f2ecd.chunk.css → 6984-lite-53c3fa4d18.chunk.css} +3 -0
  5. package/dist/css/{8723-lite-676baa8218.chunk.css → 7103-lite-ee0c975440.chunk.css} +3 -0
  6. package/dist/css/{7783-lite-1dfd2c337d.chunk.css → 7394-lite-7d7c063e62.chunk.css} +3 -0
  7. package/dist/css/7502-lite-9b2ed5bd56.chunk.css +4 -0
  8. package/dist/css/{5721-lite-9eda71423d.chunk.css → 7548-lite-877e596a24.chunk.css} +3 -0
  9. package/dist/css/{549-lite-b49bde8e4d.chunk.css → 7657-lite-ad909396f3.chunk.css} +3 -1
  10. package/dist/css/{6783-lite-e85973335b.chunk.css → 829-lite-27b58d07b3.chunk.css} +3 -0
  11. package/dist/css/{5635-lite-ee877f2ecd.chunk.css → 9673-lite-53c3fa4d18.chunk.css} +3 -0
  12. package/dist/scripts/1107-0fb4769540-lite.chunk.js +2 -0
  13. package/dist/scripts/1107-0fb4769540-lite.chunk.js.map +1 -0
  14. package/dist/scripts/1437-658ad1fe2b-lite.chunk.js +2 -0
  15. package/dist/scripts/1437-658ad1fe2b-lite.chunk.js.map +1 -0
  16. package/dist/scripts/1710-ef798f1e0d-lite.chunk.js +2 -0
  17. package/dist/scripts/1710-ef798f1e0d-lite.chunk.js.map +1 -0
  18. package/dist/scripts/2024-4fec8f175b-lite.chunk.js +2 -0
  19. package/dist/scripts/2024-4fec8f175b-lite.chunk.js.map +1 -0
  20. package/dist/scripts/2435-a846651e83-lite.chunk.js +2 -0
  21. package/dist/scripts/2435-a846651e83-lite.chunk.js.map +1 -0
  22. package/dist/scripts/2809-84ce060e14-lite.chunk.js +2 -0
  23. package/dist/scripts/2809-84ce060e14-lite.chunk.js.map +1 -0
  24. package/dist/scripts/3878-45fd0861cc-lite.chunk.js +2 -0
  25. package/dist/scripts/3878-45fd0861cc-lite.chunk.js.map +1 -0
  26. package/dist/scripts/4096-c834372efb-lite.chunk.js +2 -0
  27. package/dist/scripts/4096-c834372efb-lite.chunk.js.map +1 -0
  28. package/dist/scripts/4456-ada4977b41-lite.chunk.js +2 -0
  29. package/dist/scripts/4456-ada4977b41-lite.chunk.js.map +1 -0
  30. package/dist/scripts/4806-a05a2a3012-lite.chunk.js +2 -0
  31. package/dist/scripts/4806-a05a2a3012-lite.chunk.js.map +1 -0
  32. package/dist/scripts/5099-297f8cd028-lite.chunk.js +2 -0
  33. package/dist/scripts/5099-297f8cd028-lite.chunk.js.map +1 -0
  34. package/dist/scripts/5829-903613bbf0-lite.chunk.js +3 -0
  35. package/dist/scripts/5829-903613bbf0-lite.chunk.js.map +1 -0
  36. package/dist/scripts/5925-937fec8a93-lite.chunk.js +2 -0
  37. package/dist/scripts/5925-937fec8a93-lite.chunk.js.map +1 -0
  38. package/dist/scripts/6459-ac139cb154-lite.chunk.js +2 -0
  39. package/dist/scripts/6459-ac139cb154-lite.chunk.js.map +1 -0
  40. package/dist/scripts/6629-4edaed39c8-lite.chunk.js +3 -0
  41. package/dist/scripts/6629-4edaed39c8-lite.chunk.js.map +1 -0
  42. package/dist/scripts/6984-9d8b378bcc-lite.chunk.js +2 -0
  43. package/dist/scripts/6984-9d8b378bcc-lite.chunk.js.map +1 -0
  44. package/dist/scripts/7103-ef79582538-lite.chunk.js +2 -0
  45. package/dist/scripts/7103-ef79582538-lite.chunk.js.map +1 -0
  46. package/dist/scripts/7394-5448807e14-lite.chunk.js +2 -0
  47. package/dist/scripts/7394-5448807e14-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7502-78b085caad-lite.chunk.js +2 -0
  49. package/dist/scripts/7502-78b085caad-lite.chunk.js.map +1 -0
  50. package/dist/scripts/7548-5eb0d3b7a0-lite.chunk.js +2 -0
  51. package/dist/scripts/7548-5eb0d3b7a0-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7593-cc4e09c847-lite.chunk.js +2 -0
  53. package/dist/scripts/7593-cc4e09c847-lite.chunk.js.map +1 -0
  54. package/dist/scripts/7657-e302fda4f2-lite.chunk.js +2 -0
  55. package/dist/scripts/7657-e302fda4f2-lite.chunk.js.map +1 -0
  56. package/dist/scripts/8057-431c6be34c-lite.chunk.js +2 -0
  57. package/dist/scripts/8057-431c6be34c-lite.chunk.js.map +1 -0
  58. package/dist/scripts/8224-b9b5d3b1a5-lite.chunk.js +2 -0
  59. package/dist/scripts/8224-b9b5d3b1a5-lite.chunk.js.map +1 -0
  60. package/dist/scripts/829-aff9937989-lite.chunk.js +3 -0
  61. package/dist/scripts/829-aff9937989-lite.chunk.js.map +1 -0
  62. package/dist/scripts/{9250-ec244ab17a-lite.chunk.js → 8723-708f2373d6-lite.chunk.js} +3 -3
  63. package/dist/scripts/{9250-ec244ab17a-lite.chunk.js.map → 8723-708f2373d6-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/8960-c159492ba3-lite.chunk.js +2 -0
  65. package/dist/scripts/8960-c159492ba3-lite.chunk.js.map +1 -0
  66. package/dist/scripts/9673-8a2740611a-lite.chunk.js +2 -0
  67. package/dist/scripts/9673-8a2740611a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/9882-f1a9cc55ec-lite.chunk.js +2 -0
  69. package/dist/scripts/9882-f1a9cc55ec-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{bundle-d2cf17c78d.min.js → bundle-5a89651ec2.min.js} +3 -3
  71. package/dist/scripts/{bundle-d2cf17c78d.min.js.map → bundle-5a89651ec2.min.js.map} +1 -1
  72. package/package.json +1 -1
  73. package/dist/css/7428-lite-e2d7497beb.chunk.css +0 -8
  74. package/dist/scripts/1565-ba78a2a25c-lite.chunk.js +0 -2
  75. package/dist/scripts/1565-ba78a2a25c-lite.chunk.js.map +0 -1
  76. package/dist/scripts/2024-abf6cf1842-lite.chunk.js +0 -2
  77. package/dist/scripts/2024-abf6cf1842-lite.chunk.js.map +0 -1
  78. package/dist/scripts/2072-50b656cb3b-lite.chunk.js +0 -2
  79. package/dist/scripts/2072-50b656cb3b-lite.chunk.js.map +0 -1
  80. package/dist/scripts/2574-02faf4a2d2-lite.chunk.js +0 -2
  81. package/dist/scripts/2574-02faf4a2d2-lite.chunk.js.map +0 -1
  82. package/dist/scripts/396-2ffc09cc70-lite.chunk.js +0 -2
  83. package/dist/scripts/396-2ffc09cc70-lite.chunk.js.map +0 -1
  84. package/dist/scripts/4377-001a8ee263-lite.chunk.js +0 -2
  85. package/dist/scripts/4377-001a8ee263-lite.chunk.js.map +0 -1
  86. package/dist/scripts/4806-c2dce3650d-lite.chunk.js +0 -2
  87. package/dist/scripts/4806-c2dce3650d-lite.chunk.js.map +0 -1
  88. package/dist/scripts/4948-30af9a446d-lite.chunk.js +0 -2
  89. package/dist/scripts/4948-30af9a446d-lite.chunk.js.map +0 -1
  90. package/dist/scripts/549-2d591052e3-lite.chunk.js +0 -2
  91. package/dist/scripts/549-2d591052e3-lite.chunk.js.map +0 -1
  92. package/dist/scripts/5635-6e2559f04d-lite.chunk.js +0 -2
  93. package/dist/scripts/5635-6e2559f04d-lite.chunk.js.map +0 -1
  94. package/dist/scripts/5679-80c1d8434e-lite.chunk.js +0 -2
  95. package/dist/scripts/5679-80c1d8434e-lite.chunk.js.map +0 -1
  96. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js +0 -2
  97. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js.map +0 -1
  98. package/dist/scripts/5797-f84ce545b9-lite.chunk.js +0 -2
  99. package/dist/scripts/5797-f84ce545b9-lite.chunk.js.map +0 -1
  100. package/dist/scripts/581-fe733617bd-lite.chunk.js +0 -2
  101. package/dist/scripts/581-fe733617bd-lite.chunk.js.map +0 -1
  102. package/dist/scripts/5829-689f5be5d1-lite.chunk.js +0 -3
  103. package/dist/scripts/5829-689f5be5d1-lite.chunk.js.map +0 -1
  104. package/dist/scripts/6046-5652117548-lite.chunk.js +0 -2
  105. package/dist/scripts/6046-5652117548-lite.chunk.js.map +0 -1
  106. package/dist/scripts/6629-910e316a83-lite.chunk.js +0 -3
  107. package/dist/scripts/6629-910e316a83-lite.chunk.js.map +0 -1
  108. package/dist/scripts/6783-7efd15103a-lite.chunk.js +0 -3
  109. package/dist/scripts/6783-7efd15103a-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7064-f5e8bc71bc-lite.chunk.js +0 -2
  111. package/dist/scripts/7064-f5e8bc71bc-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7428-546d62999f-lite.chunk.js +0 -2
  113. package/dist/scripts/7428-546d62999f-lite.chunk.js.map +0 -1
  114. package/dist/scripts/7482-9016f79093-lite.chunk.js +0 -2
  115. package/dist/scripts/7482-9016f79093-lite.chunk.js.map +0 -1
  116. package/dist/scripts/7757-9b72774917-lite.chunk.js +0 -2
  117. package/dist/scripts/7757-9b72774917-lite.chunk.js.map +0 -1
  118. package/dist/scripts/7783-18da4064c0-lite.chunk.js +0 -2
  119. package/dist/scripts/7783-18da4064c0-lite.chunk.js.map +0 -1
  120. package/dist/scripts/8191-ff27deee6c-lite.chunk.js +0 -2
  121. package/dist/scripts/8191-ff27deee6c-lite.chunk.js.map +0 -1
  122. package/dist/scripts/8672-094d54cbbd-lite.chunk.js +0 -2
  123. package/dist/scripts/8672-094d54cbbd-lite.chunk.js.map +0 -1
  124. package/dist/scripts/8723-c3aaa1643a-lite.chunk.js +0 -2
  125. package/dist/scripts/8723-c3aaa1643a-lite.chunk.js.map +0 -1
  126. package/dist/scripts/9583-3b2623e754-lite.chunk.js +0 -2
  127. package/dist/scripts/9583-3b2623e754-lite.chunk.js.map +0 -1
  128. /package/dist/css/{4377-lite-856c02f000.chunk.css → 1107-lite-856c02f000.chunk.css} +0 -0
  129. /package/dist/css/{581-lite-a1cdc302ab.chunk.css → 1437-lite-a1cdc302ab.chunk.css} +0 -0
  130. /package/dist/css/{7757-lite-856c02f000.chunk.css → 4456-lite-856c02f000.chunk.css} +0 -0
  131. /package/dist/css/{9250-lite-37216d4207.chunk.css → 8723-lite-37216d4207.chunk.css} +0 -0
  132. /package/dist/scripts/{5829-689f5be5d1-lite.chunk.js.LICENSE.txt → 5829-903613bbf0-lite.chunk.js.LICENSE.txt} +0 -0
  133. /package/dist/scripts/{6629-910e316a83-lite.chunk.js.LICENSE.txt → 6629-4edaed39c8-lite.chunk.js.LICENSE.txt} +0 -0
  134. /package/dist/scripts/{6783-7efd15103a-lite.chunk.js.LICENSE.txt → 829-aff9937989-lite.chunk.js.LICENSE.txt} +0 -0
  135. /package/dist/scripts/{9250-ec244ab17a-lite.chunk.js.LICENSE.txt → 8723-708f2373d6-lite.chunk.js.LICENSE.txt} +0 -0
  136. /package/dist/scripts/{bundle-d2cf17c78d.min.js.LICENSE.txt → bundle-5a89651ec2.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/7593-cc4e09c847-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-header/InsightsHeader.tsx","file:///app/packages/projects/lite/src/apps/my-shares/utils/InsightsAppLinkUtils.ts","file:///app/packages/projects/lite/src/apps/share-v2/components/ShareAvatar.tsx","file:///app/packages/projects/lite/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/projects/lite/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/projects/lite/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/projects/lite/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\",\"thumbnailContainer\":\"d3CKN\",\"insightsMask\":\"KM76U\",\"requireMarking\":\"peLH7\",\"badge\":\"mVu0E\",\"bar\":\"zO3MS\",\"a\":\"K1jW5\",\"expandBar\":\"YITJl\",\"b\":\"tCpLF\",\"c\":\"lC0cq\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image, Playlist, Series } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst namespace = 'shared.sharedObjectImage';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction InsightsMask() {\n return (\n <div className={`d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center`}>\n <div className='position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3'></div>\n <div className='d-flex align-items-end gap-2 h-50 z-1'>\n <div className='d-flex align-items-end h-50'>\n <div className={`${styles.bar} ${styles.a} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-75'>\n <div className={`${styles.bar} ${styles.b} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-100'>\n <div className={`${styles.bar} ${styles.c} rounded shadow`}></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\nSharedObjectImage.defaultProps = {\n imageOptions: { size: ImageSize.Small }\n};\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n requireMarking?: number;\n imageOptions?: ImageOptions;\n showInsightsMask?: boolean;\n showCollectionMask?: boolean;\n showVideoCount?: boolean;\n thumbnailSize?: 'sm' | 'md';\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object);\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const metadataFlags = !props.showVideoMetadata ? {\n hideDuration: true,\n hideMask: true,\n hideRating: true,\n hideVideoTypeBadge: true\n } : {};\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <div className={`${styles.thumbnailContainer} position-relative`}>\n {props.showInsightsMask && <InsightsMask />}\n <AppLink appLink={props.appLink}>\n <VideoThumbnail\n video={props.object}\n size={props.thumbnailSize}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n {...metadataFlags}\n />\n </AppLink>\n {!!props.requireMarking && (\n <div className={`${props.showInsightsMask && styles.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`}>\n <div className={`${styles.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n </div>\n )}\n </div>\n }\n {!useVideoThumbnail &&\n <>\n {'videos' in (props.object as Playlist | Series) ? (\n <CollectionThumbnail\n collection={props.object}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n showMask={props.showCollectionMask}\n showVideoCount={props.showVideoCount}\n />\n ) : (\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n )}\n </>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classroom, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { ShareAvatar } from 'apps/share-v2/components/ShareAvatar';\nimport { ShareRequests } from 'apps/share-v2/flight-requests/ShareRequests';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\nimport { ShareLinkHelper } from 'apps/share-v2/utils/ShareLinkHelper';\n\nconst namespace = 'insights.header';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeaderProps {\n video: VideoTypes;\n hasClassrooms?: boolean;\n dateRangeAppLinkParams?: DateRangeQueryParams;\n tabs: PillTab[]\n isDemo?: boolean;\n analyticsWebUrl?: string;\n hasAnalytics?: boolean;\n hasShareFlowV2?: boolean;\n shareId?: string;\n}\n\nexport function InsightsHeader(props: InsightsHeaderProps) {\n const shareLink = Flight.useBasicFetch<ShareLink>(props.shareId && ShareRequests.getShareLink(props.shareId));\n const classRoomId = ShareLinkHelper.getClassroomId(shareLink.data);\n const classroom = Flight.useBasicFetch<Classroom>(classRoomId && ClassroomRequests.getClassroom(classRoomId));\n\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(\n SharedViewModelKeys.ANONYMISE_USERS,\n false,\n { storage: StorageType.LocalStorage }\n );\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [\n {\n name: 'Reports',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }\n },\n {\n name: props.video.name,\n active: true\n }\n ];\n }\n\n function getActions() {\n const actions = [{\n label: 'Edit time range',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n },\n {\n label: 'Edit audience',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n }];\n\n if (props.video?.typeId === MasterType.Interactive) {\n actions.push({\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n });\n }\n\n return actions;\n }\n\n function getShareInformationAppLink() {\n const actions: Partial<Record<MasterType, string>> = {\n [MasterType.Video]: Actions.Insights.VIDEO_SHARE_OPTIONS,\n [MasterType.Clip]: Actions.Insights.CLIP_SHARE_OPTIONS,\n [MasterType.Interactive]: Actions.Insights.INTERACTIVE_SHARE_OPTIONS\n };\n \n return {\n application: AppChannels.INSIGHTS,\n action: actions[props.video?.typeId],\n args: [props.video?.id],\n params: {\n shareId: props.shareId\n }\n };\n }\n\n return (\n <div>\n <section className='mb-4'>\n <div className='mb-3'>\n <div className='d-flex justify-content-between align-items-center mb-3'>\n {props.video\n ? <Breadcrumbs breadcrumbs={getBreadcrumbs()} />\n : <PartialBreadcrumbs />\n }\n <IconButton\n svgName={cvSvgLibrary.Info}\n appLink={getShareInformationAppLink()}\n className='btn btn-outline-dark ms-auto me-2'\n >\n Share information\n </IconButton>\n <ActionsDropdown\n dropdownToggleClassName='btn btn-outline-dark'\n actions={getActions()}\n />\n </div>\n </div>\n\n {props.video && (\n <div className='d-flex gap-3 mb-3'>\n <div style={{ minWidth: 140 }} className='d-flex flex-column'>\n <SharedObjectImage\n object={props.video}\n showVideoMetadata\n locationContext={LocationContext.Insights}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask\n showVideoCount\n appLink={getObjectAppLink(props.video)}\n />\n </div>\n <div className='d-flex flex-column pb-1'>\n <div className='d-flex align-items-center'>\n <a\n href={AppLinkHelper.getHref(getObjectAppLink(props.video))}\n className='cursor-pointer h4 mb-0 d-inline me-2'>\n {props.video.name}\n </a>\n <IconButton\n svgName={cvSvgLibrary.NewWindow}\n appLink={getObjectAppLink(props.video)}\n svgSize={SvgContainerSize.Small}\n className='d-inline-block'\n customSize\n />\n </div>\n <div className='flex-grow-1' />\n {shareLink.data && <ShareAvatar shareLink={shareLink?.data} classroomName={classroom.data?.name} />}\n </div>\n </div>\n )}\n\n <div className='d-flex align-items-center mb-4'>\n <PillTabSelector tabs={props.tabs} />\n <div className='flex-grow-1' />\n <div className='d-flex gap-3'>\n <label htmlFor='anonymiseNames' className='mb-0'><Text namespace={namespace} phrase='anonymiseNames' /></label>\n <ToggleSwitch id='anonymiseNames' on={anonymiseUsers} onClick={() => setAnonymiseUsers(!anonymiseUsers)} />\n </div>\n </div>\n </section>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.insightsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype InsightsTabs = 'insights' | 'heatmap' | 'results' | 'questions' | 'shareOptions' | 'videos';\n\nexport function getInsightsVideoTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n // {\n // name: 'Report',\n // active: active === 'shareOptions',\n // appLink: {\n // application: AppChannels.INSIGHTS,\n // action: Actions.Insights.VIDEO_SHARE_OPTIONS,\n // args: [id],\n // params\n // }\n // },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsClipTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n // {\n // name: 'Report',\n // active: active === 'shareOptions',\n // appLink: {\n // application: AppChannels.INSIGHTS,\n // action: Actions.Insights.CLIP_SHARE_OPTIONS,\n // args: [id],\n // params\n // }\n // },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsInteractiveTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_STUDENTS,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_QUESTIONS,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n // {\n // name: 'Report',\n // active: active === 'shareOptions',\n // appLink: {\n // application: AppChannels.INSIGHTS,\n // action: Actions.Insights.INTERACTIVE_SHARE_OPTIONS,\n // args: [id],\n // params\n // }\n // },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsDemoInteractiveTabs(id: string, active: InsightsTabs, params: HashObject) {\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\n args: [id],\n params\n }\n }\n ];\n}\n\nexport function getInsightsSeriesTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject\n) {\n const tabs = [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.SERIES_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n {\n name: 'Videos',\n active: active === 'videos',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.SERIES_VIDEOS,\n args: [id],\n params\n }\n }\n ];\n\n return tabs;\n}\n\nexport function getInsightsPlaylistTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject\n) {\n const tabs = [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.PLAYLIST_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n {\n name: 'Videos',\n active: active === 'videos',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.PLAYLIST_VIDEOS,\n args: [id],\n params\n }\n }\n ];\n\n return tabs;\n}","import React from 'react';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\nimport { ShareLink } from '../interfaces/ShareLink';\n\ninterface ShareAvatarProps {\n shareLink: Partial<ShareLink>;\n classroomName?: string;\n hideSubtitle?: boolean;\n svgSize?: SvgContainerSize;\n svgWrapperClassName?: string;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n return (\n <div className='d-flex align-items-center'>\n <div className='d-flex align-items-center justify-content-center'>\n <div>\n <IconCircle\n svgName={icons[props.shareLink.type]}\n variant={iconColours[props.shareLink.type]}\n textVariant='white'\n svgWrapperClassName={props.svgWrapperClassName ?? 'p-1'}\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column ms-2'>\n <label className='m-0'>{getTitle(props)}</label>\n {!props.hideSubtitle && <span className='text-secondary'>{getSubtitle(props)}</span>}\n </div>\n </div>\n </div>\n );\n}\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.School,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'teal',\n [ShareType.Live]: 'purple'\n};\n\nconst titles = {\n [ShareType.Open]: 'Open classroom',\n [ShareType.Link]: 'Link',\n [ShareType.Classroom]: 'Classroom',\n [ShareType.Live]: 'Live'\n};\n\nfunction pluralize(count: number, singular: string, plural: string) {\n return count === 1 ? singular : plural;\n}\n\nfunction getTitle({ shareLink, classroomName }: ShareAvatarProps) {\n if (shareLink.type === ShareType.Classroom && classroomName)\n return classroomName;\n\n return titles[shareLink.type];\n}\n\nfunction getSubtitle({ shareLink }: ShareAvatarProps) {\n if (shareLink.type === ShareType.Classroom) {\n const groupCount = shareLink.recipients?.filter(r => r.recipientTypeId === MasterType.ClassroomGroup).length ?? 0;\n const studentCount = shareLink.recipients?.filter(r => r.recipientTypeId === MasterType.User).length ?? 0;\n\n if (groupCount && studentCount)\n return `${groupCount} ${pluralize(groupCount, 'group', 'groups')}, ${studentCount} ${pluralize(studentCount, 'student', 'students')} can view`;\n\n if (groupCount)\n return `${groupCount} ${pluralize(groupCount, 'group', 'groups')} can view`;\n\n if (studentCount)\n return `${studentCount} ${pluralize(studentCount, 'student', 'students')} can view`;\n\n return `All students in classroom can view`;\n }\n\n if (shareLink.type === ShareType.Open)\n return 'Students watch using a PIN code';\n\n if (shareLink.type === ShareType.Link) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(shareLink.privacy))\n return 'Respect ratings and restrictions';\n\n if (shareLink.privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return 'Anyone in your school can view';\n\n if (shareLink.privacy === SharePrivacy.ProtectedOverrideRestriction)\n return 'Anyone signed into ClickView can view';\n\n if (shareLink.privacy === SharePrivacy.Public)\n return 'Anyone with a link can view';\n\n if (shareLink.privacy === SharePrivacy.PinCode)\n return 'Anyone with a PIN code can view';\n }\n\n if (shareLink.type === ShareType.Live)\n return 'Live now';\n\n return 'Anyone signed into ClickView can view';\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { CreateShareLinkRequest } from 'apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n limit?: number;\n objectTypeId?: MasterType | MasterType[];\n recipientUserId?: string | string[];\n recipientGroupId?: string | string[];\n start?: string;\n end?: string;\n scopeId?: string;\n}\n\nexport const ShareRequests = {\n createShareLink(\n data: CreateShareLinkRequest,\n success?: (shareLink: ShareLink) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '/api/share/v2/shares',\n key: 'create:share-v2:link',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [\n `share:link:object:${data.objectId}`,\n `privacy:${data.objectId}`,\n 'sent:shares',\n 'get:share-v2:shares:object'\n ],\n success,\n error,\n always\n };\n },\n\n getShareLink(\n shareId: string,\n success?: (shareLink: ShareLink) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}`,\n key: `get:share-v2:link:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSharesByObjectId(\n objectId: string | number,\n success?: (shares: ShareLink[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {},\n success?: (response: BasePaginatedCollection<ShareLink>[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const adaptedParams = {\n scopeId: params.scopeId,\n limit: params.limit || 25,\n offset: parseInt(params.cursor) || 0\n };\n\n const key = Object.values(adaptedParams).join(':');\n\n return {\n url: UrlHelper.urlBuilder('/api/share/v2/shares/sent', adaptedParams),\n key: `sent:shares-v2:${key}`,\n formatData: (response: ShareLink[]) => {\n return {\n data: response,\n count: response.length,\n pagination: {\n cursors: {\n next: adaptedParams.offset + response.length\n }\n }\n };\n },\n type: HttpVerbs.GET,\n normalize: false,\n success,\n error,\n always\n };\n },\n\n createPincode(shareId: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}/pincode`,\n key: 'create:share-v2:pincode',\n type: HttpVerbs.POST\n };\n },\n\n getPincode(code: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\nimport { ShareLink } from '../interfaces/ShareLink';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getClassroomId(shareLink: ShareLink | undefined): string {\n if (!shareLink)\n return '';\n\n if (shareLink.type !== ShareType.Classroom)\n return '';\n\n const classroom = shareLink.recipients?.find(r => r.recipientTypeId === MasterType.Classroom);\n\n if (classroom)\n return classroom.recipientId.toString();\n\n const recipientWithScope = shareLink.recipients?.find(r => r.scopeId);\n\n return recipientWithScope?.scopeId.toString() || '';\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","namespace","BASE_IMAGE_CLASS_NAME","InsightsMask","className","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","typeId","MasterType","useVideoThumbnail","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","type","svgContainerClassName","url","getBgColorClass","name","extraClasses","getImageProps","metadataFlags","showVideoMetadata","hideDuration","hideMask","hideRating","hideVideoTypeBadge","showInsightsMask","AppLink","VideoThumbnail","video","size","thumbnailSize","imageOptions","textPosition","ThumbnailTextPosition","requireMarking","Text","phrase","options","smartCount","CollectionThumbnail","collection","analyticsData","id","analyticsOptions","entity","ShareViewHelper","actionType","location","locationContext","showMask","showCollectionMask","showVideoCount","BaseImage","data","defaultProps","TabContents","tab","svgName","count","PillTabSelector","containerRef","borderRadius","listClassName","tabs","map","index","active","onClick","onSelect","onSelectTab","BaseCollectionThumbnailTitle","title","CollectionThumbnailTitle","firstVideo","collectionVideos","videos","playlist","clips","interactives","ArrayHelper","getFirstVideo","videoCount","totalCount","getVideoCount","showTexts","length","subText","toString","MasterTypeHelper","preventFocus","SvgContainer","hoverText","TitleSubText","subTextAppLink","titleAppLink","getPhrase","InsightsHeader","shareLink","shareId","classRoomId","classroom","storage","anonymiseUsers","setAnonymiseUsers","breadcrumbs","application","action","actions","args","getShareInformationAppLink","dropdownToggleClassName","label","push","getActions","minWidth","href","svgSize","S","customSize","classroomName","htmlFor","on","getInsightsVideoTabs","hasShareFlowV2","getInsightsClipTabs","getInsightsInteractiveTabs","getInsightsDemoInteractiveTabs","getInsightsSeriesTabs","getInsightsPlaylistTabs","ShareAvatar","icons","variant","iconColours","textVariant","svgWrapperClassName","titles","hideSubtitle","groupCount","recipients","filter","r","recipientTypeId","studentCount","pluralize","includes","privacy","getSubtitle","singular","plural","SharePrivacy","ShareType","normalizeOptions","ShareRequests","createShareLink","success","error","always","invalidationKeys","objectId","getShareLink","getSharesByObjectId","getSentShares","adaptedParams","scopeId","limit","offset","parseInt","cursor","Object","values","join","formatData","response","pagination","cursors","next","normalize","createPincode","getPincode","code","getPincodeByShareId","ShareLinkHelper","getPrivateIconAndText","entityTypeId","hasStudentExp","yearGroups","icon","text","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","getClassroomId","find","recipientId","recipientWithScope"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7657],{26136:(e,t,a)=>{a.d(t,{B2:()=>o,DV:()=>c,jP:()=>l});var n=a(76198),r=a(23481),i=a(64818),s=r.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,n._8)((a="sessionId"in e?e.sessionName:e.id,r=+"".concat(a).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:r})):"sessionId"in e?e.sessionName:i.l.getFullName(e):"";var a,r}function l(e,t){var a={sessionId:e,sessionName:s("anonymousUser")};return e&&t&&t[e]||a}function c(e,t){return e.user?e.user:l(e.sessionId,t)}},40003:(e,t,a)=>{a.d(t,{Hb:()=>o,wO:()=>c});var n=a(23481),r=a(110),i=(a(57266),n.T.encloseNamespace("shared.analyticsUtils"));function s(e){var t=r.O.convertDateToUTC(e);return r.O.format(t,"YYYY-MM-DDTHH:mm:ss")}function o(){var e=new Date(2021,0,1),t=(new Date).getFullYear(),a=t===e.getFullYear();return[{name:i("today"),startDate:new Date,endDate:new Date},{name:i("thisMonth"),startDate:new Date(t,(new Date).getMonth(),1),endDate:new Date},{name:i("lastThreeMonths"),startDate:new Date(t,(new Date).getMonth()-2,1),endDate:new Date},{name:i("lastSixMonths"),startDate:new Date(t,(new Date).getMonth()-5,1),endDate:new Date},{name:i("thisYear"),startDate:new Date(t,0,1),endDate:new Date},{name:i("lastYear"),startDate:new Date(t-1,0,1),endDate:new Date(t,0,0),disabled:a,tooltip:a?i("lastYearDisabled"):""},{name:i("allTime"),startDate:r.O.subtract(new Date,5,"years"),endDate:new Date,default:!0}]}function l(e){return r.O.format(e,"YYYY-MM-DD")}function c(e,t){var a=function(e){return s(r.O.startOf(e,"day"))},n=function(e){return s(r.O.endOf(e,"day"))},i=function(e,t){if(t)return e.find((function(e){return e.name===t}))}(e,t.rangeName);if(i)return{start:a(l(i.startDate)),end:n(l(i.endDate))};if(t.from&&t.to)return{start:a(t.from),end:n(t.to)};var o=e.find((function(e){return!!e.default}));return{start:a(l(o.startDate)),end:n(l(o.endDate))}}},94892:(e,t,a)=>{a.d(t,{T:()=>r,i:()=>n});var n={HIGH:.75,MODERATE:.5},r={HIGH:.7,MODERATE:.7}},39902:(e,t,a)=>{a.d(t,{F:()=>v,f:()=>m});var n=a(32735),r=a(20354),i=a(75896);function s(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){if(e){if("string"==typeof e)return l(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t,a){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=c(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var d=50;function m(e,t){var a=i.m.chunk(e,d).map((function(e){return t(i.m.uniq(e))})),n=r.a.useBasicFetchAll(a),s=i.m.flatten(n.data),o=n.data.length?s.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:s,items:o,isFetching:n.isFetching}}function v(e,t,a){var l,m,v,f,g=a||function(e){return"object"===c(e)?e.id:e},h=n.useRef(new Set),p=(v=n.useState([]),f=2,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=i.call(a)).done)&&(o.push(n.value),o.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return o}}(v,f)||o(v,f)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=p[0],b=p[1];n.useEffect((function(){if(null==e?void 0:e.length){var a=[];e.forEach((function(e){var t=g(e);h.current.has(t)||(a.push(e),h.current.add(t))})),a.length&&b((function(e){return[].concat(s(e),s(i.m.chunk(a,d).map(t)))}))}}),[null==e?void 0:e.length]);var I=r.a.useBasicFetchAll(y),w=i.m.flatten(I.data),A=I.data.length?w.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},g(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(l=I.responses)||void 0===l?void 0:l[0])||void 0===m?void 0:m.hasCompleted),itemsArr:w,items:A,isFetching:I.isFetching}}},62875:(e,t,a)=>{function n(e,t,a){var n="".concat(e,":").concat(t.start,":").concat(t.end),r=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,i=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId;return r&&(n+=":".concat(r)),i&&(n+=":".concat(i)),a&&(n+=":".concat(a)),n}a.d(t,{H:()=>n})},57266:(e,t,a)=>{a.d(t,{e:()=>s});var n=a(81886),r=a(1048),i=a(75795),s={updateParams:function(e,t){var a=i.O.getCurrentRoute().appLink,s="string"==typeof a.params?n.Q.Ab.DeserializeQueryParams(a.params):a.params;t.keysToRemove&&(s=r.t.omit(s,t.keysToRemove));var o=(null==t?void 0:t.merge)?Object.assign(Object.assign({},s),e):e,l=Object.assign(Object.assign({},a),{params:o});r.t.isEqual(a,l)||n.Q.C$.trigger(l,r.t.omit(t,["merge","keysToRemove"]))}}},96049:(e,t,a)=>{a.r(t),a.d(t,{VideoInsightsOverviewView:()=>J});var n=a(32735),r=a(23481),i=a(2948),s=a(20354),o=a(75896),l=a(51870),c=a(50916),u=a(84621),d=a(98551),m=a(35223),v=r.T.encloseNamespace("shared.insightStudentsNotWatched");function f(e){var t,a=(null===(t=e.students)||void 0===t?void 0:t.filter((function(t){var a;return!(null===(a=e.watchedIds)||void 0===a?void 0:a.includes(t.id))})))||[];return n.createElement(u.L,{title:v("title"),svgName:m.vn.Puzzle,svgClassName:"bg-light-teal text-teal"},n.createElement(d.y,{students:a,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:v("studentsDisplay"),anonymiseUsers:e.anonymiseUsers}))}var g=r.T.encloseNamespace("shared.insightStudentsWatched");function h(e){return n.createElement(u.L,{title:g("title"),svgName:m.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},n.createElement(d.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:g("studentsDisplay"),appLink:e.heatmapAppLink,appLinkText:g("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var p=a(5255),y=a(26025),b=a(26136),I=a(74901),w=a(40003),A=a(30439),E=a(83345),D=a(38143),N=a(4594),O=a(16714),S=a(39151),j=a(31949),k=a(17913),U=a(39902),T=a(91286),C=a(93322),F=a(22902),M=a(79612),L=a(37802),Y=a(31908),P=a(99742),R=a(88630),H=a(53936),B=a(53214),V=a(10447);const x={partialInsights:"qm6HY"};function _(){return n.createElement("div",null,n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-12"},n.createElement("div",{className:"".concat(x.partialInsights," rounded partial-loading-background")}))),n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(x.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(x.partialInsights," rounded partial-loading-background")}))))}var W=a(14070),q=a(97291);function $(e){return function(e){if(Array.isArray(e))return z(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||G(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e,t){if(e){if("string"==typeof e)return z(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)?z(e,t):void 0}}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var Q="insights.videoInsightsOverview",K=r.T.encloseNamespace(Q);function J(e){var t,a,r,u,d,m,v,g,x=(v=(0,i.D)(D.g.ANONYMISE_USERS),g=1,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=i.call(a)).done)&&(o.push(n.value),o.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return o}}(v,g)||G(v,g)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,C.F)();var z=(0,L.r)(null),J=z.hasClassrooms,X=z.hasShareFlowV2,Z=(0,F.T)().hasPermissions,ee=(0,L.r)(null).publicInteractiveAttempts,te=s.a.useBasicFetch(j.N.currentUser()),ae=s.a.useBasicFetch(S.L.config()),ne=Y.M.getVideoRequest(e.videoId,e.typeId),re=s.a.useBasicFetch(ne),ie=y.B.getAudienceAppLinkParams(),se=y.B.getDateRangeAppLinkParams(),oe=Object.assign(Object.assign({},(0,w.wO)((0,w.Hb)(),se)),(0,I.K)(ie));(0,M.M)({title:re.data?K("pageTitle",{video:null===(t=re.data)||void 0===t?void 0:t.name}):null}),(0,T.v)(re);var le=s.a.useBasicFetch(te.data&&k.u.aggregateEngagement(e.videoId,oe,te.data.id,ee)),ce=1===(null===(a=ie.classrooms)||void 0===a?void 0:a.length)&&!(null===(r=ie.classroomGroups)||void 0===r?void 0:r.length),ue=s.a.useBasicFetch(ce&&R.F.getClassroomStudents(o.m.first(ie.classrooms))),de=(0,U.f)((null===(u=le.data)||void 0===u?void 0:u.userIds)||[],(function(e){return A.o.getRecipientsById(e,te.data.customerId)})),me=s.a.useBasicFetch(te.data&&k.u.views(oe,e.videoId,te.data.id,ee)),ve=(0,p.Y)(e.shareId),fe=!!e.shareId;function ge(){var e,t,a,n,r;if(!(null===(e=le.data)||void 0===e?void 0:e.userIds)&&!(null===(t=le.data)||void 0===t?void 0:t.sessionIds))return[];var i=null!==(a=de.itemsArr)&&void 0!==a?a:[],s=(null===(r=null===(n=le.data)||void 0===n?void 0:n.sessionIds)||void 0===r?void 0:r.map((function(e){return(0,b.jP)(e,ve)})))||[];return[].concat($(i),$(s))}var he=te.data&&ae.data&&re.data&&le.data&&(!ce||ue.data),pe=Object.assign(Object.assign(Object.assign({},ie),se),{shareId:e.shareId}),ye=function(e,t,a){return{heatmapAppLink:{application:q.O.INSIGHTS,action:t===N.E.Clip?W.e.Insights.CLIP_HEATMAP:W.e.Insights.VIDEO_HEATMAP,args:[e],params:a}}}(e.videoId,e.typeId,pe);return n.createElement("div",{className:"px-3"},n.createElement(H.j,{video:re.data,dateRangeAppLinkParams:se,tabs:function(){var e,t,a;return(null===(e=re.data)||void 0===e?void 0:e.typeId)===N.E.Clip?(0,V.$o)(null===(t=re.data)||void 0===t?void 0:t.id,"insights",pe):(0,V.$6)(null===(a=re.data)||void 0===a?void 0:a.id,"insights",pe)}(),hasAnalytics:Z(O.C.ViewCustomerAnalytics),analyticsWebUrl:null===(d=ae.data)||void 0===d?void 0:d.analyticsWebUrl,hasShareFlowV2:X,shareId:e.shareId}),!he&&n.createElement(_,null),he&&n.createElement(B.u,{video:re.data,hasShared:fe,hasShareFlowV2:X,shareId:e.shareId},n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(E.x,{namespace:Q,phrase:"studentViewing"}),n.createElement("span",null,": ",ge().length,ue.data?"/".concat(ue.data.data.length):"")),n.createElement("div",{className:"row g-3"},ce&&n.createElement("div",{className:"col-12 col-md"},n.createElement(f,{students:ue.data.data,watchedIds:le.data.userIds,imageCdnUrl:ae.data.imageCdnUrl,heatmapAppLink:ye.heatmapAppLink,imageUrl:P.W.Insights.AVATAR,anonymiseUsers:x})),n.createElement("div",{className:"col-12 col-md"},n.createElement(h,{students:ge(),imageCdnUrl:ae.data.imageCdnUrl,heatmapAppLink:ye.heatmapAppLink,imageUrl:P.W.Insights.AVATAR,anonymiseUsers:x})))),n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(E.x,{namespace:Q,phrase:J?"classEngagement":"engagement"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-12 col-md-6"},n.createElement(l.i,{osCount:null===(m=me.data)||void 0===m?void 0:m.osCount})),n.createElement("div",{className:"col-12 col-md-6"},n.createElement(c.b,{engagement:le.data,heatmapAppLink:ye.heatmapAppLink}))))))}}}]);
2
+ //# sourceMappingURL=7657-e302fda4f2-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/7657-e302fda4f2-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/DateRangeUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts"],"sourcesContent":["import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonSession, AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { StudentResults } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getUniqueNamesConfig(id: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${id}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: UserOrAnonSession, shouldAnonymise: boolean): string {\n if (!user)\n return '';\n\n if (!shouldAnonymise)\n return 'sessionId' in user ? user.sessionName : UserHelper.getFullName(user);\n\n return uniqueNamesGenerator(getUniqueNamesConfig('sessionId' in user ? user.sessionName : user.id));\n}\n\nexport function getAnonSession(sessionId: string, anonSessions: AnonSessions): AnonSession {\n const fallback = {\n sessionId: sessionId,\n sessionName: getPhrase('anonymousUser')\n };\n\n if (!sessionId || !anonSessions)\n return fallback;\n\n const anonSession = anonSessions[sessionId];\n\n if (anonSession)\n return anonSession;\n\n return fallback;\n}\n\nexport function getUserOrAnonSession(result: StudentResults, anonSessions: AnonSessions): UserOrAnonSession {\n if (result.user)\n return result.user;\n\n return getAnonSession(result.sessionId, anonSessions);\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\nimport { DateRange } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function convertDateToUtcDateTimeString(date: Date): string {\n const utc = DateHelper.convertDateToUTC(date);\n return DateHelper.format(utc, 'YYYY-MM-DDTHH:mm:ss');\n}\n\nexport function getMinDate(): Date {\n return new Date(2021, 0, 1);\n}\n\nexport function getMaxDate(): Date {\n return new Date();\n}\n\nexport function getDefaultDateRange(dateRangePresets: DateRange[]): DateRange {\n return dateRangePresets.find(range => !!range.default);\n}\n\nexport function getPresetRangeByName(dateRangePresetss: DateRange[], rangeName: string): DateRange | undefined {\n if (!rangeName)\n return;\n\n const presets = dateRangePresetss;\n \n return presets.find(p => p.name === rangeName);\n}\n\nexport function getGenericDateRangePresets(): DateRange[] {\n const minDate = getMinDate();\n const currentYear = (new Date()).getFullYear();\n\n const isMinDateThisYear = currentYear === minDate.getFullYear();\n\n return [\n {\n name: getPhrase('today'),\n startDate: new Date(),\n endDate: new Date()\n },\n {\n name: getPhrase('thisMonth'),\n startDate: new Date(currentYear, new Date().getMonth(), 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastThreeMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 2, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastSixMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 5, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastTwelveMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 11, 1),\n endDate: new Date(),\n default: true\n },\n {\n name: getPhrase('thisYear'),\n startDate: new Date(currentYear, 0, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastYear'),\n startDate: new Date(currentYear - 1, 0, 1),\n endDate: new Date(currentYear, 0, 0),\n disabled: isMinDateThisYear,\n tooltip: isMinDateThisYear ? getPhrase('lastYearDisabled') : ''\n }\n ];\n}\n\nexport function getInsightsDateRangePresets(): DateRange[] {\n const minDate = getMinDate();\n const currentYear = (new Date()).getFullYear();\n\n const isMinDateThisYear = currentYear === minDate.getFullYear();\n\n return [\n {\n name: getPhrase('today'),\n startDate: new Date(),\n endDate: new Date()\n },\n {\n name: getPhrase('thisMonth'),\n startDate: new Date(currentYear, new Date().getMonth(), 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastThreeMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 2, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastSixMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 5, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('thisYear'),\n startDate: new Date(currentYear, 0, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastYear'),\n startDate: new Date(currentYear - 1, 0, 1),\n endDate: new Date(currentYear, 0, 0),\n disabled: isMinDateThisYear,\n tooltip: isMinDateThisYear ? getPhrase('lastYearDisabled') : ''\n },\n {\n name: getPhrase('allTime'),\n startDate: DateHelper.subtract(new Date(), 5, 'years'),\n endDate: new Date(),\n default: true\n }\n ];\n}\n\nexport function formatDateQueryParam(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n}\n\nexport function getRouteQueryParams(dateRange: DateRange): DateRangeQueryParams {\n if (dateRange.name)\n return { rangeName: dateRange.name };\n\n return {\n from: formatDateQueryParam(dateRange.startDate),\n to: formatDateQueryParam(dateRange.endDate)\n };\n}\n\nexport function useGetDateRangeFromQueryParams(\n dateRangePresets: DateRange[],\n dateRangeQueryParams: DateRangeQueryParams\n): DateRange | null {\n const { to, from, rangeName } = dateRangeQueryParams;\n \n const presetRange = getPresetRangeByName(dateRangePresets, rangeName);\n\n if (presetRange) {\n if (!from && !to)\n return presetRange;\n\n /**\n * If a rangeName has been set, we don't use to and from so we remove them from the url params.\n */\n AppRouteHelper.updateParams(\n getRouteQueryParams(presetRange),\n { replace: true, merge: true, keysToRemove: [ 'from', 'to' ]}\n );\n return;\n }\n\n const defaultDateRange = getDefaultDateRange(dateRangePresets);\n\n /**\n * If a param is missing, or one of them isn't a valid date, short-circuit the logic below.\n */\n if (!from || !to || !DateHelper.isValid(from) || !DateHelper.isValid(to)) {\n AppRouteHelper.updateParams(\n getRouteQueryParams(defaultDateRange),\n { replace: true, merge: true, keysToRemove: ['rangeName']}\n );\n return;\n }\n\n let initialDateRangeValid = true;\n\n let startDate = DateHelper.convertDateToUTC(new Date(from));\n let endDate = DateHelper.convertDateToUTC(new Date(to));\n\n if (DateHelper.isBefore(startDate, getMinDate(), 'day')) {\n startDate = getMinDate();\n initialDateRangeValid = false;\n }\n\n if (DateHelper.isAfter(endDate, getMaxDate(), 'day')) {\n endDate = getMaxDate();\n initialDateRangeValid = false;\n }\n\n if (DateHelper.isAfter(startDate, endDate)) {\n startDate = defaultDateRange.startDate;\n endDate = defaultDateRange.endDate;\n initialDateRangeValid = false;\n }\n\n const dateRange: DateRange = {\n startDate,\n endDate,\n name: initialDateRangeValid\n ? rangeName || 'custom'\n : ''\n };\n\n if (initialDateRangeValid)\n return dateRange;\n\n /**\n * If one or both of the date params were invalid, we trigger a route update.\n */\n AppRouteHelper.updateParams(getRouteQueryParams(dateRange), { replace: true, merge: true, keysToRemove: ['rangeName']});\n}\n\nexport function getStartEndParams(\n dateRangePresetss: DateRange[],\n filterParams: FilterQueryParams\n): { start: string; end: string } {\n const getStartDate = (date: string) => convertDateToUtcDateTimeString(DateHelper.startOf(date, 'day'));\n const getEndDate = (date: string) => convertDateToUtcDateTimeString(DateHelper.endOf(date, 'day'));\n\n const presetRange = getPresetRangeByName(dateRangePresetss, filterParams.rangeName);\n\n /**\n * If the user has chosen a preset range, lookup the start and end dates as they won't be\n * in the query params.\n */\n if (presetRange)\n return {\n start: getStartDate(formatDateQueryParam(presetRange.startDate)),\n end: getEndDate(formatDateQueryParam(presetRange.endDate))\n };\n\n /**\n * If they have chosen a custom date range, use their chosen start and end dates.\n */\n if (filterParams.from && filterParams.to)\n return {\n start: getStartDate(filterParams.from),\n end: getEndDate(filterParams.to)\n };\n\n /**\n * The below should never be hit\n */\n const defaultRange = getDefaultDateRange(dateRangePresetss);\n\n return {\n start: getStartDate(formatDateQueryParam(defaultRange.startDate)),\n end: getEndDate(formatDateQueryParam(defaultRange.endDate))\n };\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface UpdateParamsOptions extends Core.AppLinkOptions {\n merge?: boolean;\n keysToRemove?: string[]\n}\n\nexport const AppRouteHelper = {\n /**\n * Utility to update the params on the current appRoute.\n * \n * This is built on top of ContextService rather than build into AppLink\n * as we will generally only want to update params on appRoutes, not appLinks.\n */\n updateParams(params: HashObject, options?: UpdateParamsOptions): void {\n const { appLink } = ContextService.getCurrentRoute();\n\n let currentParams = typeof(appLink.params) === 'string'\n ? Core.LocationUtils.DeserializeQueryParams(appLink.params)\n : appLink.params as HashObject;\n\n if (options.keysToRemove)\n currentParams = ObjectHelper.omit(currentParams, options.keysToRemove);\n\n const updatedParams = options?.merge\n ? { ...currentParams, ...params }\n : params;\n\n const updatedAppLink = {\n ...appLink,\n params: updatedParams\n };\n\n /**\n * This prevents us pointlessly re-triggering if we're already on the right applink.\n */\n if (ObjectHelper.isEqual(appLink, updatedAppLink))\n return;\n \n Core.AppLinkHelper.trigger(updatedAppLink, ObjectHelper.omit(options, [ 'merge', 'keysToRemove' ]));\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: UserOrAnonSession[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qm6HY\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BasePaginatedCollection, Config, CurrentUser, Engagement, User, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { getInsightsClipTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/views/video/overview/partial-loading/PartialVideoInsightsOverview';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n videoId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms, hasShareFlowV2 } = useSettings(null);\n\n const { hasPermissions } = usePermissions();\n\n const { publicInteractiveAttempts } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const videoRequest = VideoHelper.getVideoRequest(props.videoId, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n };\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError(video);\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n currentUser.data &&\n VideoViewRequests.aggregateEngagement(\n props.videoId,\n requestFilter,\n currentUser.data.id,\n publicInteractiveAttempts\n )\n );\n\n const classroomFilterOnly =\n audienceAppLinkParams.classrooms?.length === 1 && !audienceAppLinkParams.classroomGroups?.length;\n const classroomStudents = Flight.useBasicFetch<BasePaginatedCollection<User>>(classroomFilterOnly &&\n ClassroomRequests.getClassroomStudents(ArrayHelper.first(audienceAppLinkParams.classrooms)));\n\n const shareRecipients = useBatchFetch<User>(\n aggregateEngagement.data?.userIds || [],\n (ids: string[]) => ShareRequests.getRecipientsById(ids, currentUser.data.customerId)\n );\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data &&\n VideoViewRequests.views(requestFilter, props.videoId, currentUser.data.id, publicInteractiveAttempts));\n\n const anonSessions = useAnonSessions(props.shareId);\n\n const hasShared = !!props.shareId;\n\n function getStudentsList(): UserOrAnonSession[] {\n if (!aggregateEngagement.data?.userIds && !aggregateEngagement.data?.sessionIds)\n return [];\n\n const students = shareRecipients.itemsArr ?? [];\n\n const sessions = aggregateEngagement.data?.sessionIds\n ?.map(sessionId => getAnonSession(sessionId, anonSessions)) || [];\n\n return [ ...students, ...sessions ];\n }\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n video.data &&\n aggregateEngagement.data &&\n (!classroomFilterOnly || classroomStudents.data);\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams,\n shareId: props.shareId\n };\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(props.videoId, props.typeId, params);\n\n function getInsightsOverviewTabs() {\n if (video.data?.typeId === MasterType.Clip) {\n return getInsightsClipTabs(video.data?.id, 'insights', params);\n }\n\n return getInsightsVideoTabs(video.data?.id, 'insights', params);\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsOverviewTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n\n {!hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {hasDataLoaded &&\n <InsightsShareMask\n video={video.data}\n hasShared={hasShared}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n >\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{classroomStudents.data ? `/${classroomStudents.data.data.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {classroomFilterOnly && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={classroomStudents.data.data}\n watchedIds={aggregateEngagement.data.userIds}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={videoViews.data?.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={aggregateEngagement.data}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getVideoInsightsAppLinks(id: string, typeId: MasterType, params?: HashObject) {\n return {\n heatmapAppLink: {\n application: AppChannels.INSIGHTS,\n action: typeId === MasterType.Clip ? Actions.Insights.CLIP_HEATMAP : Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n };\n}"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","id","sessionName","seed","Math","floor","Date","getMinutes","dictionaries","separator","length","style","getAnonSession","sessionId","anonSessions","fallback","getUserOrAnonSession","result","convertDateToUtcDateTimeString","date","utc","getInsightsDateRangePresets","minDate","currentYear","getFullYear","isMinDateThisYear","name","startDate","endDate","getMonth","disabled","tooltip","default","formatDateQueryParam","getStartEndParams","dateRangePresetss","filterParams","getStartDate","getEndDate","presetRange","rangeName","find","p","getPresetRangeByName","start","end","from","to","defaultRange","range","ScoreThresholdDefaults","HIGH","MODERATE","ScoreThresholdInsights","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","reduce","acc","item","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","getAnalyticsRequestKey","baseKey","filter","sharerId","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","AppRouteHelper","updateParams","params","options","appLink","currentParams","keysToRemove","updatedParams","merge","updatedAppLink","LanguageService","InsightStudentsNotWatched","props","studentsNotWatched","students","student","watchedIds","includes","InsightCard","title","svgName","svgClassName","InsightStudentList","imageCdnUrl","imageUrl","description","anonymiseUsers","InsightStudentsWatched","count","heatmapAppLink","appLinkText","PartialVideoInsightsOverview","className","VideoInsightsOverviewView","SharedViewModelKeys","useLockContentWidth","useSettings","hasClassrooms","hasShareFlowV2","hasPermissions","usePermissions","publicInteractiveAttempts","currentUser","UserRequests","config","ConfigRequests","videoRequest","VideoHelper","videoId","typeId","video","audienceAppLinkParams","dateRangeAppLinkParams","requestFilter","useSetPageMetadata","aggregateEngagement","VideoViewRequests","classroomFilterOnly","classrooms","classroomGroups","classroomStudents","ClassroomRequests","ArrayHelper","shareRecipients","userIds","ids","ShareRequests","customerId","videoViews","shareId","hasShared","getStudentsList","sessionIds","sessions","hasDataLoaded","videoInsightsAppLinks","application","action","MasterType","args","getVideoInsightsAppLinks","InsightsHeader","tabs","getInsightsOverviewTabs","hasAnalytics","PermissionName","analyticsWebUrl","InsightsShareMask","Text","namespace","phrase","ImageUrls","InsightDevices","osCount","InsightHeatmap","engagement"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8057],{6748:(e,t,r)=>{r.d(t,{i:()=>I});var n=r(32735),l=r(42648),a=r(35509),o=r(91967),i=r(15611),c=r(17808),s=r(1287),u=r(83914),d=r(90281),m={opacity:"0.8",cursor:"grabbing"},f=r(35223);function g(e){return function(e){if(Array.isArray(e))return b(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){if(e){if("string"==typeof e)return b(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t,r,n,l;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(r=e.current)||void 0===r?void 0:r.scrollLeft)+1<(null===(n=e.current)||void 0===n?void 0:n.scrollWidth)-(null===(l=e.current)||void 0===l?void 0:l.clientWidth)}}const p={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var S=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(n=Object.getOwnPropertySymbols(e);l<n.length;l++)t.indexOf(n[l])<0&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]])}return r};function E(e){var t,r;return e.column.canSort?n.createElement("span",{className:"".concat(p.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(r=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==r?r:"")},n.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?f.vn.ArrowRight:f.vn.ArrowLeft,size:u.S.Small})):n.createElement(n.Fragment,null)}function w(e){var t,r,l,u,d,f,v,b,h={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(h.initialState={selectedRowIds:(v=e.initialSelectedRowIds,b={},v.forEach((function(e){return b[e]=!0})),b)}),e.getRowId&&(h.getRowId=e.getRowId);var p,S=a.useTable.apply(void 0,[h].concat((p=function(e){var t=[a.useSortBy,a.useRowSelect,"flex"===e.layout?a.useFlexLayout:a.useBlockLayout];return e.allowFiltering&&(t=[].concat(g(t),[a.useFilters])),e.allowGlobalFiltering&&(t=[].concat(g(t),[a.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return y(e)}(p)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(p)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?y(e,t):void 0}}(p)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),w=S.getTableProps,I=S.getTableBodyProps,R=S.headerGroups,C=S.rows,N=S.prepareRow,k=S.toggleAllRowsSelected,O=S.setGlobalFilter,A=S.setHiddenColumns,j=S.state.sortBy;function x(){return C.map((function(t){N(t);var r=function(t){var r,n,l,a,i,c=o.q.isFunction(null===(r=e.theme)||void 0===r?void 0:r.row)?e.theme.row(t):null!==(l=null===(n=e.theme)||void 0===n?void 0:n.row)&&void 0!==l?l:"";return t.isSelected&&(null===(a=e.theme)||void 0===a?void 0:a.selectedRow)&&(c+=" ".concat(null===(i=e.theme)||void 0===i?void 0:i.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),l=!!e.getRowAppLink&&e.getRowAppLink(t);function a(){e.onSelectRow&&(e.allowSelectMultipleRows||k(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,o){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,o);return l?n.createElement("div",{role:"row",key:t.id},n.createElement(i.F,Object.assign({},e,c,{className:r,appLink:l}),B(t))):n.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:r,onClick:a}),B(t))}var u=t.getRowProps();return e.enableSortableRows?n.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:n.forwardRef((function(e,t){return c(e,t)}))}):c(u)}))}function B(t){return t.cells.map((function(r){var l=function(t,r){var n,l,a="";return"function"==typeof(null===(n=e.theme)||void 0===n?void 0:n.cell)&&(a=e.theme.cell(t,r)),"string"==typeof(null===(l=e.theme)||void 0===l?void 0:l.cell)&&(a=e.theme.cell),e.onSelectCell&&(a+=" cursor-pointer"),a}(t,r);return n.createElement("div",Object.assign({key:r.column.id},r.getCellProps(),{className:l,onClick:function(){e.onSelectCell&&e.onSelectCell(r)}}),r.render("Cell"))}))}return n.useEffect((function(){e.onSort&&e.onSort(j)}),[j]),n.useEffect((function(){e.globalFilter&&O(e.globalFilter)}),[e.globalFilter]),n.useEffect((function(){e.hiddenColumns&&A(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),n.createElement("div",Object.assign({},w(),{className:null!==(r=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==r?r:""}),n.createElement("div",{className:null!==(u=null===(l=e.theme)||void 0===l?void 0:l.header)&&void 0!==u?u:""},R.map((function(t){var r,l;return n.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(l=null===(r=e.theme)||void 0===r?void 0:r.headerRow)&&void 0!==l?l:""}),t.headers.map((function(t){var r,l;return n.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(l=null===(r=e.theme)||void 0===r?void 0:r.headerCell)&&void 0!==l?l:""}),t.render("Header",{renderSortIndicator:function(){return n.createElement(E,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&n.createElement(E,{column:t,theme:e.theme}))})))}))),n.createElement("div",Object.assign({},I(),{className:null!==(f=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==f?f:""}),e.enableSortableRows?n.createElement(c.Q,{ids:C.map((function(e){return e.original.id})),getDragOverlay:function(t){var r,l,a=C.findIndex((function(e){return e.original.id===t})),o=C[a];return n.createElement("div",Object.assign({},e,{className:(r=e.theme,l="g-0 ",r&&(l+=r.row),l),style:m}),B(o))},onSortEnd:e.onSortingRowsEnd},x()):x()))}function I(e){var t=e.enableSlider,r=e.scrollIncrement,a=e.scrollable,i=S(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,r=n.useRef(null),l=(e=n.useState(h(r)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,l,a,o,i=[],c=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(i.push(n.value),i.length!==t);c=!0);}catch(e){s=!0,l=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw l}}return i}}(e,t)||v(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=l[0],i=l[1],c=o.q.throttle((function(){i(h(r))}),200),s=n.useCallback((function(e){var t;r.current&&(null===(t=r.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(i(h(r)),e.addEventListener("scroll",c)),r.current=e}),[]);return n.useEffect((function(){(null==r?void 0:r.current)&&i(h(r))}),[r]),{ref:s,scrollState:a,scroll:function(e){var t;null===(t=r.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,m=c.scroll;if(a)return n.createElement(l.$B,{renderTrackHorizontal:function(){return n.createElement("div",{className:p.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},n.createElement(w,Object.assign({},i)));if(!t)return n.createElement(w,Object.assign({},i));function f(e){m(r*("right"===e?1:-1))}return n.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},n.createElement("div",{className:"px-4"},n.createElement("div",{className:"position-relative"},n.createElement(d.W,{direction:d.f.Left,onClick:function(){return f("left")},hide:!u.canScrollLeft}),n.createElement("div",{className:"".concat(p.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},n.createElement(w,Object.assign({},i))),n.createElement(d.W,{direction:d.f.Right,onClick:function(){return f("right")},hide:!u.canScrollRight}))))}I.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},78057:(e,t,r)=>{r.d(t,{R:()=>C});var n=r(32735),l=r(75896),a=r(23481),o=r(97958),i=a.T.encloseNamespace("shared.studentResultsTable");function c(e){return"not_completed"===e.filter?n.createElement(o.u,{className:"bg-white rounded-bottom py-5"},n.createElement(o.u.Image,{src:e.notCompletedImageUrl,size:"small"}),n.createElement(o.u.Info,null,i("notCompletedDescription"))):"marking_required"===e.filter?n.createElement(o.u,{className:"bg-white rounded-bottom py-5"},n.createElement(o.u.Image,{src:e.markingRequiredImageUrl,size:"small"}),n.createElement(o.u.Info,null,i("markingRequiredDescription"))):"helping_hand"===e.filter?n.createElement(o.u,{className:"bg-white rounded-bottom py-5"},n.createElement(o.u.Image,{src:e.helpingHandImageUrl,size:"small"}),n.createElement(o.u.Info,null,i("helpingHandDescription"))):n.createElement(o.u,{className:"bg-white rounded-bottom py-5"},n.createElement(o.u.Image,{src:e.emptyStateImageUrl,size:"small"}),n.createElement(o.u.Heading,null,i("emptyStateHeading")),n.createElement(o.u.Info,null,i("emptyStateDescription")))}var s=r(83345),u="shared.studentResultsTable";function d(e){function t(t){var r=e.filter===t?null:t;e.setFilter(r)}function r(t){return"btn btn-outline-dark ".concat(function(t){return e.filter===t}(t)?"bg-dark text-white":"")}return n.createElement("div",{className:"d-flex align-items-center mb-3"},n.createElement("p",{className:"h6 mb-0"},n.createElement(s.x,{namespace:u,phrase:"filters"})),n.createElement("div",{className:"d-flex border-start ps-3 ms-3 gap-2"},n.createElement("button",{className:r("not_completed"),onClick:function(){return t("not_completed")}},n.createElement(s.x,{namespace:u,phrase:"notCompletedFilter"})),n.createElement("button",{className:r("marking_required"),onClick:function(){return t("marking_required")}},n.createElement(s.x,{namespace:u,phrase:"markingRequiredFilter"})),n.createElement("button",{className:r("helping_hand"),onClick:function(){return t("helping_hand")}},n.createElement(s.x,{namespace:u,phrase:"helpingHandFilter"}))))}var m=r(26136),f=r(97364),g=r(6748),v=r(84806),b=r(19912);function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,l,a,o,i=[],c=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(i.push(n.value),i.length!==t);c=!0);}catch(e){s=!0,l=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw l}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var y={table:"".concat(b.Z.fixedTable," bg-white rounded-start border border-end-0"),header:"".concat(b.Z.header," border-bottom"),headerRow:"h-100",headerCell:"d-flex align-items-center justify-content-start",row:b.Z.row},S={header:"".concat(b.Z.header," fw-bold"),headerRow:"h-100",headerCell:"".concat(b.Z.interactionHeaderCellOuter," bg-white border-bottom"),row:"".concat(b.Z.row," ").concat(b.Z.resultsRow),cell:b.Z.resultsCellOuter};function E(e){var t=h(n.useState((0,f.P)(e.sortBy,"score")),2),r=t[0],a=t[1],o=h(n.useState(e.filterBy),2),i=o[0],s=o[1],u=n.useRef(null),p=(0,v.R7)(e.results,e.anonSessions,e.anonymiseUsers),E=(0,v.lE)(e.interactive,e.interactiveMetadata,e.results,(function(e){(0,v.bB)(u.current,e)}),e.refreshTable),w=(0,v.Fx)(e.interactive,e.results,e.refreshTable,e.anonymiseUsers,l.m.first(r),i);function I(e){(0,v.l8)(u.current,e)}return n.createElement("div",null,!!e.results.students.length&&n.createElement(d,{filter:i,setFilter:s}),!w.length&&n.createElement(c,{emptyStateImageUrl:e.emptyStateImageUrl,helpingHandImageUrl:e.helpingHandImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,notCompletedImageUrl:e.notCompletedImageUrl,filter:i}),!!w.length&&n.createElement("div",{ref:u,className:"d-flex".concat(w.length?" ".concat(b.Z.hasResults):"")},n.createElement(g.i,{columns:p,data:w,theme:y,onSelectRow:function(t){var r=t.original;e.viewStudentResults((0,m.DV)(r,e.anonSessions),e.interactiveMetadata.id)},onRowMouseOver:function(e){return I(e.index)},onRowMouseLeave:function(){return I()},enableSort:!0,manualSort:!0,onSort:a,initialSortBy:r}),n.createElement(g.i,{columns:E,data:w,theme:S,enableSlider:!0,scrollIncrement:8*v.Ju,onSelectCell:function(t){e.viewStudentResults((0,m.DV)(t.row.original,e.anonSessions),e.interactiveMetadata.id,t.column.id)},scrollContainerClassName:"rounded-end border border-start-0 border"})))}var w=r(99742);const I={partialInsights:"qSeTe"};function R(){return n.createElement("div",null,n.createElement("div",{className:"d-flex align-items-center mb-3"},n.createElement("p",{className:"h6 px-4 mb-0 me-4 partial-loading-background"}," "),n.createElement("div",{className:"row g-2 w-50"},n.createElement("div",{className:"col-3"},n.createElement("div",{className:"p-2 rounded-1 partial-loading-background"}," ")),n.createElement("div",{className:"col-3"},n.createElement("div",{className:"p-2 rounded-1 partial-loading-background"}," ")),n.createElement("div",{className:"col-3"},n.createElement("div",{className:"p-2 rounded-1 partial-loading-background"}," ")))),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-12"},n.createElement("div",{className:"".concat(I.partialInsights," rounded partial-loading-background")}))))}function C(e){return n.createElement(n.Fragment,null,!e.hasDataLoaded&&n.createElement(R,null),e.hasDataLoaded&&n.createElement(E,{interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results,refreshTable:e.isFetching,viewStudentResults:e.viewStudentResults,emptyStateImageUrl:w.W.Insights.NO_RESPONSES,sortBy:e.sortBy,filterBy:e.filterBy,anonymiseUsers:e.anonymiseUsers,notCompletedImageUrl:w.W.Insights.JIGSAW,markingRequiredImageUrl:w.W.Insights.CLIPBOARD,helpingHandImageUrl:w.W.Insights.SPEECH_BUBBLE_HEART,anonSessions:e.anonSessions}))}}}]);
2
+ //# sourceMappingURL=8057-431c6be34c-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8057-431c6be34c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/partial-interactive-insights-students.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents.tsx"],"sourcesContent":["export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows(): JSX.Element[] {\n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResultsEmptyStateProps {\n filter: FilterStudentsBy;\n notCompletedImageUrl: string;\n helpingHandImageUrl: string;\n markingRequiredImageUrl: string;\n emptyStateImageUrl: string;\n}\n\nexport function StudentResultsEmptyState(props: StudentResultsEmptyStateProps) {\n if (props.filter === 'not_completed') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.notCompletedImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('notCompletedDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n if (props.filter === 'marking_required') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.markingRequiredImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('markingRequiredDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n if (props.filter === 'helping_hand') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.helpingHandImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('helpingHandDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.studentResultsTable';\n\ninterface StudentResultsTableFiltersProps {\n filter: FilterStudentsBy;\n setFilter: (filter: FilterStudentsBy) => void;\n}\n\nexport function StudentResultsTableFilterButtons(props: StudentResultsTableFiltersProps) {\n function toggleFilter(selectedFilter: FilterStudentsBy) {\n const updatedFilter = props.filter === selectedFilter ? null : selectedFilter;\n\n props.setFilter(updatedFilter);\n }\n\n function isFilterSelected(filter: FilterStudentsBy) {\n return props.filter === filter;\n }\n\n function getClassName(filter: FilterStudentsBy) {\n return `btn btn-outline-dark ${isFilterSelected(filter) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className='d-flex border-start ps-3 ms-3 gap-2'>\n <button className={getClassName('not_completed')} onClick={() => toggleFilter('not_completed')}>\n <Text namespace={namespace} phrase='notCompletedFilter' />\n </button>\n <button className={getClassName('marking_required')} onClick={() => toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequiredFilter' />\n </button>\n <button className={getClassName('helping_hand')} onClick={() => toggleFilter('helping_hand')}>\n <Text namespace={namespace} phrase='helpingHandFilter' />\n </button>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Cell, Row, SortingRule } from 'react-table';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StudentResultsEmptyState } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState';\nimport { StudentResultsTableFilterButtons } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { FilterStudentsBy, getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport {\n highlightColumns,\n highlightRows,\n RESULTS_COL_WIDTH,\n useGetFixedColumns,\n useGetResultColumns,\n useGetResultsTableData\n} from './StudentResultsTableUtils';\n\nimport styles from './student-results-table.scss';\n\nconst fixedTableTheme: TableTheme = {\n table: `${styles.fixedTable} bg-white rounded-start border border-end-0`,\n header: `${styles.header} border-bottom`,\n headerRow: 'h-100',\n headerCell: 'd-flex align-items-center justify-content-start',\n row: styles.row\n};\n\nconst resultsTableTheme: TableTheme = {\n header: `${styles.header} fw-bold`,\n headerRow: 'h-100',\n headerCell: `${styles.interactionHeaderCellOuter} bg-white border-bottom`,\n row: `${styles.row} ${styles.resultsRow}`,\n cell: styles.resultsCellOuter\n};\n\ninterface StudentResultsTableProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedStudentId?: string;\n emptyStateImageUrl?: string;\n notCompletedImageUrl?: string;\n helpingHandImageUrl?: string;\n markingRequiredImageUrl?: string;\n anonymiseUsers?: boolean;\n sortBy?: SortStudentsBy;\n filterBy?: FilterStudentsBy;\n anonSessions?: AnonSessions;\n viewStudentResults: (\n student: UserOrAnonSession,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n}\n\nexport function StudentResultsTable(props: StudentResultsTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<StudentResultsWithSummary>[]>(\n getSortStudents(props.sortBy, 'score')\n );\n const [ filter, setFilter ] = React.useState<FilterStudentsBy>(props.filterBy);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const fixedColumns = useGetFixedColumns(props.results, props.anonSessions, props.anonymiseUsers);\n const resultColumns = useGetResultColumns(\n props.interactive,\n props.interactiveMetadata,\n props.results,\n onColumnHover,\n props.refreshTable\n );\n const data = useGetResultsTableData(\n props.interactive,\n props.results,\n props.refreshTable,\n props.anonymiseUsers,\n ArrayHelper.first(sortBy),\n filter\n );\n\n function onSelectStudent({ original }: Row<StudentResultsWithSummary>): void {\n props.viewStudentResults(getUserOrAnonSession(original, props.anonSessions), props.interactiveMetadata.id);\n }\n\n function onSelectStudentResponse(cell: Cell<StudentResultsWithSummary>): void {\n props.viewStudentResults(\n getUserOrAnonSession(cell.row.original, props.anonSessions),\n props.interactiveMetadata.id,\n cell.column.id\n );\n }\n\n function onColumnHover(index?: number): void {\n highlightColumns(ref.current, index);\n }\n\n function onRowHover(index?: number): void {\n highlightRows(ref.current, index);\n }\n\n return (\n <div>\n {!!props.results.students.length && <StudentResultsTableFilterButtons filter={filter} setFilter={setFilter} />}\n\n {!data.length && (\n <StudentResultsEmptyState\n emptyStateImageUrl={props.emptyStateImageUrl}\n helpingHandImageUrl={props.helpingHandImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n notCompletedImageUrl={props.notCompletedImageUrl}\n filter={filter}\n />\n )}\n\n {!!data.length && (\n <div ref={ref} className={`d-flex${data.length ? ` ${styles.hasResults}` : ''}`}>\n <Table\n columns={fixedColumns}\n data={data}\n theme={fixedTableTheme}\n onSelectRow={onSelectStudent}\n onRowMouseOver={row => onRowHover(row.index)}\n onRowMouseLeave={() => onRowHover()}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n <Table\n columns={resultColumns}\n data={data}\n theme={resultsTableTheme}\n enableSlider\n scrollIncrement={RESULTS_COL_WIDTH * 8}\n onSelectCell={onSelectStudentResponse}\n scrollContainerClassName='rounded-end border border-start-0 border'\n />\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qSeTe\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-students.scss';\n\nexport function PartialInteractiveInsightsStudents() {\n return (\n <div>\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 px-4 mb-0 me-4 partial-loading-background'>&nbsp;</p>\n <div className='row g-2 w-50'>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'>&nbsp;</div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'>&nbsp;</div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'>&nbsp;</div>\n </div>\n </div>\n </div>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { StudentResultsTable } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTable';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents';\n\ninterface InteractiveInsightsStudentsProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n isFetching: boolean;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n anonymiseUsers: boolean;\n viewStudentResults: (\n user: UserOrAnonSession,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n hasDataLoaded: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function InteractiveInsightsStudents(props: InteractiveInsightsStudentsProps) {\n return (\n <>\n {!props.hasDataLoaded &&\n <PartialInteractiveInsightsStudents />\n }\n\n {props.hasDataLoaded &&\n <StudentResultsTable\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n refreshTable={props.isFetching}\n viewStudentResults={props.viewStudentResults}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n sortBy={props.sortBy}\n filterBy={props.filterBy}\n anonymiseUsers={props.anonymiseUsers}\n notCompletedImageUrl={ImageUrls.Insights.JIGSAW}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n helpingHandImageUrl={ImageUrls.Insights.SPEECH_BUBBLE_HEART}\n anonSessions={props.anonSessions}\n />\n }\n </>\n );\n}"],"names":["DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","props","column","canSort","className","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","id","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","map","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","length","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","getPhrase","LanguageService","StudentResultsEmptyState","filter","EmptyState","src","notCompletedImageUrl","markingRequiredImageUrl","helpingHandImageUrl","emptyStateImageUrl","StudentResultsTableFilterButtons","toggleFilter","selectedFilter","updatedFilter","setFilter","getClassName","isFilterSelected","Text","namespace","phrase","fixedTableTheme","resultsTableTheme","StudentResultsTable","setSortBy","filterBy","fixedColumns","results","anonSessions","anonymiseUsers","resultColumns","interactive","interactiveMetadata","index","refreshTable","ArrayHelper","onRowHover","students","viewStudentResults","onRowMouseOver","onRowMouseLeave","PartialInteractiveInsightsStudents","InteractiveInsightsStudents","hasDataLoaded","isFetching","ImageUrls"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8224],{70376:(e,t,r)=>{r.d(t,{W:()=>c});var n=r(32735),a=r(91967);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var i=5e3;function c(e){var t,r,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,l=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],l=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(t,r)||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.")}()),u=l[0],s=l[1],f=n.useRef(null),d=function(){s((function(e){return!e})),f.current=window.setTimeout(d,c)};return n.useEffect((function(){f.current=window.setTimeout(d,c)}),[]),n.useEffect((function(){a.q.isFunction(e)&&e()}),[u]),function(){return window.clearTimeout(f.current)}}},38307:(e,t,r)=>{r.d(t,{c:()=>b,l:()=>g});var n=r(32735),a=r(232),o=r.n(a),i=r(8604),c=r(83345);const l={heatMap:"epapa",legend:"uhH4p"};function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var s="shared.engagementHeatMap",f="#f1f1f1",d=o().scale(["#daf07d","#08bd1a"]),m=[0,.01,.25,.5,.75,1];function y(e,t){return e?d(e/t).hex():f}function v(e,t){for(var r=[],n=0;n<e.length;n++){var a=n>0&&e[n-1],o=e[n],i=n<e.length-1&&e[n+1];o===a&&o===i||r.push("".concat(y(o,t)," ").concat(100/e.length*n,"%"))}return"linear-gradient(to right, ".concat(r.join(","),")")}function g(){var e=Math.max.apply(Math,m),t=100/m.length;return n.createElement("div",{className:"d-flex justify-content-between w-100"},n.createElement(c.x,{namespace:s,phrase:"less"}),n.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(l.legend)},m.map((function(r,a){return n.createElement("div",{key:a,style:{width:"".concat(t,"%"),backgroundColor:y(r,e)}})}))),n.createElement(c.x,{namespace:s,phrase:"more"}))}function b(e){var t,r,a,o=(0,i.O)(e.engagement),c=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return u(e)}(a=o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return n.createElement("div",{className:"border rounded ".concat(l.heatMap," ").concat(null!==(r=e.className)&&void 0!==r?r:""),style:{background:v(o,c)}})}},5255:(e,t,r)=>{r.d(t,{Y:()=>c});var n=r(70376),a=r(20354),o=r(30439);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e){var t,r=a.a.useGetFetch(),c=e&&o.o.getAnonSessions(e),l=a.a.useBasicFetch(c);return(0,n.W)((function(){return r(c)}),5e3),(null===(t=l.data)||void 0===t?void 0:t.length)?l.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(r={},n=t.sessionId,a=t,(n=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(n))in r?Object.defineProperty(r,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[n]=a,r));var r,n,a}),{}):{}}},74901:(e,t,r)=>{function n(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}r.d(t,{K:()=>o});var o=function(e){var t=[],r=[];return e.users&&t.push.apply(t,n(e.users)),e.classrooms&&r.push.apply(r,n(e.classrooms)),e.classroomGroups&&r.push.apply(r,n(e.classroomGroups)),{userId:t,groupId:r}}},8604:(e,t,r)=>{function n(e){return new Array(Math.ceil(e.videoDuration)).fill(null).map((function(t,r){return e.heatMap[r]||0}))}r.d(t,{O:()=>n})},40782:(e,t,r)=>{r.d(t,{I:()=>n,O:()=>l});var n,a=r(32735),o=r(2606),i=r(362);function c(e){var t=a.useCallback((function(t){if(t){var r=t.r.baseVal.value,n=2*Math.PI*r,a=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=a.toString()}}),[e.percentage]);return a.createElement("svg",null,a.createElement("circle",{r:(0,o.pu)(e.size),className:i.Z.backgroundCircle}),!(0,o.zR)(e.percentage)&&a.createElement("circle",{ref:t,r:(0,o.pu)(e.size),className:(0,o.V4)(e.percentage,e.scoreThresholds)}))}function l(e){var t,r=(0,o.Ki)(e.percentage),l=e.size||(e.layout===n.LabelInside?o.Mk.Large:o.Mk.Small),u=e.customLabel||(0,o.DV)(r);return e.layout===n.LabelOnly?a.createElement("span",{className:(0,o.IA)(r)},u):a.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&a.createElement("span",{className:"me-2"},u),a.createElement("div",{className:(0,o.tw)(l,r)},a.createElement(c,{percentage:r,size:l,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&a.createElement("span",{className:i.Z.centredPercentageText},u)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),l.defaultProps={layout:n.CircleOnly}},2606:(e,t,r)=>{r.d(t,{DV:()=>g,IA:()=>m,Ki:()=>v,Mk:()=>c,V4:()=>d,pu:()=>f,tw:()=>y,zR:()=>b});var n=r(94892),a=r(362);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t,r){return(t=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var c,l=.2,u=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(c||(c={}));var s=i(i(i({},c.ExtraSmall,{size:2}),c.Small,{size:2}),c.Large,{size:5.8});function f(e){var t=s[e].size,r=e===c.Large?u:l;return"".concat(t/2-2*r,"rem")}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?a.Z.circleSuccess:e>=t.MODERATE?a.Z.circleWarning:a.Z.circleDanger}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function y(e,t){var r="d-inline-block ".concat(a.Z.circleContainer);return e===c.Large&&(r+=" ".concat(a.Z.lgCircleContainer)),e===c.ExtraSmall&&(r+=" ".concat(a.Z.xsCircleContainer)),b(t)&&(r+=" ".concat(a.Z.pendingCircle)),r}function v(e){if(!b(e))return+e.toFixed(2)}function g(e){return b(e)?"--%":"".concat(Math.round(100*e),"%")}function b(e){return"number"!=typeof e}},94644:(e,t,r)=>{r.d(t,{r:()=>s});var n=r(50242),a=r(81886),o=r(67058),i=r(14553),c=r(49267),l=r(49075),u={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:l._,internalServerError:l._};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},u),t);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==n.o.InternalServer?o!==n.o.NotFound?o!==n.o.Forbidden?r.badRequest||a.Q.Ry.throw(new i.badRequest):r.forbidden||a.Q.Ry.throw(new i.forbidden.privacy):r.notFound||a.Q.Ry.throw(new i.notFound):r.internalServerError||a.Q.Ry.throw(new l._))}}},17913:(e,t,r)=>{r.d(t,{u:()=>i});var n=r(97395),a=r(110),o=r(62875),i={individualEngagement:function(e,t,r,a){var i=Object.assign({objectId:e},t);return r&&(i.sharerId=r),a&&(i.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map",i),key:(0,o.H)("engagement:".concat(e,":").concat(a),t,r),formatData:function(e){var t;return Object.assign(Object.assign({},e),{data:null===(t=e.data)||void 0===t?void 0:t.map((function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})}))})},normalize:!1}},aggregateEngagement:function(e,t,r,a){var i=Object.assign({objectId:e},t);return r&&(i.sharerId=r),a&&(i.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",i),key:(0,o.H)("aggregate:engagement:".concat(e,":").concat(a),t,r),formatData:function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})},normalize:!1}},views:function(e,t,r,i){var c=Object.assign(Object.assign({},e),{timeOffset:a.O.getTimezoneOffset()});return t&&(c.objectId=t),r&&(c.sharerId=r),i&&(c.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/video-views",c),key:(0,o.H)("video:views:".concat(t,":").concat(i),e,r),normalize:!1}}}},91286:(e,t,r)=>{r.d(t,{v:()=>i});var n=r(32735),a=r(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,r){var i=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){i.forEach((function(e){(0,a.r)(e.statusCode,t,r)}))}),[o(i),t,r])}},93322:(e,t,r)=>{r.d(t,{F:()=>o});var n=r(32735),a=r(13126);function o(){n.useEffect((function(){return a.e.lockContentWidth(),function(){return a.e.unlockContentWidth()}}),[])}},362:(e,t,r)=>{r.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
2
+ //# sourceMappingURL=8224-b9b5d3b1a5-lite.chunk.js.map