@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5829-689f5be5d1-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/apps/share-v2/enums/ShareOption.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts","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/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/apps/share-v2/views/components/flow-selector-options/flow-selector-options.scss","file:///app/packages/projects/lite/src/apps/share-v2/views/components/flow-selector-options/FlowSelectorOptions.tsx","file:///app/packages/projects/lite/src/apps/share-v2/views/components/flow-selector-options/previous-shares/previous-shares.scss","file:///app/packages/projects/lite/src/apps/share-v2/views/components/flow-selector-options/previous-shares/PreviousShares.tsx","file:///app/packages/projects/lite/src/apps/share-v2/components/classroom-selector/classroom-selector.scss","file:///app/packages/projects/lite/src/apps/share-v2/components/classroom-selector/ClassroomSelector.tsx","file:///app/packages/projects/lite/src/apps/share-v2/components/narrow-classroom-selection/narrow-classroom-selection.scss","file:///app/packages/projects/lite/src/apps/share-v2/components/narrow-classroom-selection/NarrowClassroomSelection.tsx","file:///app/packages/projects/lite/src/apps/share-v2/views/ClassroomFlowView.tsx","file:///app/packages/projects/lite/src/apps/share-v2/views/FlowSelectorView.tsx","file:///app/packages/projects/lite/src/apps/share-v2/views/SessionFlowView.tsx","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { CreateShareRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareRequest';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BasePaginatedCollection } from 'libs/shared/interfaces';\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}\n\nexport const ShareRequests = {\n createShare(\n data: CreateShareRequest,\n success?: (response: Share) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '/api/share/v2/shares',\n key: 'create:share-v2',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: ['sent:shares-v2'],\n success,\n error,\n always\n };\n },\n\n updateShare(\n shareId: string,\n data: UpdateShareRequest,\n success?: (response: Share) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}`,\n key: `update:share-v2:${shareId}`,\n type: HttpVerbs.PUT,\n data,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', `share-v2:${shareId}` ],\n success,\n error,\n always\n };\n },\n\n getShare(\n shareId: string,\n success?: (response: Share) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}`,\n key: `share-v2:${shareId}`,\n bootstrapName: `share-v2:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {},\n success?: (response: BasePaginatedCollection<Share>[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const key = Object.values(params).join(':');\n\n return {\n url: UrlHelper.urlBuilder('/api/share/v2/shares/sent', params),\n key: `sent:shares-v2:${key}`,\n formatData: (response: Share[]) => {\n return {\n data: response,\n count: response.length,\n pagination: {\n cursors: {\n next: null, // TODO: Share V2 - fix hardcoded value\n previous: params.cursor\n }\n }\n };\n },\n type: HttpVerbs.GET,\n normalize: false,\n success,\n error,\n always\n };\n },\n\n getShareLinkByObjectId(id: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('/api/share/v2/shares/permanent-link', { objectId: id }),\n key: `share-v2:permanent-link:object:${id}`,\n type: HttpVerbs.POST,\n normalizeOptions\n };\n },\n\n getPrivacy(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/access`,\n key: `privacy:${id}`,\n normalize: false\n };\n }\n};","export enum ShareOption {\n InstantFeedback = 'instant_feedback',\n PreventSkipping = 'prevent_skipping'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, EventVersion, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ShareOption } from 'libs/shared/apps/share-v2/enums/ShareOption';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport type { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Alerts } from 'libs/shared/hooks/UseAlerts';\nimport type { Classification, Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventSkipping: boolean;\n instantFeedback: boolean;\n}\n\nconst namespace = 'sharev2.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n canAddPolicies(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n \n getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n },\n\n getFetchFunctionByType: (type: SharableEntityType) => {\n switch (type) {\n case 'video': {\n return (id: string) => Flight.useBasicFetch<Video>(VideoRequests.video(id));\n }\n \n case 'playlist': {\n return (id: string) => Flight.useBasicFetch<Playlist>(PlaylistRequests.getPlaylist(id));\n }\n \n case 'subject': {\n return (id: string, userId: string) => {\n return Flight.useBasicFetch<Classification>(ClassificationRequests.classification(id, userId));\n };\n }\n \n case 'series': {\n return (id: string) => Flight.useBasicFetch<Series>(SeriesRequests.series(id));\n }\n \n case 'interactive': {\n return (id: string) =>\n Flight.useBasicFetch<InteractiveMetadata>(InteractiveRequests.interactiveMetadata(id));\n }\n \n case 'clip': {\n return (id: string) =>\n Flight.useBasicFetch<Clip>(ClipRequests.clip(id));\n }\n }\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n switch (entityType) {\n case 'playlist':\n return EntityType.Playlist;\n case 'subject':\n return EntityType.Classification;\n case 'video':\n return EntityType.Video;\n case 'series':\n return EntityType.Series;\n case 'interactive':\n return EntityType.Interactive;\n case 'clip':\n return EntityType.Clip;\n }\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return {\n entity: ShareViewHelper.getAnalyticsEntity(entityType),\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n };\n },\n\n updateShareLink(\n dispatch: Flight.Dispatch,\n entity: SharableEntity,\n entityType: SharableEntityType,\n share: Share,\n data: UpdateShareRequest,\n alerts: Alerts,\n onSuccess?: (data: Share) => void,\n onError?: () => void\n ): void {\n const success = (updatedShare: Share) => {\n AnalyticsHelper.logUserAction(\n { ...updatedShare, objectName: entity.name },\n AnalyticsHelper.mergeOptions(ShareViewHelper.getAnalyticsOptions(entityType), {\n actionType: UserAction.Edit,\n entity: EntityType.ShareLink,\n eventVersion: EventVersion.V3\n })\n );\n\n if (onSuccess)\n onSuccess(updatedShare);\n\n alerts.success(getPhrase('editSuccess', { name: entity.name, escapeText: true }));\n };\n\n const error = () => {\n if (onError)\n onError();\n\n alerts.error(getPhrase('editError', { name: entity.name, escapeText: true }));\n };\n\n Flight.fetch(dispatch, ShareRequests.updateShare(share.shareId, data, success, error));\n },\n\n getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n const defaults = {\n preventSkipping: interactive?.preventScrubbing || false,\n instantFeedback: interactive?.immediateFeedback || false\n };\n\n const ShareOptionKeyMapping: {[key in ShareOption]: keyof typeof defaults} = {\n [ShareOption.InstantFeedback]: 'instantFeedback',\n [ShareOption.PreventSkipping]: 'preventSkipping'\n };\n\n return share.options.reduce((prev, curr) => {\n if (!Object.keys(ShareOptionKeyMapping).includes(curr.option))\n return prev;\n\n if (curr.value === 'True')\n prev[ShareOptionKeyMapping[curr.option]] = true;\n else if (curr.value === 'False')\n prev[ShareOptionKeyMapping[curr.option]] = false;\n\n return prev;\n }, defaults);\n }\n\n};","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\",\"thumbnailContainer\":\"d3CKN\",\"insightsMask\":\"KM76U\",\"requireMarking\":\"peLH7\",\"badge\":\"mVu0E\",\"bar\":\"zO3MS\",\"a\":\"K1jW5\",\"expandBar\":\"YITJl\",\"b\":\"tCpLF\",\"c\":\"lC0cq\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image, Playlist, Series } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst namespace = 'shared.sharedObjectImage';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction InsightsMask() {\n return (\n <div className={`d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center`}>\n <div className='position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3'></div>\n <div className='d-flex align-items-end gap-2 h-50 z-1'>\n <div className='d-flex align-items-end h-50'>\n <div className={`${styles.bar} ${styles.a} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-75'>\n <div className={`${styles.bar} ${styles.b} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-100'>\n <div className={`${styles.bar} ${styles.c} rounded shadow`}></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\nSharedObjectImage.defaultProps = {\n imageOptions: { size: ImageSize.Small }\n};\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n requireMarking?: number;\n imageOptions?: ImageOptions;\n showInsightsMask?: boolean;\n showCollectionMask?: boolean;\n showVideoCount?: boolean;\n thumbnailSize?: 'sm' | 'md';\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object);\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const metadataFlags = !props.showVideoMetadata ? {\n hideDuration: true,\n hideMask: true,\n hideRating: true,\n hideVideoTypeBadge: true\n } : {};\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <div className={`${styles.thumbnailContainer} position-relative`}>\n {props.showInsightsMask && <InsightsMask />}\n <AppLink appLink={props.appLink}>\n <VideoThumbnail\n video={props.object}\n size={props.thumbnailSize}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n {...metadataFlags}\n />\n </AppLink>\n {!!props.requireMarking && (\n <div className={`${props.showInsightsMask && styles.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`}>\n <div className={`${styles.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n </div>\n )}\n </div>\n }\n {!useVideoThumbnail &&\n <>\n {'videos' in (props.object as Playlist | Series) ? (\n <CollectionThumbnail\n collection={props.object}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n showMask={props.showCollectionMask}\n showVideoCount={props.showVideoCount}\n />\n ) : (\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n )}\n </>\n }\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n","import React from 'react';\n\nimport { 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 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 message?: string;\n onTogglePreventSkippingAhead: () => void;\n onToggleEnableInstantFeedback: () => void;\n onChangeMessage: (message: string) => 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 <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 </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 { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { ShareLink, ShareRecipient } from '../interfaces/ShareLink';\n\nexport const ShareHelper = {\n getFlattenedRecipients(shares: ShareLink[]): ShareRecipient[] {\n return ArrayHelper.flatten(shares.map(s => s.recipients ?? []));\n },\n\n getClassoomIds(shares: ShareLink[]): string[] {\n const recipients = ShareHelper.getFlattenedRecipients(shares);\n\n const classroomIds = recipients.map(r => {\n if (r.scopeId)\n return r.scopeId.toString();\n\n if (r.recipientId && r.recipientTypeId === MasterType.Classroom)\n return r.recipientId.toString();\n });\n\n return ArrayHelper.uniq(classroomIds.filter(x => !!x));\n },\n\n getClassroomIdFromShare(share: ShareLink): string | undefined {\n const firstRecipient = share.recipients?.[0];\n \n if (!firstRecipient) return;\n \n if (firstRecipient.scopeId)\n return firstRecipient.scopeId.toString();\n \n if (firstRecipient.recipientId && firstRecipient.recipientTypeId === MasterType.Classroom)\n return firstRecipient.recipientId.toString();\n },\n \n getClassroomForShare(share: ShareLink, classrooms: Classroom[]): Classroom | undefined {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n \n if (!classroomId) return;\n \n return classrooms.find(classroom => classroom.id.toString() === classroomId.toString());\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"optionImage\":\"_uLZl\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './flow-selector-options.scss';\n\nexport interface FlowSelectorOption {\n id: string;\n image: string;\n title: string;\n subTitle?: string;\n description: string;\n}\n\ninterface FlowSelectorOptionsProps {\n title: string;\n options: [FlowSelectorOption, FlowSelectorOption];\n onClick: (option: FlowSelectorOption) => void;\n}\n\nexport function FlowSelectorOptions(props: FlowSelectorOptionsProps): JSX.Element {\n return (\n <div className='bg-white rounded-bottom-3 p-3 d-flex flex-column gap-3 justify-content-center align-items-center'>\n <h2 className='h6 m-0'>{props.title}</h2>\n <div className='d-flex justify-content-center align-items-center gap-3'>\n {props.options.map(option => (\n <DivButton onClick={() => props.onClick(option)} className='text-center cursor-pointer p-3 border rounded-3 user-select-none w-50' key={option.id}>\n <img src={option.image} className={`img-fluid my-3 w-75 ${styles.optionImage}`} draggable={false} />\n <h4>{option.title}</h4>\n {option.subTitle && <h6 style={{ color: '#888' }}>{option.subTitle}</h6>}\n <p className='mb-0 font-size-md'>{option.description}</p>\n </DivButton>\n ))}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"previousSharesList\":\"LZvYG\",\"previousSharesListItem\":\"LEwrl\"};","import React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\nimport { ShareHelper } from 'apps/share-v2/utils/ShareHelper';\n\nimport styles from './previous-shares.scss';\n\ninterface PreviousSharesProps {\n data: {\n shares: ShareLink[]\n classrooms: Classroom[];\n entity: SharableEntity;\n };\n onClick: (item: ShareLink) => void;\n}\n\nexport function PreviousShares(props: PreviousSharesProps) {\n function getAvatar(share: ShareLink) {\n if (share.type === ShareType.Classroom) {\n return (\n <div className='d-flex flex-row gap-1 align-items-center'>\n <div>\n <IconCircle\n variant='teal'\n textVariant='white'\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Small}\n svgWrapperClassName='p-1'\n />\n </div>\n <span className='ms-1'>\n {ShareHelper.getClassroomForShare(share, props.data.classrooms)?.name ?? 'Unknown'}\n </span>\n </div>\n );\n }\n\n if (share.type === ShareType.Open) {\n return (\n <div className='d-flex flex-row gap-1 align-items-center'>\n <div>\n <IconCircle\n variant='blue'\n textVariant='white'\n svgName={cvSvgLibrary.School}\n svgSize={SvgContainerSize.Small}\n svgWrapperClassName='p-1'\n />\n </div>\n <span className='ms-1'>\n Open classroom\n </span>\n </div>\n );\n }\n }\n\n return (\n <div className={`d-flex flex-column mt-3 border rounded overflow-hidden ${styles.previousSharesList}`}>\n <Scrollbars\n autoHeight\n autoHeightMin={0}\n autoHeightMax={200}\n >\n {props.data.shares.reverse().map(share => {\n return (\n <DivButton\n key={share.shareId}\n onClick={() => props.onClick(share)}\n className={`p-3 ${styles.previousSharesListItem}`}\n >\n <div className='row'>\n <div className='col-1 d-flex align-items-center'>\n <SharedObjectImage\n locationContext={LocationContext.PlayPage}\n object={props.data.entity}\n imageOptions={{ size: ImageSize.Small }}\n thumbnailSize='sm'\n showVideoMetadata={false}\n />\n </div>\n <div className='col-3 d-flex align-items-center'>\n <span className='clamp-2 align-self-center'>\n {props.data.entity.name}\n </span>\n </div>\n <div className='col-3 d-flex align-items-center'>\n {getAvatar(share)}\n </div>\n <p className='mb-0 col-2 d-flex align-items-center'>{share.viewCount || 0} views</p>\n <p className='mb-0 col-2 d-flex align-items-center'>{formatDate(share.dateCreated)}</p>\n <div className='col-1 d-flex align-items-center'>\n <a onClick={() => props.onClick(share)} className='cursor-pointer text-info'>View</a>\n </div>\n </div>\n </DivButton>\n );\n })}\n </Scrollbars>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"searchInput\":\"udDMG\"};","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './classroom-selector.scss';\n\ninterface ClassroomSelectorProps {\n classrooms: Classroom[];\n selectedClassroom?: Classroom;\n className?: string;\n onClassroomSelected: (classroom: Classroom | undefined) => void;\n onSelectGroupsOrStudents: () => void;\n onClickCreateOpenClassroom: () => void;\n}\n\ninterface ClassroomSelectorListProps {\n searchQuery: string;\n classrooms: Classroom[];\n selectedClassroom?: Classroom;\n onSelectGroupsOrStudents: () => void;\n onClassroomSelected: (classroom: Classroom) => void;\n onClickCreateOpenClassroom: () => void;\n}\n\nfunction ClassroomSelectorList(props: ClassroomSelectorListProps): JSX.Element {\n if (!props.classrooms.length) {\n return (\n <div className='d-flex flex-column gap-2 justify-content-center align-items-center'>\n <img src={ImageUrls.EmptyStates.Search.RESULTS} width='30%' alt='No results found' />\n <h4 className='h6 m-0'>No results found for \"{props.searchQuery}\"</h4>\n <p className='mb-0'>\n Contact your school administrator to assign you to a classroom or <a className='p-0 text-info cursor-pointer' onClick={props.onClickCreateOpenClassroom} >create an Open classroom.</a>\n </p>\n </div>\n );\n }\n \n return (\n <div className='d-flex flex-column gap-2'>\n <h3 className='h6 m-0'>My Classrooms</h3>\n <div>\n {props.classrooms.map(classroom => {\n const studentsCount = classroom.enrolments?.count ?? 0;\n return (\n <div className='d-flex align-items-center' key={classroom.id} onClick={() => props.onClassroomSelected(classroom)}>\n <div className={`d-flex align-items-center bg-light-hover px-2 py-1 w-100 rounded gap-2 cursor-pointer justify-content-between`}>\n <div className='w-100 d-flex align-items-center gap-2'>\n <Form.Check\n type='radio'\n name='classroom-radio'\n id='classroom-radio'\n className='form-check'\n value={classroom.id}\n onChange={() => props.onClassroomSelected(classroom)}\n checked={classroom.id === props.selectedClassroom?.id}\n />\n <div className='d-flex align-items-center gap-2'>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant='teal'\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n <div className='w-100'>\n <label className='m-0'>{classroom?.name}</label>\n <p className='m-0 text-muted font-size-sm'>{studentsCount} {studentsCount > 1 ? 'students' : 'student'}</p>\n </div>\n </div>\n </div>\n {props.selectedClassroom?.id === classroom.id && (\n <div className='d-flex align-items-center justify-content-end w-100'>\n <a\n className='cursor-pointer text-info'\n onClick={props.onSelectGroupsOrStudents}\n >\n Select specific groups or students\n </a>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function ClassroomSelector(props: ClassroomSelectorProps): JSX.Element {\n const [ search, setSearch ] = React.useState('');\n const filteredClassrooms = search\n ? props.classrooms.filter(x => x.name.toLowerCase().includes(search.toLowerCase()))\n : props.classrooms;\n\n return (\n <div className={`d-flex flex-column gap-3 ${props.className}`}>\n <div className='position-relative'>\n <div className={`position-absolute top-50 start-0 translate-middle-y p-1`}>\n <SvgContainer svgName={cvSvgLibrary.Search} size={SvgContainerSize.Standard} />\n </div>\n <input\n type='text'\n placeholder='Search for a classroom you teach'\n value={search}\n onChange={e => setSearch(e.target.value)}\n className={`form-control pe-1 py-2 border-dark ${styles.searchInput}`}\n />\n </div>\n\n <ClassroomSelectorList\n searchQuery={search}\n classrooms={filteredClassrooms}\n selectedClassroom={props.selectedClassroom}\n onSelectGroupsOrStudents={props.onSelectGroupsOrStudents}\n onClassroomSelected={props.onClassroomSelected}\n onClickCreateOpenClassroom={props.onClickCreateOpenClassroom}\n />\n \n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"CEbd9\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { SelectedClassroomHeader } from '../SelectedClassroomHeader';\n\nimport styles from './narrow-classroom-selection.scss';\n\ninterface NarrowClassroomSelectionProps {\n imageCdnUrl: string;\n classroom: Classroom;\n groups: ClassroomGroup[];\n students: User[];\n onChangeRecipients: (r: string[]) => void;\n onChangeClassroom: () => void;\n}\n\ninterface ClassroomEntityListProps<T> {\n entities: T[];\n selectedEntities: T[];\n onSelectEntity: (entity: T) => void;\n emptyState: JSX.Element;\n renderTitle?: (entity: T) => JSX.Element;\n renderIcon?: (entity: T) => JSX.Element;\n}\n\nfunction ClassroomEntityList<T extends BaseObject>(\n props: ClassroomEntityListProps<T>\n): JSX.Element {\n if (!props.entities.length) {\n return <>{props.emptyState}</>;\n }\n\n return (\n <div className='d-flex flex-column'>\n {props.entities.map(entity => {\n const isSelected = props.selectedEntities.includes(entity);\n return (\n <DivButton\n key={entity.id}\n className={`d-flex align-items-center bg-light-hover px-2 py-1 w-100 rounded gap-2 cursor-pointer justify-content-between`}\n onClick={() => props.onSelectEntity(entity)}\n >\n <div className='w-100 d-flex align-items-center'>\n <Checkbox\n name='classroom-group'\n id='classroom-group'\n onChange={() => props.onSelectEntity(entity)}\n checked={isSelected}\n />\n <div className='d-flex align-items-center gap-2'>\n <div>\n {props.renderIcon\n ? props.renderIcon(entity)\n : <IconCircle\n svgName={cvSvgLibrary.Group}\n svgSize={SvgContainerSize.Standard}\n variant={'pink'}\n textVariant={'white'}\n svgWrapperClassName='p-1'\n />\n }\n </div>\n <div className='w-100'>\n {props.renderTitle\n ? props.renderTitle(entity)\n : <label className='m-0'>{entity.name}</label>\n }\n </div>\n </div>\n </div>\n </DivButton>\n );\n })}\n </div>\n );\n}\n\nfunction getRecipients(entities: ClassroomGroup[] | User[]): string[] {\n if (!entities.length)\n return [];\n \n return entities.map(e => e.id);\n}\n\nexport function NarrowClassroomSelection(props: NarrowClassroomSelectionProps): JSX.Element {\n const [ selectionType, setSelectionType ] = React.useState<'all' | 'groups' | 'students'>('all');\n const [ selectedGroups, setSelectedGroups ] = React.useState<ClassroomGroup[]>([]);\n const [ selectedStudents, setSelectedStudents ] = React.useState<User[]>([]);\n const [ showGroups, setShowGroups ] = React.useState(false);\n const [ showStudents, setShowStudents ] = React.useState(false);\n\n function onSelectGroup(group: ClassroomGroup) {\n setSelectedStudents([]);\n let newSelectedGroups = [...selectedGroups];\n\n if (selectedGroups.includes(group)) {\n newSelectedGroups = selectedGroups.filter(g => g !== group);\n } else {\n newSelectedGroups.push(group);\n }\n\n if (!newSelectedGroups.length) {\n setSelectionType('all');\n } else {\n setSelectionType('groups');\n }\n\n setSelectedGroups(newSelectedGroups);\n props.onChangeRecipients(getRecipients(newSelectedGroups));\n }\n\n function onSelectStudent(student: User) {\n setSelectedGroups([]);\n let newSelectedStudents = [...selectedStudents];\n\n if (selectedStudents.includes(student)) {\n newSelectedStudents = selectedStudents.filter(s => s !== student);\n } else {\n newSelectedStudents.push(student);\n }\n\n if (!newSelectedStudents.length) {\n setSelectionType('all');\n } else {\n setSelectionType('students');\n }\n\n setSelectedStudents(newSelectedStudents);\n props.onChangeRecipients(getRecipients(newSelectedStudents));\n }\n\n function onSelectAll() {\n setSelectionType('all');\n setSelectedGroups([]);\n setSelectedStudents([]);\n props.onChangeRecipients([]);\n }\n \n const studentsCount = props.students.length;\n const studentCountText = `${studentsCount} ${studentsCount > 1 ? 'students' : 'student'}`;\n \n return (\n <div className={`d-flex flex-column gap-3`}>\n <SelectedClassroomHeader\n onChangeClassroom={props.onChangeClassroom}\n selectedClassroom={props.classroom}\n />\n <div className='d-flex flex-column gap-3'>\n <h3 className='h6 m-0'>Share to {studentCountText}:</h3>\n <div>\n <Checkbox id='all' checked={selectionType === 'all'} label={`All ${studentCountText}`} onChange={onSelectAll} />\n </div>\n </div>\n\n <div className='d-flex flex-column gap-2'>\n <div>\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='h6 m-0 p-0'>Groups ({props.groups.length})</h3>\n <IconButton\n svgName={showGroups ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={() => setShowGroups(!showGroups)}\n />\n </div>\n {showGroups && (\n <ClassroomEntityList\n entities={props.groups}\n selectedEntities={selectedGroups}\n onSelectEntity={onSelectGroup}\n emptyState={<div>No groups found.</div>}\n />\n )}\n </div>\n\n <div>\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='h6 m-0 p-0'>Students ({props.students.length})</h3>\n <IconButton\n svgName={showStudents ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={() => setShowStudents(!showStudents)}\n />\n </div>\n {showStudents && (\n <ClassroomEntityList\n entities={props.students}\n selectedEntities={selectedStudents}\n onSelectEntity={onSelectStudent}\n emptyState={<div>No students found.</div>}\n renderTitle={student => (\n <label className='m-0'>{UserHelper.getFullName(student)}</label>\n )}\n renderIcon={student => (\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(student.name, student.surname)}\n imageUrl={student.avatar?.url}\n />\n </div>\n )}\n />\n )}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Classroom, ClassroomGroup, ClassroomGroupCollection, Config, CurrentUser, User, UserCollection } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\nimport { BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { ClassroomSelector } from 'apps/share-v2/components/classroom-selector/ClassroomSelector';\nimport { ClassroomSettingsSectioned } from 'apps/share-v2/components/ClassroomSettingsSectioned';\nimport { useCreateShare } from 'apps/share-v2/hooks/useCreateShare';\n\nimport { NarrowClassroomSelection } from '../components/narrow-classroom-selection/NarrowClassroomSelection';\n\ntype ClassroomFlowStep = 'select-classroom' | 'narrow-selection' | 'settings';\n\ninterface ClassroomFlowViewProps extends PopupViewProps {\n objectId: string;\n entityType: 'video' | 'clip' | 'interactive' | 'series' | 'playlist';\n noPopup?: boolean;\n}\n\ninterface ClassroomFlowBodyProps {\n imageCdnUrl: string;\n entityType: 'video' | 'clip' | 'interactive' | 'series' | 'playlist';\n \n message: string;\n students: User[];\n step: ClassroomFlowStep;\n classrooms: Classroom[];\n groups: ClassroomGroup[];\n selectedClassroom: Classroom;\n\n working: boolean;\n dataLoaded: boolean;\n isInteractive: boolean;\n preventSkippingAhead: boolean;\n enableInstantFeedback: boolean;\n \n onBack: () => void;\n onClickNext: () => void;\n onChangeClassroom: () => void;\n onCreateNewClassroom: () => void;\n onSelectGroupsOrStudents: () => void;\n onClickCreateOpenClassroom: () => void;\n onTogglePreventSkippingAhead: () => void;\n onChangeRecipients: (r: string[]) => void;\n onToggleEnableInstantFeedback: () => void;\n onChangeMessage: (message: string) => void;\n onClassroomSelected: (classroom: Classroom | undefined) => void;\n}\n\nfunction ClassroomFlowBody(props: ClassroomFlowBodyProps): JSX.Element {\n if (!props.dataLoaded)\n return <PopupLoadingSpinner />;\n \n return (\n <div className='d-flex flex-column gap-3'>\n {(() => {\n switch (props.step) {\n case 'select-classroom':\n return (\n <ClassroomSelector\n classrooms={props.classrooms}\n selectedClassroom={props.selectedClassroom}\n onClassroomSelected={props.onClassroomSelected}\n onSelectGroupsOrStudents={props.onSelectGroupsOrStudents}\n onClickCreateOpenClassroom={props.onClickCreateOpenClassroom}\n />\n );\n case 'narrow-selection':\n return (\n <NarrowClassroomSelection\n imageCdnUrl={props.imageCdnUrl}\n students={props.students}\n groups={props.groups}\n classroom={props.selectedClassroom}\n onChangeRecipients={props.onChangeRecipients}\n onChangeClassroom={props.onChangeClassroom}\n />\n );\n case 'settings':\n return (\n <ClassroomSettingsSectioned\n type='classroom'\n selectedClassroom={props.selectedClassroom}\n enableInstantFeedback={props.enableInstantFeedback}\n preventSkippingAhead={props.preventSkippingAhead}\n isInteractive={props.entityType === 'interactive'}\n message={props.message}\n onTogglePreventSkippingAhead={props.onTogglePreventSkippingAhead}\n onToggleEnableInstantFeedback={props.onToggleEnableInstantFeedback}\n onChangeClassroom={props.onChangeClassroom}\n onChangeMessage={props.onChangeMessage}\n />\n );\n }\n })()}\n \n <PopupButtons className={props.step === 'settings' ? 'justify-content-end' : 'justify-content-between'}>\n {props.step !== 'settings' &&\n <PopupButtons.Submit variant='link' onClick={props.onCreateNewClassroom} text='Create a new classroom' className='text-info p-0' />\n }\n <div>\n <PopupButtons.Cancel variant='link' onClick={props.onBack} text='Back' />\n <PopupButtons.Submit variant='dark' onClick={props.onClickNext} text={props.step === 'settings' ? 'Assign' : 'Next'} disabled={!props.selectedClassroom} showSpinner={props.working} />\n </div>\n </PopupButtons>\n </div>\n );\n}\n\nexport function ClassroomFlowView(props: ClassroomFlowViewProps): JSX.Element {\n const [ step, setStep ] = React.useState<'select-classroom' | 'narrow-selection' | 'settings'>('select-classroom');\n const [ selectedClassroom, setSelectedClassroom ] = React.useState<Classroom>();\n const [ recipients, setRecipients ] = React.useState<string[]>([]);\n const [ preventSkippingAhead, setPreventSkippingAhead ] = React.useState(false);\n const [ enableInstantFeedback, setEnableInstantFeedback ] = React.useState(false);\n const [ message, setMessage ] = React.useState('');\n const [ working, setWorking ] = React.useState(false);\n\n const { createDirectShare } = useCreateShare(props.objectId);\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classrooms = Flight.useBasicFetch<BasePaginatedCollection<Classroom>>(\n currentUser.data && ClassroomRequests.getPublishedWithStudents(currentUser.data.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const learners = Flight.useBasicFetch<UserCollection>(\n step === 'narrow-selection' && selectedClassroom && ClassroomRequests.getClassroomStudents(selectedClassroom.id)\n );\n const groups = Flight.useBasicFetch<ClassroomGroupCollection>(\n step === 'narrow-selection' && selectedClassroom && ClassroomRequests.getClassroomGroups(selectedClassroom.id)\n );\n\n function onCreateNewClassroom() {\n console.log('Creating a new classroom..');\n }\n\n function onBack() {\n if (step === 'select-classroom') {\n props.closePopup();\n return;\n }\n\n if ([ 'narrow-selection', 'settings' ].includes(step)) {\n setStep('select-classroom');\n return;\n }\n }\n\n function onClickNext() {\n if (!selectedClassroom)\n return;\n\n if ([ 'select-classroom', 'narrow-selection' ].includes(step)) {\n setStep('settings');\n return;\n }\n\n if (step === 'settings') {\n onShare();\n return;\n }\n }\n\n function onClickCreateOpenClassroom() {\n AppLinkHelper.trigger({\n application: AppChannels.SHARE_V2,\n action: Actions.ShareV2.OPEN_CLASSROOM,\n args: [props.objectId],\n params: {\n objectId: props.objectId,\n entityType: props.entityType\n }\n });\n }\n\n async function onShare() {\n if (!selectedClassroom) return;\n\n setWorking(true);\n\n const shareLink = await createDirectShare({\n objectId: props.objectId,\n preventShipping: preventSkippingAhead,\n instantFeedback: enableInstantFeedback,\n requireSignIn: true,\n message,\n recipients: recipients.length ? recipients : [selectedClassroom?.id],\n scopeId: selectedClassroom?.id\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 setWorking(false);\n }\n\n const dataLoaded = (\n !! currentUser.data &&\n !! classrooms.data &&\n !! config.data\n );\n\n const additionalDataLoaded = (\n !! groups.data &&\n !! learners.data\n );\n\n const loaded = step === 'narrow-selection'\n ? dataLoaded && additionalDataLoaded\n : dataLoaded;\n\n const classroomFlowBodyProps: ClassroomFlowBodyProps = {\n step,\n message,\n working,\n selectedClassroom,\n dataLoaded: loaded,\n preventSkippingAhead,\n enableInstantFeedback,\n entityType: props.entityType,\n groups: groups?.data?.data ?? [],\n students: learners?.data?.data ?? [],\n imageCdnUrl: config.data.imageCdnUrl,\n classrooms: classrooms.data?.data ?? [],\n isInteractive: props.entityType === 'interactive',\n onBack,\n onClickNext,\n onCreateNewClassroom,\n onClickCreateOpenClassroom,\n onChangeMessage: setMessage,\n onChangeRecipients: r => setRecipients(r),\n onClassroomSelected: setSelectedClassroom,\n onSelectGroupsOrStudents: () => setStep('narrow-selection'),\n onChangeClassroom: () => setStep('select-classroom'),\n onTogglePreventSkippingAhead: () => setPreventSkippingAhead(!preventSkippingAhead),\n onToggleEnableInstantFeedback: () => setEnableInstantFeedback(!enableInstantFeedback)\n };\n\n if (props.noPopup)\n return <ClassroomFlowBody {...classroomFlowBodyProps} />;\n\n return (\n <Popup\n title={'Assign to ClickView classroom'}\n showLoadingSpinner={!loaded}\n size='lg'\n {...props}\n >\n <ClassroomFlowBody {...classroomFlowBodyProps} />\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Classroom, CurrentUser, PopupViewProps } 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';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nimport { ShareType } from '../enums/ShareType';\nimport { ShareRequests } from '../flight-requests/ShareRequests';\nimport { ShareLink } from '../interfaces/ShareLink';\nimport { ShareHelper } from '../utils/ShareHelper';\n\nimport { FlowSelectorOption, FlowSelectorOptions } from './components/flow-selector-options/FlowSelectorOptions';\nimport { PreviousShares } from './components/flow-selector-options/previous-shares/PreviousShares';\nimport { ClassroomFlowView } from './ClassroomFlowView';\nimport { SessionFlowView } from './SessionFlowView';\n\ninterface FlowSelectorViewProps extends PopupViewProps {\n objectId: string;\n entityType: 'video' | 'clip' | 'interactive' | 'series' | 'playlist';\n}\n\nexport function FlowSelectorView(props: FlowSelectorViewProps): JSX.Element {\n const [ selectedFlow, setSelectedFlow ] = React.useState('');\n const [ showPreviousAssignments, setShowPreviousAssignments ] = React.useState(true);\n\n const previousShares = Flight.useBasicFetch<ShareLink[]>(ShareRequests.getSharesByObjectId(props.objectId));\n const previousAssignments = previousShares.data\n ?.filter(share => share.type === ShareType.Classroom || share.type === ShareType.Open) || [];\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(props.entityType)(props.objectId, currentUser.data?.id);\n\n const classroomIds = ArrayHelper.uniq(\n previousAssignments\n .map(ShareHelper.getClassroomIdFromShare)\n .filter(x => !!x)\n );\n const classrooms = Flight.useBasicFetch<Classroom[]>(\n previousShares.hasCompleted && ClassroomRequests.getClassroomsByIds(classroomIds)\n );\n\n\n function onViewReport(share: ShareLink) {\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: share.shareId\n }\n });\n }\n\n const choices: [FlowSelectorOption, FlowSelectorOption] = [{\n id: 'classroom',\n title: 'Require students to sign in',\n subTitle: '(Select a ClickView classroom)',\n description: `Instantly add video to your students' feed to collect data.`,\n image: ImageUrls.Share.CLASSROOM_SHARE\n }, {\n id: 'session',\n title: 'Students don’t need to sign in',\n subTitle: '(Create an Open classroom)',\n description: 'Students enter a name to access the video and data will be collected.',\n image: ImageUrls.Share.OPEN_CLASSROOM\n }];\n\n function getTitle() {\n if (!selectedFlow)\n return 'Assign';\n\n if (selectedFlow === 'classroom')\n return 'Assign to ClickView classroom';\n\n if (selectedFlow === 'session')\n return 'Assign to an Open classroom';\n\n return 'Assign';\n }\n\n const dataLoaded = (\n !! currentUser.data &&\n !! entity.data &&\n !! previousShares.data &&\n !! classrooms.data\n );\n\n return (\n <Popup\n size='lg'\n title={getTitle()}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n contentClassName={(dataLoaded && !selectedFlow) ? 'bg-transparent border-0' : ''}\n bodyClassName={!selectedFlow && 'p-0 d-flex flex-column gap-3'}\n >\n {(() => {\n if (!dataLoaded)\n return null;\n\n switch (selectedFlow) {\n case 'classroom':\n return <ClassroomFlowView {...props} closePopup={() => setSelectedFlow('')} noPopup={true} />;\n case 'session':\n return <SessionFlowView {...props} closePopup={() => setSelectedFlow('')} noPopup={true} />;\n default:\n return (\n <>\n <FlowSelectorOptions\n title='How do you want your students to access the video?'\n options={choices}\n onClick={option => setSelectedFlow(option.id)}\n />\n \n {previousAssignments.length ? (\n <div className='bg-white rounded-3 p-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='h6 m-0 p-0'>View reports ({previousAssignments.length})</h3>\n <IconButton\n svgName={showPreviousAssignments ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={() => setShowPreviousAssignments(!showPreviousAssignments)}\n />\n </div>\n {showPreviousAssignments && (\n <PreviousShares\n data={{\n shares: previousAssignments,\n classrooms: classrooms.data,\n entity: entity.data\n }}\n onClick={onViewReport}\n />\n )}\n </div>\n ) : null}\n </>\n );\n }\n })()}\n </Popup>\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 message: string;\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 onChangeMessage: (message: string) => 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 message={props.message}\n onTogglePreventSkippingAhead={props.onTogglePreventSkippingAhead}\n onToggleEnableInstantFeedback={props.onToggleEnableInstantFeedback}\n onChangeMessage={props.onChangeMessage}\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 [ message, setMessage ] = React.useState('');\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 message,\n working,\n enableInstantFeedback,\n preventSkippingAhead,\n isInteractive: props.entityType === 'interactive',\n onBack,\n onCreate,\n onChangeMessage: setMessage,\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}","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["normalizeOptions","namespace","ShareRequests","createShare","data","success","error","always","url","key","type","invalidationKeys","updateShare","shareId","getShare","bootstrapName","getSentShares","params","Object","values","join","formatData","response","count","length","pagination","cursors","next","previous","cursor","normalize","getShareLinkByObjectId","id","objectId","getPrivacy","ShareOption","getPhrase","LanguageService","ShareViewHelper","canEmbed","includes","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","IntegrationHelper","filter","i","enabled","map","getFetchFunctionByType","VideoRequests","PlaylistRequests","userId","ClassificationRequests","SeriesRequests","InteractiveRequests","ClipRequests","getAnalyticsEntity","entityType","getAnalyticsOptions","entity","location","workflowPhase","updateShareLink","dispatch","share","alerts","onSuccess","onError","updatedShare","AnalyticsHelper","objectName","name","actionType","eventVersion","escapeText","getShareSettingsInitialValues","interactive","defaults","preventSkipping","preventScrubbing","instantFeedback","immediateFeedback","ShareOptionKeyMapping","InstantFeedback","PreventSkipping","options","reduce","prev","curr","keys","option","value","BASE_IMAGE_CLASS_NAME","InsightsMask","className","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","typeId","MasterType","useVideoThumbnail","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","svgContainerClassName","getBgColorClass","extraClasses","getImageProps","metadataFlags","showVideoMetadata","hideDuration","hideMask","hideRating","hideVideoTypeBadge","showInsightsMask","AppLink","appLink","VideoThumbnail","video","size","thumbnailSize","imageOptions","textPosition","ThumbnailTextPosition","requireMarking","Text","phrase","smartCount","CollectionThumbnail","collection","analyticsData","analyticsOptions","locationContext","showMask","showCollectionMask","showVideoCount","BaseImage","defaultProps","BaseCollectionThumbnailTitle","title","CollectionThumbnailTitle","firstVideo","collectionVideos","videos","playlist","clips","interactives","ArrayHelper","getFirstVideo","videoCount","totalCount","getVideoCount","showTexts","subText","toString","MasterTypeHelper","preventFocus","SvgContainer","svgName","hoverText","TitleSubText","subTextAppLink","titleAppLink","IntegrationId","getShareIntegrations","settingName","SectionSettingToggleItem","Checkbox","onChange","onClick","checked","toggled","htmlFor","description","ClassroomSettingsSectionedHeader","SelectedClassroomHeader","selectedClassroom","onChangeClassroom","ShareAvatar","shareLink","ShareType","privacy","SharePrivacy","ClassroomSettingsSectioned","Row","Col","sm","lg","preventSkippingAhead","onTogglePreventSkippingAhead","isInteractive","enableInstantFeedback","onToggleEnableInstantFeedback","placeholder","message","e","onChangeMessage","target","classroomName","icons","variant","iconColours","textVariant","svgWrapperClassName","svgSize","S","titles","hideSubtitle","groupCount","recipients","r","recipientTypeId","studentCount","pluralize","getSubtitle","singular","plural","createShareLink","getShareLink","getSharesByObjectId","adaptedParams","scopeId","limit","offset","parseInt","createPincode","getPincode","code","getPincodeByShareId","useCreateShare","accessPermissions","fetchAsync","canManageAccess","optionRequest","createDirectShare","requireSignIn","preventShipping","recipientRequest","recipientId","createOpenSession","respectRatingsAndRestrictions","hasCompleted","ShareHelper","getFlattenedRecipients","shares","s","getClassoomIds","classroomIds","x","getClassroomIdFromShare","firstRecipient","getClassroomForShare","classrooms","classroomId","find","classroom","FlowSelectorOptions","DivButton","src","draggable","subTitle","color","PreviousShares","autoHeight","autoHeightMin","autoHeightMax","reverse","IconCircle","getAvatar","viewCount","dateCreated","ClassroomSelectorList","studentsCount","enrolments","onClassroomSelected","Form","onSelectGroupsOrStudents","ImageUrls","alt","searchQuery","onClickCreateOpenClassroom","ClassroomSelector","search","setSearch","filteredClassrooms","toLowerCase","ClassroomEntityList","entities","isSelected","selectedEntities","onSelectEntity","renderIcon","renderTitle","emptyState","getRecipients","NarrowClassroomSelection","selectionType","setSelectionType","selectedGroups","setSelectedGroups","selectedStudents","setSelectedStudents","showGroups","setShowGroups","showStudents","setShowStudents","students","studentCountText","label","onChangeRecipients","groups","IconButton","group","newSelectedGroups","g","push","student","newSelectedStudents","UserHelper","Avatar","imageCdnUrl","initials","surname","imageUrl","avatar","ClassroomFlowBody","dataLoaded","step","PopupButtons","onCreateNewClassroom","text","onBack","onClickNext","disabled","showSpinner","working","PopupLoadingSpinner","ClassroomFlowView","setStep","setSelectedClassroom","setRecipients","setPreventSkippingAhead","setEnableInstantFeedback","setMessage","setWorking","currentUser","UserRequests","ClassroomRequests","config","ConfigRequests","learners","additionalDataLoaded","loaded","classroomFlowBodyProps","closePopup","actions","clip","series","application","action","args","onShare","console","log","noPopup","Popup","showLoadingSpinner","FlowSelectorView","selectedFlow","setSelectedFlow","showPreviousAssignments","setShowPreviousAssignments","previousShares","previousAssignments","onViewReport","choices","contentClassName","bodyClassName","SessionFlowView","SessionFlowBody","onCreate","sessionFlowBodyProps","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","trim","replace","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","idx","floor","unit"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6046],{70376:(e,t,a)=>{a.d(t,{W:()=>u});var n=a(32735),r=a(91967);function i(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 o=5e3;function u(e){var t,a,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o,s=(t=n.useState(!1),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,o,u=[],s=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;s=!1}else for(;!(s=(n=i.call(a)).done)&&(u.push(n.value),u.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(c)throw r}}return u}}(t,a)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(t,a)||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.")}()),c=s[0],l=s[1],d=n.useRef(null),f=function(){l((function(e){return!e})),d.current=window.setTimeout(f,u)};return n.useEffect((function(){d.current=window.setTimeout(f,u)}),[]),n.useEffect((function(){r.q.isFunction(e)&&e()}),[c]),function(){return window.clearTimeout(d.current)}}},5255:(e,t,a)=>{a.d(t,{Y:()=>u});var n=a(70376),r=a(20354),i=a(30439);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function u(e){var t,a=r.a.useGetFetch(),u=e&&i.o.getAnonSessions(e),s=r.a.useBasicFetch(u);return(0,n.W)((function(){return a(u)}),5e3),(null===(t=s.data)||void 0===t?void 0:t.length)?s.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(a={},n=t.sessionId,r=t,(n=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=o(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(n))in a?Object.defineProperty(a,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):a[n]=r,a));var a,n,r}),{}):{}}},4606:(e,t,a)=>{a.d(t,{U:()=>o});var n=a(20354),r=a(75896),i=a(31949);function o(e){var t=r.m.chunk(null!=e?e:[],25),a=n.a.useBasicFetchAll(t.map((function(e){return i.N.getById(e)})));return{users:r.m.flatten(a.data),isLoading:!a.hasCompleted,usersResponse:a}}},94644:(e,t,a)=>{a.d(t,{r:()=>l});var n=a(50242),r=a(81886),i=a(67058),o=a(14553),u=a(49267),s=a(49075),c={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:u.a,privacy:o.q},badRequest:s._,internalServerError:s._};function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},c),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.InternalServer?i!==n.o.NotFound?i!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new o.badRequest):a.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):a.notFound||r.Q.Ry.throw(new o.notFound):a.internalServerError||r.Q.Ry.throw(new s._))}}},17913:(e,t,a)=>{a.d(t,{u:()=>o});var n=a(97395),r=a(110),i=a(62875),o={individualEngagement:function(e,t,a,r){var o=Object.assign({objectId:e},t);return a&&(o.sharerId=a),r&&(o.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map",o),key:(0,i.H)("engagement:".concat(e,":").concat(r),t,a),formatData:function(e){var t;return Object.assign(Object.assign({},e),{data:null===(t=e.data)||void 0===t?void 0:t.map((function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})}))})},normalize:!1}},aggregateEngagement:function(e,t,a,r){var o=Object.assign({objectId:e},t);return a&&(o.sharerId=a),r&&(o.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",o),key:(0,i.H)("aggregate:engagement:".concat(e,":").concat(r),t,a),formatData:function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})},normalize:!1}},views:function(e,t,a,o){var u=Object.assign(Object.assign({},e),{timeOffset:r.O.getTimezoneOffset()});return t&&(u.objectId=t),a&&(u.sharerId=a),o&&(u.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/video-views",u),key:(0,i.H)("video:views:".concat(t,":").concat(o),e,a),normalize:!1}}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var n=a(32735),r=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,a){var o=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){o.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[i(o),t,a])}},56046:(e,t,a)=>{a.r(t),a.d(t,{InsightsHeatmapView:()=>C});var n=a(32735),r=a(23481),i=a(2948),o=a(20354),u=a(5255),s=a(4606),c=a(26025),l=a(74901),d=a(40003),f=a(4594),v=a(60051),g=a(16714),m=a(39151),y=a(47812),b=a(31949),h=a(17913),p=a(91286),w=a(93322),j=a(22902),I=a(79612),O=a(37802),A=a(31908),S=a(86702),E=a(53936),F=a(35274),k=a(10447);function B(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 R=r.T.encloseNamespace("shared.insightsHeatmap");function C(e){var t,a,r,C,L,_,M,T,V=(M=(0,i.D)(S.y.ANONYMISE_USERS),T=1,function(e){if(Array.isArray(e))return e}(M)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,o,u=[],s=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;s=!1}else for(;!(s=(n=i.call(a)).done)&&(u.push(n.value),u.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(c)throw r}}return u}}(M,T)||function(e,t){if(e){if("string"==typeof e)return B(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)?B(e,t):void 0}}(M,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.")}())[0];(0,w.F)();var P=(0,O.r)(null).hasShareFlowV2,U=(0,j.T)().hasPermissions,q=(0,O.r)(null).publicInteractiveAttempts,N=o.a.useBasicFetch(b.N.currentUser()),D=A.M.getVideoRequest(e.videoId,e.typeId),H=o.a.useBasicFetch(D),Q=o.a.useBasicFetch(m.L.config()),z=(0,u.Y)(e.shareId);console.log(z);var W=c.B.getAudienceAppLinkParams(),$=c.B.getDateRangeAppLinkParams(),x=Object.assign(Object.assign({},(0,d.wO)((0,d.Hb)(),$)),(0,l.K)(W)),K=o.a.useBasicFetch(N.data&&h.u.aggregateEngagement(e.videoId,x,N.data.id,q)),Y=o.a.useBasicFetch(N.data&&h.u.individualEngagement(e.videoId,x,null===(t=N.data)||void 0===t?void 0:t.id,q)),G=(null===(r=null===(a=Y.data)||void 0===a?void 0:a.data)||void 0===r?void 0:r.map((function(e){return e.userId})).filter(Boolean))||[],J=(0,s.U)(G),X=J.users,Z=J.isLoading,ee=o.a.useBasicFetch(N.data&&h.u.views(x,e.videoId,null===(C=N.data)||void 0===C?void 0:C.id,q)),te=o.a.useBasicFetch(y.k.createViewKey(e.videoId,v.f.MasterObject));(0,I.M)({title:H.data?R("pageTitle",{video:null===(L=H.data)||void 0===L?void 0:L.name}):null}),(0,p.v)(H);var ae=N.data&&ee.data&&H.data&&K.data&&te.data,ne=!(!Y.data||G.length&&Z),re=Object.assign(Object.assign(Object.assign({},W),$),{shareId:e.shareId});return n.createElement("div",{className:"px-3"},n.createElement(E.j,{video:H.data,dateRangeAppLinkParams:$,tabs:e.typeId===f.E.Interactive?(0,k.kj)(e.videoId,"heatmap",re):e.typeId===f.E.Clip?(0,k.$o)(e.videoId,"heatmap",re):(0,k.$6)(e.videoId,"heatmap",re),hasAnalytics:U(g.C.ViewCustomerAnalytics),analyticsWebUrl:null===(_=Q.data)||void 0===_?void 0:_.analyticsWebUrl,hasShareFlowV2:P,shareId:e.shareId}),n.createElement(F.w,{aggregateEngagement:K.data,individualEngagement:Y.data,videoViews:ee.data,config:Q.data,users:X,viewKey:te.data,hasDataLoaded:!!ae,tableDataLoaded:ne,anonymiseUsers:V,audienceAppLinkParams:W,dateRangeAppLinkParams:$,anonSessions:z}))}}}]);
2
- //# sourceMappingURL=6046-5652117548-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6046-5652117548-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/hooks/UsePolling.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseAnonSessions.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/VideoViewRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst DEFAULT_POLLING_INTERVAL = 5000; // 5 seconds.\n\n/**\n * Hook to fire a callback at a set interval.\n * @param callback \n * @param pollingInterval \n * \n * Returns a function to clear the timeout.\n */\nexport function usePolling(callback: () => void, pollingInterval: number = DEFAULT_POLLING_INTERVAL): () => void {\n const [ pollingTrigger, setPollingTrigger ] = React.useState(false);\n\n const timeoutRef = React.useRef<number>(null);\n\n const poll = () => {\n setPollingTrigger(t => !t);\n\n timeoutRef.current = window.setTimeout(poll, pollingInterval);\n };\n\n React.useEffect(() => {\n timeoutRef.current = window.setTimeout(poll, pollingInterval);\n }, []);\n\n React.useEffect(() => {\n if (FunctionHelper.isFunction(callback))\n callback();\n }, [pollingTrigger]);\n\n return () => window.clearTimeout(timeoutRef.current);\n}","import { usePolling } from 'libs/common/react/hooks/UsePolling';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\n\nexport interface AnonSession {\n sessionId: string;\n sessionName: string;\n}\n\nexport interface AnonSessions extends Record<string, AnonSession> {}\n\nexport function useAnonSessions(shareId: string): AnonSessions {\n const fetch = Flight.useGetFetch();\n const anonSessionsRequest = shareId && ShareRequests.getAnonSessions(shareId);\n const anonSessionsResponse = Flight.useBasicFetch<AnonSession[]>(anonSessionsRequest);\n\n usePolling(() => fetch(anonSessionsRequest), 5000);\n\n if (!anonSessionsResponse.data?.length)\n return {};\n\n return anonSessionsResponse.data.reduce((prev, current) => ({ ...prev, [current.sessionId]: current }), {});\n}","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 { 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 { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsRequestFilter, Engagement } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const VideoViewRequests = {\n individualEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includeAnonViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n if (includeAnonViews)\n queryParams.includeAnonViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map', queryParams),\n key: getAnalyticsRequestKey(`engagement:${objectId}:${includeAnonViews}`, filter, sharerId),\n formatData: (data: any) => {\n return {\n ...data,\n data: data.data?.map((d: any) => ({\n ...d,\n heatMap: d.heatMap ?? []\n }))\n };\n },\n normalize: false\n };\n },\n \n aggregateEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includeAnonViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includeAnonViews)\n queryParams.includeAnonViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map/aggregations', queryParams),\n key: getAnalyticsRequestKey(`aggregate:engagement:${objectId}:${includeAnonViews}`, filter, sharerId),\n formatData: (data: Engagement) => {\n return {\n ...data,\n heatMap: data.heatMap ?? []\n };\n },\n normalize: false\n };\n },\n \n views(\n filter: AnalyticsRequestFilter,\n objectId?: string,\n sharerId?: string,\n includeAnonViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n };\n\n if (objectId)\n queryParams.objectId = objectId;\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includeAnonViews)\n queryParams.includeAnonViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/video-views', queryParams),\n key: getAnalyticsRequestKey(`video:views:${objectId}:${includeAnonViews}`, filter, sharerId),\n normalize: false\n };\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 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":["DEFAULT_POLLING_INTERVAL","usePolling","callback","pollingInterval","pollingTrigger","setPollingTrigger","timeoutRef","t","current","window","setTimeout","clearTimeout","useAnonSessions","shareId","fetch","anonSessionsRequest","anonSessionsResponse","data","length","reduce","prev","sessionId","useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","map","chunk","users","isLoading","hasCompleted","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","VideoViewRequests","individualEngagement","objectId","filter","sharerId","includeAnonViews","queryParams","url","key","formatData","d","heatMap","normalize","aggregateEngagement","views","timeOffset","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","InsightsHeatmapView","props","anonymiseUsers","hasShareFlowV2","hasPermissions","publicInteractiveAttempts","currentUser","videoRequest","videoId","typeId","video","config","anonSessions","console","log","audienceAppLinkParams","dateRangeAppLinkParams","requestFilter","id","userIds","userId","Boolean","videoViews","viewKey","title","name","hasDataLoaded","tableDataLoaded","params","className","tabs","hasAnalytics","analyticsWebUrl"],"sourceRoot":""}
@@ -1,3 +0,0 @@
1
- /*! For license information please see 6629-910e316a83-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}))),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,message:e.message,onTogglePreventSkippingAhead:e.onTogglePreventSkippingAhead,onToggleEnableInstantFeedback:e.onToggleEnableInstantFeedback,onChangeMessage:e.onChangeMessage}),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(""),2),b=g[0],w=g[1],k=p(n.useState(!1),2),E=k[0],S=k[1],x={entityType:e.entityType,message:b,working:E,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 S(!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)})))},onChangeMessage:w,onTogglePreventSkippingAhead:function(){return l(!a)},onToggleEnableInstantFeedback:function(){return m(!y)}};return e.noPopup?n.createElement(v,Object.assign({},x)):n.createElement(i.G,Object.assign({title:"Assign to an Open classroom",showLoadingSpinner:!1,size:"lg"},e),n.createElement(v,Object.assign({},x)))}}}]);
3
- //# sourceMappingURL=6629-910e316a83-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6629-910e316a83-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 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 message?: string;\n onTogglePreventSkippingAhead: () => void;\n onToggleEnableInstantFeedback: () => void;\n onChangeMessage: (message: string) => 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 <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 </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 message: string;\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 onChangeMessage: (message: string) => 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 message={props.message}\n onTogglePreventSkippingAhead={props.onTogglePreventSkippingAhead}\n onToggleEnableInstantFeedback={props.onToggleEnableInstantFeedback}\n onChangeMessage={props.onChangeMessage}\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 [ message, setMessage ] = React.useState('');\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 message,\n working,\n enableInstantFeedback,\n preventSkippingAhead,\n isInteractive: props.entityType === 'interactive',\n onBack,\n onCreate,\n onChangeMessage: setMessage,\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","setMessage","setWorking","sessionFlowBodyProps","closePopup","actions","video","clip","interactive","series","playlist","application","action","args","noPopup","showLoadingSpinner","size"],"sourceRoot":""}