@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/5925-937fec8a93-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/DateRangeUtils.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { User } from 'libs/shared/interfaces';\n\nexport function useChunkedUsersResponse(usersIds: string[]) {\n const userIdChunks = ArrayHelper.chunk<string>(usersIds ?? [], 25);\n const usersResponse = Flight.useBasicFetchAll<User[]>(userIdChunks.map(chunk => UserRequests.getById(chunk)));\n const users = ArrayHelper.flatten<User>(usersResponse.data);\n return { users, isLoading: !usersResponse.hasCompleted, usersResponse };\n}","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}","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 { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { useChunkedUsersResponse } from 'libs/shared/apps/analytics/hooks/UseEngagementUsers';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { AnalyticsRequestFilter, Config, CurrentUser, Engagement, IndividualEngagementResponse, PlayerViewKey, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { getInsightsClipTabs, getInsightsInteractiveTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapViewProps {\n videoId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function InsightsHeatmapView(props: InsightsHeatmapViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { 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 videoRequest = VideoHelper.getVideoRequest(props.videoId, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const anonSessions = useAnonSessions(props.shareId);\n console.log(anonSessions);\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const requestFilter: AnalyticsRequestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n };\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n currentUser.data && VideoViewRequests.aggregateEngagement(\n props.videoId,\n requestFilter,\n currentUser.data.id,\n publicInteractiveAttempts\n )\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(currentUser.data &&\n VideoViewRequests.individualEngagement(\n props.videoId,\n requestFilter,\n currentUser.data?.id,\n publicInteractiveAttempts\n ));\n\n const userIds = individualEngagement.data?.data?.map(d => d.userId).filter(Boolean) || [];\n const { users, isLoading } = useChunkedUsersResponse(userIds);\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(currentUser.data &&\n VideoViewRequests.views(requestFilter, props.videoId, currentUser.data?.id, publicInteractiveAttempts));\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.videoId, MediaIdType.MasterObject)\n );\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError(video);\n\n const hasDataLoaded =\n currentUser.data &&\n videoViews.data &&\n video.data &&\n aggregateEngagement.data &&\n viewKey.data;\n\n const tableDataLoaded = !!individualEngagement.data && (!userIds.length || !isLoading);\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams,\n shareId: props.shareId\n };\n\n function getInsightsTabs() {\n if (props.typeId === MasterType.Interactive)\n return getInsightsInteractiveTabs(props.videoId, 'heatmap', params);\n\n if (props.typeId === MasterType.Clip)\n return getInsightsClipTabs(props.videoId, 'heatmap', params);\n\n return getInsightsVideoTabs(props.videoId, 'heatmap', params);\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data}\n videoViews={videoViews.data}\n config={config.data}\n users={users}\n viewKey={viewKey.data}\n hasDataLoaded={!!hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n anonSessions={anonSessions}\n />\n </div>\n );\n}"],"names":["useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","map","chunk","users","data","isLoading","hasCompleted","getPhrase","convertDateToUtcDateTimeString","date","utc","getInsightsDateRangePresets","minDate","Date","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","getAnalyticsRequestKey","baseKey","filter","sharerId","key","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","AppRouteHelper","updateParams","params","options","appLink","currentParams","keysToRemove","updatedParams","merge","updatedAppLink","InsightsHeatmapView","props","anonymiseUsers","hasShareFlowV2","hasPermissions","publicInteractiveAttempts","currentUser","videoRequest","videoId","typeId","video","config","anonSessions","shareId","console","log","audienceAppLinkParams","dateRangeAppLinkParams","requestFilter","aggregateEngagement","id","individualEngagement","userIds","d","Boolean","videoViews","viewKey","title","hasDataLoaded","tableDataLoaded","length","className","tabs","hasAnalytics","analyticsWebUrl"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6459],{84621:(e,t,a)=>{a.d(t,{L:()=>i});var n=a(32735),r=a(83914);const s={icon:"sAmpy",count:"faDs4"};function i(e){return n.createElement("section",{className:"d-flex flex-column border rounded p-3 h-100"},n.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},n.createElement("div",{className:"".concat(s.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},n.createElement(r.x,{svgName:e.svgName,size:r.S.Small})),n.createElement("div",{className:"d-flex flex-column ms-2"},n.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&n.createElement("div",{className:"".concat(s.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},21976:(e,t,a)=>{a.d(t,{x:()=>u});var n=a(32735),r=a(72306),s=a.n(r),i=a(70312),l=a.n(i),c=a(75896),o=a(70072),m=function(e){return{title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},labels:{enabled:!1},gridLineWidth:0,tickPixelInterval:1,startOnTick:!1,endOnTick:!1,min:-.2},xAxis:{title:{text:e,margin:8,style:o.d},labels:{style:o.d},lineWidth:0},legend:{enabled:!1},chart:{type:"column",backgroundColor:"transparent",height:"160px",spacingTop:20},plotOptions:{column:{dataLabels:{enabled:!1},enableMouseTracking:!1,minPointLength:8}}}};function u(e){return n.createElement(l(),{highcharts:s(),options:(a=e.chartData,r=m(e.label),i=null===(t=c.m.first(a.series))||void 0===t?void 0:t.data.some((function(e){return e.y>0})),Object.assign(Object.assign({},r),{yAxis:Object.assign(Object.assign({},r.yAxis),i?{min:-.2}:{min:0,max:1}),xAxis:Object.assign(Object.assign(Object.assign({},r.xAxis),e.xAxis),{categories:a.categories}),series:a.series}))});var t,a,r,i}},98551:(e,t,a)=>{a.d(t,{y:()=>m});var n=a(32735),r=a(77640),s=a(15611),i=a(40782),l=a(2606);const c={avatar:"uMuZt",image:"WdKiU"};var o=3;function m(e){return n.createElement(n.Fragment,null,e.students.length?n.createElement("ul",{className:"list-unstyled mb-2"},e.students.slice(0,o).map((function(t,a){return n.createElement("li",{key:a,className:"d-flex align-items-center mb-2"},n.createElement(r.t,{user:t,imageCdnUrl:e.imageCdnUrl,avatarClassName:c.avatar,detailsClassName:"ms-2",showDisplayName:!0,showSubText:!1,anonymiseUsers:e.anonymiseUsers}),n.createElement("div",{className:"d-flex align-items-center ms-auto"},n.createElement("span",{className:"me-2"},void 0===t.percentage?"- ":Math.round(100*t.percentage),"%"),n.createElement(i.O,{percentage:t.percentage,size:l.Mk.ExtraSmall})))}))):n.createElement("div",{className:"text-center"},n.createElement("img",{className:"".concat(c.image," mb-2"),src:e.imageUrl}),n.createElement("p",{className:"text-secondary mb-0",dangerouslySetInnerHTML:{__html:e.description}})),!!e.students.length&&e.appLink&&n.createElement(s.F,{appLink:e.appLink,className:"text-info mt-auto"},e.appLinkText))}},51870:(e,t,a)=>{a.d(t,{i:()=>g});var n=a(32735),r=a(23481),s=a(84621),i=a(21976),l=a(70072),c=a(83345),o=a(35223);const m={purpleChart:"OPcvi",grayChart:"HlWj7"};function u(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 d="shared.insightDevices",p=r.T.encloseNamespace(d);function g(e){var t,a,r=function(){var t,a={Phone:0,Computer:0};return(null===(t=e.osCount)||void 0===t?void 0:t.length)?e.osCount.reduce((function(e,t){if(!t.name)return e;var a=function(e){switch(e){case"Android":case"Windows Phone":case"iOS":case"BlackBerry":return"Phone";case"Linux":case"Unix":case"Macintosh":case"Windows":return"Computer"}}(t.name);return a?(e[a]=e[a]+t.count,e):e}),a):a}(),g=Math.max.apply(Math,function(e){if(Array.isArray(e))return u(e)}(a=Object.keys(r).map((function(e){return r[e]})))||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 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)?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.")}()),v=Object.keys(r).filter((function(e){return r[e]===g})),h={categories:Object.keys(r),series:[{type:"column",borderRadius:4,dataLabels:{enabled:!0,style:l.d,inside:!1,overflow:"allow",crop:!1},data:Object.keys(r).map((function(e){var t=0!==g&&r[e]===g;return{className:"".concat(0===r[e]?m.grayChart:m.purpleChart," ").concat(t?"":"opacity-25"),borderWidth:t?2:0,borderColor:t?"black":"",y:r[e]}}))}]};return n.createElement(s.L,{title:p("title"),svgClassName:"bg-light-ultramarine text-ultramarine",svgName:o.vn.Monitor},n.createElement("p",{className:"mb-0"},(null===(t=e.osCount)||void 0===t?void 0:t.filter((function(e){return e.name})).length)?n.createElement(c.x,{namespace:d,phrase:"description",options:{smartCount:v.length,device:1===v.length?v[0].toLowerCase():null}}):n.createElement(c.x,{namespace:d,phrase:"notViewed"})),n.createElement("div",{className:"position-relative mt-auto"},n.createElement(i.x,{label:p("device"),chartData:h,xAxis:{labels:{useHTML:!0,formatter:function(){return'\n <div class="d-flex flex-column align-items-center">\n <span class="'.concat(m.font,' font-size-sm text-dark mb-1">').concat(this.value,"</span>\n ").concat(function(e){var t="";switch(e){case"Computer":t=o.vn.Monitor;break;case"Phone":t=o.vn.Mobile;break;case"Tablet":t=o.vn.Tablet;break;default:return}return o.Nj.getSvg(t).replace(/<svg[^>]*>/g,'<svg class="svg-container">')}(this.value),"\n </div>\n ")}}}})))}},50916:(e,t,a)=>{a.d(t,{b:()=>p});var n=a(32735),r=a(23481),s=a(38307),i=a(84621),l=a(15611),c=a(83345),o=a(35223);const m={heatMap:"Rfr9N",heatMapTimepointIndicator:"s6JbA",heatMapTimepointIndicatorVisible:"mgjWX"};var u="shared.insightHeatmap",d=r.T.encloseNamespace(u);function p(e){var t=e.engagement.engagementRate>0?Math.round(100*e.engagement.engagementRate):null;return n.createElement(i.L,{title:d("title"),svgName:o.vn.Timer,svgClassName:"bg-light-green text-green"},n.createElement("div",{className:"mb-2"},n.createElement("p",{className:"mb-0"},t?n.createElement(c.x,{namespace:u,phrase:"everyoneWatched",options:{engagementRate:t}}):n.createElement(c.x,{namespace:u,phrase:"notWatched"})),!!t&&n.createElement(l.F,{appLink:e.heatmapAppLink,className:"text-info"},n.createElement(c.x,{namespace:u,phrase:"viewHeatmap"}))),n.createElement("div",{className:"mb-2"},n.createElement(s.c,{engagement:e.engagement,className:m.heatMap})),n.createElement("p",{className:"h3 text-center mb-2"},t||"--","%"),n.createElement("p",{className:"text-center mb-0 font-size-sm"},n.createElement(c.x,{namespace:u,phrase:"amountWatched"})))}},70072:(e,t,a)=>{a.d(t,{d:()=>n});var n={fontSize:"12px",fontFamily:'"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',fontWeight:"400",color:"#313543"}},77640:(e,t,a)=>{a.d(t,{t:()=>p});var n=a(32735),r=a(23481),s=a(26136),i=a(97408),l=a(83914),c=a(76881),o=a(86613),m=a(64818),u=a(26521),d=r.T.encloseNamespace("shared.userRecipientItemMetadata");function p(e){var t,a,r,p,g,v=(r=(t=e).user,p=t.anonymiseUsers,g=t.showDisplayName,"sessionId"in r?{name:(0,s.B2)(r,p),surname:"",avatarUrl:null}:{name:p?(0,s.B2)(r,!0):g?m.l.getDisplayName(r):m.l.getFullName(r),surname:r.surname,avatarUrl:null===(a=r.avatar)||void 0===a?void 0:a.url}),h=v.name,b=v.surname,f=v.avatarUrl;return n.createElement(n.Fragment,null,n.createElement("div",{className:"".concat(u.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block")},n.createElement(i.q,{imageUrl:f,imageCdnUrl:e.imageCdnUrl,initials:m.l.getInitials(h,b),showAnonymousUser:"sessionId"in e.user,anonymiseUsers:e.anonymiseUsers,anonymousSvgSize:l.S.Small})),n.createElement("div",{className:e.detailsClassName},n.createElement("h4",{className:"font-size-normal fw-normal m-0"},h),e.showSubText&&"id"in e.user&&n.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=m.l.getUserType(e),a=m.l.getUserRole(e);if(t===c.Y.Staff)return a===o.i.Admin?d("admin"):d("staff");var n=m.l.getYearGroup(e);return(null==n?void 0:n.name)&&"Learners"!==n.name?n.name:d("student")}(e.user))))}p.defaults={showSubText:!0}},53214:(e,t,a)=>{a.d(t,{u:()=>h});var n=a(32735),r=a(91693),s=a(83345),i=a(4594),l=a(35223),c=a(99742),o=a(14070),m=a(97291),u=a(86099),d=a(38279);function p(e){return p="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},p(e)}function g(e,t,a){return(t=function(e){var t=function(e){if("object"!=p(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=p(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var v="lite.insightsMask";function h(e){return n.createElement("div",{className:"".concat(!e.hasShared&&d.Z.mask," position-relative")},n.createElement("div",{className:e.hasShared?"":"position-absolute"},e.children),n.createElement("div",{className:e.hasShared?"":"".concat(d.Z.backdrop," d-flex flex-column align-items-center justify-content-start py-5")},!e.hasShared&&n.createElement("div",{className:"text-center p-5 m-5 w-50"},n.createElement("img",{className:"mb-3",src:c.W.Insights.SEND_PAPER_PLANE,width:288}),n.createElement("h2",{className:"h3 mb-3"},n.createElement(s.x,{namespace:v,phrase:"shareHeading"})),n.createElement("p",{className:"mb-3"},n.createElement(s.x,{namespace:v,phrase:"shareDescription"})),n.createElement(r.h,{svgName:l.vn.Share,className:"btn btn-dark",appLink:function(){var t;if(e.hasShareFlowV2){var a=g(g(g({},i.E.Video,o.e.Insights.VIDEO_SHARE_OPTIONS),i.E.Clip,o.e.Insights.CLIP_SHARE_OPTIONS),i.E.Interactive,o.e.Insights.INTERACTIVE_SHARE_OPTIONS);return{application:m.O.INSIGHTS,action:a[e.video.typeId],args:[null===(t=e.video)||void 0===t?void 0:t.id],params:{shareId:e.shareId}}}return(0,u.YK)(e.video)}()},n.createElement(s.x,{namespace:v,phrase:"share"})))))}},26521:(e,t,a)=>{a.d(t,{Z:()=>n});const n={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}},38279:(e,t,a)=>{a.d(t,{Z:()=>n});const n={mask:"VRTes",backdrop:"XzVXl"}}}]);
2
+ //# sourceMappingURL=6459-ac139cb154-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6459-ac139cb154-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-chart/InsightChart.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/insight-student-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/InsightStudentList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/insight-devices.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/InsightDevices.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/insight-heatmap.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/InsightHeatmap.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-mask/InsightsShareMask.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-mask/insights-mask.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\n\nconst getStaticChartOptions = (label: string): Highcharts.Options => {\n return {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n enabled: false\n },\n gridLineWidth: 0,\n tickPixelInterval: 1,\n startOnTick: false,\n endOnTick: false,\n min: -0.2\n },\n xAxis: {\n title: {\n text: label,\n margin: 8,\n style: CHART_FONT_STYLES\n },\n labels: {\n style: CHART_FONT_STYLES\n },\n lineWidth: 0\n },\n legend: {\n enabled: false\n },\n chart: {\n type: 'column',\n backgroundColor: 'transparent',\n height: '160px',\n spacingTop: 20\n },\n plotOptions: {\n column: {\n dataLabels: {\n enabled: false\n },\n enableMouseTracking: false,\n minPointLength: 8\n }\n }\n };\n};\n\ninterface InsightChartProps {\n label: string;\n chartData: ChartData;\n xAxis?: Highcharts.XAxisOptions;\n}\n\nexport function InsightChart(props: InsightChartProps) {\n function getChartOptions(): Highcharts.Options {\n const data = props.chartData;\n const staticChartOptions = getStaticChartOptions(props.label);\n\n const hasData = ArrayHelper.first(data.series)?.data.some((data: Highcharts.PointOptionsObject) => data.y > 0);\n\n return {\n ...staticChartOptions,\n yAxis: {\n ...staticChartOptions.yAxis,\n ...(hasData ? {\n min: -0.2\n } : {\n min: 0,\n max: 1\n })\n },\n xAxis: {\n ...staticChartOptions.xAxis,\n ...props.xAxis,\n categories: data.categories\n },\n series: data.series\n };\n }\n\n return (\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions()}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"uMuZt\",\"image\":\"WdKiU\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { ProgressCircleSize } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\n\nimport styles from './insight-student-list.scss';\n\ntype UserPercentage = UserOrAnonSession & {\n percentage?: number;\n}\n\nconst MAX_ITEMS = 3;\n\ninterface InsightStudentListProps {\n students: UserPercentage[];\n imageUrl: string;\n imageCdnUrl: string;\n description: string;\n anonymiseUsers: boolean;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\nexport function InsightStudentList(props: InsightStudentListProps) {\n return (\n <>\n {props.students.length ? (\n <ul className='list-unstyled mb-2'>\n {props.students.slice(0, MAX_ITEMS).map((student, index) => (\n <li key={index} className='d-flex align-items-center mb-2'>\n <UserRecipientItemMetadata\n user={student}\n imageCdnUrl={props.imageCdnUrl}\n avatarClassName={styles.avatar}\n detailsClassName='ms-2'\n showDisplayName\n showSubText={false}\n anonymiseUsers={props.anonymiseUsers}\n />\n\n <div className='d-flex align-items-center ms-auto'>\n <span className='me-2'>{student.percentage === undefined ? '- ' : Math.round(student.percentage * 100)}%</span>\n <PercentageIndicator percentage={student.percentage} size={ProgressCircleSize.ExtraSmall} />\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <div className='text-center'>\n <img className={`${styles.image} mb-2`} src={props.imageUrl} />\n <p className='text-secondary mb-0' dangerouslySetInnerHTML={{ __html: props.description }} />\n </div>\n )}\n\n {!!props.students.length && props.appLink && (\n <AppLink appLink={props.appLink} className='text-info mt-auto'>\n {props.appLinkText}\n </AppLink>\n )}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"purpleChart\":\"OPcvi\",\"grayChart\":\"HlWj7\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightChart } from 'libs/shared/apps/analytics/components/insight-chart/InsightChart';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary, SvgHelper } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-devices.scss';\n\nconst namespace = 'shared.insightDevices';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n// Names from UserAgentHelper.getOperatingSystem()\nfunction getDeviceType(name: string) {\n switch (name) {\n case 'Android':\n case 'Windows Phone':\n case 'iOS':\n case 'BlackBerry':\n return 'Phone';\n case 'Linux':\n case 'Unix':\n case 'Macintosh':\n case 'Windows':\n return 'Computer';\n }\n}\n\nfunction getDeviceIcon(name: string) {\n let svgName = '';\n \n switch (name) {\n case 'Computer':\n svgName = cvSvgLibrary.Monitor;\n break;\n case 'Phone':\n svgName = cvSvgLibrary.Mobile;\n break;\n case 'Tablet':\n svgName = cvSvgLibrary.Tablet;\n break;\n default: return;\n }\n \n // Default svg attributes causes Highcharts error\n return SvgHelper.getSvg(svgName).replace(/<svg[^>]*>/g, '<svg class=\"svg-container\">');\n}\n\ninterface InsightDevicesProps {\n osCount: GroupedAnalyticsCount[]\n}\n\nexport function InsightDevices(props: InsightDevicesProps) {\n const categoriesData = getCategoriesData();\n const topDeviceCount = getTopDeviceCount();\n const topDevices = getTopDevices();\n\n function getCategoriesData() {\n const defaultDevices: HashObject = { Phone: 0, Computer: 0 };\n\n if (!props.osCount?.length)\n return defaultDevices;\n\n return props.osCount.reduce((acc, group) => {\n if (!group.name) return acc;\n\n const deviceCategory = getDeviceType(group.name);\n\n if (!deviceCategory) return acc;\n\n acc[deviceCategory] = acc[deviceCategory] + group.count;\n\n return acc;\n }, defaultDevices);\n }\n\n function getTopDeviceCount() {\n return Math.max(...Object.keys(categoriesData).map(category => categoriesData[category]));\n }\n\n function getTopDevices() {\n return Object.keys(categoriesData).filter(category => categoriesData[category] === topDeviceCount);\n }\n\n function getXAxisLabelIcons(): any {\n return {\n labels: {\n useHTML: true,\n formatter: function () {\n return `\n <div class=\"d-flex flex-column align-items-center\">\n <span class=\"${styles.font} font-size-sm text-dark mb-1\">${this.value}</span>\n ${getDeviceIcon(this.value)}\n </div>\n `;\n }\n }\n };\n }\n\n function getChartData(): ChartData {\n return {\n categories: Object.keys(categoriesData),\n series: [{\n type: 'column',\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n overflow: 'allow',\n crop: false\n },\n data: Object.keys(categoriesData).map(category => {\n const highestCount =\n topDeviceCount !== 0 && categoriesData[category] === topDeviceCount;\n\n return {\n className: `${categoriesData[category] === 0 ? styles.grayChart : styles.purpleChart} ${!highestCount ? 'opacity-25' : ''}`,\n borderWidth: highestCount ? 2 : 0,\n borderColor: highestCount ? 'black' : '',\n y: categoriesData[category]\n };\n })\n }]\n };\n }\n\n const chartData = getChartData();\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgClassName='bg-light-ultramarine text-ultramarine'\n svgName={cvSvgLibrary.Monitor}\n >\n <p className='mb-0'>\n {props.osCount?.filter(group => group.name).length\n ? (\n <Text\n namespace={namespace}\n phrase='description'\n options={{\n smartCount: topDevices.length,\n device: topDevices.length === 1 ? topDevices[0].toLowerCase() : null\n }}\n />\n ) : (\n <Text\n namespace={namespace}\n phrase='notViewed'\n />\n )}\n </p>\n\n <div className='position-relative mt-auto'>\n <InsightChart label={getPhrase('device')} chartData={chartData} xAxis={getXAxisLabelIcons()} />\n </div>\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"Rfr9N\",\"heatMapTimepointIndicator\":\"s6JbA\",\"heatMapTimepointIndicatorVisible\":\"mgjWX\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-heatmap.scss';\n\nconst namespace = 'shared.insightHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHeatmapProps {\n engagement: Engagement;\n heatmapAppLink: Core.AppLink;\n}\n\nexport function InsightHeatmap(props: InsightHeatmapProps) {\n const engagementRate = props.engagement.engagementRate > 0 ? Math.round(props.engagement.engagementRate * 100) : null;\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='mb-2'>\n <p className='mb-0'>\n {engagementRate\n ? (\n <Text namespace={namespace} phrase='everyoneWatched' options={{ engagementRate }} />\n )\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n {!!engagementRate &&\n <AppLink appLink={props.heatmapAppLink} className='text-info'>\n <Text namespace={namespace} phrase='viewHeatmap' />\n </AppLink>\n }\n </div>\n\n <div className='mb-2'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n </div>\n\n <p className='h3 text-center mb-2'>{engagementRate || '--'}%</p>\n <p className='text-center mb-0 font-size-sm'><Text namespace={namespace} phrase='amountWatched' /></p>\n </InsightCard>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: UserOrAnonSession,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if ('sessionId' in user) {\n return {\n name: anonymiseUserName(user, anonymiseUsers),\n surname: '',\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: UserOrAnonSession;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={'sessionId' in props.user}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {name}\n </h4>\n {props.showSubText && 'id' in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport styles from './insights-mask.scss';\n\nconst namespace = 'lite.insightsMask';\n\ninterface InsightsShareMaskProps extends React.PropsWithChildren {\n hasShared: boolean;\n video: VideoTypes;\n hasShareFlowV2?: boolean;\n shareId?: string;\n}\n\nexport function InsightsShareMask(props: InsightsShareMaskProps) {\n function buildAppLink() {\n if (props.hasShareFlowV2) {\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 getShareAppLink(props.video);\n }\n\n return (\n <div className={`${!props.hasShared && styles.mask} position-relative`}>\n <div className={!props.hasShared ? 'position-absolute' : ''}>{props.children}</div>\n <div\n className={!props.hasShared ? `${styles.backdrop} d-flex flex-column align-items-center justify-content-start py-5` : ''}\n >\n {!props.hasShared && (\n <div className='text-center p-5 m-5 w-50'>\n <img className='mb-3' src={ImageUrls.Insights.SEND_PAPER_PLANE} width={288} />\n <h2 className='h3 mb-3'><Text namespace={namespace} phrase='shareHeading' /></h2>\n <p className='mb-3'><Text namespace={namespace} phrase='shareDescription' /></p>\n <IconButton svgName={cvSvgLibrary.Share} className='btn btn-dark' appLink={buildAppLink()}>\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n )}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","// extracted by mini-css-extract-plugin\nexport default {\"mask\":\"VRTes\",\"backdrop\":\"XzVXl\"};"],"names":["InsightCard","props","className","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","getStaticChartOptions","label","text","credits","enabled","yAxis","labels","gridLineWidth","tickPixelInterval","startOnTick","endOnTick","min","xAxis","margin","style","lineWidth","legend","chart","type","backgroundColor","height","spacingTop","plotOptions","column","dataLabels","enableMouseTracking","minPointLength","InsightChart","highcharts","options","data","chartData","staticChartOptions","hasData","series","some","y","max","categories","MAX_ITEMS","InsightStudentList","students","length","slice","map","student","index","key","UserRecipientItemMetadata","user","imageCdnUrl","avatarClassName","detailsClassName","showDisplayName","showSubText","anonymiseUsers","undefined","percentage","Math","round","PercentageIndicator","src","imageUrl","dangerouslySetInnerHTML","__html","description","appLink","AppLink","appLinkText","namespace","getPhrase","LanguageService","InsightDevices","categoriesData","defaultDevices","Phone","Computer","osCount","reduce","acc","group","name","deviceCategory","getDeviceType","getCategoriesData","topDeviceCount","Object","keys","category","topDevices","filter","borderRadius","inside","overflow","crop","highestCount","borderWidth","borderColor","Text","phrase","smartCount","device","toLowerCase","useHTML","formatter","this","value","SvgHelper","replace","getDeviceIcon","InsightHeatmap","engagementRate","engagement","heatmapAppLink","EngagementHeatMap","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","surname","avatarUrl","avatar","url","initials","showAnonymousUser","anonymousSvgSize","getSubText","userType","role","yearGroup","defaults","InsightsShareMask","hasShared","width","hasShareFlowV2","actions","application","action","video","typeId","args","id","params","shareId","buildAppLink"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 6629-4edaed39c8-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6629],{86995:(e,t,r)=>{r.d(t,{a:()=>p});var n=r(32735),o=r(68050),i=r(69111),a=r(42272),c=r(93975),s=r(89965);function u(e){var t=n.useId();return n.createElement("div",{className:"d-flex"},n.createElement(s.X,{id:t,onChange:e.onClick,checked:e.toggled}),n.createElement("div",{className:"d-flex flex-column"},n.createElement("label",{className:"m-0",htmlFor:""},e.title),n.createElement("p",{className:"m-0 text-secondary"},e.description)))}var l=r(82444),f=r(4315);function h(e){return"classroom"===e.type?n.createElement(l.b,{selectedClassroom:e.selectedClassroom,onChangeClassroom:e.onChangeClassroom}):"open-classroom"===e.type?n.createElement(f.e,{shareLink:{type:c.y.Open,privacy:a.e.PinCode}}):void 0}function p(e){return n.createElement("div",{className:"d-flex flex-column gap-4 ".concat(e.className)},n.createElement(h,Object.assign({},e)),n.createElement(o.Z,null,n.createElement(i.Z,{sm:12,lg:6},n.createElement(u,{title:"Prevent skipping ahead",description:"Students cannot skip ahead to parts of the video they have not watched",toggled:e.preventSkippingAhead,onClick:e.onTogglePreventSkippingAhead})),e.isInteractive&&n.createElement(i.Z,{sm:12,lg:6},n.createElement(u,{title:"Enable instant feedback",description:"Allow students to see feedback on their answers before continuing",toggled:e.enableInstantFeedback,onClick:e.onToggleEnableInstantFeedback}))),"classroom"===e.type&&n.createElement("div",null,n.createElement("label",null,"Add a message for your students (optional)"),n.createElement("br",null),n.createElement("textarea",{className:"form-control",placeholder:"Type a message...",value:e.message,onChange:function(t){return e.onChangeMessage(t.target.value)}})))}},82444:(e,t,r)=>{r.d(t,{b:()=>c});var n=r(32735),o=r(42272),i=r(93975),a=r(4315);function c(e){return n.createElement("div",{className:"d-flex align-items-center w-100 rounded gap-2 justify-content-between"},n.createElement("div",{className:"flex-grow-1"},n.createElement(a.e,{shareLink:{type:i.y.Classroom,privacy:o.e.Direct},classroomName:e.selectedClassroom.name})),n.createElement("div",{className:"d-flex align-items-center"},n.createElement("a",{className:"cursor-pointer text-info",onClick:e.onChangeClassroom},"Change classroom")))}},4315:(e,t,r)=>{r.d(t,{e:()=>h});var n=r(32735),o=r(12528),i=r(83914),a=r(4594),c=r(35223),s=r(42272),u=r(93975);function l(e){return l="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},l(e)}function f(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e){var t,r,c,l,f;return n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"d-flex align-items-center justify-content-center"},n.createElement("div",null,n.createElement(o.f,{svgName:p[e.shareLink.type],variant:y[e.shareLink.type],textVariant:"white",svgWrapperClassName:null!==(t=e.svgWrapperClassName)&&void 0!==t?t:"p-1",svgSize:null!==(r=e.svgSize)&&void 0!==r?r:i.S.Standard})),n.createElement("div",{className:"d-flex flex-column ms-2"},n.createElement("label",{className:"m-0"},(l=(c=e).shareLink,f=c.classroomName,l.type===u.y.Classroom&&f?f:d[l.type])),!e.hideSubtitle&&n.createElement("span",{className:"text-secondary"},function(e){var t,r,n,o,i=e.shareLink;if(i.type===u.y.Classroom){var c=null!==(r=null===(t=i.recipients)||void 0===t?void 0:t.filter((function(e){return e.recipientTypeId===a.E.ClassroomGroup})).length)&&void 0!==r?r:0,l=null!==(o=null===(n=i.recipients)||void 0===n?void 0:n.filter((function(e){return e.recipientTypeId===a.E.User})).length)&&void 0!==o?o:0;return c&&l?"".concat(c," ").concat(v(c,"group","groups"),", ").concat(l," ").concat(v(l,"student","students")," can view"):c?"".concat(c," ").concat(v(c,"group","groups")," can view"):l?"".concat(l," ").concat(v(l,"student","students")," can view"):"All students in classroom can view"}if(i.type===u.y.Open)return"Students watch using a PIN code";if(i.type===u.y.Link){if([s.e.JustMySchool,s.e.Protected].includes(i.privacy))return"Respect ratings and restrictions";if(i.privacy===s.e.JustMySchoolOverrideRestriction)return"Anyone in your school can view";if(i.privacy===s.e.ProtectedOverrideRestriction)return"Anyone signed into ClickView can view";if(i.privacy===s.e.Public)return"Anyone with a link can view";if(i.privacy===s.e.PinCode)return"Anyone with a PIN code can view"}return i.type===u.y.Live?"Live now":"Anyone signed into ClickView can view"}(e)))))}var p=f(f(f(f({},u.y.Open,c.vn.School),u.y.Link,c.vn.Link),u.y.Classroom,c.vn.Classrooms),u.y.Live,c.vn.Play),y=f(f(f(f({},u.y.Open,"blue"),u.y.Link,"black"),u.y.Classroom,"teal"),u.y.Live,"purple"),d=f(f(f(f({},u.y.Open,"Open classroom"),u.y.Link,"Link"),u.y.Classroom,"Classroom"),u.y.Live,"Live");function v(e,t,r){return 1===e?t:r}},42272:(e,t,r)=>{var n;r.d(t,{e:()=>n}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(n||(n={}))},93975:(e,t,r)=>{var n;r.d(t,{y:()=>n}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(n||(n={}))},91574:(e,t,r)=>{r.d(t,{o:()=>a});var n=r(99940),o=r(97395),i={namespace:"share-v2"},a={createShareLink:function(e,t,r,o){return{url:"/api/share/v2/shares",key:"create:share-v2:link",type:n.k.POST,data:e,normalizeOptions:i,invalidationKeys:["share:link:object:".concat(e.objectId),"privacy:".concat(e.objectId),"sent:shares","get:share-v2:shares:object"],success:t,error:r,always:o}},getShareLink:function(e,t,r,o){return{url:"/api/share/v2/shares/".concat(e),key:"get:share-v2:link:".concat(e),type:n.k.GET,normalizeOptions:i,success:t,error:r,always:o}},getSharesByObjectId:function(e,t,r,o){return{url:"/api/share/v2/shares/objects/".concat(e),key:"get:share-v2:shares:object:".concat(e),type:n.k.GET,normalizeOptions:i,success:t,error:r,always:o}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,a={scopeId:e.scopeId,limit:e.limit||25,offset:parseInt(e.cursor)||0},c=Object.values(a).join(":");return{url:o._.urlBuilder("/api/share/v2/shares/sent",a),key:"sent:shares-v2:".concat(c),formatData:function(e){return{data:e,count:e.length,pagination:{cursors:{next:a.offset+e.length}}}},type:n.k.GET,normalize:!1,success:t,error:r,always:i}},createPincode:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"create:share-v2:pincode",type:n.k.POST}},getPincode:function(e){return{url:"/api/share/v2/shares/pincode?code=".concat(e),key:"get:share-v2:pincode:".concat(e)}},getPincodeByShareId:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"get:share-v2:".concat(e,":pincode")}}}},93779:(e,t,r)=>{r.d(t,{t:()=>f});var n=r(20354),o=r(30439),i=r(42272),a=r(93975),c=r(91574);function s(e){return s="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},s(e)}function u(){u=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function f(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,r){return e[t]=r}}function h(e,t,r,n){var i=t&&t.prototype instanceof b?t:b,a=Object.create(i.prototype),c=new _(n||[]);return o(a,"_invoke",{value:P(e,r,c)}),a}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=h;var y="suspendedStart",d="suspendedYield",v="executing",m="completed",g={};function b(){}function w(){}function k(){}var E={};f(E,a,(function(){return this}));var S=Object.getPrototypeOf,x=S&&S(S(T([])));x&&x!==r&&n.call(x,a)&&(E=x);var L=k.prototype=b.prototype=Object.create(E);function O(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function I(e,t){function r(o,i,a,c){var u=p(e[o],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,c)}),(function(e){r("throw",e,a,c)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,c)}))}c(u.arg)}var i;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return i=i?i.then(o,o):o()}})}function P(t,r,n){var o=y;return function(i,a){if(o===v)throw Error("Generator is already running");if(o===m){if("throw"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var s=j(c,n);if(s){if(s===g)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=v;var u=p(t,r,n);if("normal"===u.type){if(o=n.done?m:d,u.arg===g)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=m,n.method="throw",n.arg=u.arg)}}}function j(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,j(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var i=p(o,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,g;var a=i.arg;return a?a.done?(r[t.resultName]=a.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function T(t){if(t||""===t){var r=t[a];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return i.next=i}}throw new TypeError(s(t)+" is not iterable")}return w.prototype=k,o(L,"constructor",{value:k,configurable:!0}),o(k,"constructor",{value:w,configurable:!0}),w.displayName=f(k,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===w||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,f(e,l,"GeneratorFunction")),e.prototype=Object.create(L),e},t.awrap=function(e){return{__await:e}},O(I.prototype),f(I.prototype,c,(function(){return this})),t.AsyncIterator=I,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new I(h(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},O(L),f(L,l,"Generator"),f(L,a,(function(){return this})),f(L,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=T,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(N),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function o(n,o){return c.type="throw",c.arg=t,r.next=n,o&&(r.method="next",r.arg=e),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(s&&u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(s){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,g):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),N(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;N(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:T(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}var l=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function c(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,c)}s((n=n.apply(e,t||[])).next())}))};function f(e){var t,r=n.a.useBasicFetch(o.o.getPrivacy(e)),s=n.a.useGetFetchAsync(),f=null===(t=r.data)||void 0===t?void 0:t.canManageAccess;return{createShareLink:function(e){return l(this,void 0,void 0,u().mark((function t(){var n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r.data){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,s(c.o.createShareLink({objectId:e.objectId,type:a.y.Link,privacy:e.privacy,optionRequest:{preventSkipping:e.preventSkipping,instantFeedback:e.instantFeedback}}));case 4:return n=t.sent,t.abrupt("return",n);case 6:case"end":return t.stop()}}),t)})))},createDirectShare:function(e){return l(this,void 0,void 0,u().mark((function t(){var n,o;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r.data){t.next=2;break}return t.abrupt("return");case 2:return n=e.requireSignIn?i.e.Direct:i.e.PinCode,t.next=5,s(c.o.createShareLink({objectId:e.objectId,type:a.y.Classroom,privacy:n,optionRequest:{preventSkipping:e.preventShipping,instantFeedback:e.instantFeedback},recipientRequest:e.recipients.map((function(t){return{recipientId:t,message:e.message,scopeId:e.scopeId}}))}));case 5:if(o=t.sent,n!==i.e.PinCode){t.next=9;break}return t.next=9,s(c.o.createPincode(o.shareId));case 9:return t.abrupt("return",o);case 10:case"end":return t.stop()}}),t)})))},createOpenSession:function(e){return l(this,void 0,void 0,u().mark((function t(){var n,o;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r.data){t.next=2;break}return t.abrupt("return");case 2:return n=i.e.PinCode,e.requireSignIn&&(n=e.respectRatingsAndRestrictions?f?i.e.JustMySchool:i.e.Protected:f?i.e.JustMySchoolOverrideRestriction:i.e.ProtectedOverrideRestriction),t.next=6,s(c.o.createShareLink({objectId:e.objectId,type:a.y.Open,privacy:n,optionRequest:{preventSkipping:e.preventSkipping,instantFeedback:e.instantFeedback}}));case 6:if(o=t.sent,n!==i.e.PinCode){t.next=10;break}return t.next=10,s(c.o.createPincode(o.shareId));case 10:return t.abrupt("return",o);case 11:case"end":return t.stop()}}),t)})))},canManageAccess:f,hasCompleted:r.hasCompleted}}},6629:(e,t,r)=>{r.r(t),r.d(t,{SessionFlowView:()=>m});var n=r(32735),o=r(39202),i=r(9111),a=r(13876),c=r(14070),s=r(97291),u=r(93779),l=r(86995);function f(e){return f="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},f(e)}function h(){h=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var i=t&&t.prototype instanceof b?t:b,a=Object.create(i.prototype),c=new _(n||[]);return o(a,"_invoke",{value:P(e,r,c)}),a}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var y="suspendedStart",d="suspendedYield",v="executing",m="completed",g={};function b(){}function w(){}function k(){}var E={};u(E,a,(function(){return this}));var S=Object.getPrototypeOf,x=S&&S(S(T([])));x&&x!==r&&n.call(x,a)&&(E=x);var L=k.prototype=b.prototype=Object.create(E);function O(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function I(e,t){function r(o,i,a,c){var s=p(e[o],e,i);if("throw"!==s.type){var u=s.arg,l=u.value;return l&&"object"==f(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,a,c)}),(function(e){r("throw",e,a,c)})):t.resolve(l).then((function(e){u.value=e,a(u)}),(function(e){return r("throw",e,a,c)}))}c(s.arg)}var i;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return i=i?i.then(o,o):o()}})}function P(t,r,n){var o=y;return function(i,a){if(o===v)throw Error("Generator is already running");if(o===m){if("throw"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var s=j(c,n);if(s){if(s===g)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=v;var u=p(t,r,n);if("normal"===u.type){if(o=n.done?m:d,u.arg===g)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=m,n.method="throw",n.arg=u.arg)}}}function j(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,j(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var i=p(o,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,g;var a=i.arg;return a?a.done?(r[t.resultName]=a.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function T(t){if(t||""===t){var r=t[a];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return i.next=i}}throw new TypeError(f(t)+" is not iterable")}return w.prototype=k,o(L,"constructor",{value:k,configurable:!0}),o(k,"constructor",{value:w,configurable:!0}),w.displayName=u(k,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===w||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,u(e,s,"GeneratorFunction")),e.prototype=Object.create(L),e},t.awrap=function(e){return{__await:e}},O(I.prototype),u(I.prototype,c,(function(){return this})),t.AsyncIterator=I,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new I(l(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},O(L),u(L,s,"Generator"),u(L,a,(function(){return this})),u(L,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=T,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(N),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function o(n,o){return c.type="throw",c.arg=t,r.next=n,o&&(r.method="next",r.arg=e),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(s&&u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(s){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,g):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),N(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;N(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:T(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function p(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,o,i,a,c=[],s=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){u=!0,o=e}finally{try{if(!s&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||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}}(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 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 d=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function c(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,c)}s((n=n.apply(e,t||[])).next())}))};function v(e){return n.createElement("div",{className:"d-flex flex-column gap-3"},n.createElement(l.a,{type:"open-classroom",enableInstantFeedback:e.enableInstantFeedback,preventSkippingAhead:e.preventSkippingAhead,isInteractive:"interactive"===e.entityType,onTogglePreventSkippingAhead:e.onTogglePreventSkippingAhead,onToggleEnableInstantFeedback:e.onToggleEnableInstantFeedback}),n.createElement(a.u,null,n.createElement(a.u.Cancel,{variant:"link",onClick:e.onBack,text:"Back"}),n.createElement(a.u.Submit,{variant:"dark",onClick:e.onCreate,showSpinner:e.working,text:"Assign"})))}function m(e){var t=(0,u.t)(e.objectId).createOpenSession,r=p(n.useState(!1),2),a=r[0],l=r[1],f=p(n.useState(!1),2),y=f[0],m=f[1],g=p(n.useState(!1),2),b=g[0],w=g[1],k={entityType:e.entityType,working:b,enableInstantFeedback:y,preventSkippingAhead:a,isInteractive:"interactive"===e.entityType,onBack:function(){e.closePopup()},onCreate:function(){return d(this,void 0,void 0,h().mark((function r(){var n,i;return h().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return w(!0),r.next=3,t({instantFeedback:y,preventSkipping:a,requireSignIn:!1,respectRatingsAndRestrictions:!1,objectId:e.objectId});case 3:n=r.sent,i={video:c.e.Insights.VIDEO_SHARE_OPTIONS,clip:c.e.Insights.CLIP_SHARE_OPTIONS,interactive:c.e.Insights.INTERACTIVE_SHARE_OPTIONS,series:c.e.Insights.SERIES_SHARE_OPTIONS,playlist:c.e.Insights.PLAYLIST_SHARE_OPTIONS},o.C$.trigger({application:s.O.INSIGHTS,action:i[e.entityType],args:[e.objectId],params:{shareId:n.shareId}});case 6:case"end":return r.stop()}}),r)})))},onTogglePreventSkippingAhead:function(){return l(!a)},onToggleEnableInstantFeedback:function(){return m(!y)}};return e.noPopup?n.createElement(v,Object.assign({},k)):n.createElement(i.G,Object.assign({title:"Assign to an Open classroom",showLoadingSpinner:!1,size:"lg"},e),n.createElement(v,Object.assign({},k)))}}}]);
3
+ //# sourceMappingURL=6629-4edaed39c8-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6629-4edaed39c8-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/share-v2/components/section-setting-toggle-item/SectionSettingToggleItem.tsx","file:///app/packages/projects/lite/src/apps/share-v2/components/ClassroomSettingsSectioned.tsx","file:///app/packages/projects/lite/src/apps/share-v2/components/SelectedClassroomHeader.tsx","file:///app/packages/projects/lite/src/apps/share-v2/components/ShareAvatar.tsx","file:///app/packages/projects/lite/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/projects/lite/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/projects/lite/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/projects/lite/src/apps/share-v2/hooks/useCreateShare.ts","file:///app/packages/projects/lite/src/apps/share-v2/views/SessionFlowView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\n\ninterface SectionSettingToggleItemProps {\n title: string;\n description: string;\n toggled: boolean;\n onClick: () => void;\n}\n\nexport function SectionSettingToggleItem(props: SectionSettingToggleItemProps): JSX.Element {\n const id = React.useId();\n \n return (\n <div className='d-flex'>\n <Checkbox\n id={id}\n onChange={props.onClick}\n checked={props.toggled}\n />\n <div className='d-flex flex-column'>\n <label className='m-0' htmlFor=''>{props.title}</label>\n <p className='m-0 text-secondary'>{props.description}</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\n\nimport { SectionSettingToggleItem } from './section-setting-toggle-item/SectionSettingToggleItem';\nimport { SelectedClassroomHeader } from './SelectedClassroomHeader';\nimport { ShareAvatar } from './ShareAvatar';\n\ntype ClassroomSettingsType = 'open-classroom' | 'classroom';\n\ntype ClassroomSettingsTypeOptions = ({\n type: 'open-classroom'\n} | {\n type: 'classroom';\n message?: string;\n onChangeMessage: (message: string) => void;\n selectedClassroom: Classroom;\n onChangeClassroom: () => void;\n});\n\ntype ClassroomSettingsSectionedProps = {\n type: ClassroomSettingsType;\n preventSkippingAhead: boolean;\n enableInstantFeedback: boolean;\n isInteractive: boolean;\n className?: string;\n onTogglePreventSkippingAhead: () => void;\n onToggleEnableInstantFeedback: () => void;\n} & ClassroomSettingsTypeOptions;\n\n\ntype ClassroomSettingsSectionedDynamicProps = {\n type: ClassroomSettingsType;\n} & ClassroomSettingsTypeOptions;\n\nfunction ClassroomSettingsSectionedHeader(props: ClassroomSettingsSectionedDynamicProps): JSX.Element {\n if (props.type === 'classroom') {\n return (\n <SelectedClassroomHeader\n selectedClassroom={props.selectedClassroom}\n onChangeClassroom={props.onChangeClassroom}\n />\n );\n }\n\n if (props.type === 'open-classroom') {\n return (\n <ShareAvatar shareLink={{ type: ShareType.Open, privacy: SharePrivacy.PinCode }}/>\n );\n }\n}\n\nexport function ClassroomSettingsSectioned(props: ClassroomSettingsSectionedProps): JSX.Element {\n return (\n <div className={`d-flex flex-column gap-4 ${props.className}`}>\n <ClassroomSettingsSectionedHeader {...props} />\n\n <Row>\n <Col sm={12} lg={6}>\n <SectionSettingToggleItem\n title='Prevent skipping ahead'\n description='Students cannot skip ahead to parts of the video they have not watched'\n toggled={props.preventSkippingAhead}\n onClick={props.onTogglePreventSkippingAhead}\n />\n </Col>\n {props.isInteractive &&\n <Col sm={12} lg={6}>\n <SectionSettingToggleItem\n title='Enable instant feedback'\n description='Allow students to see feedback on their answers before continuing'\n toggled={props.enableInstantFeedback}\n onClick={props.onToggleEnableInstantFeedback}\n />\n </Col>\n }\n </Row>\n \n {props.type === 'classroom' &&\n <div>\n <label>Add a message for your students (optional)</label>\n <br />\n <textarea className='form-control' placeholder='Type a message...' value={props.message} onChange={e => props.onChangeMessage(e.target.value)} />\n </div>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\n\nimport { ShareAvatar } from './ShareAvatar';\n\ninterface SelectedClassroomHeaderProps {\n selectedClassroom: Classroom;\n onChangeClassroom: () => void;\n}\n\nexport function SelectedClassroomHeader(props: SelectedClassroomHeaderProps): JSX.Element {\n return (\n <div className={`d-flex align-items-center w-100 rounded gap-2 justify-content-between`}>\n <div className='flex-grow-1'>\n <ShareAvatar\n shareLink={{ type: ShareType.Classroom, privacy: SharePrivacy.Direct }}\n classroomName={props.selectedClassroom.name}\n />\n </div>\n <div className='d-flex align-items-center'>\n <a\n className='cursor-pointer text-info'\n onClick={props.onChangeClassroom}\n >\n Change classroom\n </a>\n </div>\n </div>\n );\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 { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\n\nimport { SharePrivacy } from 'apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareRequests as ShareRequestsV2 } from 'apps/share-v2/flight-requests/ShareRequests';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\ninterface CreateShareLinkOptions {\n objectId: string;\n privacy: SharePrivacy;\n preventSkipping: boolean;\n instantFeedback: boolean;\n}\n\ninterface CreateDirectShareOptions {\n objectId: string;\n preventShipping: boolean;\n instantFeedback: boolean;\n requireSignIn: boolean;\n message?: string;\n recipients: string[];\n scopeId: string | number;\n}\n\ninterface CreateOpenSessionOptions {\n objectId: string;\n preventSkipping: boolean;\n instantFeedback: boolean;\n requireSignIn: boolean;\n respectRatingsAndRestrictions: boolean;\n}\n\nexport function useCreateShare(objectId: string) {\n const accessPermissions = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequestsV1.getPrivacy(objectId));\n const fetchAsync = Flight.useGetFetchAsync();\n const canManageAccess = accessPermissions.data?.canManageAccess;\n\n async function createShareLink(options: CreateShareLinkOptions) {\n if (!accessPermissions.data) return;\n\n const shareLink = await fetchAsync<ShareLink>(ShareRequestsV2.createShareLink({\n objectId: options.objectId,\n type: ShareType.Link,\n privacy: options.privacy,\n optionRequest: {\n preventSkipping: options.preventSkipping,\n instantFeedback: options.instantFeedback\n }\n }));\n\n return shareLink;\n }\n\n async function createDirectShare(options: CreateDirectShareOptions) {\n if (!accessPermissions.data) return;\n\n const privacy = options.requireSignIn ? SharePrivacy.Direct : SharePrivacy.PinCode;\n\n const shareLink = await fetchAsync<ShareLink>(ShareRequestsV2.createShareLink({\n objectId: options.objectId,\n type: ShareType.Classroom,\n privacy,\n optionRequest: {\n preventSkipping: options.preventShipping,\n instantFeedback: options.instantFeedback\n },\n recipientRequest: options\n .recipients\n .map(recipientId => ({ recipientId, message: options.message, scopeId: options.scopeId }))\n }));\n\n if (privacy === SharePrivacy.PinCode)\n await fetchAsync(ShareRequestsV2.createPincode(shareLink.shareId));\n\n return shareLink;\n }\n\n async function createOpenSession(options: CreateOpenSessionOptions) {\n if (!accessPermissions.data) return;\n\n let privacy = SharePrivacy.PinCode;\n\n if (options.requireSignIn) {\n if (options.respectRatingsAndRestrictions) {\n privacy = canManageAccess ? SharePrivacy.JustMySchool : SharePrivacy.Protected;\n } else {\n privacy = canManageAccess\n ? SharePrivacy.JustMySchoolOverrideRestriction\n : SharePrivacy.ProtectedOverrideRestriction;\n }\n }\n\n const shareLink = await fetchAsync<ShareLink>(ShareRequestsV2.createShareLink({\n objectId: options.objectId,\n type: ShareType.Open,\n privacy,\n optionRequest: {\n preventSkipping: options.preventSkipping,\n instantFeedback: options.instantFeedback\n }\n }));\n\n if (privacy === SharePrivacy.PinCode)\n await fetchAsync(ShareRequestsV2.createPincode(shareLink.shareId));\n\n return shareLink;\n }\n\n return {\n createShareLink,\n createDirectShare,\n createOpenSession,\n canManageAccess,\n hasCompleted: accessPermissions.hasCompleted\n };\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useCreateShare } from 'apps/share-v2/hooks/useCreateShare';\n\nimport { ClassroomSettingsSectioned } from '../components/ClassroomSettingsSectioned';\n\ninterface SessionFlowViewProps extends PopupViewProps {\n objectId: string;\n entityType: 'video' | 'clip' | 'interactive' | 'series' | 'playlist';\n noPopup?: boolean;\n}\n\ninterface SessionFlowBodyProps {\n entityType: 'video' | 'clip' | 'interactive' | 'series' | 'playlist';\n \n working: boolean;\n isInteractive: boolean;\n preventSkippingAhead: boolean;\n enableInstantFeedback: boolean;\n\n onBack: () => void;\n onCreate: () => void;\n onTogglePreventSkippingAhead: () => void;\n onToggleEnableInstantFeedback: () => void;\n}\n\nfunction SessionFlowBody(props: SessionFlowBodyProps): JSX.Element {\n return (\n <div className='d-flex flex-column gap-3'>\n <ClassroomSettingsSectioned\n type='open-classroom'\n enableInstantFeedback={props.enableInstantFeedback}\n preventSkippingAhead={props.preventSkippingAhead}\n isInteractive={props.entityType === 'interactive'}\n onTogglePreventSkippingAhead={props.onTogglePreventSkippingAhead}\n onToggleEnableInstantFeedback={props.onToggleEnableInstantFeedback}\n />\n <PopupButtons>\n <PopupButtons.Cancel variant='link' onClick={props.onBack} text='Back' />\n <PopupButtons.Submit variant='dark' onClick={props.onCreate} showSpinner={props.working} text='Assign' />\n </PopupButtons>\n </div>\n );\n}\n\nexport function SessionFlowView(props: SessionFlowViewProps): JSX.Element {\n const { createOpenSession } = useCreateShare(props.objectId);\n const [ preventSkippingAhead, setPreventSkippingAhead ] = React.useState(false);\n const [ enableInstantFeedback, setEnableInstantFeedback ] = React.useState(false);\n const [ working, setWorking ] = React.useState(false);\n\n function onBack() {\n props.closePopup();\n }\n\n async function onCreate() {\n setWorking(true);\n\n const shareLink = await createOpenSession({\n instantFeedback: enableInstantFeedback,\n preventSkipping: preventSkippingAhead,\n requireSignIn: false,\n respectRatingsAndRestrictions: false,\n objectId: props.objectId\n });\n\n const actions = {\n video: Actions.Insights.VIDEO_SHARE_OPTIONS,\n clip: Actions.Insights.CLIP_SHARE_OPTIONS,\n interactive: Actions.Insights.INTERACTIVE_SHARE_OPTIONS,\n series: Actions.Insights.SERIES_SHARE_OPTIONS,\n playlist: Actions.Insights.PLAYLIST_SHARE_OPTIONS\n };\n\n AppLinkHelper.trigger({\n application: AppChannels.INSIGHTS,\n action: actions[props.entityType],\n args: [props.objectId],\n params: {\n shareId: shareLink.shareId\n }\n });\n }\n\n const sessionFlowBodyProps: SessionFlowBodyProps = {\n entityType: props.entityType,\n working,\n enableInstantFeedback,\n preventSkippingAhead,\n isInteractive: props.entityType === 'interactive',\n onBack,\n onCreate,\n onTogglePreventSkippingAhead: () => setPreventSkippingAhead(!preventSkippingAhead),\n onToggleEnableInstantFeedback: () => setEnableInstantFeedback(!enableInstantFeedback)\n };\n\n if (props.noPopup)\n return <SessionFlowBody {...sessionFlowBodyProps} />;\n\n return (\n <Popup\n title={'Assign to an Open classroom'}\n showLoadingSpinner={false}\n size='lg'\n {...props}\n >\n <SessionFlowBody {...sessionFlowBodyProps} />\n </Popup>\n );\n}"],"names":["SectionSettingToggleItem","props","id","className","Checkbox","onChange","onClick","checked","toggled","htmlFor","title","description","ClassroomSettingsSectionedHeader","type","SelectedClassroomHeader","selectedClassroom","onChangeClassroom","ShareAvatar","shareLink","ShareType","privacy","SharePrivacy","ClassroomSettingsSectioned","Row","Col","sm","lg","preventSkippingAhead","onTogglePreventSkippingAhead","isInteractive","enableInstantFeedback","onToggleEnableInstantFeedback","placeholder","value","message","e","onChangeMessage","target","classroomName","name","svgName","icons","variant","iconColours","textVariant","svgWrapperClassName","svgSize","S","titles","hideSubtitle","groupCount","recipients","filter","r","recipientTypeId","length","studentCount","pluralize","includes","getSubtitle","count","singular","plural","normalizeOptions","namespace","ShareRequests","createShareLink","data","success","error","always","url","key","invalidationKeys","objectId","getShareLink","shareId","getSharesByObjectId","getSentShares","params","adaptedParams","scopeId","limit","offset","parseInt","cursor","Object","values","join","formatData","response","pagination","cursors","next","normalize","createPincode","getPincode","code","getPincodeByShareId","useCreateShare","accessPermissions","fetchAsync","canManageAccess","options","optionRequest","preventSkipping","instantFeedback","createDirectShare","requireSignIn","preventShipping","recipientRequest","map","recipientId","createOpenSession","respectRatingsAndRestrictions","hasCompleted","SessionFlowBody","entityType","onBack","text","onCreate","showSpinner","working","SessionFlowView","setPreventSkippingAhead","setEnableInstantFeedback","setWorking","sessionFlowBodyProps","closePopup","actions","video","clip","interactive","series","playlist","application","action","args","noPopup","showLoadingSpinner","size"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6984],{26136:(e,t,n)=>{n.d(t,{B2:()=>o,DV:()=>u,jP:()=>c});var r=n(76198),i=n(23481),a=n(64818),s=i.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,r._8)((n="sessionId"in e?e.sessionName:e.id,i=+"".concat(n).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[r.O9,r.yd],separator:" ",length:2,style:"capital",seed:i})):"sessionId"in e?e.sessionName:a.l.getFullName(e):"";var n,i}function c(e,t){var n={sessionId:e,sessionName:s("anonymousUser")};return e&&t&&t[e]||n}function u(e,t){return e.user?e.user:c(e.sessionId,t)}},39157:(e,t,n)=>{n.d(t,{HI:()=>m,R6:()=>u,Rt:()=>g,UU:()=>d,Zs:()=>l,nq:()=>v});var r=n(75896),i=n(94892),a=n(28972),s=n(8246),o=n(83140),c=n(80845);function u(e,t,n){var a={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},s=(0,c.Q)(e).length;t.students.forEach((function(t){var o=Object.assign(Object.assign({},t),{summary:g(e,t)});o.summary.awaitingMarking?a.markingRequired.push(o):r.m.last(t.results).attempts.length===s?(a.completed.push(o),o.summary.percentCorrect>=((null==n?void 0:n.HIGH)||i.i.HIGH)&&a.highScore.push(o),o.summary.percentCorrect<((null==n?void 0:n.MODERATE)||i.i.MODERATE)&&a.lowScore.push(o)):a.notCompleted.push(o)}));var o=r.m.sortBy(a.lowScore,(function(e){return e.summary.percentCorrect})),u=r.m.sortBy(a.highScore,(function(e){return-e.summary.percentCorrect}));return Object.assign(Object.assign({},a),{lowScore:o,highScore:u})}function l(e,t){return(0,c.Wn)(e).find((function(e){return e.id.toString()===t.toString()}))}function d(e){return"".concat(e.questionId,":").concat(e.resultId)}function m(e,t,n){var r=(0,c.j_)(t),i=(0,c.f6)(e,r);return(null==i?void 0:i.answers.every((function(e){var t;return(null===(t=n[d(e)])||void 0===t?void 0:t.status)===s.N.Correct})))?s.N.Correct:(null==i?void 0:i.answers.every((function(e){var t;return(null===(t=n[d(e)])||void 0===t?void 0:t.status)===s.N.Incorrect})))?s.N.Incorrect:void 0}function v(e,t){var n=t.students.length,r=0,i=0,s=0,u=0,l=0;return t.students.forEach((function(t){var n=(0,c.j_)(t);if(n){l+=t.results.length;var d=o.A.isInteractionCorrect(e,n);d===a.w.Correct&&r++,d===a.w.UnAnswered&&s++,d===a.w.AwaitingMarking&&u++,d!==a.w.UnAnswered&&i++}})),{percentCorrect:n>0?r/n:0,correct:r,answered:i,unanswered:s,awaitingMarking:u,attempts:l}}function g(e,t){var n=(0,c.j_)(t),r=(0,c.Q)(e),i=r.length,s=0,u=0;r.forEach((function(e){var t=o.A.isInteractionCorrect(e,n);t===a.w.Correct&&s++,t===a.w.AwaitingMarking&&u++}));var l=i>0?s/i:0,d=new Set(r.map((function(e){return e.id}))),m=n.attempts.filter((function(e){var t;return!!d.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)})).length;return{answered:n.attempts.length,attempts:t.results.length,unanswered:i-m,percentCorrect:l,correct:s,awaitingMarking:u}}},94892:(e,t,n)=>{n.d(t,{T:()=>i,i:()=>r});var r={HIGH:.75,MODERATE:.5},i={HIGH:.7,MODERATE:.7}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},93322:(e,t,n)=>{n.d(t,{F:()=>a});var r=n(32735),i=n(13126);function a(){r.useEffect((function(){return i.e.lockContentWidth(),function(){return i.e.unlockContentWidth()}}),[])}},82433:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsStudentsDemoView:()=>k});var r=n(32735),i=n(81886),a=n(23481),s=n(2948),o=n(20354),c=n(26025),u=n(38143),l=n(54405),d=n(93322),m=n(79612),v=n(14070),g=n(97291),f=n(53936),h=n(78057),p=n(10447);function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var w=a.T.encloseNamespace("insights.interactiveInsightsStudents");function k(e){var t,n,a,k,I=(a=(0,s.D)(u.g.ANONYMISE_USERS),k=1,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw i}}return o}}(a,k)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(a,k)||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,d.F)();var S=o.a.useBasicFetch(l.X.interactiveMetadata()),E=o.a.useBasicFetch(l.X.interactive()),A=c.B.getAudienceAppLinkParams(),j=c.B.getDateRangeAppLinkParams(),C=o.a.useBasicFetch(l.X.interactiveResults()),M=E.data&&S.data&&!!C.data;(0,m.M)({title:S.data?w("pageTitle",{video:null===(t=S.data)||void 0===t?void 0:t.name}):null});var b=Object.assign(Object.assign({},A),j);return r.createElement("div",{className:"px-3"},r.createElement(f.j,{tabs:(0,p.aq)(null===(n=S.data)||void 0===n?void 0:n.id,"results",b),video:S.data,dateRangeAppLinkParams:j,isDemo:!0}),r.createElement(h.R,{interactiveMetadata:S.data,viewStudentResults:function(e,t,n){i.Q.C$.trigger({application:g.O.MY_SHARES,action:v.e.MyShares.INTERACTIVE_STUDENT_RESULTS_DEMO,params:{studentId:"id"in e?e.id:void 0,interactiveMetadataId:t,interactionId:n,sessionId:"sessionId"in e?e.sessionId:void 0}})},interactive:E.data,results:C.data,filterBy:e.filterBy,sortBy:e.sortBy,isFetching:C.isFetching,anonymiseUsers:I,hasDataLoaded:M}))}}}]);
2
+ //# sourceMappingURL=6984-9d8b378bcc-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6984-9d8b378bcc-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/InteractiveUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/students/InteractiveInsightsStudentsDemoView.tsx"],"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 { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n if (ArrayHelper.last(s.results).attempts.length === numInteractions) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: result.attempts.length,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\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 { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsDemoView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(InsightsDemoRequests.interactiveMetadata());\n\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data;\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n function viewStudentResults(\n user: UserOrAnonSession,\n interactiveMetadataId: string,\n interactionId?: string\n ) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENT_RESULTS_DEMO,\n params: {\n studentId: 'id' in user ? user.id : undefined,\n interactiveMetadataId,\n interactionId,\n sessionId: 'sessionId' in user ? user.sessionId : undefined\n }\n });\n }\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'results', params)}\n video={interactiveMetadata.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n isDemo\n />\n\n <InteractiveInsightsStudents\n interactiveMetadata={interactiveMetadata.data}\n viewStudentResults={viewStudentResults}\n interactive={interactive.data}\n results={results.data}\n filterBy={props.filterBy}\n sortBy={props.sortBy}\n isFetching={results.isFetching}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n />\n </div>\n );\n}"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","id","sessionName","seed","Math","floor","Date","getMinutes","dictionaries","separator","length","style","getAnonSession","sessionId","anonSessions","fallback","getUserOrAnonSession","result","groupStudents","interactive","results","scoreThreshold","groups","markingRequired","lowScore","highScore","completed","notCompleted","numInteractions","students","forEach","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","push","attempts","percentCorrect","HIGH","MODERATE","sortedLowScore","sortedHighScore","getInteractionById","interactionId","find","i","toString","getMarkedAnswerId","answer","questionId","resultId","getMarkedStatus","studentResults","markedAnswers","studentResponse","answers","every","a","status","getInteractionResultsSummary","interaction","numStudents","numCorrect","answered","unanswered","correctness","correct","interactions","interactionIds","Set","map","answeredInteractions","filter","has","ScoreThresholdDefaults","ScoreThresholdInsights","InsightsDemoRequests","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","useLockContentWidth","InteractiveInsightsStudentsDemoView","props","anonymiseUsers","audienceAppLinkParams","dateRangeAppLinkParams","hasDataLoaded","data","title","video","name","params","className","tabs","isDemo","viewStudentResults","interactiveMetadataId","application","action","studentId","undefined","filterBy","sortBy","isFetching"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7103],{94644:(e,t,n)=>{n.d(t,{r:()=>c});var r=n(50242),i=n(81886),o=n(67058),a=n(14553),u=n(49267),l=n(49075),s={notFound:o.d,forbidden:{rating:a.q,yearLevel:a.q,region:u.a,privacy:a.q},badRequest:l._,internalServerError:l._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var a=Object.assign(Object.assign({},s),t);o&&i.Q.Ry.isStatusCodeError(o)&&(o!==r.o.InternalServer?o!==r.o.NotFound?o!==r.o.Forbidden?n.badRequest||i.Q.Ry.throw(new a.badRequest):n.forbidden||i.Q.Ry.throw(new a.forbidden.privacy):n.notFound||i.Q.Ry.throw(new a.notFound):n.internalServerError||i.Q.Ry.throw(new l._))}}},39902:(e,t,n)=>{n.d(t,{F:()=>v,f:()=>f});var r=n(32735),i=n(20354),o=n(75896);function a(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)||u(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 u(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e){return s="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},s(e)}function c(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=50;function f(e,t){var n=o.m.chunk(e,d).map((function(e){return t(o.m.uniq(e))})),r=i.a.useBasicFetchAll(n),a=o.m.flatten(r.data),u=r.data.length?a.reduce((function(e,t){return Object.assign(Object.assign({},e),c({},t.id,t))}),{}):null;return{itemsArr:a,items:u,isFetching:r.isFetching}}function v(e,t,n){var l,f,v,h,m=n||function(e){return"object"===s(e)?e.id:e},p=r.useRef(new Set),g=(v=r.useState([]),h=2,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,u=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(u.push(r.value),u.length!==t);l=!0);}catch(e){s=!0,i=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(s)throw i}}return u}}(v,h)||u(v,h)||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=g[0],b=g[1];r.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=m(e);p.current.has(t)||(n.push(e),p.current.add(t))})),n.length&&b((function(e){return[].concat(a(e),a(o.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var C=i.a.useBasicFetchAll(y),A=o.m.flatten(C.data),F=C.data.length?A.reduce((function(e,t){return Object.assign(Object.assign({},e),c({},m(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(f=null===(l=C.responses)||void 0===l?void 0:l[0])||void 0===f?void 0:f.hasCompleted),itemsArr:A,items:F,isFetching:C.isFetching}}},91286:(e,t,n)=>{n.d(t,{v:()=>a});var r=n(32735),i=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function a(e,t,n){var a=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){a.forEach((function(e){(0,i.r)(e.statusCode,t,n)}))}),[o(a),t,n])}},60115:(e,t,n)=>{n.d(t,{K:()=>s});var r=n(32735),i=n(50242),o=n(91967),a=400,u=n(45719);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,s,c,d){var f,v,h,m,p=(f=(0,r.useState)(0),v=2,function(e){if(Array.isArray(e))return e}(f)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,u=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(u.push(r.value),u.length!==t);l=!0);}catch(e){s=!0,i=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(s)throw i}}return u}}(f,v)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(f,v)||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.")}()),g=p[0],y=p[1],b=t,C=(0,u.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),s,c);return h={fetchNextPage:function(){if(t&&e&&C)return y((function(e){return e+1})),b(C.nextCursor)},hasMore:!!(null==C?void 0:C.nextCursor),isFetching:null==C?void 0:C.isFetching,scrollContainer:d},m=function(){if(!h.isFetching){if(h.scrollContainer){var e=h.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-a)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-a)return;h.fetchNextPage()}},(0,r.useEffect)((function(){var e=o.q.throttle(m,200),t=h.scrollContainer||window;return h.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[h.hasMore,h.fetchNextPage,h.scrollContainer]),(0,r.useEffect)((function(){C&&C.shouldInitialFetch&&t&&(b(),y((function(e){return e+1})))}),[null==C?void 0:C.shouldInitialFetch,t]),(0,r.useEffect)((function(){var e,t;if((null==C?void 0:C.statusCode)&&o.q.isFunction(n)){var r=+(null===(t=null===(e=C.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==i.k.ClientError&&r!==i.k.ServerError||n(g,C.statusCode)}}),[null==C?void 0:C.statusCode]),{items:null==C?void 0:C.items,hasMore:!!(null==C?void 0:C.nextCursor),nextCursor:null==C?void 0:C.nextCursor,isFetching:null==C?void 0:C.isFetching,totalItems:null==C?void 0:C.totalItems,hasFirstPageCompleted:null==C?void 0:C.hasFirstPageCompleted}}},93322:(e,t,n)=>{n.d(t,{F:()=>o});var r=n(32735),i=n(13126);function o(){r.useEffect((function(){return i.e.lockContentWidth(),function(){return i.e.unlockContentWidth()}}),[])}},48723:(e,t,n)=>{n.r(t),n.d(t,{VideoListView:()=>O});var r=n(32735),i=n(70680),o=n(20354),a=n(65858),u=n(26025),l=n(87801),s=n(1860),c=n(75100),d=n(51365),f=n(4594),v=n(16714),h=n(183),m=n(23788),p=n(39151),g=n(5112),y=n(60011),b=n(31949),C=n(91286),A=n(60115),F=n(93322),S=n(22902),E=n(79612),w=n(37802),I=n(10671),j=n(58321),k=n(97816),P=n(10741),L=n(22490),x=n(53936),V=n(10447);function O(e){var t,n,O,R,M,B=(0,i.I0)(),T=o.a.useBasicFetch(p.L.config()),N=o.a.useBasicFetch(b.N.currentUser()),U=(0,w.r)(null).hasShareFlowV2,q=(0,S.T)().hasPermissions,_=(0,j.U)({locationContext:a.LZ.Insights}).commonVideoProps,G=e.typeId===f.E.Series&&y.J.series(e.objectId),W=o.a.useBasicFetch(G),Q=e.typeId===f.E.Playlist&&g.C.getPlaylist(e.objectId),D=o.a.useBasicFetch(Q),H=m.D.Series,J=u.B.getAudienceAppLinkParams(),K=u.B.getDateRangeAppLinkParams(),$=Object.assign(Object.assign({},J),K),Z=(0,I._)({location:I.i.VideoItem}),z=(0,A.K)(!!N.data&&te,ne),X=z.items,Y=z.isFetching,ee=z.nextCursor;function te(t){var n;return e.typeId===f.E.Series?y.J.seriesVideos(e.objectId,null===(n=N.data)||void 0===n?void 0:n.id,H,t):g.C.getPlaylistVideos(e.objectId,t)}function ne(e){return o.a.getFetch(B)(te(e))}return(0,F.F)(),(0,E.M)({title:null!==(n=null===(t=W.data)||void 0===t?void 0:t.name)&&void 0!==n?n:null===(O=D.data)||void 0===O?void 0:O.name}),(0,C.v)([W,D]),(0,k.V)(X),r.createElement(d.M.Provider,{value:Z},r.createElement("div",{className:"px-3"},r.createElement(x.j,{video:null!==(R=W.data)&&void 0!==R?R:D.data,dateRangeAppLinkParams:K,tabs:e.typeId===f.E.Series?(0,V.lo)(e.objectId,"videos",$):e.typeId===f.E.Playlist?(0,V.W_)(e.objectId,"videos",$):[],hasAnalytics:q(v.C.ViewCustomerAnalytics),analyticsWebUrl:null===(M=T.data)||void 0===M?void 0:M.analyticsWebUrl,hasShareFlowV2:U,shareId:e.shareId}),r.createElement("div",null,X?r.createElement(r.Fragment,null,r.createElement(c.E4,{videos:X,getVideoAppLink:function(t,n){var r,i=Object.assign(Object.assign({},n),{context:h.Q.Series,contextId:e.objectId,includeContext:null===(r=N.data)||void 0===r?void 0:r.isAuthenticated});return L.W.getAppLink(t,i)},hasPermissions:q,getPreviewQuestionsAppLink:function(e){return P.j.getPreviewQuestionsAppLink(e)},commonVideoProps:_}),(Y||ee)&&r.createElement(l._,{isFetching:Y,fetchNext:ne,nextCursor:ee})):r.createElement(s.S,null))))}},58321:(e,t,n)=>{n.d(t,{U:()=>h});var r=n(20354),i=n(16714),o=n(39151),a=n(1666),u=n(31949),l=n(22902),s=n(37802),c=n(22490),d=n(82431),f=n(46390),v=n(27638);function h(e){var t,n,h,m=e||{},p=m.locationContext,g=m.mtv,y=m.flightNamespace,b=m.sharedPlaylist,C=(0,f.G)().isPlugin,A=(0,v.u)(p,y),F=A.setFavourite,S=A.canFavourite,E=(0,s.r)(null),w=E.hasTopicDirectories,I=E.isLoadingSettings,j=(0,l.T)(),k=j.hasPermissions,P=j.isLoaded,L=k(i.C.StudentExperience),x=r.a.useBasicFetch(o.L.config()),V=r.a.useBasicFetch(u.N.currentUser()),O=r.a.useBasicFetch((null===(t=V.data)||void 0===t?void 0:t.isAuthenticated)&&a.h.yearGroups(V.data.customerId));return{hasCommonVideoPropsCompleted:!I&&P&&x.hasCompleted&&V.hasCompleted&&(!(null===(n=V.data)||void 0===n?void 0:n.isAuthenticated)||O.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=V.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:g}):null},isPlugin:C,canFavourite:S,setFavourite:F,imageCdnUrl:null===(h=x.data)||void 0===h?void 0:h.imageCdnUrl,yearGroups:O.data,getClassroomGuideAppLink:c.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:c.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:c.W.getResourceGuidanceAppLink,showNewVideoIndicator:w,companyLogoFallbackUrl:null,hasStudentExperience:L}}}},97816:(e,t,n)=>{n.d(t,{V:()=>a});var r=n(1575),i=n(39902),o=n(31908);function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(o.M.isVideo(e)||o.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(o.M.isVideo(e)||o.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,i.F)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}))}}}]);
2
+ //# sourceMappingURL=7103-ef79582538-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/7103-ef79582538-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/insights/views/video-list/VideoListView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import 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 { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\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 { Config, CurrentUser, Playlist, Series, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { getInsightsPlaylistTabs, getInsightsSeriesTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\ninterface ShareOptionsViewProps {\n objectId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function VideoListView(props: ShareOptionsViewProps) {\n const dispatch = useDispatch();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const { hasShareFlowV2 } = useSettings(null);\n const { hasPermissions } = usePermissions();\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.Insights });\n\n const isSeries = () => props.typeId === MasterType.Series;\n const isPlaylist = () => props.typeId === MasterType.Playlist;\n\n const seriesRequest = isSeries() && SeriesRequests.series(props.objectId);\n const series = Flight.useBasicFetch<Series>(seriesRequest);\n\n const playlistRequest = isPlaylist() && PlaylistRequests.getPlaylist(props.objectId);\n const playlist = Flight.useBasicFetch<Playlist>(playlistRequest);\n\n const sort = VideoSortType.Series;\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const {\n items: videos,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(currentUser.data ? getVideosRequest : false, fetchNext);\n \n useLockContentWidth();\n useSetPageMetadata({ title: series.data?.name ?? playlist.data?.name });\n useHandleObjectError([ series, playlist ]);\n useVideoMixin(videos);\n\n function getInsightsTabs() {\n if (props.typeId === MasterType.Series)\n return getInsightsSeriesTabs(props.objectId, 'videos', params);\n\n if (props.typeId === MasterType.Playlist)\n return getInsightsPlaylistTabs(props.objectId, 'videos', params);\n\n return [];\n }\n\n function getVideosRequest(cursor?: string) {\n if (props.typeId === MasterType.Series)\n return SeriesRequests.seriesVideos(props.objectId, currentUser.data?.id, sort, cursor);\n\n return PlaylistRequests.getPlaylistVideos(props.objectId, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getVideosRequest(cursor));\n }\n\n function getVideoAppLink(video: Video, opts: GetVideoAppLinkOptions): Core.AppLink {\n const options: GetVideoAppLinkOptions = {\n ...opts,\n context: RelatedVideosContext.Series,\n contextId: props.objectId,\n includeContext: currentUser.data?.isAuthenticated\n };\n\n return VideoAppLinkHelper.getAppLink(video, options);\n }\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <InsightsHeader\n video={series.data ?? playlist.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n <div>\n {(() => {\n if (!videos)\n return <PartialVideoList />;\n\n return (\n <>\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n hasPermissions={hasPermissions}\n // getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video?.series, { sort })}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n // getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n // getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n // getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n // showNewVideoIndicator={false}\n // isPlugin={false}\n commonVideoProps={commonVideoProps}\n />\n {(isFetching || nextCursor) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n );\n })()}\n </div>\n </div>\n </VideoActionsContext.Provider>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","generateCacheKey","flightObjs","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","SCROLL_TOLERANCE","useInfiniteList","fetchNext","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","useLockContentWidth","VideoListView","props","dispatch","config","currentUser","hasShareFlowV2","hasPermissions","commonVideoProps","locationContext","seriesRequest","typeId","objectId","series","playlistRequest","playlist","sort","audienceAppLinkParams","dateRangeAppLinkParams","params","videoActions","location","getVideosRequest","videos","title","name","value","className","video","tabs","hasAnalytics","analyticsWebUrl","shareId","getVideoAppLink","opts","context","contextId","includeContext","isAuthenticated","getPreviewQuestionsAppLink","interactive","useCommonVideoProps","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","isLoaded","hasStudentExperience","yearGroups","customerId","hasCommonVideoPropsCompleted","subTextType","getSubTextAppLink","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","useVideoMixin","objects","videoIds","filter","o","getValidObjects","v","ids"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7394],{71553:(e,t,r)=>{r.d(t,{I:()=>s});var n=r(99940),a=r(62875);function i(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:{start:t.start,end:t.end},userIds:t.userId,classroomsAndGroups:t.groupId}}var s={interactiveResultSet:function(e,t,r,s,o,c,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:(0,a.H)("interactive:result:set:".concat(e,":").concat(t),s),data:i(r,s),type:n.k.POST,normalize:!1,success:c,error:u,always:l}},mark:function(e,t,r,a,i,s,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:i,error:s,always:o}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:n.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},26136:(e,t,r)=>{r.d(t,{B2:()=>o,DV:()=>u,jP:()=>c});var n=r(76198),a=r(23481),i=r(64818),s=a.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,n._8)((r="sessionId"in e?e.sessionName:e.id,a=+"".concat(r).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:a})):"sessionId"in e?e.sessionName:i.l.getFullName(e):"";var r,a}function c(e,t){var r={sessionId:e,sessionName:s("anonymousUser")};return e&&t&&t[e]||r}function u(e,t){return e.user?e.user:c(e.sessionId,t)}},39157:(e,t,r)=>{r.d(t,{HI:()=>m,R6:()=>u,Rt:()=>g,UU:()=>d,Zs:()=>l,nq:()=>v});var n=r(75896),a=r(94892),i=r(28972),s=r(8246),o=r(83140),c=r(80845);function u(e,t,r){var i={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},s=(0,c.Q)(e).length;t.students.forEach((function(t){var o=Object.assign(Object.assign({},t),{summary:g(e,t)});o.summary.awaitingMarking?i.markingRequired.push(o):n.m.last(t.results).attempts.length===s?(i.completed.push(o),o.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&i.highScore.push(o),o.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&i.lowScore.push(o)):i.notCompleted.push(o)}));var o=n.m.sortBy(i.lowScore,(function(e){return e.summary.percentCorrect})),u=n.m.sortBy(i.highScore,(function(e){return-e.summary.percentCorrect}));return Object.assign(Object.assign({},i),{lowScore:o,highScore:u})}function l(e,t){return(0,c.Wn)(e).find((function(e){return e.id.toString()===t.toString()}))}function d(e){return"".concat(e.questionId,":").concat(e.resultId)}function m(e,t,r){var n=(0,c.j_)(t),a=(0,c.f6)(e,n);return(null==a?void 0:a.answers.every((function(e){var t;return(null===(t=r[d(e)])||void 0===t?void 0:t.status)===s.N.Correct})))?s.N.Correct:(null==a?void 0:a.answers.every((function(e){var t;return(null===(t=r[d(e)])||void 0===t?void 0:t.status)===s.N.Incorrect})))?s.N.Incorrect:void 0}function v(e,t){var r=t.students.length,n=0,a=0,s=0,u=0,l=0;return t.students.forEach((function(t){var r=(0,c.j_)(t);if(r){l+=t.results.length;var d=o.A.isInteractionCorrect(e,r);d===i.w.Correct&&n++,d===i.w.UnAnswered&&s++,d===i.w.AwaitingMarking&&u++,d!==i.w.UnAnswered&&a++}})),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:s,awaitingMarking:u,attempts:l}}function g(e,t){var r=(0,c.j_)(t),n=(0,c.Q)(e),a=n.length,s=0,u=0;n.forEach((function(e){var t=o.A.isInteractionCorrect(e,r);t===i.w.Correct&&s++,t===i.w.AwaitingMarking&&u++}));var l=a>0?s/a:0,d=new Set(n.map((function(e){return e.id}))),m=r.attempts.filter((function(e){var t;return!!d.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)})).length;return{answered:r.attempts.length,attempts:t.results.length,unanswered:a-m,percentCorrect:l,correct:s,awaitingMarking:u}}},94892:(e,t,r)=>{r.d(t,{T:()=>a,i:()=>n});var n={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}},54405:(e,t,r)=>{r.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},62875:(e,t,r)=>{function n(e,t,r){var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,i=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId;return a&&(n+=":".concat(a)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}r.d(t,{H:()=>n})},57266:(e,t,r)=>{r.d(t,{e:()=>s});var n=r(81886),a=r(1048),i=r(75795),s={updateParams:function(e,t){var r=i.O.getCurrentRoute().appLink,s="string"==typeof r.params?n.Q.Ab.DeserializeQueryParams(r.params):r.params;t.keysToRemove&&(s=a.t.omit(s,t.keysToRemove));var o=(null==t?void 0:t.merge)?Object.assign(Object.assign({},s),e):e,c=Object.assign(Object.assign({},r),{params:o});a.t.isEqual(r,c)||n.Q.C$.trigger(c,a.t.omit(t,["merge","keysToRemove"]))}}},71519:(e,t,r)=>{r.r(t),r.d(t,{InteractiveInsightsQuestionsDemoView:()=>h});var n=r(32735),a=r(23481),i=r(2948),s=r(20354),o=r(26025),c=r(38143),u=r(39151),l=r(54405),d=r(93322),m=r(79612),v=r(53936),g=r(68536),p=r(10447);function f(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=a.T.encloseNamespace("shared.interactiveInsightsQuestionsView");function h(e){var t,r,a,h,w=(a=(0,i.D)(c.g.ANONYMISE_USERS),h=1,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,s,o=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(u)throw a}}return o}}(a,h)||function(e,t){if(e){if("string"==typeof e)return f(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)?f(e,t):void 0}}(a,h)||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,d.F)();var k=s.a.useBasicFetch(u.L.config()),I=s.a.useBasicFetch(l.X.interactiveMetadata()),j=s.a.useBasicFetch(l.X.interactive()),A=o.B.getAudienceAppLinkParams(),b=o.B.getDateRangeAppLinkParams(),O=s.a.useBasicFetch(l.X.interactiveResults());(0,m.M)({title:I.data?y("pageTitle",{video:null===(t=I.data)||void 0===t?void 0:t.name}):null});var S=j.data&&I.data&&!!O.data,R=Object.assign(Object.assign({},A),b);return n.createElement("div",{className:"px-3"},n.createElement(v.j,{tabs:(0,p.aq)(null===(r=I.data)||void 0===r?void 0:r.id,"questions",R),video:I.data,dateRangeAppLinkParams:b,isDemo:!0}),n.createElement(g.x,{interactive:j.data,interactiveMetadata:I.data,interactionId:e.interactionId,config:k.data,sortBy:e.sortBy,isFetching:O.isFetching||j.isFetching,anonymiseUsers:w,results:O.data,hasDataLoaded:S,isDemo:!0}))}}}]);
2
+ //# sourceMappingURL=7394-5448807e14-lite.chunk.js.map