@clickview/lite 0.83.0-rc.0 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
  7. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
  9. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
  10. package/dist/scripts/1938-c52383e98d-lite.chunk.js +3 -0
  11. package/dist/scripts/1938-c52383e98d-lite.chunk.js.map +1 -0
  12. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
  13. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  14. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  15. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  16. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  17. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  18. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  19. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  20. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  21. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/3836-bf1359bed7-lite.chunk.js +3 -0
  23. package/dist/scripts/3836-bf1359bed7-lite.chunk.js.map +1 -0
  24. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  25. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  26. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  27. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  28. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  29. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  31. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  33. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  35. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  36. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  37. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  39. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  41. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  43. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  44. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  45. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  46. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  47. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  48. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  49. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  51. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7401-833bc4a088-lite.chunk.js +2 -0
  53. package/dist/scripts/7401-833bc4a088-lite.chunk.js.map +1 -0
  54. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  55. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  56. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  57. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  58. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  59. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  60. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  61. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8077-bfb3530f78-lite.chunk.js +3 -0
  63. package/dist/scripts/8077-bfb3530f78-lite.chunk.js.map +1 -0
  64. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  65. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  66. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  67. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  68. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  69. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  71. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  73. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  74. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  75. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  76. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  77. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  78. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  79. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  80. package/dist/scripts/bundle-dcea87749e.min.js +3 -0
  81. package/dist/scripts/{bundle-f926852f33.min.js.map → bundle-dcea87749e.min.js.map} +1 -1
  82. package/package.json +1 -1
  83. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  84. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  85. package/dist/scripts/1938-e067e06dac-lite.chunk.js +0 -3
  86. package/dist/scripts/1938-e067e06dac-lite.chunk.js.map +0 -1
  87. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  88. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  89. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  90. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  91. package/dist/scripts/3836-2c82a9fbf7-lite.chunk.js +0 -3
  92. package/dist/scripts/3836-2c82a9fbf7-lite.chunk.js.map +0 -1
  93. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  94. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  96. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  98. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  99. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  100. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  101. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  102. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  103. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  104. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  105. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  106. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  107. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  108. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  109. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  110. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  111. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  112. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  113. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  114. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  115. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  116. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  117. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  118. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  119. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  120. package/dist/scripts/8077-870bd8e245-lite.chunk.js +0 -3
  121. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +0 -1
  122. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  123. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  124. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  125. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  126. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  127. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  128. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  129. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  130. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  131. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  132. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  133. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  134. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  135. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  136. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  137. package/dist/scripts/bundle-f926852f33.min.js +0 -3
  138. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  140. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  141. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  142. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  143. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  144. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  145. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  146. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  147. /package/dist/scripts/{1938-e067e06dac-lite.chunk.js.LICENSE.txt → 1938-c52383e98d-lite.chunk.js.LICENSE.txt} +0 -0
  148. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 3836-bf1359bed7-lite.chunk.js.LICENSE.txt} +0 -0
  149. /package/dist/scripts/{3836-2c82a9fbf7-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  150. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8077-bfb3530f78-lite.chunk.js.LICENSE.txt} +0 -0
  151. /package/dist/scripts/{8077-870bd8e245-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  152. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  153. /package/dist/scripts/{bundle-f926852f33.min.js.LICENSE.txt → bundle-dcea87749e.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7568-55e9b01367-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/components/open-classroom-flow-info-header/OpenClassroomFlowInfoHeader.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/components/open-classroom-flow-settings/OpenClassroomFlowSettings.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData.ts","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/OpenClassroomFlowSettingsView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-view/OpenClassroomFlowView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport type { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'sharev2.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\ninterface GetPrivateIconAndTextOptions {\n privacy: SharePrivacy;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetPrivateIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('pinDescription') };\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getShareLinkAccessType(privacy: SharePrivacyResponse): 'private' | 'owner' | 'protected' {\n /**\n * If an entity is not a ClickView content and they cannot manage access\n * settings of the entity (which they can if its their private entity)\n * it means that its a TV content\n */\n if (privacy.isTvContent || privacy.isClickViewContent)\n return 'protected';\n\n if (privacy.canManageAccess)\n return 'owner';\n\n return 'private';\n }\n};","import React from 'react';\n\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 { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'assign.openClassroomFlowInfoHeader';\n\ninterface OpenClassroomFlowInfoHeaderProps {\n onClose: () => void;\n}\n\nexport function OpenClassroomFlowInfoHeader(props: OpenClassroomFlowInfoHeaderProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='p-3 bg-light-blue rounded rounded-2 gap-3 d-flex flex-row'>\n <div className='d-none d-md-block'>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant='blue'\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n </div>\n <div className='position-relative w-100'>\n <h3 className='h6'><Text phrase='title' /></h3>\n <p className='mb-0'><Text phrase='description' /></p>\n <div className='position-absolute top-0 end-0'>\n <IconButton svgName={cvSvgLibrary.Close} onClick={props.onClose} className='btn-close p-2' />\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareLinkHelper } from 'libs/shared/apps/share-v2/utils/ShareLinkHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { FlowSettings } from 'apps/assign/components/flow-settings/FlowSettings';\n\nimport { OpenClassroomFlowSettingsError } from '../../hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData';\nimport { OpenClassroomFlowInfoHeader } from '../open-classroom-flow-info-header/OpenClassroomFlowInfoHeader';\n\nconst namespace = 'assign.openClassroomFlowSettings';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SettingsFieldProps {\n // Open classroom name field\n openClassroomName: string;\n onChangeOpenClassroomName: (name: string) => void;\n \n // Prevent scrubbing field\n hidePreventScrubbing?: boolean;\n disablePreventScrubbing?: boolean;\n onTogglePreventScrubbing: () => void;\n preventScrubbing: boolean;\n \n // Immediate feedback field\n hideImmediateFeedback?: boolean;\n disableImmediateFeedback?: boolean;\n onToggleImmediateFeedback: () => void;\n immediateFeedback: boolean;\n\n // Require student sign in field\n hideRequiresStudentSignIn?: boolean;\n disableRequiresStudentSignIn?: boolean;\n onToggleRequiresStudentSignIn: () => void;\n toggleRequiresStudentSignIn: boolean;\n\n // Respect ratings and restrictions field\n hideRespectRatingsAndRestrictions?: boolean;\n disableRespectRatingsAndRestrictions?: boolean;\n onToggleRespectRatingsAndRestrictions: () => void;\n toggleRespectRatingsAndRestrictions: boolean;\n \n // Message field\n hideMessage?: boolean;\n disableMessage?: boolean;\n message: string;\n onChangeMessage: (message: string) => void;\n onToggleMessage: () => void;\n toggleMessage: boolean;\n}\n\ninterface OpenClassroomFlowSettingsProps extends SettingsFieldProps {\n hasStudentExp: boolean;\n entity: SharableEntity;\n yearGroups: YearGroup[];\n closeHeader: () => void;\n showHeader: boolean;\n error: OpenClassroomFlowSettingsError;\n}\n\nexport function OpenClassroomFlowSettings(props: OpenClassroomFlowSettingsProps): JSX.Element {\n const respectRatingText = ShareLinkHelper.getRespectRatingText(\n props.entity,\n props.yearGroups,\n props.hasStudentExp\n );\n \n return (\n <div className='d-flex flex-column gap-4'>\n {props.showHeader &&\n <OpenClassroomFlowInfoHeader onClose={props.closeHeader} />\n }\n \n <FlowSettings>\n <FlowSettings.Input\n title={getPhrase('openClassroomNameTitle')}\n className='col-lg-6'\n value={props.openClassroomName}\n onChange={props.onChangeOpenClassroomName}\n placeholder={getPhrase('openClassroomNamePlaceholder')}\n error={props.error.name}\n />\n </FlowSettings>\n \n <FlowSettings.Divider hide={props.hidePreventScrubbing && props.hideImmediateFeedback} />\n \n <FlowSettings\n name={getPhrase('videoSettingsTitle')}\n hide={props.hidePreventScrubbing && props.hideImmediateFeedback}\n >\n <FlowSettings.Toggle\n hide={props.hidePreventScrubbing}\n title={getPhrase('preventScrubbingTitle')}\n description={getPhrase('preventScrubbingDescription')}\n onClick={props.onTogglePreventScrubbing}\n toggled={props.preventScrubbing}\n disabled={props.disablePreventScrubbing}\n />\n <FlowSettings.Toggle\n hide={props.hideImmediateFeedback}\n title={getPhrase('immediateFeedbackTitle')}\n description={getPhrase('immediateFeedbackDescription')}\n onClick={props.onToggleImmediateFeedback}\n toggled={props.immediateFeedback}\n disabled={props.disableImmediateFeedback}\n />\n </FlowSettings>\n\n <FlowSettings.Divider hide={props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions} />\n\n <FlowSettings\n name={getPhrase('studentAccessTitle')}\n hide={props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions}\n >\n <FlowSettings.Toggle\n hide={props.hideRequiresStudentSignIn}\n title={getPhrase('requiresStudentSignInTitle')}\n description={getPhrase('requiresStudentSignInDescription')}\n onClick={props.onToggleRequiresStudentSignIn}\n toggled={props.toggleRequiresStudentSignIn}\n disabled={props.disableRequiresStudentSignIn}\n />\n <FlowSettings.Toggle\n hide={props.hideRespectRatingsAndRestrictions}\n title={getPhrase('respectRatingsAndRestrictionsTitle')}\n description={respectRatingText}\n onClick={props.onToggleRespectRatingsAndRestrictions}\n toggled={props.toggleRespectRatingsAndRestrictions}\n disabled={props.disableRespectRatingsAndRestrictions}\n />\n </FlowSettings>\n \n <FlowSettings.Divider hide={\n (props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions)\n || props.hideMessage}\n />\n \n <FlowSettings\n name={getPhrase('moreOptionsTitle')}\n hide={props.hideMessage}\n childContainerClassName='d-flex flex-column gap-2'\n >\n <FlowSettings.Toggle\n hide={props.hideMessage}\n title={getPhrase('messageTitle')}\n description={getPhrase('messageDescription')}\n onClick={props.onToggleMessage}\n toggled={props.toggleMessage}\n disabled={props.disableMessage}\n >\n <FlowSettings.TextArea\n hide={!props.toggleMessage}\n placeholder={getPhrase('messagePlaceholder')}\n onChange={props.onChangeMessage}\n value={props.message}\n />\n </FlowSettings.Toggle>\n </FlowSettings>\n \n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useCreateShare } from 'libs/shared/apps/share-v2/hooks/useCreateShare';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\n\nconst namespace = 'assign.useOpenClassroomFlowData';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UseOpenClassroomFlowDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\ntype OpenClassroomFlowSettings = 'preventScrubbing' | 'immediateFeedback' | 'requiresStudentSignIn' | 'respectRatingsAndRestrictions' | 'message';\ntype OpenClassroomFlowSettingsMap = {[key in OpenClassroomFlowSettings]: boolean};\nexport type OpenClassroomFlowSettingsError = {\n name?: string\n};\n\nconst initialSettings: OpenClassroomFlowSettingsMap = {\n immediateFeedback: false,\n preventScrubbing: false,\n message: false,\n requiresStudentSignIn: false,\n respectRatingsAndRestrictions: false\n};\n\nconst MAX_OPEN_CLASSROOM_NAME_LENGTH = 128;\n\nconst VIEW_MODEL_KEY = 'assign:open:classroom:flow:settings:header';\n\nexport function useOpenClassroomFlowSettingsData(options: UseOpenClassroomFlowDataOptions) {\n const alert = useAlerts();\n\n /**\n * We store this in Local storage so that if they user deliberatly\n * closes this we dont show this again\n */\n const [ showHeader, setShowHeader ] = useViewModel(VIEW_MODEL_KEY, true, { storage: StorageType.LocalStorage });\n \n const sharedData = useAssignSharedData({\n entityType: options.entityType,\n objectId: options.objectId\n });\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n CustomerRequests.yearGroups(sharedData.currentUser.data?.customerId)\n );\n\n const { createOpenSession } = useCreateShare(options.objectId);\n \n const [ settings, setSettings ] = React.useState<OpenClassroomFlowSettingsMap>({\n ...initialSettings,\n preventScrubbing: sharedData.interactive.data?.preventScrubbing || false,\n immediateFeedback: sharedData.interactive.data?.immediateFeedback || false\n });\n const [ name, setName ] = React.useState('');\n const [ message, setMessage ] = React.useState('');\n const [ loading, setLoading ] = React.useState(false);\n const [ error, setError ] = React.useState<OpenClassroomFlowSettingsError>({});\n\n const isValid = Object.keys(error).length === 0;\n\n function onChangeSetting(setting: OpenClassroomFlowSettings, value: boolean) {\n const newSettings: Partial<OpenClassroomFlowSettingsMap> = {\n [setting]: value\n };\n /*\n * If respect ratings and restrictions is toggled\n * we always toggle requires student sign in option too\n * - Nish\n */\n if (setting === 'respectRatingsAndRestrictions') {\n newSettings['requiresStudentSignIn'] = value;\n }\n \n setSettings(prev => ({\n ...prev,\n ...newSettings\n }));\n }\n\n async function onShare(onSuccess?: (share: Share) => void) {\n if (!isValid) {\n return;\n }\n\n setLoading(true);\n try {\n const share = await createOpenSession({\n name,\n objectId: options.objectId,\n immediateFeedback: settings.immediateFeedback,\n preventScrubbing: settings.preventScrubbing,\n requireSignIn: settings.requiresStudentSignIn,\n respectRatingsAndRestrictions: settings.respectRatingsAndRestrictions\n });\n\n typeof onSuccess === 'function' && onSuccess(share);\n \n setLoading(false);\n } catch (ex: unknown) {\n alert.error(getPhrase('createError'));\n } finally {\n setLoading(false);\n }\n }\n\n function toggleSetting(setting: OpenClassroomFlowSettings) {\n onChangeSetting(setting, !settings[setting]);\n }\n\n function setOpenClassroomName(name: string) {\n if (name.length > MAX_OPEN_CLASSROOM_NAME_LENGTH) {\n setError(prev => ({\n ...prev,\n name: getPhrase('errorNameTooLong')\n }));\n } else {\n setError(prev => {\n delete prev.name;\n return prev;\n });\n }\n setName(name);\n }\n\n const loaded = sharedData.loaded\n && !!yearGroups.data;\n\n return {\n data: {\n loaded,\n entity: sharedData.entity,\n yearGroups: yearGroups\n },\n showHeader,\n hasStudentExp: sharedData.hasStudentExp,\n shouldShowSpinner: loading,\n nextButtonText: getPhrase('nextButton'),\n name,\n message,\n settings,\n setMessage,\n setShowHeader,\n toggleSetting,\n setOpenClassroomName,\n onShare,\n error,\n setError,\n isValid\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\n\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { getAssignEventLogger } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { OpenClassroomFlowSettings } from './components/open-classroom-flow-settings/OpenClassroomFlowSettings';\nimport { useOpenClassroomFlowSettingsData } from './hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData';\n\nconst namespace = 'assign.openClassroomFlowSettingsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface OpenClassroomFlowSettingsViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n\n setShare: (share: Share) => void;\n goToFlowSelector: () => void;\n goToAssignDetails: () => void;\n hideBackButton?: boolean;\n}\n\nexport function OpenClassroomFlowSettingsView(props: OpenClassroomFlowSettingsViewProps): JSX.Element {\n const viewModel = useOpenClassroomFlowSettingsData({\n entityType: props.entityType,\n objectId: props.objectId\n });\n\n const { experience, loading: isLoadingExperience } = useClassroomExperience();\n\n const {\n loaded,\n entity,\n yearGroups\n } = viewModel.data;\n\n const { log } = getAssignEventLogger({\n data: {\n entity: {\n id: props.objectId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup\n }\n });\n\n function onClickNext() {\n viewModel.onShare(share => {\n // Create event is logged for EventAggregator to send emails - Sha\n log({\n type: 'create-open-classroom',\n share\n });\n // Share event is logged for continuity with the V1 share analytics - Sha\n log({\n type: 'share-open-classroom',\n id: share.objectId,\n shareId: share.shareId,\n shareType: share.type\n });\n \n props.setShare(share);\n props.goToAssignDetails();\n });\n }\n\n const loading = !loaded || isLoadingExperience || props.loading;\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={loading}\n closePopup={props.closePopup}\n bodyClassName='d-flex flex-column gap-3'\n animation={props.animate}\n >\n <OpenClassroomFlowSettings\n entity={entity.data}\n error={viewModel.error}\n showHeader={viewModel.showHeader}\n openClassroomName={viewModel.name}\n onChangeOpenClassroomName={viewModel.setOpenClassroomName}\n message={viewModel.message}\n yearGroups={yearGroups.data}\n hasStudentExp={viewModel.hasStudentExp}\n toggleMessage={viewModel.settings.message}\n immediateFeedback={viewModel.settings.immediateFeedback}\n preventScrubbing={viewModel.settings.preventScrubbing}\n toggleRequiresStudentSignIn={viewModel.settings.requiresStudentSignIn}\n toggleRespectRatingsAndRestrictions={viewModel.settings.respectRatingsAndRestrictions}\n hideMessage={true} // Message field does nothing atm for open classroom\n onChangeMessage={viewModel.setMessage}\n onToggleMessage={() => viewModel.toggleSetting('message')}\n hidePreventScrubbing={props.entityType !== 'interactive'}\n hideImmediateFeedback={props.entityType !== 'interactive'}\n hideRequiresStudentSignIn={experience !== 'full'}\n hideRespectRatingsAndRestrictions={experience !== 'full'}\n onTogglePreventScrubbing={() => viewModel.toggleSetting('preventScrubbing')}\n onToggleImmediateFeedback={() => viewModel.toggleSetting('immediateFeedback')}\n onToggleRequiresStudentSignIn={() => viewModel.toggleSetting('requiresStudentSignIn')}\n onToggleRespectRatingsAndRestrictions={() => viewModel.toggleSetting('respectRatingsAndRestrictions')}\n closeHeader={() => viewModel.setShowHeader(false)}\n disableRequiresStudentSignIn={viewModel.settings.respectRatingsAndRestrictions}\n />\n <FlowControls\n hideCreateClassroomButton\n hideBackButton={props.hideBackButton}\n onClickBack={props.goToFlowSelector}\n onClickNext={onClickNext}\n nextButtonText={viewModel.nextButtonText}\n showSpinner={viewModel.shouldShowSpinner}\n disableNextButton={!viewModel.isValid}\n />\n </Popup>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopup, MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\n\nimport { OpenClassroomFlowSteps } from 'apps/assign/interfaces/Assign';\n\nimport { AssignDetailsView, AssignDetailsViewProps } from '../assign-details-view/AssignDetailsView';\nimport { OpenClassroomFlowSettingsView, OpenClassroomFlowSettingsViewProps } from '../open-classroom-flow-settings-view/OpenClassroomFlowSettingsView';\n\ntype AllOpenClassroomFlowViewProps =\n & OpenClassroomFlowSettingsViewProps\n & AssignDetailsViewProps;\nexport interface OpenClassroomFlowViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToFlowSelector: () => void;\n isEntry?: boolean;\n}\n\nexport function OpenClassroomFlowView(props: OpenClassroomFlowViewProps): JSX.Element {\n const [ flowStep, setFlowStep ] = React.useState<OpenClassroomFlowSteps>('settings');\n const [ share, setShare ] = React.useState<Share>();\n\n const data: AllOpenClassroomFlowViewProps = {\n objectId: props.objectId,\n entityType: props.entityType,\n closePopup: props.closePopup,\n goToFlowSelector: props.goToFlowSelector,\n \n shareId: share?.shareId,\n initialDetailsScreen: 'share-link',\n goToAssignDetails: () => setFlowStep('assign-details'),\n setShare\n };\n\n return (\n <MultiStepPopup<AllOpenClassroomFlowViewProps, OpenClassroomFlowSteps>\n data={data}\n animate={false}\n step={flowStep}\n setStep={setFlowStep}\n closePopup={props.closePopup}\n steps={{\n 'settings': { view: OpenClassroomFlowSettingsView },\n 'assign-details': { view: AssignDetailsView }\n }}\n />\n );\n}"],"names":["getPhrase","ShareLinkHelper","getPrivateIconAndText","options","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","text","Array","isArray","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","length","name","getShareLinkAccessType","isTvContent","isClickViewContent","canManageAccess","namespace","OpenClassroomFlowInfoHeader","props","className","IconCircle","svgName","svgSize","SvgContainer","S","variant","textVariant","svgWrapperClassName","Text","phrase","IconButton","onClick","onClose","LanguageService","OpenClassroomFlowSettings","respectRatingText","showHeader","closeHeader","FlowSettings","title","openClassroomName","onChange","onChangeOpenClassroomName","placeholder","error","hide","hidePreventScrubbing","hideImmediateFeedback","description","onTogglePreventScrubbing","toggled","preventScrubbing","disabled","disablePreventScrubbing","onToggleImmediateFeedback","immediateFeedback","disableImmediateFeedback","hideRequiresStudentSignIn","hideRespectRatingsAndRestrictions","onToggleRequiresStudentSignIn","toggleRequiresStudentSignIn","disableRequiresStudentSignIn","onToggleRespectRatingsAndRestrictions","toggleRespectRatingsAndRestrictions","disableRespectRatingsAndRestrictions","hideMessage","childContainerClassName","onToggleMessage","toggleMessage","disableMessage","onChangeMessage","message","initialSettings","requiresStudentSignIn","respectRatingsAndRestrictions","MAX_OPEN_CLASSROOM_NAME_LENGTH","VIEW_MODEL_KEY","useOpenClassroomFlowSettingsData","alert","storage","setShowHeader","sharedData","useAssignSharedData","entityType","objectId","CustomerRequests","currentUser","data","customerId","createOpenSession","useCreateShare","interactive","settings","setSettings","setName","setMessage","loading","setLoading","setError","isValid","Object","keys","loaded","shouldShowSpinner","nextButtonText","toggleSetting","setting","newSettings","prev","onChangeSetting","setOpenClassroomName","onShare","onSuccess","requireSignIn","share","OpenClassroomFlowSettingsView","viewModel","useClassroomExperience","experience","isLoadingExperience","log","getAssignEventLogger","id","type","analyticsOptions","location","Popup","size","showLoadingSpinner","closePopup","bodyClassName","animation","animate","FlowControls","hideCreateClassroomButton","hideBackButton","onClickBack","goToFlowSelector","onClickNext","shareId","shareType","setShare","goToAssignDetails","showSpinner","disableNextButton","OpenClassroomFlowView","flowStep","setFlowStep","initialDetailsScreen","MultiStepPopup","step","setStep","steps","view","AssignDetailsView"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7617-211f084b70-lite.chunk.js","mappings":"mHAAA,IAAYA,E,iBAAZ,SAAYA,GACV,kBACA,oBACA,wCACA,8DACA,oEACA,wBACA,8BACA,iBACD,CATD,CAAYA,IAAAA,EAAY,I,mCCEjB,IAAMC,EAAuB,CAClCC,YAAW,WACT,MAAO,CACLC,IAAK,mCACLC,IAAK,mBACLC,WAAW,EAEf,EAEAC,oBAAmB,WACjB,MAAO,CACLH,IAAK,4CACLC,IAAK,4BACLC,WAAW,EAEf,EAEAE,mBAAkB,WAChB,MAAO,CACLJ,IAAK,2CACLC,IAAK,2BACLC,WAAW,EAEf,EAEAG,WAAU,WACR,MAAO,CACLL,IAAK,mCACLC,IAAK,mBACLC,WAAW,EAEf,EAEAI,MAAK,WACH,MAAO,CACLN,IAAK,6BACLC,IAAK,aACLC,WAAW,EAEf,EAEAK,kBAAiB,WACf,MAAO,CACLP,IAAK,0CACLC,IAAK,0BACLC,WAAW,EAEf,EAEAM,iBAAgB,WACd,MAAO,CACLR,IAAK,yCACLC,IAAK,yBACLC,WAAW,EAEf,E,8OC3CF,IAAMO,EAAY,0BASZ,SAAUC,EAAmBC,GACjC,I,IAIC,G,GAJyB,OACxB,0BACA,EACA,CAAEC,QAAS,oB,EACZ,E,o4BAJOC,EAAI,KAAEC,EAAO,KA2BrB,OAAKH,EAAMI,cAAiBF,EAI1B,uBAAKG,KAAK,QAAQC,UAAU,oFAC1B,2BACE,gBAAC,IAAI,CAACR,UAAWA,EAAWS,OAAO,eACnC,qBAAGD,UAAU,YAAYE,KAxB/B,WACE,IAAKR,EAAMS,MAAO,OAAOT,EAAMU,aAE/B,IAAIC,EAAa,GAWjB,OATIX,EAAMS,MAAMG,SAAW,kBACzBD,EAAa,iBAAH,OAAoBX,EAAMS,MAAMI,GAAE,WAE1Cb,EAAMS,MAAMG,SAAW,YACzBD,EAAa,WAAH,OAAcX,EAAMS,MAAMI,GAAE,WAEpCb,EAAMS,MAAMG,SAAW,WACzBD,EAAa,UAAH,OAAaX,EAAMS,MAAMI,GAAE,WAEhC,kBAAwBb,EAAMU,aAAcC,EACrD,CASqCG,GAAmBC,OAAO,UACvD,gBAAC,IAAI,CAACjB,UAAWA,EAAWS,OAAO,eACjC,KAEN,gBAAC,IAAU,CAACS,QAAS,WAAoBV,UAAU,YAAYW,QAhCnE,WACEd,GAAQ,EACV,KAoBS,gCAaX,C,uGChEA,SAAgB,WAAa,SCe7B,IACMe,EAAYC,EAAA,mBADA,yBAaZ,SAAUC,EAAoBpB,G,MAC5BqB,EAAWrB,EAAMsB,YAAYC,IAAMvB,EAAMsB,YAAYE,GAErD,EAAUxB,EAAMyB,YAAcC,EAAA,OAAiB,KAAuC,KAmBtFC,EAAqB3B,EAAMyB,YAAcC,EAAA,OAC3C,KACA,KAEEE,EAAS,+BACVD,GAAkB,CACrBE,aAtBO,OAAP,wBACK7B,EAAM8B,iBAAe,CACxBjB,GAAI,QAuBR,OACE,uBAAKP,UAAWN,EAAMM,WACpB,gBAAC,IAAoB,CAACyB,QAAsB,QAAb,EAAA/B,EAAM+B,eAAO,QAAIb,EAAU,eAAgBc,SAAS,IAEnF,uBAAK1B,UAAS,UAAK,aAAiB,oBAClC,gBAAC2B,EAAA,EAAgB,CACfL,UAAWA,EACXM,iBA1BR,WACE,MAAO,CAAC,OAAD,wBAEA,MAAoB,CACvBC,QAASd,EACTe,QAAA,IAGN,EAmBQC,YAAarC,EAAMqC,YACnBC,WAAYtC,EAAMsC,WAClBhB,YAAatB,EAAMsB,YACnBhB,UAAU,kBACV8B,QAAU,WAAH,OAAS,CAAO,KAKjC,C,mCC7EO,IAAMG,EAAsB,Q,iLCiB7BrB,EAAY,qBADA,yBAKLsB,EAA6B,CACxCC,KAAM,SACNC,QAAS,iBACTC,SAAU,IACVC,aAAc,gBACdC,UAAW,GACXC,YAAa,GACbC,aAAa,IAAIC,MAAOC,cACxBC,YAAY,IAAIF,MAAOC,cACvBE,WAAY,KACZC,KAAM,CACJC,kBAAmB,GACnBC,aAAc,IAEhBC,QAAS,IACTC,gBAAiB,EACjBC,QAAS,EACTC,WAAY,GACZC,QAAS,CACPC,kBAAkB,EAClBC,mBAAmB,IAIVC,EAAkC,+BAC1CtB,GAAmB,CACtBC,KAAM,SACNU,WAAY,QAAe,IAAIH,KAAKR,EAAoBO,aAAc,GAAI,QAAQE,cAClFP,QAAS,cAGEqB,EAAoD,CAC/DC,MAAOxB,EACPX,aAAc,KACdoC,gBAAiB,KACjBf,WAAY,aAAoB,IAAIF,KArCR,EAqCuC,QAAQC,eAGhEiB,EAA6C,+BACrDH,GAA8B,CACjCC,MAAOF,IAGIK,EAAsC,CACjDC,YAAa,cACbC,OAAQ,wCAGGC,EAAqD,CAChEF,YAAa,cACbC,OAAQ,uDAGGE,EAAsC,CACjDvD,QAAS,eACTwD,MAAOtD,EAAU,gBACjBkB,QAAS+B,EACTM,MAAO,WACPnE,UAAW,uB,2YClEPR,EAAY,8BACZoB,EAAYC,EAAA,mBAAiCrB,GAE7C,SAAU4E,IACd,OACE,gBAACC,EAAA,EAAU,KACT,gBAACA,EAAA,QAAgB,CAACC,IAAKC,EAAA,+BAAwCC,QAAS5D,EAAU,aAClF,gBAACyD,EAAA,UAAkB,KAAC,gBAACI,EAAA,EAAI,CAACjF,UAAWA,EAAWS,OAAO,aACvD,gBAACoE,EAAA,OAAe,KAAC,gBAACI,EAAA,EAAI,CAACjF,UAAWA,EAAWS,OAAO,UACpD,gBAACoE,EAAA,MAAc,CACbK,KAAM7D,EAAA,YAA0BrB,EAAW,OAC3CsC,QAAS,CACPgC,YAAa,YACbC,OAAQ,oBAEVY,cAAe,CAAC,EAChBC,iBAAkB,CAChBC,WAAY,WACZC,SAAU,qBACVC,OAAQ,aACRC,cAAe,WACfC,WAAY,KAAAC,UAKtB,C,eCHM,EAAY,oBACZ,EAAYrE,EAAA,mBAAiC,GAM7C,SAAUsE,EAAazF,G,WAE3B,EAAA0F,EAAA,GAAmB,CAAEC,MAAO,EAAU,cACtC,OAAgD,EAAAC,EAAA,KAAxCC,EAAc,EAAdA,eAAgBC,EAAmB,EAAnBA,oBACxB,GAA0C,EAAAC,EAAA,GAAY,MAA9CC,EAAc,EAAdA,eAAgBC,EAAa,EAAbA,cAChBC,GAAa,EAAAC,EAAA,KAAbD,SACF5E,GAAc,EAAA8E,EAAA,KACZC,GAAiB,EAAAC,EAAA,KAAjBD,aACAE,GAAe,EAAAC,EAAA,KAAfD,WAEFE,GAAe,QAAgBzG,EAAMY,QAGrC8F,GAAeZ,EAAoB,0BACvCD,EAAec,EAAA,iBAAgCX,EAC3CY,EAAwBZ,GAAkBH,EAAec,EAAA,gBACzDE,GAAwC,QAAtB,EAAAR,aAAY,EAAZA,EAAcS,gBAAQ,eAAEC,kBAAkC,YAAfR,EAG7DS,EAAS,kBAA6BC,EAAA,YACtCC,EAAc,kBAAkCC,EAAA,iBAChD7E,EAAa,mBACD,QAAhB,EAAA4E,EAAYE,YAAI,eAAEC,kBAAmBC,EAAA,aAA4BJ,EAAYE,KAAKG,aAE9EzF,EAAkB,kBAA0C+E,GAChE1H,EAAA,yBAEIyC,GAAY,EAAA4F,EAAA,GAAe,CAC/BC,qBAAqB,EACrBf,YAAAA,EACAgB,OAAQ,CACNjF,KAAM,CAAEf,EAAA,OAAgBA,EAAA,mBAS5B,OALA,YAAgB,WACRmE,EAAec,EAAA,iBAAgCX,GACnD,gBAA4B,IAChC,EAAG,CAACU,IAECA,EAIH,uBAAKpG,UAAU,QACb,gBAACP,EAAA,EAAkB,CACjBW,aAAyB,QAAX,EAAAsG,EAAOI,YAAI,eAAEO,gBAC3BvH,aAAcyF,EAAec,EAAA,2BAG/B,uBAAKrG,UAAU,2BACb,sBAAIA,UAAU,QAAO,gBAACyE,EAAA,EAAI,CAACjF,UAAW,EAAWS,OAAO,cACvD0F,GACC,qBAAG3F,UAAU,QACX,gBAACyE,EAAA,EAAI,CAACjF,UAAW,EAAWS,OAAO,mBAAkB,IAErD,gBAACqH,EAAA,EAAO,CACNxF,QAAS,CAAEgC,YAAa,eAAwBC,OAAQ,qBACxD/D,UAAU,aAEV,gBAACyE,EAAA,EAAI,CAACjF,UAAW,EAAWS,OAAO,qBAM1CsG,GAAmB/E,EAAgBsF,MAClC,gBAAChG,EAAA,EAAmB,CAClBU,gBAAiBA,EAAgBsF,KACjC9F,YAAaA,EACbe,YAAaT,EAAUS,YACvBC,WAAYA,EAAW8E,KACvB3F,UAAWC,EAAA,SAIb,W,MACA,OAAIE,EAAUiG,mBACL,gBAACC,EAAA,EAAoB,MAEzBlG,EAAUmG,WAAWC,OAIxB,gCACE,gBAACC,EAAA,EAAa,CACZF,WAAYnG,EAAUmG,WACtBG,cAAetG,EAAUsG,cAAcC,MACvClE,gBAAiBrC,EAAUqC,gBAAgBkE,MAC3CC,0BAA2BxG,EAAUwG,0BAA0BC,SAC/DnG,iBAAkB,SAAAoG,GAAG,OAAI,QAAsB,CAC7CtE,MAAOsE,EAAItE,MACXnC,aAAcyG,EAAIzG,aAClB0G,eAAgB9B,EAAa+B,sBAC7BC,YAAa7B,EACbV,SAAAA,EACA5E,YAAAA,GACA,EACFoH,mBAAiB,EACjBpH,YAAaA,EACbyF,gBAAiBF,EACjBxE,YAAwB,QAAX,EAAA2E,EAAOI,YAAI,eAAE/E,YAC1BC,WAAYA,EAAW8E,QAEvBxF,EAAU+G,SAAW/G,EAAUgH,aAC/B,gBAACC,EAAA,EAAoB,CACnBD,WAAYhH,EAAUgH,WACtBE,UAAWlH,EAAUkH,UACrBC,WAAYnH,EAAUmH,cA3BrB,gBAACC,EAAA,EAAuB,KAgCnC,CArCE,IAnCG,gBAACtE,EAAkB,KA2E9B,C","sources":["file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/my-shares-demo-insights.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/empty-state/MySharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesView.tsx"],"sourcesContent":["export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"background\":\"HAuP3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_ACTION, DEMO_INSIGHTS_APPLINK, DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK, DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA, DEMO_INSIGHTS_SHARE_TABLE_DATA } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nimport { MySharesTableData } from '../my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-demo-insights.scss';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n breakpoints: Breakpoints;\n className?: string;\n heading?: string;\n shareType?: ShareType;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n const appLink = props.shareType === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK : DEMO_INSIGHTS_APPLINK;\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: DEMO_INTERACTIVE_ID\n };\n }\n\n function getObjectActions() {\n return [\n {\n ...DEMO_INSIGHTS_ACTION,\n button: !isMobile,\n appLink\n }\n ];\n }\n\n const demoShareTableData = props.shareType === ShareType.Open\n ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA\n : DEMO_INSIGHTS_SHARE_TABLE_DATA;\n\n const shareData: MySharesTableData = {\n ...demoShareTableData,\n sharedObject: getDemoInteractive()\n };\n\n return (\n <div className={props.className}>\n <MySharesTableHeading heading={props.heading ?? getPhrase('demoHeading')} isFirst={true} />\n\n <div className={`${styles.background} rounded-3 mb-4`}>\n <MySharesTableRow\n shareData={shareData}\n getObjectActions={getObjectActions}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n breakpoints={props.breakpoints}\n className='bg-light-orange'\n appLink={(() => appLink)}\n />\n </div>\n </div>\n );\n}","export const DEMO_INTERACTIVE_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesEmptyState() {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('heading')} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MySharesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { MySharesEmptyState } from 'apps/my-shares/views/my-shares/empty-state/MySharesEmptyState';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesViewProps {\n typeId: string | string[];\n}\n\nexport function MySharesView(props: MySharesViewProps) {\n // Shared hooks\n useSetPageMetadata({ title: getPhrase('myShares') });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasShareFlowV2, hasClassrooms } = useSettings(null);\n const { isPlugin } = usePluginHelper();\n const breakpoints = useBreakpoints();\n const { accessPolicy } = useAccessPolicy();\n const { experience } = useClassroomExperience();\n\n const sharesParams = getSharesParams(props.typeId);\n\n // Local variables\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMySharesLanding) ||\n hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2;\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewInsights);\n const showDemoInsight = accessPolicy?.metadata?.hasDemoInsights || experience === 'minimal';\n\n // Flight fetching\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(showDemoInsight &&\n InsightsDemoRequests.interactiveMetadata());\n\n const shareData = useSharesTable({\n interactiveInsights: true,\n shouldFetch,\n params: {\n type: [ ShareType.Link, ShareType.LegacyDirect ]\n }\n });\n\n React.useEffect(() => {\n if (!(hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2))\n Core.LocationUtils.PageLoad('/');\n }, [shouldFetch]);\n\n if (!shouldFetch)\n return <MySharesEmptyState />;\n\n return (\n <div className='px-3'>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n\n <div className='border-bottom pb-2 mb-4'>\n <h1 className='mb-2'><Text namespace={namespace} phrase='myShares' /></h1>\n {hasClassrooms && (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='classroomsHint'/>\n &nbsp;\n <AppLink\n appLink={{ application: AppChannels.CLASSROOMS, action: Actions.Classrooms.HOME }}\n className='info-link'\n >\n <Text namespace={namespace} phrase='classroomsCta'/>\n </AppLink>\n </p>\n )}\n </div>\n\n {showDemoInsight && demoInteractive.data &&\n <MySharesDemoInsight\n demoInteractive={demoInteractive.data}\n breakpoints={breakpoints}\n imageCdnUrl={shareData.imageCdnUrl}\n yearGroups={yearGroups.data}\n shareType={ShareType.Link}\n />\n }\n\n {(() => {\n if (shareData.showPartialLoading)\n return <PartialMySharesTable />;\n\n if (!shareData.sentShares.length)\n return <MySharesTableEmptyState />;\n\n return (\n <>\n <MySharesTable\n sentShares={shareData.sentShares}\n sharedObjects={shareData.sharedObjects.items}\n shareRecipients={shareData.shareRecipients.items}\n interactivesPendingReview={shareData.interactivesPendingReview.itemsArr}\n getObjectActions={row => getShareObjectActions({\n share: row.share,\n sharedObject: row.sharedObject,\n audienceParams: sharesParams.audienceAppLinkParams,\n hasInsights: hasInsightsPermission,\n isPlugin,\n breakpoints\n })}\n groupByDateShared\n breakpoints={breakpoints}\n hasDemoInsights={showDemoInsight}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n {(shareData.hasMore || shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={shareData.isFetching}\n fetchNext={shareData.fetchNext}\n nextCursor={shareData.nextCursor}\n />\n }\n </>\n );\n })()}\n </div>\n );\n}\n"],"names":["SharePrivacy","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","namespace","InsightsAdminAlert","props","storage","show","setShow","hasAnalytics","role","className","phrase","href","video","analyticsUrl","videoRoute","typeId","id","getAnalyticsUrl","target","svgName","onClick","getPhrase","LanguageService","MySharesDemoInsight","isMobile","breakpoints","xs","sm","shareType","ShareType","demoShareTableData","shareData","sharedObject","demoInteractive","heading","isFirst","MySharesTableRow","getObjectActions","button","appLink","imageCdnUrl","yearGroups","DEMO_INTERACTIVE_ID","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","label","group","MySharesEmptyState","EmptyState","src","ImageUrls","altText","Text","text","analyticsData","analyticsOptions","actionType","location","entity","workflowPhase","descriptor","SignUp","MySharesView","useSetPageMetadata","title","usePermissions","hasPermissions","hasLocalPermissions","useSettings","hasShareFlowV2","hasClassrooms","isPlugin","usePluginHelper","useBreakpoints","accessPolicy","useAccessPolicy","experience","useClassroomExperience","sharesParams","shouldFetch","PermissionName","hasInsightsPermission","showDemoInsight","metadata","hasDemoInsights","config","ConfigRequests","currentUser","UserRequests","data","isAuthenticated","CustomerRequests","customerId","useSharesTable","interactiveInsights","params","analyticsWebUrl","AppLink","showPartialLoading","PartialMySharesTable","sentShares","length","MySharesTable","sharedObjects","items","interactivesPendingReview","itemsArr","row","audienceParams","audienceAppLinkParams","hasInsights","groupByDateShared","hasMore","isFetching","InfiniteScrollFooter","fetchNext","nextCursor","MySharesTableEmptyState"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7742],{39902:(e,t,n)=>{n.d(t,{FN:()=>f,SW:()=>v,fh:()=>p});var r=n(32735),i=n(20354),a=n(75896);function o(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u(e){return u="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},u(e)}function s(e,t,n){return(t=function(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},m=50;function p(e,t){var n=a.m.chunk(e,m).map(function(e){return t(a.m.uniq(e))}),r=i.a.useBasicFetchAll(n),o=a.m.flatten(r.data),l=r.data.length?o.reduce(function(e,t){return Object.assign(Object.assign({},e),s({},t.id,t))},{}):null;return{itemsArr:o,items:l,isFetching:r.isFetching,hasCompleted:r.hasCompleted}}function f(e,t,n){var i=null!=n?n:function(e){return"object"===u(e)?e.id:e},a=v({getRequest:t,_getKey:n}),o=a.fetchItems,l=d(a,["fetchItems"]);return r.useEffect(function(){(null==e?void 0:e.length)&&o(e)},[null==e?void 0:e.map(i).join(",")]),l}function v(e){var t,n,c,d,p,f=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===u(e)?e.id:e},v=r.useRef(new Set),y=(d=r.useState([]),p=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,l=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw i}}return l}}(d,p)||l(d,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=y[0],g=y[1],b=i.a.useBasicFetchAll(h),E=a.m.flatten(b.data),k=b.data.length?E.reduce(function(e,t){return Object.assign(Object.assign({},e),s({},f(t),t))},{}):null;return{hasFirstRequestCompleted:!!(null===(c=null===(n=b.responses)||void 0===n?void 0:n[0])||void 0===c?void 0:c.hasCompleted),itemsArr:E,items:k,isFetching:b.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach(function(e){var t=f(e);v.current.has(t)||(n.push(e),v.current.add(t))}),n.length&&g(function(t){return[].concat(o(t),o(a.m.chunk(n,m).map(e.getRequest)))})}}}}},37788:(e,t,n)=>{n.r(t),n.d(t,{MyVideosView:()=>X});var r=n(32735),i=n(70680),a=n(23481),o=n(20354),l=n(28400),c=n(65858),u=n(43500),s=n(73518),d=n(39958),m=n(1302),p=n(91693),f=n(37395),v=n(4201),y=n(83345),h=n(1860),g=n(30254),b=n(3534),E=n(51365),k=n(16714),V=n(183),A=n(31949),O=n(299),S=n(91286),w=n(22902),F=n(79612),M=n(35223),C=n(58535),j=n(14070),x=n(97291),I=n(58321),L=n(44110),N=n(97816),P=n(10741),D=n(22490),B=n(98860),R=n(12617),_=n(45967),T=n(65202),U=n(74796),q=n(14305),H=n(72363),Y=n(9218),W=n(18097);const K={uploadingList:"wg7hV"};var Q="default.myVideos";function X(e){var t,n,X,Z,$,J,z,G;(0,F.M)({title:a.T.getPhrase(Q,"pageTitle")});var ee=(0,i.I0)(),te=(0,I.U)({locationContext:c.LZ.VideoThumbnail}).commonVideoProps,ne=(0,w.T)(),re=ne.hasPermissions,ie=ne.hasLocalPermissions,ae=(0,_.q)().handleDragEnd,oe=(0,v.of)().focusSearchBar,le=o.a.useBasicFetch(A.N.currentUser()),ce=o.a.useBasicFetch((null===(t=le.data)||void 0===t?void 0:t.isAuthenticated)&&A.N.workspace()),ue=null===(X=null===(n=ce.data)||void 0===n?void 0:n.categoryTree)||void 0===X?void 0:X.id,se=(0,B.P)(ue),de=(0,H.y)(),me=(0,H.W)(null===(Z=ce.data)||void 0===Z?void 0:Z.id,null===($=ce.data)||void 0===$?void 0:$.categoryTree.id),pe=(0,L.i)(),fe=(0,U.f)(),ve=function(e,t){return ce.data?R.E.videos(ue,e,t):null},ye=!ie(k.E.ViewMyVideosLanding)&&le.hasCompleted,he=o.a.useBasicFetch(ye&&ve(e.cursor,e.typeFilter));(0,S.v)(he);var ge=(0,T.J)({onRemove:function(e,t){return o.a.getFetch(ee)(ve(e,t))}}),be=ge.uploadingVideos,Ee=ge.onClickAlternate,ke=ge.onClickDelete,Ve=ge.processingIds,Ae=(null===(J=he.data)||void 0===J?void 0:J.data.length)&&Ve?he.data.data.filter(function(e){return!Ve[e.id]}):[];(0,N.V)(Ae);var Oe=(0,O.X)(Ae);if(ie(k.E.ViewMyVideosLanding))return r.createElement(q.V,null);function Se(){return{action:j.e.MyVideos.MY_VIDEOS,application:x.O.MY_VIDEOS,params:{cursor:e.cursor,previous:e.previous,type:e.typeFilter}}}var we=!!(null===(z=null==se?void 0:se.items)||void 0===z?void 0:z.length);return r.createElement(E.M.Provider,{value:de},r.createElement("div",{className:"px-3"},r.createElement("div",{className:"d-flex justify-content-between"},r.createElement("h1",{className:"h2 mb-0"},r.createElement(y.x,{namespace:Q,phrase:"header"})),r.createElement("div",null,r.createElement("div",{className:"d-sm-none"},r.createElement(Y.c,{canUpload:re(k.C.UploadVideo)})),r.createElement("div",{className:"ms-2 d-sm-inline-block d-none"},r.createElement(p.h,{svgName:M.vn.Search,appLink:{application:x.O.SEARCH,action:j.e.Search.HOME,params:{source:u.fi.MyVideos}},className:"btn btn-outline-dark me-2",onClick:oe,analyticsData:{},analyticsOptions:{entity:c.py.SearchResults,location:c.LZ.MyVideos,actionType:c.Vw.Click,descriptor:c.Bk.MyVideos}},r.createElement(y.x,{namespace:Q,phrase:"searchMyVideos"})),r.createElement(p.h,{svgName:M.vn.Plus,appLink:{application:x.O.MY_VIDEOS,action:j.e.MyVideos.ADD_FOLDER,args:[null===(G=ce.data)||void 0===G?void 0:G.id]},className:"btn btn-outline-dark"},r.createElement(y.x,{namespace:Q,phrase:"addFolder"}))))),r.createElement("hr",null),r.createElement(s.p,{handleDragEnd:ae,dragOverlayComponent:C.U,source:ce.data},r.createElement("div",null,!(null==se?void 0:se.hasCompleted)&&r.createElement(m.i,null),we&&r.createElement("div",{className:"mx-n2"},r.createElement(d.$,{folders:se.items,getAppLink:function(e){return{application:x.O.MY_VIDEOS,action:j.e.MyVideos.MY_VIDEOS_FOLDER,args:[e.id,l.m.slugify(e.name)]}},expandFolders:!1,getFolderActions:function(e){return fe("folder",e)},drag:!0,drop:!0})),r.createElement(g.X,{allowBulkAction:!0,allowFilter:!0,checkboxHelper:Oe,getVideosBulkAction:me,locationContext:c.LZ.MyVideos,typeFilter:e.typeFilter,getAppLink:function(){return Se()}}),!!(null==be?void 0:be.length)&&r.createElement("div",{className:"position-relative ".concat(K.uploadingList)},be.map(function(e){return r.createElement(W.X,{item:e,onClickAlternate:Ee,onClickDelete:ke,key:e.id,allowBulkAction:!0,categoryId:null})})),function(){var t,n;return le.data&&he.data?(null==Ae?void 0:Ae.length)||(null==be?void 0:be.length)?r.createElement(r.Fragment,null,r.createElement(b.E4,{videos:Ae,getVideoAppLink:function(e,t){var n,r;return D.W.getAppLink(e,Object.assign(Object.assign({},t),{context:V.Q.CategoryTree,contextId:null===(n=ce.data)||void 0===n?void 0:n.categoryTree.id,includeContext:null===(r=le.data)||void 0===r?void 0:r.isAuthenticated}))},presentationAudiences:pe.data,canRemovePrivateVideos:!0,allowBulkAction:!0,getVideosBulkAction:me,typeFilter:e.typeFilter,checkboxHelper:Oe,hasPermissions:re,drag:we,getPreviewQuestionsAppLink:function(e){return P.j.getPreviewQuestionsAppLink(e)},commonVideoProps:te}),!!(null===(n=null===(t=he.data)||void 0===t?void 0:t.pagination)||void 0===n?void 0:n.cursors)&&r.createElement(f.t,{appLink:Se(),cursors:{next:he.data.pagination.cursors.next,previous:e.cursor},buttonVariant:"outline-dark",className:"py-2 float-end",prevHack:!0})):r.createElement(q.K,{canUpload:re(k.C.UploadVideo)}):r.createElement("div",{className:"mx-n2"},r.createElement(h.S,{allowBulkActions:!0}))}()))))}},97816:(e,t,n)=>{n.d(t,{V:()=>l,l:()=>c});var r=n(1575),i=n(39902),a=n(31908);function o(e){return e?Array.isArray(e)?e.filter(function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))}):"data"in e?e.data.filter(function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))}):[]:[]}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=o(e).map(function(e){return e.id});(0,i.FN)(n,function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)},null)}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,i.SW)({getRequest:function(t){return r.R.videoMixinAssocs(t,e.flightNamespace)}}).fetchItems;return{fetchObjects:function(e){return t(o(e).map(function(e){return e.id}))}}}}}]);
2
- //# sourceMappingURL=7742-514844bd1a-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7742-514844bd1a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/my-videos.scss","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/MyVideosView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"uploadingList\":\"wg7hV\"};","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { EntityType, LocationContext, SearchSourceDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { SearchIndices, SourceFilterOptions } from 'libs/shared/apps/search/interfaces';\nimport { DragDropMoveContext } from 'libs/shared/components/drag-drop-move/DragDropMoveContext';\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { useFocusSearchBar } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoListActions } from 'libs/shared/components/video-list/video-list-actions/VideoListActions';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { BulkCheckboxManager, useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BasePaginatedCollection, CurrentUser, Folder, Library, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DragDropOverlay } from 'shared/components/drag-drop-overlay/DragDropOverlay';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { useFetchAllChildFolders } from 'apps/libraries/hooks/UseFetchAllChildFolders';\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\nimport { useDragDropMove } from 'apps/my-videos/hooks/useDragDropMove';\nimport { useUploadItems } from 'apps/my-videos/hooks/useUploadItems';\nimport { useGetFolderActions } from 'apps/my-videos/utils/getFolderActions';\nimport { MyVideosEmptyState, MyVideosPublicEmptyState } from 'apps/my-videos/views/my-videos/empty-state/MyVideosEmptyState';\nimport { useMyVideosViewActions, useMyVideosViewBulkActions } from 'apps/my-videos/views/my-videos/MyVideosViewUtils';\nimport { UploadFileSelect } from 'apps/upload/components/upload-file-select/UploadFileSelect';\nimport { UploadingItem } from 'apps/upload/components/uploading-item/UploadingItem';\n\nimport styles from './my-videos.scss';\n\nconst namespace = 'default.myVideos';\n\ninterface MyVideosViewProps {\n cursor?: string;\n previous?: string;\n typeFilter?: SearchIndices[];\n}\n\nexport function MyVideosView(props: MyVideosViewProps): JSX.Element {\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n const dispatch = useDispatch();\n\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { handleDragEnd } = useDragDropMove();\n\n const { focusSearchBar } = useFocusSearchBar();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const workspace = Flight.useBasicFetch<Library>(\n currentUser.data?.isAuthenticated && UserRequests.workspace()\n );\n const folderId = workspace.data?.categoryTree?.id;\n const folders = useFetchAllChildFolders(folderId);\n \n const videoActions = useMyVideosViewActions();\n const getVideosAction = useMyVideosViewBulkActions(workspace.data?.id, workspace.data?.categoryTree.id);\n\n const audiences = usePresentationAudiences();\n const getFolderActions = useGetFolderActions();\n\n const getMyVideosRequest = (cursor?: string, typeFilter?: SearchIndices | SearchIndices[]) => {\n if (!workspace.data)\n return null;\n\n // Delete the above when master supports the new assoc types.\n return MyVideosRequests.videos(folderId, cursor, typeFilter);\n };\n\n const fetchNext = (cursor?: string, typeFilter?: SearchIndices | SearchIndices[]) => {\n return Flight.getFetch(dispatch)(getMyVideosRequest(cursor, typeFilter));\n };\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMyVideosLanding) && currentUser.hasCompleted;\n\n const videos = Flight.useBasicFetch<BasePaginatedCollection<VideoTypes>>(\n shouldFetch && getMyVideosRequest(props.cursor, props.typeFilter)\n );\n\n useHandleObjectError(videos);\n\n const {\n uploadingVideos,\n onClickAlternate,\n onClickDelete,\n processingIds\n } = useUploadItems({ onRemove: fetchNext });\n\n const omittedVideos = videos.data?.data.length && processingIds\n ? videos.data.data.filter(v => !processingIds[v.id])\n : [];\n \n useVideoMixin(omittedVideos);\n\n const CheckboxHelper: BulkCheckboxManager = useBulkCheckboxManager(omittedVideos);\n\n if (hasLocalPermissions(LocalPermissionName.ViewMyVideosLanding))\n return <MyVideosPublicEmptyState />;\n\n function getMyVideosAppLink(): Core.AppLink {\n return {\n action: Actions.MyVideos.MY_VIDEOS,\n application: AppChannels.MY_VIDEOS,\n params: { cursor: props.cursor, previous: props.previous, type: props.typeFilter }\n };\n }\n\n function getCursors(): Cursors {\n return { next: videos.data.pagination.cursors.next, previous: props.cursor };\n }\n \n const hasFolders = !!folders?.items?.length;\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <div className='d-flex justify-content-between'>\n <h1 className='h2 mb-0'><Text namespace={namespace} phrase='header' /></h1>\n <div>\n <div className='d-sm-none'>\n <UploadFileSelect canUpload={hasPermissions(PermissionName.UploadVideo)} />\n </div>\n <div className='ms-2 d-sm-inline-block d-none'>\n <IconButton\n svgName={cvSvgLibrary.Search}\n appLink={{\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n source: SourceFilterOptions.MyVideos\n }\n }}\n className='btn btn-outline-dark me-2'\n onClick={focusSearchBar}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.MyVideos,\n actionType: UserAction.Click,\n descriptor: SearchSourceDescriptor.MyVideos\n }}\n >\n <Text namespace={namespace} phrase='searchMyVideos' />\n </IconButton>\n <IconButton\n svgName={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.ADD_FOLDER,\n args: [workspace.data?.id]\n }}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='addFolder' />\n </IconButton>\n </div>\n </div>\n </div>\n <hr />\n <DragDropMoveContext\n handleDragEnd={handleDragEnd}\n dragOverlayComponent={DragDropOverlay}\n source={workspace.data}>\n <div>\n {!folders?.hasCompleted && <PartialFolderList />}\n {hasFolders &&\n <div className='mx-n2'>\n <FolderList\n folders={folders.items}\n getAppLink={(f: Folder) => ({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ f.id, TextHelper.slugify(f.name) ]\n })}\n expandFolders={false}\n getFolderActions={f => getFolderActions('folder', f)}\n drag\n drop\n />\n </div>\n }\n <VideoListActions\n allowBulkAction\n allowFilter\n checkboxHelper={CheckboxHelper}\n getVideosBulkAction={getVideosAction}\n locationContext={LocationContext.MyVideos}\n typeFilter={props.typeFilter}\n getAppLink={() => getMyVideosAppLink()}\n />\n {!!uploadingVideos?.length && (\n <div className={`position-relative ${styles.uploadingList}`}>\n {uploadingVideos.map(uploadingVideo => (\n <UploadingItem\n item={uploadingVideo}\n onClickAlternate={onClickAlternate}\n onClickDelete={onClickDelete}\n key={uploadingVideo.id}\n allowBulkAction\n categoryId={null}\n />\n ))}\n </div>\n )}\n {(() => {\n if (!currentUser.data || !videos.data)\n return <div className='mx-n2'><PartialVideoList allowBulkActions /></div>;\n\n if (!omittedVideos?.length && !uploadingVideos?.length)\n return <MyVideosEmptyState canUpload={hasPermissions(PermissionName.UploadVideo)} />;\n\n return (\n <>\n <VideoList\n videos={omittedVideos}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: RelatedVideosContext.CategoryTree,\n contextId: workspace.data?.categoryTree.id,\n includeContext: currentUser.data?.isAuthenticated\n })}\n presentationAudiences={audiences.data}\n canRemovePrivateVideos\n allowBulkAction\n getVideosBulkAction={getVideosAction}\n typeFilter={props.typeFilter}\n checkboxHelper={CheckboxHelper}\n hasPermissions={hasPermissions}\n drag={hasFolders}\n getPreviewQuestionsAppLink={interactive =>\n InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={commonVideoProps}\n />\n {!!videos.data?.pagination?.cursors && (\n <Pagination\n appLink={getMyVideosAppLink()}\n cursors={getCursors()}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n prevHack\n />\n )}\n </>\n );\n })()}\n </div>\n </DragDropMoveContext>\n </div>\n </VideoActionsContext.Provider>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch, useGrowingBatchFetchFunc } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}) {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(\n videoIds,\n ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace),\n null\n );\n}\n\nexport function useVideoMixinFunc(options: VideoMixinOptions = {}) {\n function getRequest(ids: string[]): Flight.Request {\n return VideoRequests.videoMixinAssocs(ids, options.flightNamespace);\n }\n \n function fetchObjects(items: Types) {\n return fetchItems(getValidObjects(items).map(v => v.id));\n }\n\n const { fetchItems } = useGrowingBatchFetchFunc({ getRequest });\n\n return { fetchObjects };\n}"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","join","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","key","current","has","push","add","r","namespace","MyVideosView","props","useSetPageMetadata","title","LanguageService","dispatch","commonVideoProps","useCommonVideoProps","locationContext","usePermissions","hasPermissions","hasLocalPermissions","handleDragEnd","useDragDropMove","focusSearchBar","currentUser","UserRequests","workspace","isAuthenticated","folderId","categoryTree","folders","videoActions","getVideosAction","audiences","usePresentationAudiences","getMyVideosRequest","cursor","typeFilter","MyVideosRequests","shouldFetch","videos","useUploadItems","onRemove","uploadingVideos","onClickAlternate","onClickDelete","processingIds","omittedVideos","filter","v","useVideoMixin","CheckboxHelper","useBulkCheckboxManager","getMyVideosAppLink","action","application","params","previous","type","hasFolders","VideoActionsContext","value","className","Text","phrase","UploadFileSelect","canUpload","PermissionName","IconButton","svgName","appLink","source","onClick","analyticsData","analyticsOptions","entity","location","actionType","descriptor","args","DragDropMoveContext","dragOverlayComponent","DragDropOverlay","PartialFolderList","FolderList","getAppLink","f","TextHelper","name","expandFolders","getFolderActions","drag","drop","VideoListActions","allowBulkAction","allowFilter","checkboxHelper","getVideosBulkAction","uploadingVideo","UploadingItem","categoryId","VideoList","getVideoAppLink","opts","VideoAppLinkHelper","context","RelatedVideosContext","contextId","includeContext","presentationAudiences","canRemovePrivateVideos","getPreviewQuestionsAppLink","interactive","InteractiveHelper","pagination","cursors","Pagination","next","buttonVariant","prevHack","MyVideosEmptyState","PartialVideoList","allowBulkActions","getValidObjects","objects","Array","isArray","o","videoIds","ids","flightNamespace","useVideoMixinFunc","fetchObjects"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7843],{33518:(e,a,t)=>{var s;t.d(a,{e:()=>s}),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"}(s||(s={}))},54405:(e,a,t)=>{t.d(a,{X:()=>s});var s={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},35599:(e,a,t)=>{t.d(a,{k:()=>m});var s=t(32735),n=t(87801),r=t(16714),i=t(67467),o=t(5056),l=t(28001),c=t(69003);function m(e){var a,t,m=e.hasShareFlowV2&&e.hasPermissions(r.C.ViewInsights),d=(0,c.cl)([]),u=null!==(a=e.loadingState)&&void 0!==a?a:l.L,p=null!==(t=e.emptyState)&&void 0!==t?t:i.o;return e.loading||e.shareData.showPartialLoading?s.createElement(u,null):e.shareData.sentShares.length?s.createElement("div",{className:e.className},s.createElement(o.R,{sentShares:e.shareData.sentShares,sharedObjects:e.shareData.sharedObjects.items,shareRecipients:e.shareData.shareRecipients.items,interactivesPendingReview:e.shareData.interactivesPendingReview.itemsArr,getObjectActions:function(a){return(0,c.sD)({share:a.share,sharedObject:a.sharedObject,audienceParams:d.audienceAppLinkParams,hasInsights:m,isPlugin:e.isPlugin,breakpoints:e.breakpoints})},groupByDateShared:!0,breakpoints:e.breakpoints,imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups,hasDemoInsights:e.hasDemoInsight}),(e.shareData.hasMore||e.shareData.isFetching)&&s.createElement(n._,{isFetching:e.shareData.isFetching,fetchNext:e.shareData.fetchNext,nextCursor:e.shareData.nextCursor})):s.createElement(p,null)}},49221:(e,a,t)=>{t.r(a),t.d(a,{ClassroomsView:()=>ie});var s=t(32735),n=t(81886),r=t(67058),i=t(37802),o=t(99998),l=t(23481),c=t(20354),m=t(65858),d=t(2510),u=t(15611),p=t(83345),h=t(39151),g=t(1666),v=t(54405),E=t(44538),y=t(31949),b=t(79967),S=t(22902),f=t(79612),C=t(35223),O=t(14070),k=t(97291),w=t(46390),N=t(98623),x=t(31453),P=t(12528),I=t(83914),A=l.T.encloseNamespace("classrooms.classroomLabel"),F={"my-school-classrooms":"mySchoolClassrooms","favourite-classroom":"favouriteClassroom","open-classroom":"openClassroom"},L={"my-school-classrooms":"purple","favourite-classroom":"purple","open-classroom":"blue"};function R(e){var a;return s.createElement("div",{className:(0,x.A)("d-flex align-items-center gap-2",e.className)},s.createElement("div",null,s.createElement(P.f,{svgName:C.vn.Classrooms,svgSize:I.S.Standard,variant:L[e.type],textVariant:"white",svgWrapperClassName:"p-1"})),s.createElement("h2",{className:"h4 m-0"},null!==(a=e.text)&&void 0!==a?a:A(F[e.type])))}var T=t(59278),D=t(35599),j=t(7733),M=t(56644),V=t(9085),U="classrooms.pinnedClassroomsTiles";function _(){return s.createElement("div",{className:"py"},s.createElement(p.x,{namespace:U,phrase:"emptyPinnedClassrooms"}))}const G={pinnedClassroomTile:"jgtOl",pinnedClassroomTileImage:"TRhIX"};function B(){return s.createElement("div",{className:(0,x.A)("d-flex flex-column rounded overflow-hidden border border-gray-200",G.pinnedClassroomTile)},s.createElement("figure",{className:(0,x.A)("m-0",G.pinnedClassroomTileImage)}),s.createElement("div",{className:"d-flex flex-column gap-2 p-2"},s.createElement("span",{className:"partial-loading-background p-2 w-50"}),s.createElement("span",{className:"partial-loading-background p-2"})))}function z(e){return s.createElement("div",{className:"d-flex flex-row flex-wrap gap-3"},Array.from({length:e.size}).map(function(e,a){return s.createElement(B,{key:a})}))}var H="classrooms.pinnedClassroomsTiles";function J(e){var a=e.classroom.enrolments.data.filter(function(e){return e.role===M.tM.Student}).length,t=(0,V.s)(e.classroom.name,j.o);return s.createElement(u.F,{className:(0,x.A)("d-flex flex-column rounded overflow-hidden border border-gray-400",G.pinnedClassroomTile),appLink:{application:k.O.CLASSROOMS,action:O.e.Classrooms.CLASSROOM_HOME,args:[e.classroom.id]}},s.createElement("figure",{className:(0,x.A)("m-0",G.pinnedClassroomTileImage,t)}),s.createElement("div",{className:"d-flex flex-column gap-1 p-2"},s.createElement("span",{className:"fw-medium"},e.classroom.name),s.createElement("span",{className:"text-muted"},a?s.createElement(p.x,{namespace:H,phrase:"studentsCount",options:{smartCount:a}}):s.createElement(p.x,{namespace:H,phrase:"noStudents"}))))}function W(e){var a,t,n=null!==(a=e.emptyStateComponent)&&void 0!==a?a:_,r=null!==(t=e.loadingStateComponent)&&void 0!==t?t:z;return e.showPartialLoading?s.createElement(r,{size:5}):e.classrooms&&e.classrooms.length?s.createElement("div",{className:"d-flex flex-row flex-wrap gap-3"},e.classrooms.map(function(e){return s.createElement(J,{key:e.id,classroom:e})})):s.createElement(n,null)}var X=t(88630),Z=t(22767),q="classrooms.classroomsOverview",Y=l.T.encloseNamespace(q);function $(e){return s.createElement("div",{className:"d-flex flex-row justify-content-between align-items-center mb-3"},s.createElement(R,{type:e.type}),e.appLink&&!e.hideSeeAll&&s.createElement(u.F,{appLink:e.appLink},s.createElement(p.x,{namespace:q,phrase:"seeAll"})))}function K(){var e,a,t,n,r,o,u,p,x;(0,f.M)({title:Y("pageTitle")});var P=(0,b.k)(),I=(0,w.G)().isPlugin,A=(0,S.T)().hasPermissions,F=(0,i.r)(null).hasShareFlowV2,L=c.a.useBasicFetch(y.N.currentUser()),R=c.a.useBasicFetch(h.L.config()),j=c.a.useBasicFetch(v.X.interactiveMetadata()),M=c.a.useBasicFetch((null===(e=L.data)||void 0===e?void 0:e.isAuthenticated)&&g.h.yearGroups(L.data.customerId)),V=c.a.useBasicFetch(E.K.getRostering()),U=(null===(a=V.data)||void 0===a?void 0:a.status)&&"None"!==V.data.status,_=(0,N.a)({interactiveInsights:!0,shouldFetch:F,params:{type:[d.y.Open]}}),G=c.a.useBasicFetch(X.F.getPinnedClassrooms(null===(t=L.data)||void 0===t?void 0:t.id,null===(n=L.data)||void 0===n?void 0:n.customerId,{withStudents:!0,limit:5})),B=!!(R.data&&j.data&&M.data&&G.data);return s.createElement("div",{className:"px-3"},s.createElement(T.d,{activeTab:"overview",actions:[{label:l.T.getPhrase(q,"newClassroom"),appLink:{application:k.O.CLASSROOMS,action:O.e.Classrooms.NEW_CLASSROOM},svgName:C.vn.Plus,className:"btn btn-outline-dark",disabled:U,tooltip:U?Y("disabledByRostering"):"",analyticsOptions:{actionType:m.Vw.Create,entity:m.py.Classroom,workflowPhase:m.eu.Start,location:m.LZ.ClassroomsList},button:!P.xs}],hasRostering:U,hasShareFlowV2:F}),s.createElement("section",{className:"mb-4"},s.createElement($,{type:"favourite-classroom",appLink:{application:k.O.CLASSROOMS,action:O.e.Classrooms.VIEW_ALL},hideSeeAll:!(null===(o=null===(r=G.data)||void 0===r?void 0:r.data)||void 0===o?void 0:o.length)}),s.createElement(W,{showPartialLoading:!B,classrooms:null===(u=G.data)||void 0===u?void 0:u.data})),s.createElement("section",{className:"mb-4"},s.createElement($,{type:"open-classroom",appLink:{application:k.O.CLASSROOMS,action:O.e.Classrooms.OPEN_CLASSROOMS},hideSeeAll:!(null===(p=_.sentShares)||void 0===p?void 0:p.length)}),s.createElement(D.k,{loading:!B,shareData:_,hasShareFlowV2:F,hasPermissions:A,breakpoints:P,isPlugin:I,imageCdnUrl:null===(x=R.data)||void 0===x?void 0:x.imageCdnUrl,yearGroups:M.data,className:"mt-3",emptyState:function(){var e;return s.createElement(Z.l,{heading:Y("demoHeading"),demoInteractive:j.data,breakpoints:P,imageCdnUrl:null===(e=R.data)||void 0===e?void 0:e.imageCdnUrl,yearGroups:M.data,className:"mt-3",shareType:d.y.Open})}})))}var Q=t(91047),ee=t(86073),ae=t(98461),te="classrooms.minimalClassroomsExperience",se=l.T.encloseNamespace(te),ne="/product/integrations";function re(){var e,a,t,n;(0,f.M)({title:se("pageTitle")});var r=(0,b.k)(),o=(0,w.G)().isPlugin,l=(0,S.T)().hasPermissions,E=(0,i.r)(null).hasShareFlowV2,C=c.a.useBasicFetch(y.N.currentUser()),x=c.a.useBasicFetch(h.L.config()),P=c.a.useBasicFetch(v.X.interactiveMetadata()),I=c.a.useBasicFetch((null===(e=C.data)||void 0===e?void 0:e.isAuthenticated)&&g.h.yearGroups(C.data.customerId)),A=(0,N.a)({interactiveInsights:!0,shouldFetch:E,params:{type:[d.y.Open]}}),F=!!x.data&&!!P.data&&!!I.data;return s.createElement("div",{className:"px-3"},s.createElement(T.d,{activeTab:"classrooms",hasRostering:!1,hasShareFlowV2:E,hideTabs:!0}),s.createElement("section",{className:"mb-4"},s.createElement(R,{type:"my-school-classrooms"}),s.createElement("div",{className:"d-flex flex-column flex-sm-row justify-content-between gap-2 bg-light-blue rounded p-3 align-items-center mt-3"},s.createElement("div",null,s.createElement(p.x,{namespace:te,phrase:"myClassroomsNotice"})," ",s.createElement(ae.d,{href:ee._.safeUrlConcat(null===(a=x.data)||void 0===a?void 0:a.marketingSiteUrl,ne),className:"text-underline",newTab:!0},s.createElement(p.x,{namespace:te,phrase:"learnMore"}))),s.createElement("div",null,s.createElement(u.F,{className:"btn btn-outline-dark hover-bg-white",appLink:{application:k.O.SIGN_UP,action:O.e.SignUp.UPGRADE},analyticsData:{},analyticsOptions:{actionType:m.Vw.Click,location:m.LZ.Classroom,entity:m.py.AppLink,descriptor:m.Yu.Upgrade,workflowPhase:m.eu.Start}},s.createElement(p.x,{namespace:te,phrase:"requestFullAccess"}))))),s.createElement("section",{className:"mb-4"},s.createElement(R,{type:"open-classroom"}),F&&s.createElement(s.Fragment,null,s.createElement(Z.l,{heading:se("demoHeading"),demoInteractive:P.data,breakpoints:r,imageCdnUrl:null===(t=x.data)||void 0===t?void 0:t.imageCdnUrl,yearGroups:I.data,className:"mt-3",shareType:d.y.Open}),s.createElement(D.k,{shareData:A,hasShareFlowV2:E,hasPermissions:l,breakpoints:r,isPlugin:o,imageCdnUrl:null===(n=x.data)||void 0===n?void 0:n.imageCdnUrl,yearGroups:I.data,className:"mt-3",emptyState:function(){return s.createElement(s.Fragment,null)},hasDemoInsight:!0}))))}function ie(e){var a=(0,o.R)(),t=a.experience,l=a.loading,c=(0,i.r)(null).hasShareFlowV2;return l?s.createElement(s.Fragment,null):"none"===t?(n.Q.Ry.throw(new r.d),s.createElement(s.Fragment,null)):"full"===t&&c?s.createElement(K,null):"full"!==t||c?s.createElement(re,null):s.createElement(Q.FullClassroomsExperienceView,{query:e.query})}},22767:(e,a,t)=>{t.d(a,{l:()=>d});var s=t(32735),n=t(23481),r=t(2510),i=t(55219),o=t(18006),l=t(9566);const c={background:"HAuP3"};var m=n.T.encloseNamespace("myShares.demoInsights");function d(e){var a,t=e.breakpoints.xs||e.breakpoints.sm,n=e.shareType===r.y.Open?l.po:l.vJ,d=e.shareType===r.y.Open?l.$Z:l.GJ,u=Object.assign(Object.assign({},d),{sharedObject:Object.assign(Object.assign({},e.demoInteractive),{id:o.A})});return s.createElement("div",{className:e.className},s.createElement(i.g,{heading:null!==(a=e.heading)&&void 0!==a?a:m("demoHeading"),isFirst:!0}),s.createElement("div",{className:"".concat(c.background," rounded-3 mb-4")},s.createElement(i.F,{shareData:u,getObjectActions:function(){return[Object.assign(Object.assign({},l.VE),{button:!t,appLink:n})]},imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups,breakpoints:e.breakpoints,className:"bg-light-orange",appLink:function(){return n}})))}},18006:(e,a,t)=>{t.d(a,{A:()=>s});var s="GRWx6w"},9566:(e,a,t)=>{t.d(a,{$Z:()=>g,G6:()=>u,GJ:()=>h,VE:()=>y,_w:()=>p,po:()=>E,vJ:()=>v});var s=t(23481),n=t(110),r=t(33518),i=t(2510),o=t(4594),l=t(35223),c=t(14070),m=t(97291),d=s.T.encloseNamespace("myShares.demoInsights"),u={type:i.y.Link,privacy:r.e.JustMySchool,objectId:"0",objectTypeId:o.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},p=Object.assign(Object.assign({},u),{type:i.y.Open,expireDate:n.O.add(new Date(u.dateCreated),30,"days").toISOString(),privacy:r.e.PinCode}),h={share:u,sharedObject:null,shareRecipients:null,dateShared:n.O.subtract(new Date,7,"days").toISOString()},g=Object.assign(Object.assign({},h),{share:p}),v={application:m.O.MY_SHARES,action:c.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},E={application:m.O.MY_SHARES,action:c.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},y={svgName:l.vn.Analytics,label:d("demoInsights"),appLink:v,group:"insights",className:"btn btn-outline-dark"}}}]);
2
- //# sourceMappingURL=7843-cbebf1a786-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7843-cbebf1a786-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/open-classrooms-table/OpenClassroomsTable.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-label/ClassroomLabel.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/pinned-classrooms-tiles/empty-state/EmptyPinnedClassroomsTiles.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/pinned-classrooms-tiles/pinned-classrooms-tiles.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/pinned-classrooms-tiles/partial-loading/PartialPinnedClassroomsTiles.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/pinned-classrooms-tiles/PinnedClassroomsTiles.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classrooms-overview/ClassroomsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/minimal-classrooms-experience/MinimalClassroomsExperienceView.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classrooms/ClassroomsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/my-shares-demo-insights.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts"],"sourcesContent":["export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\ninterface OpenClassroomsTableProps {\n shareData: ReturnType<typeof useSharesTable>;\n hasShareFlowV2: boolean;\n hasPermissions: HasPermissionsFunc;\n breakpoints: Breakpoints;\n isPlugin: boolean;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n hasDemoInsight?: boolean;\n\n emptyState?: () => JSX.Element;\n loadingState?: () => JSX.Element;\n\n className?: string;\n loading?: boolean;\n}\n\nexport function OpenClassroomsTable(props: OpenClassroomsTableProps) {\n const hasInsightsPermission = props.hasShareFlowV2 && props.hasPermissions(PermissionName.ViewInsights);\n const sharesParams = getSharesParams([]);\n\n const LoadingComponent = props.loadingState ?? PartialMySharesTable;\n const EmptyStateComponent = props.emptyState ?? MySharesTableEmptyState;\n \n if (props.loading || props.shareData.showPartialLoading)\n return <LoadingComponent />;\n\n if (!props.shareData.sentShares.length)\n return <EmptyStateComponent />;\n\n return (\n <div className={props.className}>\n <MySharesTable\n sentShares={props.shareData.sentShares}\n sharedObjects={props.shareData.sharedObjects.items}\n shareRecipients={props.shareData.shareRecipients.items}\n interactivesPendingReview={props.shareData.interactivesPendingReview.itemsArr}\n getObjectActions={row => getShareObjectActions({\n share: row.share,\n sharedObject: row.sharedObject,\n audienceParams: sharesParams.audienceAppLinkParams,\n hasInsights: hasInsightsPermission,\n isPlugin: props.isPlugin,\n breakpoints: props.breakpoints\n })}\n groupByDateShared\n breakpoints={props.breakpoints}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n hasDemoInsights={props.hasDemoInsight}\n />\n {(props.shareData.hasMore || props.shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={props.shareData.isFetching}\n fetchNext={props.shareData.fetchNext}\n nextCursor={props.shareData.nextCursor}\n />\n }\n </div>\n );\n}","import React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'classrooms.classroomLabel';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type ClassroomLabelType = 'my-school-classrooms' | 'favourite-classroom' | 'open-classroom';\n\ninterface ClassroomLabelProps {\n type: ClassroomLabelType;\n className?: string;\n text?: string;\n}\n\nconst TypePhraseMap: {[key in ClassroomLabelType]: string} = {\n 'my-school-classrooms': 'mySchoolClassrooms',\n 'favourite-classroom': 'favouriteClassroom',\n 'open-classroom': 'openClassroom'\n};\n\nconst TypeVariantMap: {[key in ClassroomLabelType]: ButtonProps['variant']} = {\n 'my-school-classrooms': 'purple',\n 'favourite-classroom': 'purple',\n 'open-classroom': 'blue'\n};\n\nexport function ClassroomLabel(props: ClassroomLabelProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center gap-2', props.className)}>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant={TypeVariantMap[props.type]}\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n <h2 className='h4 m-0'>\n {props.text ?? getPhrase(TypePhraseMap[props.type])}\n </h2>\n </div>\n );\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'classrooms.pinnedClassroomsTiles';\n\nexport function EmptyPinnedClassroomsTiles(): JSX.Element {\n return (\n <div className='py'>\n <Text namespace={namespace} phrase='emptyPinnedClassrooms' />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pinnedClassroomTile\":\"jgtOl\",\"pinnedClassroomTileImage\":\"TRhIX\"};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport styles from '../pinned-classrooms-tiles.scss';\n\ninterface PartialPinnedClassroomsTilesProps {\n size: number;\n}\n\nfunction PartialPinnedClassroomsTile(): JSX.Element {\n return (\n <div\n className={classNames('d-flex flex-column rounded overflow-hidden border border-gray-200', styles.pinnedClassroomTile)}\n >\n <figure\n className={classNames('m-0', styles.pinnedClassroomTileImage)}\n />\n\n <div className='d-flex flex-column gap-2 p-2'>\n <span className='partial-loading-background p-2 w-50'></span>\n <span className='partial-loading-background p-2'>\n </span>\n </div>\n </div>\n );\n}\n\nexport function PartialPinnedClassroomsTiles(props: PartialPinnedClassroomsTilesProps): JSX.Element {\n return (\n <div className='d-flex flex-row flex-wrap gap-3'>\n {Array.from({ length: props.size }).map((_, index) => <PartialPinnedClassroomsTile key={index} />)}\n </div>\n );\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { Classroom, EnrolmentRole } from 'libs/shared/interfaces';\nimport { getDeterministicBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { EmptyPinnedClassroomsTiles } from './empty-state/EmptyPinnedClassroomsTiles';\nimport { PartialPinnedClassroomsTiles } from './partial-loading/PartialPinnedClassroomsTiles';\n\nimport styles from './pinned-classrooms-tiles.scss';\n\nconst namespace = 'classrooms.pinnedClassroomsTiles';\n\ninterface PinnedClassroomsTileProps {\n classroom: Classroom;\n}\n\nfunction PinnedClassroomsTile(props: PinnedClassroomsTileProps): JSX.Element {\n const studentsCount = props.classroom.enrolments.data.filter(e => e.role === EnrolmentRole.Student).length;\n\n const bgColorClassName = getDeterministicBgColorClass(props.classroom.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <AppLink\n className={classNames('d-flex flex-column rounded overflow-hidden border border-gray-400', styles.pinnedClassroomTile)}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_HOME,\n args: [props.classroom.id]\n }}\n >\n <figure\n className={classNames('m-0', styles.pinnedClassroomTileImage, bgColorClassName)}\n />\n\n <div className='d-flex flex-column gap-1 p-2'>\n <span className='fw-medium'>{props.classroom.name}</span>\n <span className='text-muted'>\n {studentsCount\n ? <Text namespace={namespace} phrase='studentsCount' options={{ smartCount: studentsCount }} />\n : <Text namespace={namespace} phrase='noStudents' />\n }\n </span>\n </div>\n </AppLink>\n );\n}\n\ninterface PinnedClassroomsTilesProps {\n classrooms: Classroom[];\n showPartialLoading: boolean;\n emptyStateComponent?: () => JSX.Element;\n loadingStateComponent?: () => JSX.Element;\n}\n\nexport function PinnedClassroomsTiles(props: PinnedClassroomsTilesProps): JSX.Element {\n const EmptyState = props.emptyStateComponent ?? EmptyPinnedClassroomsTiles;\n const LoadingState = props.loadingStateComponent ?? PartialPinnedClassroomsTiles;\n\n if (props.showPartialLoading)\n return <LoadingState size={5} />;\n \n if (!props.classrooms || !props.classrooms.length)\n return <EmptyState />;\n \n return (\n <div className='d-flex flex-row flex-wrap gap-3'>\n {props.classrooms.map(classroom => (\n <PinnedClassroomsTile key={classroom.id} classroom={classroom} />\n ))}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClassroomCollection, Config, CurrentUser, InteractiveMetadata, RosteringResponse, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { ClassroomLabel, ClassroomLabelType } from 'apps/classrooms/components/classroom-label/ClassroomLabel';\nimport { ClassroomsHeader } from 'apps/classrooms/components/classrooms-header/ClassroomsHeader';\nimport { OpenClassroomsTable } from 'apps/classrooms/components/open-classrooms-table/OpenClassroomsTable';\nimport { PinnedClassroomsTiles } from 'apps/classrooms/components/pinned-classrooms-tiles/PinnedClassroomsTiles';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\n\nconst namespace = 'classrooms.classroomsOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomSectionHeadingProps {\n type: ClassroomLabelType;\n appLink?: Core.AppLink;\n hideSeeAll?: boolean;\n}\n\nfunction ClassroomSectionHeading(props: ClassroomSectionHeadingProps): JSX.Element {\n return (\n <div className='d-flex flex-row justify-content-between align-items-center mb-3'>\n <ClassroomLabel type={props.type} />\n {props.appLink && !props.hideSeeAll && (\n <AppLink appLink={props.appLink}>\n <Text namespace={namespace} phrase='seeAll' />\n </AppLink>\n )}\n </div>\n );\n}\n\nexport function ClassroomsOverviewView(): JSX.Element {\n useSetPageMetadata({\n title: getPhrase('pageTitle')\n });\n\n const breakpoints = useBreakpoints();\n const { isPlugin } = usePluginHelper();\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n const shareData = useSharesTable({\n interactiveInsights: true,\n shouldFetch: hasShareFlowV2,\n params: {\n type: [ShareType.Open]\n }\n });\n const favouriteClassrooms = Flight.useBasicFetch<ClassroomCollection>(\n ClassroomRequests.getPinnedClassrooms(\n currentUser.data?.id,\n currentUser.data?.customerId,\n { withStudents: true, limit: 5 }\n )\n );\n\n function getActions(): ActionOptions[] {\n return [{\n label: LanguageService.getPhrase(namespace, 'newClassroom'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_CLASSROOM\n },\n svgName: cvSvgLibrary.Plus,\n className: 'btn btn-outline-dark',\n disabled: hasRostering,\n tooltip: hasRostering ? getPhrase('disabledByRostering') : '',\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ClassroomsList\n },\n button: !breakpoints.xs\n }];\n }\n \n const loaded = !!config.data && !!demoInteractive.data && !!yearGroups.data && !!favouriteClassrooms.data;\n\n return (\n <div className='px-3'>\n <ClassroomsHeader\n activeTab='overview'\n actions={getActions()}\n hasRostering={hasRostering}\n hasShareFlowV2={hasShareFlowV2}\n />\n\n <section className='mb-4'>\n <ClassroomSectionHeading\n type='favourite-classroom'\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.VIEW_ALL\n }}\n hideSeeAll={!favouriteClassrooms.data?.data?.length}\n />\n\n <PinnedClassroomsTiles\n showPartialLoading={!loaded}\n classrooms={favouriteClassrooms.data?.data}\n />\n </section>\n\n <section className='mb-4'>\n <ClassroomSectionHeading\n type='open-classroom'\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOMS\n }}\n hideSeeAll={!shareData.sentShares?.length}\n />\n\n <OpenClassroomsTable\n loading={!loaded}\n shareData={shareData}\n hasShareFlowV2={hasShareFlowV2}\n hasPermissions={hasPermissions}\n breakpoints={breakpoints}\n isPlugin={isPlugin}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n className='mt-3'\n emptyState={() => (\n <MySharesDemoInsight\n heading={getPhrase('demoHeading')}\n demoInteractive={demoInteractive.data}\n breakpoints={breakpoints}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n className='mt-3'\n shareType={ShareType.Open}\n />\n )}\n />\n\n </section>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ExternalLink } from 'libs/shared/components/external-link/ExternalLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { ClassroomLabel } from 'apps/classrooms/components/classroom-label/ClassroomLabel';\nimport { ClassroomsHeader } from 'apps/classrooms/components/classrooms-header/ClassroomsHeader';\nimport { OpenClassroomsTable } from 'apps/classrooms/components/open-classrooms-table/OpenClassroomsTable';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\n\nconst namespace = 'classrooms.minimalClassroomsExperience';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\nconst productIntegrationsPath = '/product/integrations';\n\nexport function MinimalClassroomsExperienceView(): JSX.Element {\n useSetPageMetadata({\n title: getPhrase('pageTitle')\n });\n\n const breakpoints = useBreakpoints();\n const { isPlugin } = usePluginHelper();\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const shareData = useSharesTable({\n interactiveInsights: true,\n shouldFetch: hasShareFlowV2,\n params: {\n type: [ShareType.Open]\n }\n });\n \n const loaded = !!config.data && !!demoInteractive.data && !!yearGroups.data;\n\n return (\n <div className='px-3'>\n <ClassroomsHeader\n activeTab='classrooms'\n hasRostering={false}\n hasShareFlowV2={hasShareFlowV2}\n hideTabs\n />\n\n <section className='mb-4'>\n <ClassroomLabel type='my-school-classrooms' />\n\n <div className='d-flex flex-column flex-sm-row justify-content-between gap-2 bg-light-blue rounded p-3 align-items-center mt-3'>\n <div>\n <Text namespace={namespace} phrase='myClassroomsNotice' />&nbsp;\n <ExternalLink\n href={UrlHelper.safeUrlConcat(config.data?.marketingSiteUrl, productIntegrationsPath)} className='text-underline'\n newTab\n >\n <Text namespace={namespace} phrase='learnMore' />\n </ExternalLink>\n </div>\n <div>\n <AppLink\n className='btn btn-outline-dark hover-bg-white'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.Classroom,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.Upgrade,\n workflowPhase: WorkflowPhase.Start\n }}\n >\n <Text namespace={namespace} phrase='requestFullAccess' />\n </AppLink>\n </div>\n </div>\n </section>\n\n <section className='mb-4'>\n <ClassroomLabel type='open-classroom' />\n\n {loaded &&\n <>\n <MySharesDemoInsight\n heading={getPhrase('demoHeading')}\n demoInteractive={demoInteractive.data}\n breakpoints={breakpoints}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n className='mt-3'\n shareType={ShareType.Open}\n />\n \n <OpenClassroomsTable\n shareData={shareData}\n hasShareFlowV2={hasShareFlowV2}\n hasPermissions={hasPermissions}\n breakpoints={breakpoints}\n isPlugin={isPlugin}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n className='mt-3'\n emptyState={() => <></>}\n hasDemoInsight\n />\n </>\n\n }\n </section>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\n\nimport { ClassroomsOverviewView } from '../classrooms-overview/ClassroomsOverviewView';\nimport { FullClassroomsExperienceView } from '../full-classrooms-experience/FullClassroomsExperienceView';\nimport { MinimalClassroomsExperienceView } from '../minimal-classrooms-experience/MinimalClassroomsExperienceView';\n\ninterface ClassroomsViewProps {\n query: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function ClassroomsView(props: ClassroomsViewProps): JSX.Element {\n const { experience, loading } = useClassroomExperience();\n const { hasShareFlowV2 } = useSettings(null);\n\n if (loading)\n return <></>;\n \n if (experience === 'none') {\n Core.ErrorHelper.throw(new NotFoundError());\n return <></>;\n }\n \n if (experience === 'full' && hasShareFlowV2) {\n return <ClassroomsOverviewView />;\n }\n\n if (experience === 'full' && !hasShareFlowV2) {\n return <FullClassroomsExperienceView query={props.query} />;\n }\n\n return <MinimalClassroomsExperienceView />;\n}","// extracted by mini-css-extract-plugin\nexport default {\"background\":\"HAuP3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_ACTION, DEMO_INSIGHTS_APPLINK, DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK, DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA, DEMO_INSIGHTS_SHARE_TABLE_DATA } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nimport { MySharesTableData } from '../my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-demo-insights.scss';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n breakpoints: Breakpoints;\n className?: string;\n heading?: string;\n shareType?: ShareType;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n const appLink = props.shareType === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK : DEMO_INSIGHTS_APPLINK;\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: DEMO_INTERACTIVE_ID\n };\n }\n\n function getObjectActions() {\n return [\n {\n ...DEMO_INSIGHTS_ACTION,\n button: !isMobile,\n appLink\n }\n ];\n }\n\n const demoShareTableData = props.shareType === ShareType.Open\n ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA\n : DEMO_INSIGHTS_SHARE_TABLE_DATA;\n\n const shareData: MySharesTableData = {\n ...demoShareTableData,\n sharedObject: getDemoInteractive()\n };\n\n return (\n <div className={props.className}>\n <MySharesTableHeading heading={props.heading ?? getPhrase('demoHeading')} isFirst={true} />\n\n <div className={`${styles.background} rounded-3 mb-4`}>\n <MySharesTableRow\n shareData={shareData}\n getObjectActions={getObjectActions}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n breakpoints={props.breakpoints}\n className='bg-light-orange'\n appLink={(() => appLink)}\n />\n </div>\n </div>\n );\n}","export const DEMO_INTERACTIVE_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n"],"names":["SharePrivacy","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","OpenClassroomsTable","props","hasInsightsPermission","hasShareFlowV2","hasPermissions","sharesParams","LoadingComponent","loadingState","EmptyStateComponent","emptyState","loading","shareData","showPartialLoading","sentShares","length","className","sharedObjects","items","shareRecipients","interactivesPendingReview","itemsArr","getObjectActions","row","share","sharedObject","audienceParams","audienceAppLinkParams","hasInsights","isPlugin","breakpoints","groupByDateShared","imageCdnUrl","yearGroups","hasDemoInsights","hasDemoInsight","hasMore","isFetching","fetchNext","nextCursor","getPhrase","LanguageService","TypePhraseMap","TypeVariantMap","ClassroomLabel","IconCircle","svgName","svgSize","SvgContainer","S","variant","type","textVariant","svgWrapperClassName","text","EmptyPinnedClassroomsTiles","Text","namespace","phrase","PartialPinnedClassroomsTile","PartialPinnedClassroomsTiles","Array","from","size","map","_","index","PinnedClassroomsTile","studentsCount","classroom","enrolments","data","filter","e","role","bgColorClassName","name","AppLink","appLink","application","action","args","id","options","smartCount","PinnedClassroomsTiles","EmptyState","emptyStateComponent","LoadingState","loadingStateComponent","classrooms","ClassroomSectionHeading","hideSeeAll","ClassroomsOverviewView","useSetPageMetadata","title","useBreakpoints","usePluginHelper","usePermissions","useSettings","currentUser","UserRequests","config","ConfigRequests","demoInteractive","isAuthenticated","CustomerRequests","customerId","rostering","RosteringRequests","hasRostering","status","useSharesTable","interactiveInsights","shouldFetch","params","ShareType","favouriteClassrooms","ClassroomRequests","withStudents","limit","loaded","ClassroomsHeader","activeTab","actions","label","disabled","tooltip","analyticsOptions","actionType","entity","workflowPhase","location","button","xs","MySharesDemoInsight","heading","shareType","productIntegrationsPath","MinimalClassroomsExperienceView","hideTabs","ExternalLink","href","UrlHelper","marketingSiteUrl","newTab","analyticsData","descriptor","ClassroomsView","useClassroomExperience","experience","NotFoundError","FullClassroomsExperienceView","query","isMobile","sm","demoShareTableData","isFirst","MySharesTableRow","DEMO_INTERACTIVE_ID","DEMO_INSIGHTS_SHARE","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","group"],"sourceRoot":""}
@@ -1,3 +0,0 @@
1
- /*! For license information please see 8077-870bd8e245-lite.chunk.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8077],{76153:(e,t,r)=>{r.d(t,{F:()=>s});var n=r(33003),i=r.n(n);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 a(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,i,o,a,c=[],u=!0,l=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){l=!0,i=e}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw i}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(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 c(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 u={secondary:{label:"Secondary",isTertiary:!1},"primary & secondary":{label:"Primary & Secondary",isTertiary:!1},k12:{label:"Primary & Secondary",isTertiary:!1},primary:{label:"Primary",isTertiary:!1},special:{label:"Special",isTertiary:!1},university:{label:"University",isTertiary:!0},middle:{label:"Middle",isTertiary:!1},"fe college":{label:"FE College",isTertiary:!0},"high school":{label:"Secondary",isTertiary:!1},elementary:{label:"Primary",isTertiary:!1},"middle school":{label:"Middle",isTertiary:!1},tafe:{label:"TAFE",isTertiary:!0},college:{label:"FE College",isTertiary:!0},"sixth form college":{label:"Sixth Form College",isTertiary:!0}},l={england:"ENG",scotland:"SCT",wales:"WLS","northern ireland":"NIR"},s={hashedEmail:function(e){var t=e.trim().toLowerCase();return i().hash(t)},removeEmptyKeys:function(e){if(Array.isArray(e))return e;var t=Object.assign({},e);return Object.entries(t).filter(function(e){var t=a(e,2)[1];return null!=t&&!("string"==typeof t&&!t.length)}).reduce(function(e,t){var r,n,i,c=a(t,2),u=c[0],l=c[1];return Object.assign(Object.assign({},e),(r={},n=u,i=l===Object(l)?s.removeEmptyKeys(l):l,(n=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r))},{})},EVENT_TOPIC:"Free Trial Request",BDM_EVENT_TOPIC:"Requested free trial (Streamable Customer)",SOURCE:"cv_product_trial_requested",BDM_SOURCE:"cv_product_bdm_trial_requested",TRIAL_UPGRADE_SOURCE:"cv_product_trial_upgrade_requested",getSchoolType:function(e){var t;if(e){var r=e.toLowerCase();if(!["unknown","other"].includes(r))return(null===(t=u[r])||void 0===t?void 0:t.label)||e}},isTertiarySchool:function(e){var t;return(null===(t=u[null==e?void 0:e.toLowerCase()])||void 0===t?void 0:t.isTertiary)||!1},parseProvince:function(e){return e.length?l[e.toLowerCase()]||e:""}}},36669:(e,t,r)=>{r.d(t,{t:()=>n});var n={currentProspect:function(){return{url:"/api/prospects/current",key:"prospect:current"}},getLookups:function(e){return{url:"/api/prospects/".concat(e,"/lookups"),key:"prospect:".concat(e)}}}},68077:(e,t,r)=>{r.r(t),r.d(t,{AmplitudeAnalyticsClient:()=>j});var n=r(25150),i=r(23794),o=r(74058),a=r(76991),c=r(20354),u=r(41268),l=r(65858),s=r(76153),p=r(19808),v=r(61699),f=r(31949),y=r(64818),d=r(97291),h=r(36669),S=r(91996);function m(e){return m="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},m(e)}function b(e,t,r){return(t=k(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(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,i,o,a,c=[],u=!0,l=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){l=!0,i=e}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw i}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return E(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)?E(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 E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function _(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function o(r,n,i,o){var u=n&&n.prototype instanceof c?n:c,l=Object.create(u.prototype);return w(l,"_invoke",function(r,n,i){var o,c,u,l=0,s=i||[],p=!1,v={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,r){return o=t,c=0,u=e,v.n=r,a}};function f(r,n){for(c=r,u=n,t=0;!p&&l&&!i&&t<s.length;t++){var i,o=s[t],f=v.p,y=o[2];r>3?(i=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=r<2&&f<o[1])?(c=0,v.v=n,v.n=o[1]):f<y&&(i=r<3||o[0]>n||n>y)&&(o[4]=r,o[5]=n,v.n=y,c=0))}if(i||r>1)return a;throw p=!0,n}return function(i,s,y){if(l>1)throw TypeError("Generator is already running");for(p&&1===s&&f(s,y),c=s,u=y;(t=c<2?e:u)||!p;){o||(c?c<3?(c>1&&(v.n=-1),f(c,u)):v.n=u:v.v=u);try{if(l=2,o){if(c||(i="next"),t=o[i]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+i+"' method"),c=1);o=e}else if((t=(p=v.n<0)?u:r.call(n,v))!==a)break}catch(t){o=e,c=1,u=t}finally{l=1}}return{value:t,done:p}}}(r,i,o),!0),l}var a={};function c(){}function u(){}function l(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(w(t={},n,function(){return this}),t),p=l.prototype=c.prototype=Object.create(s);function v(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,w(e,i,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=l,w(p,"constructor",l),w(l,"constructor",u),u.displayName="GeneratorFunction",w(l,i,"GeneratorFunction"),w(p),w(p,i,"Generator"),w(p,n,function(){return this}),w(p,"toString",function(){return"[object Generator]"}),(_=function(){return{w:o,m:v}})()}function w(e,t,r,n){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}w=function(e,t,r,n){if(t)i?i(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r;else{var o=function(t,r){w(e,t,function(e){return this._invoke(t,r,e)})};o("next",0),o("throw",1),o("return",2)}},w(e,t,r,n)}function C(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,k(n.key),n)}}function k(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=m(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}function O(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(O=function(){return!!e})()}function P(e){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},P(e)}function T(e,t){return T=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},T(e,t)}var A=function(e,t,r,n){return new(r||(r=Promise))(function(i,o){function a(e){try{u(n.next(e))}catch(e){o(e)}}function c(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(a,c)}u((n=n.apply(e,t||[])).next())})},j=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,r){return t=P(t),function(e,t){if(t&&("object"==m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,O()?Reflect.construct(t,r||[],P(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&T(e,t)}(t,e),r=t,E=[{key:"eventWhitelist",get:function(){return b(b(b(b(b(b(b(b(b({},l.Vw.SendEmail,S.S.isInviteEvent),l.Vw.Download,S.S.isResourceDownloadEvent),l.Vw.Share,S.S.isShareEvent),l.Vw.Stream,S.S.isStreamEvent),l.Vw.Click,S.S.isSupportedClickEvent),l.Vw.PageView,S.S.isPageViewEvent),l.Vw.Search,S.S.isSearch),l.Vw.Filter,S.S.isSearch),l.Vw.Submit,S.S.isUpgradeFormEvent)}}],(u=[{key:"name",get:function(){return"AmplitudeAnalyticsClient"}},{key:"initialize",value:function(e){var t=(0,a.k)();n.IH(t);var r=s.F.hashedEmail(e.currentUser.email);n.S1(e.apiKey,r,{serverZone:e.instanceRegion===p.b.UK?"EU":"US",logLevel:i.i.Warn,identityStorage:"localStorage",autocapture:{networkTracking:!1,pageViews:!1}});var c=new o.h2;c.set("userId",e.currentUser.id),c.set("crmId",e.customer.crmId),n.yV(c),this.extraIdentification(e)}},{key:"extraIdentification",value:function(e){var t,r;return A(this,void 0,void 0,_().m(function i(){var a,c,u,l,s,p,v,f;return _().w(function(i){for(;;)switch(i.n){case 0:return i.n=1,this.fetchExtraIdentification(e);case 1:a=i.v,c=a.prospect,u=a.user,l=a.subjectPreferences,s=a.yearLevels,p=new o.h2,(null==c?void 0:c.province)&&p.set("prospectProvince",c.province),(null==c?void 0:c.city)&&p.set("prospectCity",c.city),(v=null===(r=null===(t=null==u?void 0:u.userProfile)||void 0===t?void 0:t.metadata)||void 0===r?void 0:r.jobTitle)&&p.set("jobTitle",v),p.set("isKDM",y.l.isKDM(v)),f=null==l?void 0:l.filter(function(e){return e.canBePreferred}),l&&l.length>0&&p.set("subjectPreferences",f.map(function(e){return e.name})),s&&s.length>0&&p.set("yearLevels",s.map(function(e){return e.name})),n.yV(p);case 2:return i.a(2)}},i,this)}))}},{key:"fetchExtraIdentification",value:function(e){return A(this,void 0,void 0,_().m(function t(){var r,n,i,o,a,c;return _().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,Promise.all([this.fetchProspect(e),this.fetchUser(e),this.fetchSubjectPreferences(e),this.fetchYearLevels(e)]);case 1:return r=t.v,n=g(r,4),i=n[0],o=n[1],a=n[2],c=n[3],t.a(2,{prospect:i,user:o,subjectPreferences:a,yearLevels:c})}},t,this)}))}},{key:"fetchProspect",value:function(e){return A(this,void 0,void 0,_().m(function t(){return _().w(function(t){for(;;)switch(t.n){case 0:return t.p=0,t.n=1,c.a.hooklessFetchAsync(e.store,h.t.currentProspect());case 1:return t.a(2,t.v);case 2:return t.p=2,t.v,t.a(2,null)}},t,null,[[0,2]])}))}},{key:"fetchUser",value:function(e){return A(this,void 0,void 0,_().m(function t(){return _().w(function(t){for(;;)switch(t.n){case 0:return t.p=0,t.n=1,c.a.hooklessFetchAsync(e.store,f.N.user(e.currentUser.id));case 1:return t.a(2,t.v);case 2:return t.p=2,t.v,t.a(2,null)}},t,null,[[0,2]])}))}},{key:"fetchSubjectPreferences",value:function(e){return A(this,void 0,void 0,_().m(function t(){return _().w(function(t){for(;;)switch(t.n){case 0:return t.p=0,t.n=1,c.a.hooklessFetchAsync(e.store,v.o.mySubjectPreferences());case 1:return t.a(2,t.v);case 2:return t.p=2,t.v,t.a(2,[])}},t,null,[[0,2]])}))}},{key:"fetchYearLevels",value:function(e){return A(this,void 0,void 0,_().m(function t(){return _().w(function(t){for(;;)switch(t.n){case 0:return t.p=0,t.n=1,c.a.hooklessFetchAsync(e.store,v.o.myLevelPreferences());case 1:return t.a(2,t.v);case 2:return t.p=2,t.v,t.a(2,[])}},t,null,[[0,2]])}))}},{key:"shouldLog",value:function(e){if(!e)return!1;var r=t.eventWhitelist[e.type];return"function"==typeof r&&r(e)}},{key:"logEvent",value:function(e){n.j(e)}},{key:"log",value:function(e){var t,r,n,i=e.data;if(S.S.isPageViewEvent(e))return this.logEvent({event_type:"page_view",event_properties:{is_addressable:i.isAddressable,action_context:null===(t=i.appLink)||void 0===t?void 0:t.action,application_context:null===(r=i.appLink)||void 0===r?void 0:r.application,url:i.url,title:document.title}}),void(S.S.isPostSearchPageViewEvent(e)&&this.logSearchEvent(e));S.S.isStreamEvent(e)?this.logEvent({event_type:"product_stream",event_properties:{id:null==i?void 0:i.id,entity:e.actionContext.entity,name:null==i?void 0:i.name}}):S.S.isExploreTopicsEvent(e)?this.logEvent({event_type:"product_explore_topics",event_properties:{id:null==i?void 0:i.id,name:null==i?void 0:i.name,presentation_id:null==i?void 0:i.presentationId,presentation_name:null==i?void 0:i.presentationName}}):S.S.isSearch(e)?this.logSearchEvent(e):S.S.isSearchClickThrough(e)?this.logEvent({event_type:"product_search_clickthrough",event_properties:{query:null===(n=null==i?void 0:i.search)||void 0===n?void 0:n.query}}):S.S.isBookACallEvent(e)?this.logEvent({event_type:"product_click_book_a_call"}):S.S.isShareEvent(e)?this.logEvent({event_type:"product_share",event_properties:{id:null==i?void 0:i.id,entity:e.actionContext.entity,name:null==i?void 0:i.name}}):S.S.isResourceDownloadEvent(e)?this.logEvent({event_type:"product_download_resource",event_properties:{id:null==i?void 0:i.id,name:null==i?void 0:i.name,video_name:null==i?void 0:i.videoName}}):S.S.isInviteEvent(e)?this.logEvent({event_type:"product_invite",event_properties:{user_count:null==i?void 0:i.emailCount}}):S.S.isPlayerDevicesCtaEvent(e)?this.logEvent({event_type:"product_player_device_cta",event_properties:{descriptor:e.actionContext.descriptor,can_user_manage_integrations:null==i?void 0:i.canUserManageIntegrations,context:null==i?void 0:i.context}}):S.S.isIntegrationsEvent(e)?this.logEvent({event_type:"product_settings_integrations",event_properties:{descriptor:e.actionContext.descriptor,id:null==i?void 0:i.id,status:null==i?void 0:i.status}}):S.S.isUpgradeFormEvent(e)&&this.logEvent({event_type:"product_request_upgrade_form",event_properties:{job_title:null==i?void 0:i.jobTitle,is_kdm:null==i?void 0:i.isKdm}})}},{key:"isType",value:function(e){return e===t.type}},{key:"logSearchEvent",value:function(e){var t=e.data,r={};"query"in t&&(r.query=t.query),this.logEvent({event_type:"product_search",event_properties:Object.assign(Object.assign({},r),{action_type:this.getSearchActionType(e)})})}},{key:"getSearchActionType",value:function(e){if(e.type===l.Vw.Filter)return"filter";var t=e.data;if(e.type===l.Vw.PageView){var r=null==t?void 0:t.appLink;return(null==r?void 0:r.application)===d.O.SEARCH?null:S.S.isSearchResultClickthrough(r)?"clickthrough":"abandon"}return t.consecutiveSearchCount>1?"multi_search":"search"}}])&&C(r.prototype,u),E&&C(r,E),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,u,E}(u.z);j.type="AmplitudeAnalyticsClient"},91996:(e,t,r)=>{r.d(t,{S:()=>l});var n=r(49985),i=r(65858),o=r(75795),a=r(14070),c=r(97291),u=[{application:c.O.VIDEOS,action:a.e.Videos.PLAY_VIDEO},{application:c.O.INTERACTIVES,action:a.e.Interactives.VIEW_INTERACTIVE},{application:c.O.CLIPS,action:a.e.Clips.PLAY_CLIP},{application:c.O.SERIES,action:a.e.Series.SERIES},{application:c.O.PLAYLISTS,action:a.e.Playlists.PLAYLIST},{application:c.O.LIBRARIES,action:a.e.Libraries.FOLDER},{application:c.O.SUBJECT,action:a.e.Subjects.CLASSIFICATION},{application:c.O.MOVIES_AND_TV,action:a.e.MoviesAndTv.COMPANY_DASHBOARD}],l={isSearchResultClickthrough:function(e){return!(!(null==e?void 0:e.application)||!(null==e?void 0:e.action))&&u.some(function(t){return t.application===e.application&&t.action===e.action})},isPageViewEvent:function(e){if(e.type!==i.Vw.PageView)return!1;var t=e.data;return!(null==t?void 0:t.isError)},isPostSearchPageViewEvent:function(e){var t,r=e.data,n=null==r?void 0:r.appLink;if((null==n?void 0:n.application)===c.O.SEARCH)return!1;var i=null===(t=o.O.getPreviousRoute())||void 0===t?void 0:t.appLink;return(null==i?void 0:i.application)===c.O.SEARCH},isExploreTopicsEvent:function(e){return e.type===i.Vw.Click&&e.actionContext.entity===i.py.Classification},isSearch:function(e){return e.type===i.Vw.Search?e.actionContext.location===i.LZ.SearchBar:e.type===i.Vw.Filter&&e.actionContext.productArea===(0,n.c)(c.O.SEARCH)},isSearchClickThrough:function(e){var t;return e.type===i.Vw.Click&&e.actionContext.productArea===(0,n.c)(c.O.SEARCH)&&!Array.isArray(e.data)&&!!(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.search)},isBookACallEvent:function(e){return e.type===i.Vw.Click&&e.actionContext.entity===i.py.Url&&e.actionContext.descriptor===i.HS.BookACall},isStreamEvent:function(e){return e.type===i.Vw.Stream},isShareEvent:function(e){return e.type===i.Vw.Share&&e.actionContext.workflowPhase!==i.eu.Start},isResourceDownloadEvent:function(e){return e.type===i.Vw.Download&&e.actionContext.entity===i.py.Resource},isInviteEvent:function(e){return e.type===i.Vw.SendEmail&&e.actionContext.descriptor===i.Yu.InviteColleague},isPlayerDevicesCtaEvent:function(e){return e.type===i.Vw.Click&&e.actionContext.entity===i.py.DevicesCta},isIntegrationsEvent:function(e){return e.type===i.Vw.Click&&e.actionContext.entity===i.py.Integration},isSupportedClickEvent:function(e){return!!(l.isExploreTopicsEvent(e)||l.isSearchClickThrough(e)||l.isBookACallEvent(e)||l.isPlayerDevicesCtaEvent(e)||l.isIntegrationsEvent(e))},isUpgradeFormEvent:function(e){return e.type===i.Vw.Submit&&e.actionContext.descriptor===i.HS.RequestBdmTrial}}}}]);
3
- //# sourceMappingURL=8077-870bd8e245-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/8077-870bd8e245-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/sign-up/helpers/BrazeHelper.ts","file:///app/packages/projects/lite/src/apps/sign-up/flight-requests/UpgradeRequests.ts","file:///app/packages/projects/lite/src/shared/analytics-clients/AmplitudeAnalyticsClient.ts","file:///app/packages/projects/lite/src/shared/analytics-clients/AnalyticsEventHelper.ts"],"sourcesContent":["import SparkMD5 from 'spark-md5';\n\nimport type { HashObject } from 'libs/analytics/interfaces';\n\ninterface SchoolTypeInfo {\n label: string;\n isTertiary: boolean;\n}\n\nconst SCHOOL_TYPE_MAP: Record<string, SchoolTypeInfo> = {\n 'secondary': {\n label: 'Secondary',\n isTertiary: false\n },\n 'primary & secondary': {\n label: 'Primary & Secondary',\n isTertiary: false\n },\n 'k12': {\n label: 'Primary & Secondary',\n isTertiary: false\n },\n 'primary': {\n label: 'Primary',\n isTertiary: false\n },\n 'special': {\n label: 'Special',\n isTertiary: false\n },\n 'university': {\n label: 'University',\n isTertiary: true\n },\n 'middle': {\n label: 'Middle',\n isTertiary: false\n },\n 'fe college': {\n label: 'FE College',\n isTertiary: true\n },\n 'high school': {\n label: 'Secondary',\n isTertiary: false\n },\n 'elementary': {\n label: 'Primary',\n isTertiary: false\n },\n 'middle school': {\n label: 'Middle',\n isTertiary: false\n },\n 'tafe': {\n label: 'TAFE',\n isTertiary: true\n },\n 'college': {\n label: 'FE College',\n isTertiary: true\n },\n 'sixth form college': {\n label: 'Sixth Form College',\n isTertiary: true\n }\n};\n\nconst PROVINCE_ISO_MAP: HashObject<string> = {\n 'england': 'ENG',\n 'scotland': 'SCT',\n 'wales': 'WLS',\n 'northern ireland': 'NIR'\n};\n\nexport interface BrazeCheckEmailResponse {\n invalidUserIds: string[];\n message: string;\n users: HashObject[];\n}\n\nexport const BrazeHelper = {\n\n hashedEmail(email: string) {\n const normalizedEmail = email.trim().toLowerCase();\n return SparkMD5.hash(normalizedEmail);\n },\n\n removeEmptyKeys(object: HashObject<any>): HashObject<any> {\n if (Array.isArray(object))\n return object;\n\n const payload = { ...object };\n return Object.entries(payload)\n .filter(([ , v ]) => {\n if (v === undefined || v === null) {\n return false;\n }\n if (typeof v === 'string' && !v.length) {\n return false;\n }\n return true;\n })\n .reduce(\n (acc, [ k, v ]) => ({ ...acc, [k]: v === Object(v) ? BrazeHelper.removeEmptyKeys(v) : v }),\n {}\n );\n },\n\n EVENT_TOPIC: 'Free Trial Request',\n\n BDM_EVENT_TOPIC: 'Requested free trial (Streamable Customer)',\n\n SOURCE: 'cv_product_trial_requested',\n\n BDM_SOURCE: 'cv_product_bdm_trial_requested',\n\n TRIAL_UPGRADE_SOURCE: 'cv_product_trial_upgrade_requested',\n\n getSchoolType(schoolType: string): string {\n if (!schoolType) return;\n\n const prospectType = schoolType.toLowerCase();\n\n if ([ 'unknown', 'other' ].includes(prospectType)) return;\n \n const mappedSchoolType = SCHOOL_TYPE_MAP[prospectType]?.label;\n if (mappedSchoolType)\n return mappedSchoolType;\n \n return schoolType;\n },\n\n isTertiarySchool(schoolType: string): boolean {\n return SCHOOL_TYPE_MAP[schoolType?.toLowerCase()]?.isTertiary || false;\n },\n\n parseProvince(province?: string): string {\n if (!province.length) return '';\n\n const mappedProvince = PROVINCE_ISO_MAP[province.toLowerCase()];\n return mappedProvince || province;\n }\n};","import { Flight } from 'libs/common/flight';\n\nexport const UpgradeRequests = {\n currentProspect(): Flight.Request {\n return {\n url: '/api/prospects/current',\n key: 'prospect:current'\n };\n },\n getLookups(prospectId: string): Flight.Request {\n return {\n url: `/api/prospects/${prospectId}/lookups`,\n key: `prospect:${prospectId}`\n };\n }\n};","import * as amplitude from '@amplitude/analytics-browser';\nimport { sessionReplayPlugin } from '@amplitude/plugin-session-replay-browser';\nimport { Store } from 'redux';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsClientOptions, BaseAnalyticsClient } from 'libs/analytics/clients/BaseAnalyticsClient';\nimport { HashObject, UserAction } from 'libs/analytics/interfaces';\nimport type { CoreAnalyticsType, DataObjectPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Classification, CurrentUser, Customer, PresentationAudience, User } from 'libs/shared/interfaces';\nimport { Prospect } from 'libs/shared/interfaces/models/Prospect';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { UpgradeRequests } from 'apps/sign-up/flight-requests/UpgradeRequests';\n\nimport { AnalyticsEventHelper } from './AnalyticsEventHelper';\n\ninterface EventWhitelist {\n [eventName: string]: (...args: any) => any | boolean;\n}\n\ninterface AmplituideAnalyticsClientOptions extends AnalyticsClientOptions {\n currentUser: CurrentUser;\n apiKey: string;\n instanceRegion: InstanceRegion;\n customer: Customer\n store: Store;\n}\n\nexport class AmplitudeAnalyticsClient extends BaseAnalyticsClient {\n public static readonly type: string = 'AmplitudeAnalyticsClient';\n // @ts-ignore\n public get name(): string {\n return 'AmplitudeAnalyticsClient';\n }\n\n constructor(options: AmplituideAnalyticsClientOptions) {\n super(options);\n }\n\n public initialize(options: AmplituideAnalyticsClientOptions): void {\n const sessionReplayTracking = sessionReplayPlugin();\n amplitude.add(sessionReplayTracking);\n\n const id = BrazeHelper.hashedEmail(options.currentUser.email);\n amplitude.init(options.apiKey, id, {\n serverZone: options.instanceRegion === InstanceRegion.UK ? 'EU' : 'US',\n logLevel: amplitude.Types.LogLevel.Warn,\n identityStorage: 'localStorage',\n autocapture: {\n // We're not interested in tracking network requests and we don't\n // want amplitude to collect any data within them\n networkTracking: false,\n // We disable the default page view tracking as we're tracking it manually\n // because our page titles update based on feched data\n pageViews: false\n }\n });\n\n const identify = new amplitude.Identify();\n identify.set('userId', options.currentUser.id);\n identify.set('crmId', options.customer.crmId);\n\n amplitude.identify(identify);\n\n this.extraIdentification(options);\n }\n\n private async extraIdentification(options: AmplituideAnalyticsClientOptions): Promise<void> {\n const { prospect, user, subjectPreferences, yearLevels } = await this.fetchExtraIdentification(options);\n\n const identify = new amplitude.Identify();\n \n if (prospect?.province)\n identify.set('prospectProvince', prospect.province);\n\n if (prospect?.city)\n identify.set('prospectCity', prospect.city);\n\n const jobTitle = user?.userProfile?.metadata?.jobTitle;\n if (jobTitle)\n identify.set('jobTitle', jobTitle);\n \n identify.set('isKDM', UserHelper.isKDM(jobTitle));\n\n const filteredSubjectPrefeences = subjectPreferences?.filter(s => s.canBePreferred);\n if (subjectPreferences && subjectPreferences.length > 0)\n identify.set('subjectPreferences', filteredSubjectPrefeences.map(s => s.name));\n\n if (yearLevels && yearLevels.length > 0)\n identify.set('yearLevels', yearLevels.map(l => l.name));\n\n amplitude.identify(identify);\n }\n\n private async fetchExtraIdentification(options: AmplituideAnalyticsClientOptions): Promise<{\n prospect: Prospect | null;\n user: User | null;\n subjectPreferences: Classification[];\n yearLevels: PresentationAudience[];\n }> {\n /**\n * If we end up sharing AmplitudeAnalyticsClient with projects other than lite.\n * Lets move the fetch functions out, and instead pass them in as promises. - Sha\n */\n const [ prospect, user, subjectPreferences, yearLevels ] = await Promise.all([\n this.fetchProspect(options),\n this.fetchUser(options),\n this.fetchSubjectPreferences(options),\n this.fetchYearLevels(options)\n ]);\n\n return { prospect, user, subjectPreferences, yearLevels };\n }\n\n private async fetchProspect(options: AmplituideAnalyticsClientOptions): Promise<Prospect | null> {\n try {\n return await Flight.hooklessFetchAsync<Prospect>(\n options.store,\n UpgradeRequests.currentProspect()\n );\n } catch {\n return null;\n }\n }\n\n private async fetchUser(options: AmplituideAnalyticsClientOptions): Promise<User | null> {\n try {\n return await Flight.hooklessFetchAsync<User>(\n options.store,\n UserRequests.user(options.currentUser.id)\n );\n } catch {\n return null;\n }\n }\n\n private async fetchSubjectPreferences(options: AmplituideAnalyticsClientOptions): Promise<Classification[]> {\n try {\n return await Flight.hooklessFetchAsync<Classification[]>(\n options.store,\n PreferenceRequests.mySubjectPreferences()\n );\n } catch {\n return [];\n }\n }\n\n private async fetchYearLevels(options: AmplituideAnalyticsClientOptions): Promise<PresentationAudience[]> {\n try {\n return await Flight.hooklessFetchAsync<PresentationAudience[]>(\n options.store,\n PreferenceRequests.myLevelPreferences()\n );\n } catch {\n return [];\n }\n }\n\n public shouldLog(event?: CoreAnalyticsType): boolean {\n if (!event)\n return false;\n \n const predicate = AmplitudeAnalyticsClient.eventWhitelist[event.type];\n if (typeof predicate === 'function')\n return predicate(event);\n\n return false;\n }\n\n private logEvent(event: amplitude.Types.BaseEvent): void {\n amplitude.track(event);\n }\n\n public log(event: CoreAnalyticsType): void {\n const eventData = event.data as HashObject;\n\n if (AnalyticsEventHelper.isPageViewEvent(event)) {\n this.logEvent({\n event_type: 'page_view',\n event_properties: {\n is_addressable: eventData.isAddressable,\n action_context: eventData.appLink?.action,\n application_context: eventData.appLink?.application,\n url: eventData.url,\n title: document.title\n }\n });\n\n if (AnalyticsEventHelper.isPostSearchPageViewEvent(event))\n this.logSearchEvent(event);\n\n return;\n }\n\n if (AnalyticsEventHelper.isStreamEvent(event)) {\n this.logEvent({\n event_type: 'product_stream',\n event_properties: {\n id: eventData?.id,\n entity: event.actionContext.entity,\n name: eventData?.name\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isExploreTopicsEvent(event)) {\n this.logEvent({\n event_type: 'product_explore_topics',\n event_properties: {\n id: eventData?.id,\n name: eventData?.name,\n presentation_id: eventData?.presentationId,\n presentation_name: eventData?.presentationName\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isSearch(event)) {\n this.logSearchEvent(event);\n return;\n }\n\n if (AnalyticsEventHelper.isSearchClickThrough(event)) {\n this.logEvent({\n event_type: 'product_search_clickthrough',\n event_properties: {\n query: eventData?.search?.query\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isBookACallEvent(event)) {\n this.logEvent({\n event_type: 'product_click_book_a_call'\n });\n return;\n }\n\n if (AnalyticsEventHelper.isShareEvent(event)) {\n this.logEvent({\n event_type: 'product_share',\n event_properties: {\n id: eventData?.id,\n entity: event.actionContext.entity,\n name: eventData?.name\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isResourceDownloadEvent(event)) {\n this.logEvent({\n event_type: 'product_download_resource',\n event_properties: {\n id: eventData?.id,\n name: eventData?.name,\n video_name: eventData?.videoName\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isInviteEvent(event)) {\n this.logEvent({\n event_type: 'product_invite',\n event_properties: {\n user_count: eventData?.emailCount\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isPlayerDevicesCtaEvent(event)) {\n this.logEvent({\n event_type: 'product_player_device_cta',\n event_properties: {\n descriptor: event.actionContext.descriptor,\n can_user_manage_integrations: eventData?.canUserManageIntegrations,\n context: eventData?.context\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isIntegrationsEvent(event)) {\n this.logEvent({\n event_type: 'product_settings_integrations',\n event_properties: {\n descriptor: event.actionContext.descriptor,\n id: eventData?.id,\n status: eventData?.status\n }\n });\n return;\n }\n\n if (AnalyticsEventHelper.isUpgradeFormEvent(event)) {\n this.logEvent({\n event_type: 'product_request_upgrade_form',\n event_properties: {\n job_title: eventData?.jobTitle,\n is_kdm: eventData?.isKdm\n }\n });\n return;\n }\n }\n\n public isType(type: string): this is AmplitudeAnalyticsClient {\n return type === AmplitudeAnalyticsClient.type;\n }\n\n private logSearchEvent(event: CoreAnalyticsType): void {\n const eventData = event.data as HashObject;\n\n const additionalData: HashObject = {};\n if ('query' in eventData)\n additionalData.query = eventData.query;\n\n this.logEvent({\n event_type: 'product_search',\n event_properties: {\n ...additionalData,\n action_type: this.getSearchActionType(event)\n }\n });\n }\n\n private getSearchActionType(event: CoreAnalyticsType): string {\n if (event.type === UserAction.Filter)\n return 'filter';\n\n const eventData = event.data as DataObjectPayload;\n if (event.type === UserAction.PageView) {\n const appLink = eventData?.appLink;\n\n if (appLink?.application === AppChannels.SEARCH)\n return null;\n\n if (AnalyticsEventHelper.isSearchResultClickthrough(appLink))\n return 'clickthrough';\n\n return 'abandon';\n }\n\n if (eventData.consecutiveSearchCount > 1)\n return 'multi_search';\n\n return 'search';\n }\n\n private static get eventWhitelist(): EventWhitelist {\n return {\n [UserAction.SendEmail]: AnalyticsEventHelper.isInviteEvent,\n [UserAction.Download]: AnalyticsEventHelper.isResourceDownloadEvent,\n [UserAction.Share]: AnalyticsEventHelper.isShareEvent,\n [UserAction.Stream]: AnalyticsEventHelper.isStreamEvent,\n [UserAction.Click]: AnalyticsEventHelper.isSupportedClickEvent,\n [UserAction.PageView]: AnalyticsEventHelper.isPageViewEvent,\n [UserAction.Search]: AnalyticsEventHelper.isSearch,\n [UserAction.Filter]: AnalyticsEventHelper.isSearch,\n [UserAction.Submit]: AnalyticsEventHelper.isUpgradeFormEvent\n };\n }\n}","import { Core } from 'libs/common/backbone/index';\n\nimport { colonCaseToKebabCase } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, SignUpDescriptors, UpgradeBannerDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\nimport type { CoreAnalyticsType, DataObjectPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\n/**\n * List of app links that represent successful search result clickthroughs\n */\nconst resultAppLinks = [\n { application: AppChannels.VIDEOS, action: Actions.Videos.PLAY_VIDEO },\n { application: AppChannels.INTERACTIVES, action: Actions.Interactives.VIEW_INTERACTIVE },\n { application: AppChannels.CLIPS, action: Actions.Clips.PLAY_CLIP },\n { application: AppChannels.SERIES, action: Actions.Series.SERIES },\n { application: AppChannels.PLAYLISTS, action: Actions.Playlists.PLAYLIST },\n { application: AppChannels.LIBRARIES, action: Actions.Libraries.FOLDER },\n { application: AppChannels.SUBJECT, action: Actions.Subjects.CLASSIFICATION },\n { application: AppChannels.MOVIES_AND_TV, action: Actions.MoviesAndTv.COMPANY_DASHBOARD }\n];\n\nexport const AnalyticsEventHelper = {\n /**\n * Checks if an app link represents a valid search result clickthrough\n */\n isSearchResultClickthrough(appLink: Core.AppLink): boolean {\n if (!appLink?.application || !appLink?.action) {\n return false;\n }\n\n return resultAppLinks.some((link: { application: string; action: string }) =>\n link.application === appLink.application && link.action === appLink.action);\n },\n isPageViewEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.PageView)\n return false;\n\n /**\n * We only want to collect the page view where the user has navigated\n * . We'll ignore error pages.\n */\n const eventData = event.data as DataObjectPayload;\n if (eventData?.isError)\n return false;\n\n return true;\n },\n\n /**\n * We want to log search events to Braze and Amplitude when the user has navigated away from the /search route.\n * Hence the name \"post-search event\".\n * To do this, we listen for page_view events where the user is going from /search to any other route.\n */\n isPostSearchPageViewEvent(event: CoreAnalyticsType): boolean {\n const eventData = event.data as HashObject;\n const currentAppLink = eventData?.appLink;\n\n // If the user is navigating to search, ignore\n if (currentAppLink?.application === AppChannels.SEARCH)\n return false;\n\n const previousAppLink = ContextService.getPreviousRoute()?.appLink;\n\n // If the user is coming from a route that isn't /search, ignore\n if (previousAppLink?.application !== AppChannels.SEARCH)\n return false;\n\n return true;\n },\n\n isExploreTopicsEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Click)\n return false;\n\n if (event.actionContext.entity !== EntityType.Classification)\n return false;\n\n return true;\n },\n\n isSearch(event: CoreAnalyticsType): boolean {\n if (event.type === UserAction.Search)\n return event.actionContext.location === LocationContext.SearchBar;\n\n if (event.type === UserAction.Filter)\n return event.actionContext.productArea === colonCaseToKebabCase(AppChannels.SEARCH);\n\n return false;\n },\n\n isSearchClickThrough(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Click)\n return false;\n\n if (event.actionContext.productArea !== colonCaseToKebabCase(AppChannels.SEARCH))\n return false;\n\n /**\n * The search clickthrough events are never logged as an array\n */\n if (Array.isArray(event.data))\n return false;\n\n /**\n * We're relying on the fact that search click through events have\n * the search property of the entity populated with a node containing the score\n */\n if (!event?.data?.search)\n return false;\n\n return true;\n },\n\n isBookACallEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Click)\n return false;\n\n if (event.actionContext.entity !== EntityType.Url)\n return false;\n\n if (event.actionContext.descriptor !== UpgradeBannerDescriptors.BookACall)\n return false;\n\n return true;\n },\n\n isStreamEvent(event: CoreAnalyticsType): boolean {\n return event.type === UserAction.Stream;\n },\n\n isShareEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Share)\n return false;\n\n return event.actionContext.workflowPhase !== WorkflowPhase.Start;\n },\n\n isResourceDownloadEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Download)\n return false;\n\n return event.actionContext.entity === EntityType.Resource;\n },\n\n isInviteEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.SendEmail)\n return false;\n\n return event.actionContext.descriptor === SignUpDescriptors.InviteColleague;\n },\n\n isPlayerDevicesCtaEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Click)\n return false;\n \n if (event.actionContext.entity !== EntityType.DevicesCta)\n return false;\n\n return true;\n },\n\n isIntegrationsEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Click)\n return false;\n\n if (event.actionContext.entity !== EntityType.Integration)\n return false;\n\n return true;\n },\n\n isSupportedClickEvent(event: CoreAnalyticsType): boolean {\n if (AnalyticsEventHelper.isExploreTopicsEvent(event))\n return true;\n\n if (AnalyticsEventHelper.isSearchClickThrough(event))\n return true;\n\n if (AnalyticsEventHelper.isBookACallEvent(event))\n return true;\n\n if (AnalyticsEventHelper.isPlayerDevicesCtaEvent(event))\n return true;\n\n if (AnalyticsEventHelper.isIntegrationsEvent(event))\n return true;\n \n return false;\n },\n\n isUpgradeFormEvent(event: CoreAnalyticsType): boolean {\n if (event.type !== UserAction.Submit)\n return false;\n\n if (event.actionContext.descriptor !== UpgradeBannerDescriptors.RequestBdmTrial)\n return false;\n\n return true;\n }\n};\n"],"names":["SCHOOL_TYPE_MAP","label","isTertiary","PROVINCE_ISO_MAP","BrazeHelper","hashedEmail","email","normalizedEmail","trim","toLowerCase","removeEmptyKeys","object","Array","isArray","payload","Object","entries","filter","v","length","reduce","acc","k","EVENT_TOPIC","BDM_EVENT_TOPIC","SOURCE","BDM_SOURCE","TRIAL_UPGRADE_SOURCE","getSchoolType","schoolType","prospectType","includes","isTertiarySchool","parseProvince","province","UpgradeRequests","currentProspect","url","key","getLookups","prospectId","AmplitudeAnalyticsClient","options","sessionReplayTracking","id","currentUser","apiKey","serverZone","instanceRegion","logLevel","identityStorage","autocapture","networkTracking","pageViews","identify","set","customer","crmId","this","extraIdentification","fetchExtraIdentification","prospect","user","subjectPreferences","yearLevels","city","jobTitle","userProfile","metadata","filteredSubjectPrefeences","s","canBePreferred","map","name","l","Promise","all","fetchProspect","fetchUser","fetchSubjectPreferences","fetchYearLevels","store","event","predicate","eventWhitelist","type","eventData","data","logEvent","event_type","event_properties","is_addressable","isAddressable","action_context","appLink","action","application_context","application","title","document","logSearchEvent","entity","actionContext","presentation_id","presentationId","presentation_name","presentationName","query","search","video_name","videoName","user_count","emailCount","descriptor","can_user_manage_integrations","canUserManageIntegrations","context","status","job_title","is_kdm","isKdm","additionalData","action_type","getSearchActionType","consecutiveSearchCount","resultAppLinks","AnalyticsEventHelper","isSearchResultClickthrough","some","link","isPageViewEvent","isError","isPostSearchPageViewEvent","currentAppLink","previousAppLink","isExploreTopicsEvent","isSearch","location","productArea","c","isSearchClickThrough","isBookACallEvent","isStreamEvent","isShareEvent","workflowPhase","isResourceDownloadEvent","isInviteEvent","isPlayerDevicesCtaEvent","isIntegrationsEvent","isSupportedClickEvent","isUpgradeFormEvent"],"sourceRoot":""}