@clickview/lite 0.82.2 → 0.83.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1074-fdce06d863-lite.chunk.js +2 -0
  4. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +1 -0
  5. package/dist/scripts/{1199-da55d69853-lite.chunk.js → 1199-01cc084886-lite.chunk.js} +1 -1
  6. package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map} +1 -1
  7. package/dist/scripts/{2664-87c8cbfa7f-lite.chunk.js → 2664-907153c03b-lite.chunk.js} +2 -2
  8. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +1 -0
  9. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +2 -0
  10. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 3392-f7f8cb65e5-lite.chunk.js} +3 -3
  12. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +1 -0
  13. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +2 -0
  14. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{4177-285ddf9ae3-lite.chunk.js → 4177-2d876c7b14-lite.chunk.js} +2 -2
  16. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{1336-1826f6e582-lite.chunk.js → 4208-0706461da6-lite.chunk.js} +2 -2
  18. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{4578-7578bcf17a-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
  20. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
  21. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +2 -0
  22. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +1 -0
  23. package/dist/scripts/{4621-1f79d94416-lite.chunk.js → 4621-7fb0a05bcb-lite.chunk.js} +2 -2
  24. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +1 -0
  25. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +2 -0
  26. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js → 4948-ba684e5f4f-lite.chunk.js} +1 -1
  28. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js.map → 4948-ba684e5f4f-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +2 -0
  30. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5554-17bb3b86fc-lite.chunk.js → 5554-f1f3baf822-lite.chunk.js} +2 -2
  32. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +1 -0
  33. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +2 -0
  34. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +1 -0
  35. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +2 -0
  36. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{6909-a9b8930e37-lite.chunk.js → 6909-ba75701156-lite.chunk.js} +2 -2
  38. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +1 -0
  39. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +2 -0
  40. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +1 -0
  41. package/dist/scripts/7568-55e9b01367-lite.chunk.js +3 -0
  42. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-211f084b70-lite.chunk.js} +2 -2
  44. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +1 -0
  45. package/dist/scripts/7742-514844bd1a-lite.chunk.js +2 -0
  46. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +1 -0
  47. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +2 -0
  48. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +1 -0
  49. package/dist/scripts/8077-870bd8e245-lite.chunk.js +3 -0
  50. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +1 -0
  51. package/dist/scripts/843-4dbc5df109-lite.chunk.js +3 -0
  52. package/dist/scripts/843-4dbc5df109-lite.chunk.js.LICENSE.txt +1 -0
  53. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +1 -0
  54. package/dist/scripts/8735-e74a148502-lite.chunk.js +2 -0
  55. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +1 -0
  56. package/dist/scripts/8856-2d332952ae-lite.chunk.js +2 -0
  57. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +1 -0
  58. package/dist/scripts/904-2784e45cfc-lite.chunk.js +2 -0
  59. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js → 9042-fd7e79b891-lite.chunk.js} +1 -1
  61. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js.map → 9042-fd7e79b891-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +2 -0
  63. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +1 -0
  64. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +2 -0
  65. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9742-5f99d74bb0-lite.chunk.js → 9742-3f6b75484a-lite.chunk.js} +2 -2
  67. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/979-6a70a0e616-lite.chunk.js +2 -0
  69. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js → 9911-8892b6dbfe-lite.chunk.js} +2 -2
  71. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js.map → 9911-8892b6dbfe-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/bundle-f926852f33.min.js +3 -0
  73. package/dist/scripts/{bundle-9a3e49399a.min.js.map → bundle-f926852f33.min.js.map} +1 -1
  74. package/package.json +1 -1
  75. package/dist/css/2074-lite-ac8da6c78b.chunk.css +0 -4
  76. package/dist/scripts/1202-d96ad80884-lite.chunk.js +0 -2
  77. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +0 -1
  78. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +0 -1
  79. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
  80. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2888-2596e106a5-lite.chunk.js +0 -2
  83. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +0 -1
  84. package/dist/scripts/289-669c0c8222-lite.chunk.js +0 -2
  85. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +0 -1
  86. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
  87. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
  88. package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
  89. package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
  91. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +0 -1
  94. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4806-f36469abb7-lite.chunk.js +0 -2
  96. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
  98. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
  99. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +0 -1
  100. package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
  101. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +0 -1
  102. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
  103. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
  104. package/dist/scripts/6070-a390fdce21-lite.chunk.js +0 -2
  105. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +0 -1
  106. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7401-98135f09e8-lite.chunk.js +0 -2
  108. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +0 -1
  109. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
  111. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7843-f6033528ce-lite.chunk.js +0 -2
  113. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
  114. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +0 -2
  115. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +0 -2
  117. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
  119. package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
  120. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
  121. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +0 -2
  122. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +0 -1
  123. package/dist/scripts/9295-4242401e60-lite.chunk.js +0 -2
  124. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +0 -1
  125. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
  126. package/dist/scripts/979-4b893e5603-lite.chunk.js +0 -2
  127. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +0 -1
  128. package/dist/scripts/9911-9272b96e46-lite.chunk.js +0 -2
  129. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +0 -1
  130. package/dist/scripts/bundle-9a3e49399a.min.js +0 -3
  131. /package/dist/css/{787-lite-5a317efacd.chunk.css → 2970-lite-5a317efacd.chunk.css} +0 -0
  132. /package/dist/css/{6070-lite-45dc286aab.chunk.css → 6550-lite-45dc286aab.chunk.css} +0 -0
  133. /package/dist/css/{2888-lite-856c02f000.chunk.css → 7148-lite-856c02f000.chunk.css} +0 -0
  134. /package/dist/css/{8364-lite-db31e36b79.chunk.css → 843-lite-db31e36b79.chunk.css} +0 -0
  135. /package/dist/css/{9911-lite-856c02f000.chunk.css → 8735-lite-856c02f000.chunk.css} +0 -0
  136. /package/dist/css/{5579-lite-f8e496136d.chunk.css → 8856-lite-f8e496136d.chunk.css} +0 -0
  137. /package/dist/css/{289-lite-2435a34b13.chunk.css → 904-lite-2435a34b13.chunk.css} +0 -0
  138. /package/dist/css/{1202-lite-4a892bdbf2.chunk.css → 9528-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{3612-lite-2b4142796a.chunk.css → 9911-lite-2b4142796a.chunk.css} +0 -0
  140. /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7568-55e9b01367-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 8077-870bd8e245-lite.chunk.js.LICENSE.txt} +0 -0
  143. /package/dist/scripts/{bundle-9a3e49399a.min.js.LICENSE.txt → bundle-f926852f33.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6909-ba75701156-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/packages/projects/lite/src/shared/views/favourites/empty-state/favourites-empty-state.scss","file:///app/packages/projects/lite/src/shared/views/favourites/empty-state/FavouritesEmptyState.tsx","file:///app/packages/projects/lite/src/shared/views/favourites/FavouritesViewUtils.ts","file:///app/packages/projects/lite/src/shared/views/favourites/favourites-view.scss","file:///app/packages/projects/lite/src/shared/views/favourites/FavouritesView.tsx","file:///app/packages/projects/lite/src/shared/views/favourites/hooks/useFavouritesCount.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n logoBgColour?: string;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n function getSpecialEventMonthText(specialEvent: CalendarEvent): string {\n if (!specialEvent.endDate)\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n if (DateHelper.isSame(specialEvent.startDate, specialEvent.endDate, 'month'))\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n return `${DateHelper.format(specialEvent.startDate, 'MMM')} - ${DateHelper.format(specialEvent.endDate, 'MMM')}`;\n }\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n const logoFallbackBgClassName = getBgColorClass(props.heading, BG_COLOUR_CLASS_NAMES);\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={getSpecialEventMonthText(specialEvent)}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft && props.logo?.url &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${logoFallbackBgClassName}`}>\n <LazyImage\n src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })}\n style={{ backgroundColor: props.logoBgColour }}\n />\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Medium })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import 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","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin, params } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n const hasGuestExperience = hasPermissions(PermissionName.GuestExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n isPluginPopup: !!params?.popup,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience,\n hasGuestExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\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}","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"ZfpQv\"};","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 { LanguageNamespaceContext, 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\nimport styles from './favourites-empty-state.scss';\n\nconst namespace = 'shared.favouritesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function FavouritesEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.FAVOURITED_VIDEOS}\n altText={getPhrase('info')}\n className={styles.image}\n />\n\n <EmptyState.Heading className='h3'>\n <Text phrase='heading' />\n </EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function FavouritesPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.FAVOURITED_VIDEOS_PUBLIC} altText={getPhrase('publicInfo')} />\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\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.MyFavouritesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\n\nconst namespace = 'shared.favourites';\n\nexport function useFavouritesVideoActions() {\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const { setFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const getVideoActions = (video: VideoTypes) => {\n const { canConsume } = VideoHelper.getCanBeConsumed(video);\n\n if (!canConsume) {\n return [{\n label: LanguageService.getPhrase(namespace, 'removeFromFavourites'),\n svgName: cvSvgLibrary.Delete,\n button: false,\n className: 'btn btn-link text-danger',\n onClick: () => setFavourite(video, false)\n }];\n }\n\n return videoActions.getVideoActions(video);\n };\n\n return {\n ...videoActions,\n getVideoActions\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"FEWd3\"};","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { FavouriteRequests } from 'libs/shared/flight-requests/FavouriteRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, VideoTypes } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\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 { FavouritesEmptyState, FavouritesPublicEmptyState } from './empty-state/FavouritesEmptyState';\nimport { useFavouritesCount } from './hooks/useFavouritesCount';\nimport { useFavouritesVideoActions } from './FavouritesViewUtils';\n\nimport styles from './favourites-view.scss';\n\nconst namespace = 'shared.favourites';\n\nexport function FavouritesView(): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const videoActions = useFavouritesVideoActions();\n\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n const { hasLocalPermissions, hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const getRequest = (cursor?: string) => {\n return FavouriteRequests.getFavourites(currentUser.data.id, cursor);\n };\n\n const fetchNext = (cursor?: string) => {\n return Flight.getFetch(dispatch)(getRequest(cursor));\n };\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMyFavouritesLanding) && currentUser.hasCompleted;\n\n const {\n items,\n hasMore,\n isFetching\n } = useInfiniteList<VideoTypes>(shouldFetch ? getRequest : false, fetchNext, onError);\n\n useVideoMixin(items);\n \n const audiences = usePresentationAudiences();\n\n const breadcrumbs = useBreadcrumbs({ name: LanguageService.getPhrase(namespace, 'header') });\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const { count, isLoading } = useFavouritesCount(currentUser.data?.id);\n if (isLoading)\n return <></>;\n\n if (hasLocalPermissions(LocalPermissionName.ViewMyFavouritesLanding))\n return <FavouritesPublicEmptyState />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='p-3'>\n <BannerHeader\n heading={LanguageService.getPhrase(namespace, 'header')}\n banner={{ url: ImageUrls.FAVOURITES_PLAYLIST.FAV_PLAYLIST_BANNER }}\n bannerClassName={`${styles.banner} bg-pink`}\n imageCdnUrl={config.data?.imageCdnUrl}\n detailsComponent={() => (\n <div className='mb-n1 font-size-normal fw-normal mt-1'>\n <Text namespace={namespace} phrase='videos' options={{ smartCount: count }} />\n </div>\n )}\n />\n {breadcrumbs?.length &&\n <div className='border-bottom pb-3'>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </div>\n }\n \n {(() => {\n if (!items)\n return <PartialVideoList />;\n\n if (!items.length)\n return <FavouritesEmptyState />;\n\n return (\n <div className='mt-2'>\n <VideoList\n videos={items}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n hasPermissions={hasPermissions}\n presentationAudiences={audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={commonVideoProps}\n />\n {(hasMore || isFetching) && <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} />}\n </div>\n );\n })()}\n </div>\n </VideoActionsContext.Provider>\n );\n}","\nimport { Flight } from 'libs/common/flight';\n\nimport { FavouriteRequests } from 'libs/shared/flight-requests/FavouriteRequests';\nimport { FavouritesCountResponse } from 'libs/shared/interfaces';\n\nexport function useFavouritesCount(userId?: string) {\n// todo there is a beckend bug that we cannot group fetch these three number\n const favouriteVideosCount = Flight.useBasicFetch<FavouritesCountResponse>(userId &&\n FavouriteRequests.getFavouritesVideosCount(userId));\n const favouriteClipsCount = Flight.useBasicFetch<FavouritesCountResponse>(userId &&\n FavouriteRequests.getFavouritesClipsCount(userId));\n const favouriteInteractivesCount = Flight.useBasicFetch<FavouritesCountResponse>(userId &&\n FavouriteRequests.getFavouritesInteractivesCount(userId));\n \n const totalCount = favouriteVideosCount.data?.count\n + favouriteInteractivesCount.data?.count\n + favouriteClipsCount.data?.count;\n\n const favourites = [\n ...(favouriteVideosCount.data?.data || []),\n ...(favouriteClipsCount.data?.data || []),\n ...(favouriteInteractivesCount.data?.data || [])\n ];\n\n return {\n count: totalCount,\n favourites,\n isLoading: !favouriteVideosCount.data?.data\n || !favouriteClipsCount.data?.data\n || !favouriteInteractivesCount.data?.data\n };\n}"],"names":["namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","className","SvgContainer","svgName","onlyIcon","GenericCalendarDate","AppLink","appLink","getAppLink","theme","border","analyticsData","analyticsOptions","background","label","body","type","getBodyClass","text","month","BackButton","textShadow","backToName","color","extraClasses","backPhrase","colorClass","textShadowClass","size","S","defaultProps","RATIO","width","height","getSizeClass","heading","length","BannerHeader","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","getSpecialEventMonthText","calendarTheme","Text","phrase","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","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","SCROLL_TOLERANCE","useInfiniteList","fetchNext","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","useCommonVideoProps","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","params","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","hasGuestExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","isPluginPopup","popup","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","getValidObjects","objects","Array","isArray","filter","o","useVideoMixin","videoIds","v","ids","useVideoMixinFunc","fetchObjects","getPhrase","FavouritesEmptyState","value","EmptyState","ImageUrls","altText","application","action","FavouritesPublicEmptyState","actionType","location","entity","workflowPhase","descriptor","SignUp","FavouritesView","dispatch","alerts","videoActions","useVideoActions","useLiteFavourites","getVideoActions","VideoHelper","canConsume","button","onClick","useFavouritesVideoActions","useSetPageMetadata","usePermissions","hasLocalPermissions","UserRequests","ConfigRequests","FavouriteRequests","shouldFetch","pageNumber","httpStatus","error","audiences","name","useFavouritesCount","count","isLoading","VideoActionsContext","smartCount","Breadcrumbs","VideoList","videos","getVideoAppLink","VideoAppLinkHelper","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","InfiniteScrollFooter","PartialVideoList","userId","favouriteVideosCount","favouriteClipsCount","favouriteInteractivesCount","favourites"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7148],{41196:(e,t,n)=>{n.d(t,{W:()=>o});var r=n(20354),a=n(93479),i=n(20768),s=n(31949);function o(e,t,n){var o,l=r.a.useBasicFetch(s.N.currentUser()),u=r.a.useBasicFetch(!!e&&i.b.interactiveMetadata(e)),d=r.a.useBasicFetch(!!(null===(o=u.data)||void 0===o?void 0:o.interactiveId)&&i.b.interactive(u.data.interactiveId)),c=!!l.data&&!!d.data;return r.a.useBasicFetch(c&&a.I.interactiveResultSet(u.data.interactiveId,u.data.id,l.data,t,n))}},26136:(e,t,n)=>{n.d(t,{B:()=>o});var r=n(76198),a=n(23481),i=n(64818),s=a.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,r._8)((n=e.id,a=e.sessionId,o=+"".concat(n||function(e){if(!e)return 0;for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)}(a)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[r.O9,r.yd],separator:" ",length:2,style:"capital",seed:o})):e.deleted?s("deleted"):i.l.getFullName(e)||s("anonUser"):s("anonUser");var n,a,o}},3218:(e,t,n)=>{n.d(t,{R:()=>k});var r=n(32735),a=n(69087),i=n(26136),s=n(39157),o=n(69186),l=n(86572),u=n(28972),d=n(83140),c=n(80845),m=n(23481),f=n(2102),v=n(36532),b=m.T.encloseNamespace("interactives.studentResponseList");function h(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-end pt-3"},r.createElement("div",null,!e.showSubmitButtonSpinner&&r.createElement("button",{className:"btn btn-link",onClick:e.onClickClose},b("close")),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(v.u,{id:"submitAnswers",title:b("demoOnly"),spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},b("submitAnswers"))):r.createElement(f.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},b("submitAnswers")))))}var y=m.T.encloseNamespace("interactives.studentResponseList");function p(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-between pb-3"},r.createElement("div",{className:"d-flex"},!!e.summary.unanswered&&r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},y("unanswered")),e.summary.unanswered),r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},y("score")),e.summary.awaitingMarking?r.createElement("em",null,y("pending")):"".concat(Math.round(100*e.summary.percentCorrect),"%"))),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(v.u,{id:"submitAnswers",title:y("demoOnly"),spanHack:!0},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},y("submitAnswers"))):r.createElement(f.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},y("submitAnswers"))))}const g={awaitingMarking:"MvGb5"};function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return S(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)?S(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 S(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 k(e){var t,n,m,f,v=w(r.useState(!1),2),b=v[0],y=v[1],S=(t=r.useRef(null),n=w(r.useState(!1),2),m=n[0],f=n[1],r.useEffect(function(){t.current&&!m&&(f(!0),requestAnimationFrame(function(){return t.current.scrollIntoView({behavior:"smooth",block:"center"})}))},[t.current,m]),t),k=(0,s.Rt)(e.interactive,e.studentResults),A=(0,c.Q)(e.interactive),C=function(e,t){return e.filter(function(e){return d.A.isInteractionCorrect(e,(0,c.j_)(t))===u.w.AwaitingMarking})}(A,e.studentResults);function I(){y(!0),e.submitMarkedAnswers()}return r.createElement(r.Fragment,null,r.createElement(p,{summary:k,interactionsToMark:C,markedAnswers:e.markedAnswers,onClickSubmit:I,showSubmitButtonSpinner:b,isDemo:e.isDemo}),r.createElement("ul",{className:"list-unstyled"},A.map(function(t,n){var u,d=t.id.toString()===(null===(u=e.selectedInteractionId)||void 0===u?void 0:u.toString()),c=C.some(function(e){return e.id===t.id}),m=(0,i.B)(e.studentResults.user,e.anonymiseUsers),f="p-2 mb-3 rounded";return d&&(f+=" border-2 border-info shadow"),f+=c?" ".concat(g.awaitingMarking):" border",r.createElement("li",{key:n,className:f,ref:d?S:null},r.createElement("div",{className:"d-flex mb-2"},r.createElement(l.y,{interaction:t,iconClassName:"flex-shrink-0"})),e.reportsStyling?r.createElement(o.O,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,className:"bg-light ps-2",showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(a.d,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,showFeedback:!0}))})),r.createElement(h,{interactionsToMark:C,markedAnswers:e.markedAnswers,onClickSubmit:I,onClickClose:e.onClickClose,showSubmitButtonSpinner:b,isDemo:e.isDemo}))}},94892:(e,t,n)=>{n.d(t,{T:()=>a,i:()=>r});var r={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}},94644:(e,t,n)=>{n.d(t,{r:()=>d});var r=n(50242),a=n(81886),i=n(67058),s=n(14553),o=n(49267),l=n(49075),u={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.q},badRequest:l._,internalServerError:l._};function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},u),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==r.o.InternalServer?i!==r.o.NotFound?i!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new s.badRequest):n.forbidden||a.Q.Ry.throw(new s.forbidden.privacy):n.notFound||a.Q.Ry.throw(new s.notFound):n.internalServerError||a.Q.Ry.throw(new l._))}}},91286:(e,t,n)=>{n.d(t,{v:()=>s});var r=n(32735),a=n(94644);function i(e){return e.map(function(e){return e.statusCode}).join(":")}function s(e,t,n){var s=Array.isArray(e)?e:[e];(0,r.useEffect)(function(){s.forEach(function(e){(0,a.r)(e.statusCode,t,n)})},[i(s),t,n])}},9447:(e,t,n)=>{n.d(t,{Y:()=>s});var r=n(20354),a=n(30439);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e){var t,n=r.a.useBasicFetch(a.o.getAnonSessions(e));return{items:(null===(t=n.data)||void 0===t?void 0:t.reduce(function(e,t){return Object.assign(Object.assign({},e),(n={},r=t.sessionId,a={sessionId:(s=t).sessionId,name:s.sessionName},(r=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(r))in n?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a,n));var n,r,a,s},{}))||{},hasCompleted:n.hasCompleted,isFetching:n.isFetching}}},5780:(e,t,n)=>{n.d(t,{p:()=>u});var r=n(20354),a=n(2510),i=n(18488),s=n(4594),o=n(3010),l=n(88630);function u(e){var t,n,u,d,c=r.a.useGetFetch(),m=r.a.useBasicFetch(i.o.getShare(e)),f=(null===(t=m.data)||void 0===t?void 0:t.type)===a.y.Classroom&&(null===(d=null===(u=null===(n=m.data)||void 0===n?void 0:n.recipients)||void 0===u?void 0:u.find(function(e){return e.recipientTypeId===s.E.Classroom}))||void 0===d?void 0:d.recipientId),v=function(e){return l.F.getClassroomStudents(f,e)},b=(0,o.i)(f&&v,function(e){return c(v(e))});return Object.assign(Object.assign({},b),{hasCompleted:!f||b.hasCompleted})}},52389:(e,t,n)=>{n.d(t,{_:()=>v});var r=n(2948),a=n(20354),i=n(41196),s=n(18488),o=n(38143),l=n(91286),u=n(9447),d=n(5780);function c(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var f=[{id:"0",attempts:[{id:"0",answeredAt:0,answers:[]}]}];function v(e){var t,n,v,b,h=(v=(0,r.D)(o.g.HIDE_STAFF_RESULTS),b=1,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return o}}(v,b)||c(v,b)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],y=a.a.useBasicFetch(s.o.getShare(e)),p=(0,i.W)(null===(t=y.data)||void 0===t?void 0:t.objectId,null,e),g=(0,u.Y)(e),w=(0,d.p)(e);(0,l.v)(p);var S=p.hasCompleted&&g.hasCompleted&&w.hasCompleted;if(!S)return{data:null,hasCompleted:!1};var k=new Set,A=p.data.students.map(function(e){var t,n=null===(t=e.user)||void 0===t?void 0:t.userType;return h&&1===n?null:e.user?(k.add(e.user.id),e):Object.assign(Object.assign({},e),{user:g.items[e.sessionId]||{sessionId:e.sessionId}})}).filter(function(e){return!!e});return(null===(n=null==w?void 0:w.items)||void 0===n?void 0:n.length)&&A.push.apply(A,function(e){return function(e){if(Array.isArray(e))return m(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(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.")}()}(w.items.filter(function(e){return!k.has(e.id)}).map(function(e){return{user:e,results:f,isPlaceholder:!0}}))),{hasCompleted:S,isFetching:y.isFetching||p.isFetching||g.isFetching||w.isFetching,data:Object.assign(Object.assign({},p.data),{students:A})}}},2900:(e,t,n)=>{n.r(t),n.d(t,{InsightsStudentResultsView:()=>g});var r=n(32735),a=n(23481),i=n(20354),s=n(2948),o=n(9193),l=n(26136),u=n(18488),d=n(3218),c=n(9111),m=n(38143),f=n(39151),v=n(20768),b=n(91286),h=n(52389);function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var p=a.T.encloseNamespace("shared.insightsStudentResults");function g(e){var t,n,a,g,w,S,k,A=(S=(0,s.D)(m.g.ANONYMISE_USERS),k=1,function(e){if(Array.isArray(e))return e}(S)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return o}}(S,k)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(S,k)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],C=i.a.useBasicFetch(f.L.config()),I=i.a.useBasicFetch(u.o.getShare(e.shareId)),E=i.a.useBasicFetch((null===(t=I.data)||void 0===t?void 0:t.objectId)&&v.b.interactiveMetadata(I.data.objectId)),j=i.a.useBasicFetch((null===(n=E.data)||void 0===n?void 0:n.interactiveId)&&v.b.interactive(E.data.interactiveId)),F=(0,h._)(e.shareId);(0,b.v)([I,j,E]);var R=(0,o.D)(null===(a=j.data)||void 0===a?void 0:a.id,null===(g=E.data)||void 0===g?void 0:g.id,e.closePopup),N=R.markedAnswers,O=R.addMarkedAnswers,M=R.submitMarkedAnswers,T=null===(w=F.data)||void 0===w?void 0:w.students.find(function(t){var n,r,a,i,s;return e.userId?(null===(r=null===(n=t.user)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())===(null===(a=e.userId)||void 0===a?void 0:a.toString()):!!e.sessionId&&(null===(i=t.sessionId)||void 0===i?void 0:i.toString())===(null===(s=e.sessionId)||void 0===s?void 0:s.toString())}),B=T?p("heading",{studentName:(0,l.B)(T.user,A)}):"",U=C.hasCompleted&&I.hasCompleted&&E.hasCompleted&&j.hasCompleted&&F.hasCompleted;return r.createElement(c.G,{title:B,showLoadingSpinner:!U,closePopup:e.closePopup,size:"lg"},U&&r.createElement(d.R,{interactive:j.data,studentResults:T,markedAnswers:N,addMarkedAnswers:O,submitMarkedAnswers:M,imageCdnUrl:C.data.imageCdnUrl,selectedInteractionId:e.interactionId,onClickClose:e.closePopup,anonymiseUsers:A}))}}}]);
2
+ //# sourceMappingURL=7148-1ced1b5dce-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/7148-1ced1b5dce-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListFooter.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/student-response-list.scss","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseList.tsx","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useAnonSessions.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsClassroomStudents.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsInteractiveResults.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/insights-student-results/InsightsStudentResultsView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter?: AnalyticsRequestFilter,\n shareId?: string\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data;\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n shareId\n ));\n}","import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListFooterProps {\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n onClickClose: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListFooter(props: StudentResponseListFooterProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-end pt-3'>\n <div>\n {!props.showSubmitButtonSpinner &&\n <button className='btn btn-link' onClick={props.onClickClose}>\n {getPhrase('close')}\n </button>\n }\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip\n id='submitAnswers'\n title={getPhrase('demoOnly')}\n spanHack\n spanHackClassName='d-inline-flex'\n >\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListHeaderProps {\n summary: ResultsSummary;\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListHeader(props: StudentResponseListHeaderProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-between pb-3'>\n <div className='d-flex'>\n {!!props.summary.unanswered &&\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('unanswered')}</strong>\n {props.summary.unanswered}\n </div>\n }\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('score')}</strong>\n {props.summary.awaitingMarking\n ? <em>{getPhrase('pending')}</em>\n : `${Math.round(props.summary.percentCorrect * 100)}%`\n }\n </div>\n </div>\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack>\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"MvGb5\"};","import React from 'react';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus, getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, Interactive, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport { StudentResponseListFooter } from './StudentResponseListFooter';\nimport { StudentResponseListHeader } from './StudentResponseListHeader';\n\nimport styles from './student-response-list.scss';\n\nfunction getInteractionsToMark(\n interactions: Interaction[],\n studentResults: StudentResults\n): Interaction[] {\n return interactions.filter(i => {\n return InteractiveCorrectnessHelper.isInteractionCorrect(\n i,\n getStudentResult(studentResults)\n ) === InteractionCorrectness.AwaitingMarking;\n });\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nfunction useScrollSelectedInteractionIntoView(): React.MutableRefObject<HTMLLIElement> {\n const ref = React.useRef<HTMLLIElement>(null);\n const [ scrolled, setScrolled ] = React.useState(false);\n\n // Only scroll once\n React.useEffect(() => {\n if (!ref.current || scrolled)\n return;\n\n setScrolled(true);\n requestAnimationFrame(() => ref.current.scrollIntoView({ behavior: 'smooth', block: 'center' }));\n }, [ ref.current, scrolled ]);\n\n return ref;\n}\n\ninterface StudentResponseListProps {\n interactive: Interactive;\n markedAnswers: MarkedAnswerHash;\n studentResults: StudentResults;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n onClickClose: () => void;\n imageCdnUrl: string;\n selectedInteractionId?: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseList(props: StudentResponseListProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const selectedInteractionRef = useScrollSelectedInteractionIntoView();\n\n const summary = getStudentResultsSummary(props.interactive, props.studentResults);\n const interactions = getInteractions(props.interactive);\n const questionsToMark = getInteractionsToMark(interactions, props.studentResults);\n\n function onClickSubmit(): void {\n setShowSpinner(true);\n props.submitMarkedAnswers();\n }\n\n return (\n <>\n <StudentResponseListHeader\n summary={summary}\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n <ul className='list-unstyled'>\n {interactions.map((interaction, idx) => {\n const isSelected = interaction.id.toString() === props.selectedInteractionId?.toString();\n const markingRequired = questionsToMark.some(q => q.id === interaction.id);\n const anonymisedUserName = anonymiseUserName(\n props.studentResults.user,\n props.anonymiseUsers\n );\n\n let className = 'p-2 mb-3 rounded';\n\n if (isSelected)\n className += ' border-2 border-info shadow';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n else\n className += ' border';\n\n return (\n <li key={idx} className={className} ref={isSelected ? selectedInteractionRef : null}>\n <div className='d-flex mb-2'>\n <InteractionLabel\n interaction={interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n className='bg-light ps-2'\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n <StudentResponseListFooter\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n onClickClose={props.onClickClose}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n </>\n );\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { AnonSession } from 'libs/shared/apps/share/interfaces/AnonSession';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nfunction toAnonUser(anonSession: AnonSession) {\n return { sessionId: anonSession.sessionId, name: anonSession.sessionName } as AnonUser;\n}\n\nexport function useAnonSessions(shareId: string) {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(ShareRequests.getAnonSessions(shareId));\n\n const anonSessionMap = anonSessions.data\n ?.reduce<Record<string, AnonUser>>((prev, next) => {\n return {\n ...prev,\n [next.sessionId]: toAnonUser(next)\n };\n }, {});\n\n return {\n items: anonSessionMap || {},\n hasCompleted: anonSessions.hasCompleted,\n isFetching: anonSessions.isFetching\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { User } from 'libs/shared/interfaces/models/User';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport function useInsightsClassroomStudents(shareId: string) {\n const fetch = Flight.useGetFetch();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n \n const classroomId = share.data?.type === ShareType.Classroom &&\n share.data?.recipients?.find(r => r.recipientTypeId === MasterType.Classroom)?.recipientId;\n\n const getRequest = (cursor: string) => ClassroomRequests.getClassroomStudents(classroomId, cursor);\n const result = useFetchAll<User>(classroomId && getRequest, cursor => fetch(getRequest(cursor)));\n\n return {\n ...result,\n hasCompleted: !classroomId || result.hasCompleted\n };\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { InteractiveResult, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\n\nconst EMPTY_INTERACTIVE_RESULTS: InteractiveResult[] = [\n {\n id: '0',\n attempts: [{ id: '0', answeredAt: 0, answers: []}]\n }\n];\n\nexport function useInsightsInteractiveResults(shareId: string) {\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n const results = useFetchInteractiveResults(share.data?.objectId, null, shareId);\n\n const anonSessions = useAnonSessions(shareId);\n\n const classroomStudents = useInsightsClassroomStudents(shareId);\n\n useHandleObjectError(results);\n\n const hasCompleted = (\n results.hasCompleted &&\n anonSessions.hasCompleted &&\n classroomStudents.hasCompleted\n );\n\n if (!hasCompleted) {\n return {\n data: null as InteractiveResultSet,\n hasCompleted: false\n };\n }\n\n const studentHash = new Set<string>();\n\n const students = results.data.students.map(s => {\n // Domain is returning userType as a number - Sha\n const userType = s.user?.userType as unknown as number;\n if (hideStaffResults && userType === 1)\n return null;\n\n if (s.user) {\n studentHash.add(s.user.id);\n return s;\n }\n\n /**\n * Set the user to our anon user, so we can display the name they entered\n * when completing the interactive - Sha\n */\n return {\n ...s,\n user: anonSessions.items[s.sessionId] || { sessionId: s.sessionId } as AnonUser\n };\n }).filter(s => !!s);\n\n /**\n * If we have classroom students, we're adding any students who haven't attempted to the list\n * with an empty attempt. This is so the student list can show all classroom students - Sha\n */\n if (classroomStudents?.items?.length) {\n students.push(...classroomStudents.items\n .filter(s => !studentHash.has(s.id))\n .map(user => ({ user, results: EMPTY_INTERACTIVE_RESULTS, isPlaceholder: true })));\n }\n\n const isFetching = share.isFetching\n || results.isFetching\n || anonSessions.isFetching\n || classroomStudents.isFetching;\n\n return {\n hasCompleted,\n isFetching,\n data: {\n ...results.data,\n students\n }\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { StudentResponseList } from 'libs/shared/apps/student-response-list/StudentResponseList';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { Config, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\n\nconst namespace = 'shared.insightsStudentResults';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveStudentResultsViewProps extends PopupViewProps {\n shareId: string;\n interactionId: string;\n userId: string;\n sessionId: string;\n}\n\nexport function InsightsStudentResultsView(props: InteractiveStudentResultsViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(\n interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n props.closePopup\n );\n\n const studentResults = results.data?.students.find(s => {\n if (props.userId)\n return s.user?.id?.toString() === props.userId?.toString();\n\n if (props.sessionId)\n return s.sessionId?.toString() === props.sessionId?.toString();\n\n return false;\n });\n\n const popupTitle = studentResults\n ? getPhrase('heading', { studentName: anonymiseUserName(studentResults.user, anonymiseUsers) })\n : '';\n\n const dataLoaded = (\n config.hasCompleted &&\n share.hasCompleted &&\n interactiveMetadata.hasCompleted &&\n interactive.hasCompleted &&\n results.hasCompleted\n );\n\n return (\n <Popup\n title={popupTitle}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n size='lg'\n >\n {dataLoaded &&\n <StudentResponseList\n interactive={interactive.data}\n studentResults={studentResults}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={submitMarkedAnswers}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n onClickClose={props.closePopup}\n anonymiseUsers={anonymiseUsers}\n />\n }\n </Popup>\n );\n}\n"],"names":["useFetchInteractiveResults","interactiveMetadataId","requestFilter","shareId","currentUser","interactiveMetadata","interactive","data","interactiveId","shouldFetchResults","I","id","getPhrase","anonymiseUserName","user","shouldAnonymise","userId","sessionId","seed","guid","hash","i","length","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","LanguageService","StudentResponseListFooter","props","numMarkedAnswers","Object","keys","markedAnswers","className","showSubmitButtonSpinner","onClick","onClickClose","interactionsToMark","isDemo","Tooltip","title","spanHack","spanHackClassName","disabled","SpinnerButton","variant","onClickSubmit","showSpinner","StudentResponseListHeader","summary","unanswered","awaitingMarking","round","percentCorrect","StudentResponseList","ref","scrolled","setScrolled","setShowSpinner","selectedInteractionRef","current","requestAnimationFrame","scrollIntoView","behavior","block","studentResults","interactions","questionsToMark","filter","InteractiveCorrectnessHelper","InteractionCorrectness","getInteractionsToMark","submitMarkedAnswers","map","interaction","idx","isSelected","toString","selectedInteractionId","markingRequired","some","q","anonymisedUserName","anonymiseUsers","key","InteractionLabel","iconClassName","reportsStyling","InteractionResponse","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showFeedback","responseComponentClass","InteractionResponseItem","ScoreThresholdDefaults","HIGH","MODERATE","ScoreThresholdInsights","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useAnonSessions","anonSessions","items","reduce","prev","next","anonSession","name","sessionName","hasCompleted","isFetching","useInsightsClassroomStudents","fetch","share","classroomId","type","recipients","find","r","recipientTypeId","recipientId","getRequest","cursor","result","EMPTY_INTERACTIVE_RESULTS","attempts","answeredAt","answers","useInsightsInteractiveResults","hideStaffResults","results","objectId","classroomStudents","studentHash","Set","students","s","userType","add","push","has","isPlaceholder","InsightsStudentResultsView","config","closePopup","popupTitle","studentName","dataLoaded","showLoadingSpinner","size","interactionId"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 7568-55e9b01367-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7568],{8233:(e,t,n)=>{n.d(t,{R:()=>p});var r=n(23481),i=n(110),o=n(33518),a=n(4594),s=n(49080),c=n(26361),l=n(35223),u=n(31908);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var g=r.T.encloseNamespace("sharev2.utils"),p={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,r=e.hasStudentExp,i=e.entity,s=e.yearGroups;if(t===a.E.Topic||t===a.E.Series)return{icon:l.vn.VisibleOn,text:g(r?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case o.e.Public:return{icon:l.vn.VisibleOn,text:g("publicDescription")};case o.e.ProtectedOverrideRestriction:return{icon:l.vn.VisibleOn,text:g("clickViewOnly")};case o.e.Protected:return{icon:l.vn.Lock,text:p.getRespectRatingText(i,s,r)};case o.e.JustMySchoolOverrideRestriction:return{icon:l.vn.Lock,text:g(r?"justMySchoolTeachers":"justMySchoolDescription")};case o.e.JustMySchool:return{icon:l.vn.Lock,text:p.getRespectRatingText(i,s,r)};case o.e.PinCode:return{icon:l.vn.Lock,text:g("pinDescription")};case o.e.PasswordProtected:return{icon:l.vn.Lock,text:g("password")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,r=e.status;if(!t&&!n)return p.getPrivateIconAndText(e);if(!t)return{icon:l.vn.Lock,text:g("password")};var o=i.O.isToday(t),a=i.O.diffBetween(t,new Date,"day");if(!n){var c=o?g("expiryToday"):g("expiry",{days:a});return r===s.F.Expired&&(c=g("expired")),{icon:l.vn.Timer,text:c}}var u=o?g("passwordExpiryToday"):g("passwordExpiry",{days:a});return r===s.F.Expired&&(u=g("passwordExpired")),{icon:l.vn.Lock,text:u}},getRespectRatingText:function(e,t,n){var r;if(!e||!t)return null;if(n)return g("justMySchoolTeachers");if(!u.M.isVideoType(e))return g("collectionRating");var i=c.l.getWeightedRestriction(null===(r=e._restrictions)||void 0===r?void 0:r.value);if(i&&!i.yearGroup)return g("onlyAdmins");var o,a,s,l=u.M.getRating(e),p=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(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)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}(t);try{for(p.s();!(s=p.n()).done;){var m=s.value;(!o||m.value>o.value)&&(o=m),i&&m.value<=i.yearGroup||l&&m.rating.value<l.value||(!a||m.value<a.value)&&(a=m)}}catch(e){p.e(e)}finally{p.f()}return a?1===t.length?g("clickViewOnly"):a.value===o.value?g("maxYearGroup",{yearGroup:o.name}):g("yearGroupRange",{yearGroup:a.name}):g("onlyStaff")},getShareLinkAccessType:function(e){return e.isTvContent||e.isClickViewContent?"protected":e.canManageAccess?"owner":"private"}}},77568:(e,t,n)=>{n.r(t),n.d(t,{OpenClassroomFlowView:()=>Z});var r=n(32735),i=n(89067),o=n(82664),a=n(23481),s=n(65858),c=n(9111),l=n(99998),u=n(83351),d=n(7786),g=n(8233),p=n(32781),m=n(91693),f=n(12528),v=n(83914),y=n(83345),b=n(35223),h="assign.openClassroomFlowInfoHeader";function S(e){return r.createElement(y.D.Provider,{value:h},r.createElement("div",{className:"p-3 bg-light-blue rounded rounded-2 gap-3 d-flex flex-row"},r.createElement("div",{className:"d-none d-md-block"},r.createElement("div",null,r.createElement(f.f,{svgName:b.vn.Classrooms,svgSize:v.S.Standard,variant:"blue",textVariant:"white",svgWrapperClassName:"p-1"}))),r.createElement("div",{className:"position-relative w-100"},r.createElement("h3",{className:"h6"},r.createElement(y.x,{phrase:"title"})),r.createElement("p",{className:"mb-0"},r.createElement(y.x,{phrase:"description"})),r.createElement("div",{className:"position-absolute top-0 end-0"},r.createElement(m.h,{svgName:b.vn.Close,onClick:e.onClose,className:"btn-close p-2"})))))}var T=a.T.encloseNamespace("assign.openClassroomFlowSettings");function R(e){var t=g.R.getRespectRatingText(e.entity,e.yearGroups,e.hasStudentExp);return r.createElement("div",{className:"d-flex flex-column gap-4"},e.showHeader&&r.createElement(S,{onClose:e.closeHeader}),r.createElement(p.m,null,r.createElement(p.m.Input,{title:T("openClassroomNameTitle"),className:"col-lg-6",value:e.openClassroomName,onChange:e.onChangeOpenClassroomName,placeholder:T("openClassroomNamePlaceholder"),error:e.error.name})),r.createElement(p.m.Divider,{hide:e.hidePreventScrubbing&&e.hideImmediateFeedback}),r.createElement(p.m,{name:T("videoSettingsTitle"),hide:e.hidePreventScrubbing&&e.hideImmediateFeedback},r.createElement(p.m.Toggle,{hide:e.hidePreventScrubbing,title:T("preventScrubbingTitle"),description:T("preventScrubbingDescription"),onClick:e.onTogglePreventScrubbing,toggled:e.preventScrubbing,disabled:e.disablePreventScrubbing}),r.createElement(p.m.Toggle,{hide:e.hideImmediateFeedback,title:T("immediateFeedbackTitle"),description:T("immediateFeedbackDescription"),onClick:e.onToggleImmediateFeedback,toggled:e.immediateFeedback,disabled:e.disableImmediateFeedback})),r.createElement(p.m.Divider,{hide:e.hideRequiresStudentSignIn&&e.hideRespectRatingsAndRestrictions}),r.createElement(p.m,{name:T("studentAccessTitle"),hide:e.hideRequiresStudentSignIn&&e.hideRespectRatingsAndRestrictions},r.createElement(p.m.Toggle,{hide:e.hideRequiresStudentSignIn,title:T("requiresStudentSignInTitle"),description:T("requiresStudentSignInDescription"),onClick:e.onToggleRequiresStudentSignIn,toggled:e.toggleRequiresStudentSignIn,disabled:e.disableRequiresStudentSignIn}),r.createElement(p.m.Toggle,{hide:e.hideRespectRatingsAndRestrictions,title:T("respectRatingsAndRestrictionsTitle"),description:t,onClick:e.onToggleRespectRatingsAndRestrictions,toggled:e.toggleRespectRatingsAndRestrictions,disabled:e.disableRespectRatingsAndRestrictions})),r.createElement(p.m.Divider,{hide:e.hideRequiresStudentSignIn&&e.hideRespectRatingsAndRestrictions||e.hideMessage}),r.createElement(p.m,{name:T("moreOptionsTitle"),hide:e.hideMessage,childContainerClassName:"d-flex flex-column gap-2"},r.createElement(p.m.Toggle,{hide:e.hideMessage,title:T("messageTitle"),description:T("messageDescription"),onClick:e.onToggleMessage,toggled:e.toggleMessage,disabled:e.disableMessage},r.createElement(p.m.TextArea,{hide:!e.toggleMessage,placeholder:T("messagePlaceholder"),onChange:e.onChangeMessage,value:e.message}))))}var w=n(57900),x=n(2948),I=n(20354),k=n(80687),E=n(1666),A=n(69883),C=n(95890);function j(e){return j="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},j(e)}function O(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof s?r:s,l=Object.create(c.prototype);return P(l,"_invoke",function(n,r,i){var o,s,c,l=0,u=i||[],d=!1,g={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return o=t,s=0,c=e,g.n=n,a}};function p(n,r){for(s=n,c=r,t=0;!d&&l&&!i&&t<u.length;t++){var i,o=u[t],p=g.p,m=o[2];n>3?(i=m===r)&&(c=o[(s=o[4])?5:(s=3,3)],o[4]=o[5]=e):o[0]<=p&&((i=n<2&&p<o[1])?(s=0,g.v=r,g.n=o[1]):p<m&&(i=n<3||o[0]>r||r>m)&&(o[4]=n,o[5]=r,g.n=m,s=0))}if(i||n>1)return a;throw d=!0,r}return function(i,u,m){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&p(u,m),s=u,c=m;(t=s<2?e:c)||!d;){o||(s?s<3?(s>1&&(g.n=-1),p(s,c)):g.n=c:g.v=c);try{if(l=2,o){if(s||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,s<2&&(s=0)}else 1===s&&(t=o.return)&&t.call(o),s<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),s=1);o=e}else if((t=(d=g.n<0)?c:n.call(r,g))!==a)break}catch(t){o=e,s=1,c=t}finally{l=1}}return{value:t,done:d}}}(n,i,o),!0),l}var a={};function s(){}function c(){}function l(){}t=Object.getPrototypeOf;var u=[][r]?t(t([][r]())):(P(t={},r,function(){return this}),t),d=l.prototype=s.prototype=Object.create(u);function g(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,P(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return c.prototype=l,P(d,"constructor",l),P(l,"constructor",c),c.displayName="GeneratorFunction",P(l,i,"GeneratorFunction"),P(d),P(d,i,"Generator"),P(d,r,function(){return this}),P(d,"toString",function(){return"[object Generator]"}),(O=function(){return{w:o,m:g}})()}function P(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}P=function(e,t,n,r){if(t)i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{var o=function(t,n){P(e,t,function(e){return this._invoke(t,n,e)})};o("next",0),o("throw",1),o("return",2)}},P(e,t,n,r)}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return N(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)?N(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 N(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var M=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})},D=a.T.encloseNamespace("assign.useOpenClassroomFlowData"),q={immediateFeedback:!1,preventScrubbing:!1,message:!1,requiresStudentSignIn:!1,respectRatingsAndRestrictions:!1},G=128,B="assign:open:classroom:flow:settings:header";function V(e){var t,n,i,o=(0,A.Z)(),a=F((0,x.D)(B,!0,{storage:w.Z1.LocalStorage}),2),s=a[0],c=a[1],l=(0,C._)({entityType:e.entityType,objectId:e.objectId}),u=I.a.useBasicFetch(E.h.yearGroups(null===(t=l.currentUser.data)||void 0===t?void 0:t.customerId)),d=(0,k.t)(e.objectId).createOpenSession,g=F(r.useState(Object.assign(Object.assign({},q),{preventScrubbing:(null===(n=l.interactive.data)||void 0===n?void 0:n.preventScrubbing)||!1,immediateFeedback:(null===(i=l.interactive.data)||void 0===i?void 0:i.immediateFeedback)||!1})),2),p=g[0],m=g[1],f=F(r.useState(""),2),v=f[0],y=f[1],b=F(r.useState(""),2),h=b[0],S=b[1],T=F(r.useState(!1),2),R=T[0],P=T[1],N=F(r.useState({}),2),V=N[0],L=N[1],_=0===Object.keys(V).length;return{data:{loaded:l.loaded&&!!u.data,entity:l.entity,yearGroups:u},showHeader:s,hasStudentExp:l.hasStudentExp,shouldShowSpinner:R,nextButtonText:D("nextButton"),name:v,message:h,settings:p,setMessage:S,setShowHeader:c,toggleSetting:function(e){!function(e,t){var n,r,i,o=(n={},i=t,(r=function(e){var t=function(e){if("object"!=j(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=j(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==j(t)?t:t+""}(r=e))in n?Object.defineProperty(n,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[r]=i,n);"respectRatingsAndRestrictions"===e&&(o.requiresStudentSignIn=t),m(function(e){return Object.assign(Object.assign({},e),o)})}(e,!p[e])},setOpenClassroomName:function(e){e.length>G?L(function(e){return Object.assign(Object.assign({},e),{name:D("errorNameTooLong")})}):L(function(e){return delete e.name,e}),y(e)},onShare:function(t){return M(this,void 0,void 0,O().m(function n(){var r;return O().w(function(n){for(;;)switch(n.n){case 0:if(_){n.n=1;break}return n.a(2);case 1:return P(!0),n.p=2,n.n=3,d({name:v,objectId:e.objectId,immediateFeedback:p.immediateFeedback,preventScrubbing:p.preventScrubbing,requireSignIn:p.requiresStudentSignIn,respectRatingsAndRestrictions:p.respectRatingsAndRestrictions});case 3:r=n.v,"function"==typeof t&&t(r),P(!1),n.n=5;break;case 4:n.p=4,n.v,o.error(D("createError"));case 5:return n.p=5,P(!1),n.f(5);case 6:return n.a(2)}},n,null,[[2,4,5,6]])}))},error:V,setError:L,isValid:_}}var L=a.T.encloseNamespace("assign.openClassroomFlowSettingsView");function _(e){var t=V({entityType:e.entityType,objectId:e.objectId}),n=(0,l.R)(),i=n.experience,o=n.loading,a=t.data,g=a.loaded,p=a.entity,m=a.yearGroups,f=(0,d.y)({data:{entity:{id:e.objectId,type:e.entityType}},analyticsOptions:{location:s.LZ.Popup}}).log,v=!g||o||e.loading;return r.createElement(c.G,{size:"lg",title:L("title"),showLoadingSpinner:v,closePopup:e.closePopup,bodyClassName:"d-flex flex-column gap-3",animation:e.animate},r.createElement(R,{entity:p.data,error:t.error,showHeader:t.showHeader,openClassroomName:t.name,onChangeOpenClassroomName:t.setOpenClassroomName,message:t.message,yearGroups:m.data,hasStudentExp:t.hasStudentExp,toggleMessage:t.settings.message,immediateFeedback:t.settings.immediateFeedback,preventScrubbing:t.settings.preventScrubbing,toggleRequiresStudentSignIn:t.settings.requiresStudentSignIn,toggleRespectRatingsAndRestrictions:t.settings.respectRatingsAndRestrictions,hideMessage:!0,onChangeMessage:t.setMessage,onToggleMessage:function(){return t.toggleSetting("message")},hidePreventScrubbing:"interactive"!==e.entityType,hideImmediateFeedback:"interactive"!==e.entityType,hideRequiresStudentSignIn:"full"!==i,hideRespectRatingsAndRestrictions:"full"!==i,onTogglePreventScrubbing:function(){return t.toggleSetting("preventScrubbing")},onToggleImmediateFeedback:function(){return t.toggleSetting("immediateFeedback")},onToggleRequiresStudentSignIn:function(){return t.toggleSetting("requiresStudentSignIn")},onToggleRespectRatingsAndRestrictions:function(){return t.toggleSetting("respectRatingsAndRestrictions")},closeHeader:function(){return t.setShowHeader(!1)},disableRequiresStudentSignIn:t.settings.respectRatingsAndRestrictions}),r.createElement(u.P,{hideCreateClassroomButton:!0,hideBackButton:e.hideBackButton,onClickBack:e.goToFlowSelector,onClickNext:function(){t.onShare(function(t){f({type:"create-open-classroom",share:t}),f({type:"share-open-classroom",id:t.objectId,shareId:t.shareId,shareType:t.type}),e.setShare(t),e.goToAssignDetails()})},nextButtonText:t.nextButtonText,showSpinner:t.shouldShowSpinner,disableNextButton:!t.isValid}))}function H(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return U(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)?U(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 U(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 Z(e){var t=H(r.useState("settings"),2),n=t[0],a=t[1],s=H(r.useState(),2),c=s[0],l=s[1],u={objectId:e.objectId,entityType:e.entityType,closePopup:e.closePopup,goToFlowSelector:e.goToFlowSelector,shareId:null==c?void 0:c.shareId,initialDetailsScreen:"share-link",goToAssignDetails:function(){return a("assign-details")},setShare:l};return r.createElement(i.r,{data:u,animate:!1,step:n,setStep:a,closePopup:e.closePopup,steps:{settings:{view:_},"assign-details":{view:o.AssignDetailsView}}})}}}]);
3
+ //# sourceMappingURL=7568-55e9b01367-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/7568-55e9b01367-lite.chunk.js","mappings":";kUAYA,IACMA,EAAY,qBADA,iBAsBLC,EAAkB,CAC7BC,sBAAuB,SAACC,GACtB,IAAQC,EAA6DD,EAA7DC,aAAcC,EAA+CF,EAA/CE,QAASC,EAAsCH,EAAtCG,cAAeC,EAAuBJ,EAAvBI,OAAQC,EAAeL,EAAfK,WAEtD,GAAIJ,IAAiB,WAAoBA,IAAiB,WACxD,MAAO,CAAEK,KAAM,eAAwBC,KAAMV,EAAUM,EAAgB,uBAAyB,4BAMlG,IAAIK,MAAMC,QAAQP,GAGlB,OAAQA,GACN,KAAK,WACH,MAAO,CAAEI,KAAM,eAAwBC,KAAMV,EAAU,sBACzD,KAAK,iCACH,MAAO,CAAES,KAAM,eAAwBC,KAAMV,EAAU,kBACzD,KAAK,cACH,MAAO,CACLS,KAAM,UACNC,KAAMT,EAAgBY,qBAAqBN,EAAQC,EAAYF,IAEnE,KAAK,oCACH,MAAO,CAAEG,KAAM,UAAmBC,KAAMV,EAAUM,EAAgB,uBAAyB,4BAC7F,KAAK,iBACH,MAAO,CACLG,KAAM,UACNC,KAAMT,EAAgBY,qBAAqBN,EAAQC,EAAYF,IAEnE,KAAK,YACH,MAAO,CAAEG,KAAM,UAAmBC,KAAMV,EAAU,mBACpD,KAAK,sBACH,MAAO,CAAES,KAAM,UAAmBC,KAAMV,EAAU,aACpD,QACE,MAAO,CAAC,EAEd,EAEAc,eAAgB,SAACX,GACf,IAAQY,EAAgDZ,EAAhDY,eAAgBC,EAAgCb,EAAhCa,oBAAqBC,EAAWd,EAAXc,OAC7C,IAAKF,IAAmBC,EACtB,OAAOf,EAAgBC,sBAAsBC,GAE/C,IAAKY,EACH,MAAO,CAAEN,KAAM,UAAmBC,KAAMV,EAAU,aAEpD,IAAMkB,EAAU,YAAmBH,GAC7BI,EAAgB,gBAAuBJ,EAAgB,IAAIK,KAAQ,OAEzE,IAAKJ,EAAqB,CACxB,IAAI,EAAOE,EACPlB,EAAU,eACVA,EAAU,SAAU,CAAEqB,KAAMF,IAKhC,OAHIF,IAAW,cACb,EAAOjB,EAAU,YAEZ,CAAES,KAAM,WAAoBC,KAAA,EACpC,CAED,IAAIA,EAAOQ,EACPlB,EAAU,uBACVA,EAAU,iBAAkB,CAAEqB,KAAMF,IAKxC,OAHIF,IAAW,cACbP,EAAOV,EAAU,oBAEZ,CAAES,KAAM,UAAmBC,KAAAA,EACpC,EAEAG,qBAAoB,SAACS,EAAmBd,EAAyBF,SAC/D,IAAKgB,IAAUd,EACb,OAAO,KAET,GAAIF,EACF,OAAON,EAAU,wBAEnB,IAAK,gBAAwBsB,GAC3B,OAAOtB,EAAU,oBAEnB,IAAMuB,EAAc,2BAA4D,QAAnB,EAAAD,EAAME,qBAAa,eAAEC,OAKlF,GAAIF,IAAgBA,EAAYG,UAC9B,OAAO1B,EAAU,cAEnB,IAEI2B,EACAC,EAE8B,EAL5BC,EAAS,cAAsBP,GAGF,g5BAEXd,GAAU,IAAlC,IAAK,EAAL,qBAAoC,KAAzBkB,EAAS,UAIbC,GAAgBD,EAAUD,MAAQE,EAAaF,SAClDE,EAAeD,GAKbH,GAAeG,EAAUD,OAASF,EAAYG,WAM9CG,GAAUH,EAAUG,OAAOJ,MAAQI,EAAOJ,SAMzCG,GAAuBF,EAAUD,MAAQG,EAAoBH,SAChEG,EAAsBF,EACzB,CAED,+BAGA,OAAKE,EAQqB,IAAtBpB,EAAWsB,OACN9B,EAAU,iBAMf4B,EAAoBH,QAAUE,EAAaF,MACtCzB,EAAU,eAAgB,CAAE0B,UAAWC,EAAaI,OAEtD/B,EAAU,iBAAkB,CAAE0B,UAAWE,EAAoBG,OAjB3D/B,EAAU,YAkBrB,EAEAgC,uBAAsB,SAAC3B,GAMrB,OAAIA,EAAQ4B,aAAe5B,EAAQ6B,mBAC1B,YAEL7B,EAAQ8B,gBACH,QAEF,SACT,iPCxLIC,EAAY,qCAMZ,SAAUC,EAA4BC,GAC1C,OACE,gBAAC,aAAiC,CAACb,MAAOW,GACxC,uBAAKG,UAAU,6DACb,uBAAKA,UAAU,qBACb,2BACE,gBAACC,EAAA,EAAU,CACTC,QAAS,gBACTC,QAASC,EAAAC,EAAA,SACTC,QAAQ,OACRC,YAAY,QACZC,oBAAoB,UAI1B,uBAAKR,UAAU,2BACb,sBAAIA,UAAU,MAAK,gBAACS,EAAA,EAAI,CAACC,OAAO,WAChC,qBAAGV,UAAU,QAAO,gBAACS,EAAA,EAAI,CAACC,OAAO,iBACjC,uBAAKV,UAAU,iCACb,gBAACW,EAAA,EAAU,CAACT,QAAS,WAAoBU,QAASb,EAAMc,QAASb,UAAU,qBAMvF,CC1BA,IACMvC,EAAYqD,EAAA,mBADA,oCAkDZ,SAAUC,EAA0BhB,GACxC,IAAMiB,EAAoBtD,EAAA,uBACxBqC,EAAM/B,OACN+B,EAAM9B,WACN8B,EAAMhC,eAGR,OACE,uBAAKiC,UAAU,4BACZD,EAAMkB,YACL,gBAACnB,EAA2B,CAACe,QAASd,EAAMmB,cAG9C,gBAACC,EAAA,EAAY,KACX,gBAACA,EAAA,QAAkB,CACjBC,MAAO3D,EAAU,0BACjBuC,UAAU,WACVd,MAAOa,EAAMsB,kBACbC,SAAUvB,EAAMwB,0BAChBC,YAAa/D,EAAU,gCACvBgE,MAAO1B,EAAM0B,MAAMjC,QAIvB,gBAAC2B,EAAA,UAAoB,CAACO,KAAM3B,EAAM4B,sBAAwB5B,EAAM6B,wBAEhE,gBAACT,EAAA,EAAY,CACX3B,KAAM/B,EAAU,sBAChBiE,KAAM3B,EAAM4B,sBAAwB5B,EAAM6B,uBAE1C,gBAACT,EAAA,SAAmB,CAClBO,KAAM3B,EAAM4B,qBACZP,MAAO3D,EAAU,yBACjBoE,YAAapE,EAAU,+BACvBmD,QAASb,EAAM+B,yBACfC,QAAShC,EAAMiC,iBACfC,SAAUlC,EAAMmC,0BAElB,gBAACf,EAAA,SAAmB,CAClBO,KAAM3B,EAAM6B,sBACZR,MAAO3D,EAAU,0BACjBoE,YAAapE,EAAU,gCACvBmD,QAASb,EAAMoC,0BACfJ,QAAShC,EAAMqC,kBACfH,SAAUlC,EAAMsC,4BAIpB,gBAAClB,EAAA,UAAoB,CAACO,KAAM3B,EAAMuC,2BAA6BvC,EAAMwC,oCAErE,gBAACpB,EAAA,EAAY,CACX3B,KAAM/B,EAAU,sBAChBiE,KAAM3B,EAAMuC,2BAA6BvC,EAAMwC,mCAE/C,gBAACpB,EAAA,SAAmB,CAClBO,KAAM3B,EAAMuC,0BACZlB,MAAO3D,EAAU,8BACjBoE,YAAapE,EAAU,oCACvBmD,QAASb,EAAMyC,8BACfT,QAAShC,EAAM0C,4BACfR,SAAUlC,EAAM2C,+BAElB,gBAACvB,EAAA,SAAmB,CAClBO,KAAM3B,EAAMwC,kCACZnB,MAAO3D,EAAU,sCACjBoE,YAAab,EACbJ,QAASb,EAAM4C,sCACfZ,QAAShC,EAAM6C,oCACfX,SAAUlC,EAAM8C,wCAIpB,gBAAC1B,EAAA,UAAoB,CAACO,KACnB3B,EAAMuC,2BAA6BvC,EAAMwC,mCACvCxC,EAAM+C,cAGX,gBAAC3B,EAAA,EAAY,CACX3B,KAAM/B,EAAU,oBAChBiE,KAAM3B,EAAM+C,YACZC,wBAAwB,4BAExB,gBAAC5B,EAAA,SAAmB,CAClBO,KAAM3B,EAAM+C,YACZ1B,MAAO3D,EAAU,gBACjBoE,YAAapE,EAAU,sBACvBmD,QAASb,EAAMiD,gBACfjB,QAAShC,EAAMkD,cACfhB,SAAUlC,EAAMmD,gBAEhB,gBAAC/B,EAAA,WAAqB,CACpBO,MAAO3B,EAAMkD,cACbzB,YAAa/D,EAAU,sBACvB6D,SAAUvB,EAAMoD,gBAChBjE,MAAOa,EAAMqD,YAOzB,0mHCnJM,EAAYtC,EAAA,mBADA,mCAcZuC,EAAgD,CACpDjB,mBAAmB,EACnBJ,kBAAkB,EAClBoB,SAAS,EACTE,uBAAuB,EACvBC,+BAA+B,GAG3BC,EAAiC,IAEjCC,EAAiB,6CAEjB,SAAUC,EAAiC9F,aACzC+F,GAAQ,SAMiG,KAAzE,OAAaF,GAAgB,EAAM,CAAEG,QAAS,oBAA2B,GAAvG3C,EAAU,KAAE4C,EAAa,KAE3BC,GAAa,EAAAC,EAAA,GAAoB,CACrCC,WAAYpG,EAAQoG,WACpBC,SAAUrG,EAAQqG,WAGdhG,EAAa,kBACjBiG,EAAA,aAAuD,QAA3B,EAAAJ,EAAWK,YAAYC,YAAI,eAAEC,aAGnDC,GAAsB,EAAAC,EAAA,GAAe3G,EAAQqG,UAA7CK,kBAMN,IAJgC,WAAc,+BAC3CjB,GAAe,CAClBrB,kBAA6C,QAA3B,EAAA8B,EAAWU,YAAYJ,YAAI,eAAEpC,oBAAoB,EACnEI,mBAA8C,QAA3B,EAAA0B,EAAWU,YAAYJ,YAAI,eAAEhC,qBAAqB,KACrE,GAJMqC,EAAQ,KAAEC,EAAW,KAKe,IAAlB,WAAe,IAAG,GAApClF,EAAI,KAAEmF,EAAO,KAC6B,IAAlB,WAAe,IAAG,GAA1CvB,EAAO,KAAEwB,EAAU,KAC0B,IAArB,YAAe,GAAM,GAA7CC,EAAO,KAAEC,EAAU,KACmD,IAAlD,WAA+C,CAAC,GAAE,GAAtErD,EAAK,KAAEsD,EAAQ,KAEjBC,EAAwC,IAA9BC,OAAOC,KAAKzD,GAAOlC,OAqEnC,MAAO,CACL6E,KAAM,CACJe,OALWrB,EAAWqB,UACnBlH,EAAWmG,KAKdpG,OAAQ8F,EAAW9F,OACnBC,WAAYA,GAEdgD,WAAAA,EACAlD,cAAe+F,EAAW/F,cAC1BqH,kBAAmBP,EACnBQ,eAAgB,EAAU,cAC1B7F,KAAAA,EACA4D,QAAAA,EACAqB,SAAAA,EACAG,WAAAA,EACAf,cAAAA,EACAyB,cArCF,SAAuBC,IA7CvB,SAAyBA,EAAoCrG,GAC3D,UAAMsG,KAAW,KACJtG,yRAAVqG,iGAOa,kCAAZA,IACFC,EAAmC,sBAAItG,GAGzCwF,EAAY,SAAAe,GAAI,OAAI,+BACfA,GACAD,EAAW,EAElB,CA6BEE,CAAgBH,GAAUd,EAASc,GACrC,EAoCEI,qBAlCF,SAA8BnG,GACxBA,EAAKD,OAASiE,EAChBuB,EAAS,SAAAU,GAAI,OAAI,+BACZA,GAAI,CACPjG,KAAM,EAAU,qBAAmB,GAGrCuF,EAAS,SAAAU,GAEP,cADOA,EAAKjG,KACLiG,CACT,GAEFd,EAAQnF,EACV,EAsBEoG,QAjEF,SAAuBC,8GAChBb,EAAS,CAAF,iCAMI,OAFhBF,GAAW,GAAM,YAEKR,EAAkB,CACpC9E,KAAAA,EACAyE,SAAUrG,EAAQqG,SAClB7B,kBAAmBqC,EAASrC,kBAC5BJ,iBAAkByC,EAASzC,iBAC3B8D,cAAerB,EAASnB,sBACxBC,8BAA+BkB,EAASlB,gCACxC,OAPIwC,EAAQ,EAAH,EASU,mBAAdF,GAA4BA,EAAUE,GAE7CjB,GAAW,GAAO,6BAElBnB,EAAMlC,MAAM,EAAU,gBAAgB,OAEpB,OAFoB,MAEtCqD,GAAW,GAAO,oDAErB,EA0CCrD,MAAAA,EACAsD,SAAAA,EACAC,QAAAA,EAEJ,CChJA,IACM,EAAYlE,EAAA,mBADA,wCAaZ,SAAUkF,EAA8BjG,GAC5C,IAAMkG,EAAYvC,EAAiC,CACjDM,WAAYjE,EAAMiE,WAClBC,SAAUlE,EAAMkE,WAGlB,GAAqD,EAAAiC,EAAA,KAA7CC,EAAU,EAAVA,WAAqBC,EAAmB,EAA5BvB,QAEpB,EAIIoB,EAAU7B,KAHZe,EAAM,EAANA,OACAnH,EAAM,EAANA,OACAC,EAAU,EAAVA,WAGMoI,GAAQ,EAAAC,EAAA,GAAqB,CACnClC,KAAM,CACJpG,OAAQ,CACNuI,GAAIxG,EAAMkE,SACVuC,KAAMzG,EAAMiE,aAGhByC,iBAAkB,CAChBC,SAAU,cARNL,IAgCFxB,GAAWM,GAAUiB,GAAuBrG,EAAM8E,QAExD,OACE,gBAAC8B,EAAA,EAAK,CACJC,KAAK,KACLxF,MAAO,EAAU,SACjByF,mBAAoBhC,EACpBiC,WAAY/G,EAAM+G,WAClBC,cAAc,2BACdC,UAAWjH,EAAMkH,SAEjB,gBAAClG,EAAyB,CACxB/C,OAAQA,EAAOoG,KACf3C,MAAOwE,EAAUxE,MACjBR,WAAYgF,EAAUhF,WACtBI,kBAAmB4E,EAAUzG,KAC7B+B,0BAA2B0E,EAAUN,qBACrCvC,QAAS6C,EAAU7C,QACnBnF,WAAYA,EAAWmG,KACvBrG,cAAekI,EAAUlI,cACzBkF,cAAegD,EAAUxB,SAASrB,QAClChB,kBAAmB6D,EAAUxB,SAASrC,kBACtCJ,iBAAkBiE,EAAUxB,SAASzC,iBACrCS,4BAA6BwD,EAAUxB,SAASnB,sBAChDV,oCAAqCqD,EAAUxB,SAASlB,8BACxDT,aAAa,EACbK,gBAAiB8C,EAAUrB,WAC3B5B,gBAAiB,WAAF,OAAQiD,EAAUX,cAAc,UAAU,EACzD3D,qBAA2C,gBAArB5B,EAAMiE,WAC5BpC,sBAA4C,gBAArB7B,EAAMiE,WAC7B1B,0BAA0C,SAAf6D,EAC3B5D,kCAAkD,SAAf4D,EACnCrE,yBAA0B,WAAF,OAAQmE,EAAUX,cAAc,mBAAmB,EAC3EnD,0BAA2B,WAAF,OAAQ8D,EAAUX,cAAc,oBAAoB,EAC7E9C,8BAA+B,WAAF,OAAQyD,EAAUX,cAAc,wBAAwB,EACrF3C,sCAAuC,WAAF,OAAQsD,EAAUX,cAAc,gCAAgC,EACrGpE,YAAa,WAAF,OAAQ+E,EAAUpC,eAAc,EAAM,EACjDnB,6BAA8BuD,EAAUxB,SAASlB,gCAEnD,gBAAC2D,EAAA,EAAY,CACXC,2BAAyB,EACzBC,eAAgBrH,EAAMqH,eACtBC,YAAatH,EAAMuH,iBACnBC,YA/DN,WACEtB,EAAUL,QAAQ,SAAAG,GAEhBM,EAAI,CACFG,KAAM,wBACNT,MAAAA,IAGFM,EAAI,CACFG,KAAM,uBACND,GAAIR,EAAM9B,SACVuD,QAASzB,EAAMyB,QACfC,UAAW1B,EAAMS,OAGnBzG,EAAM2H,SAAS3B,GACfhG,EAAM4H,mBACR,EACF,EA8CMtC,eAAgBY,EAAUZ,eAC1BuC,YAAa3B,EAAUb,kBACvByC,mBAAoB5B,EAAUjB,UAItC,igCC3GM,SAAU8C,EAAsB/H,GACpC,IAAoF,IAAlD,WAAuC,YAAW,GAA5EgI,EAAQ,KAAEC,EAAW,KACsB,IAAvB,aAAuB,GAA3CjC,EAAK,KAAE2B,EAAQ,KAEjBtD,EAAsC,CAC1CH,SAAUlE,EAAMkE,SAChBD,WAAYjE,EAAMiE,WAClB8C,WAAY/G,EAAM+G,WAClBQ,iBAAkBvH,EAAMuH,iBAExBE,QAASzB,aAAK,EAALA,EAAOyB,QAChBS,qBAAsB,aACtBN,kBAAmB,WAAF,OAAQK,EAAY,iBAAiB,EACtDN,SAAAA,GAGF,OACE,gBAACQ,EAAA,EAAc,CACb9D,KAAMA,EACN6C,SAAS,EACTkB,KAAMJ,EACNK,QAASJ,EACTlB,WAAY/G,EAAM+G,WAClBuB,MAAO,CACL,SAAY,CAAEC,KAAMtC,GACpB,iBAAkB,CAAEsC,KAAMC,EAAAA,qBAIlC","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,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7617],{33518:(e,t,a)=>{var n;a.d(t,{e:()=>n}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(n||(n={}))},54405:(e,t,a)=>{a.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},99746:(e,t,a)=>{a.d(t,{p:()=>p});var n=a(32735),r=a(57900),i=a(97395),s=a(2948),c=a(91693),o=a(83345),l=a(4594),d=a(35223),m=a(86702);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var h="lite.insightsAdminAlert";function p(e){var t,a,p=(t=(0,s.D)(m.y.INSIGHTS_ADMIN_ALERT,!0,{storage:r.Z1.LocalStorage}),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,s,c=[],o=!0,l=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){l=!0,r=e}finally{try{if(!o&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(l)throw r}}return c}}(t,a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=p[0],v=p[1];return e.hasAnalytics&&g?n.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},n.createElement("div",null,n.createElement(o.x,{namespace:h,phrase:"adminAlert"}),n.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var t="";return e.video.typeId===l.E.Interactive&&(t="/interactives/".concat(e.video.id,"/views")),e.video.typeId===l.E.Video&&(t="/videos/".concat(e.video.id,"/views")),e.video.typeId===l.E.Clip&&(t="/clips/".concat(e.video.id,"/views")),i._.safeUrlConcat(e.analyticsUrl,t)}(),target:"_blank"},n.createElement(o.x,{namespace:h,phrase:"analytics"})),"."),n.createElement(c.h,{svgName:d.vn.Close,className:"text-blue",onClick:function(){v(!1)}})):n.createElement(n.Fragment,null)}},22767:(e,t,a)=>{a.d(t,{l:()=>m});var n=a(32735),r=a(23481),i=a(2510),s=a(55219),c=a(18006),o=a(9566);const l={background:"HAuP3"};var d=r.T.encloseNamespace("myShares.demoInsights");function m(e){var t,a=e.breakpoints.xs||e.breakpoints.sm,r=e.shareType===i.y.Open?o.po:o.vJ,m=e.shareType===i.y.Open?o.$Z:o.GJ,u=Object.assign(Object.assign({},m),{sharedObject:Object.assign(Object.assign({},e.demoInteractive),{id:c.A})});return n.createElement("div",{className:e.className},n.createElement(s.g,{heading:null!==(t=e.heading)&&void 0!==t?t:d("demoHeading"),isFirst:!0}),n.createElement("div",{className:"".concat(l.background," rounded-3 mb-4")},n.createElement(s.F,{shareData:u,getObjectActions:function(){return[Object.assign(Object.assign({},o.VE),{button:!a,appLink:r})]},imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups,breakpoints:e.breakpoints,className:"bg-light-orange",appLink:function(){return r}})))}},18006:(e,t,a)=>{a.d(t,{A:()=>n});var n="GRWx6w"},9566:(e,t,a)=>{a.d(t,{$Z:()=>g,G6:()=>u,GJ:()=>p,VE:()=>b,_w:()=>h,po:()=>y,vJ:()=>v});var n=a(23481),r=a(110),i=a(33518),s=a(2510),c=a(4594),o=a(35223),l=a(14070),d=a(97291),m=n.T.encloseNamespace("myShares.demoInsights"),u={type:s.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:c.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}},h=Object.assign(Object.assign({},u),{type:s.y.Open,expireDate:r.O.add(new Date(u.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),p={share:u,sharedObject:null,shareRecipients:null,dateShared:r.O.subtract(new Date,7,"days").toISOString()},g=Object.assign(Object.assign({},p),{share:h}),v={application:d.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},y={application:d.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},b={svgName:o.vn.Analytics,label:m("demoInsights"),appLink:v,group:"insights",className:"btn btn-outline-dark"}},49243:(e,t,a)=>{a.r(t),a.d(t,{MySharesView:()=>G});var n=a(32735),r=a(81886),i=a(23481),s=a(20354),c=a(2510),o=a(15611),l=a(87801),d=a(83345),m=a(16714),u=a(39151),h=a(1666),p=a(54405),g=a(31949),v=a(25882),y=a(79967),b=a(22902),E=a(79612),S=a(37802),f=a(14070),O=a(97291),k=a(46390),I=a(99998),w=a(98623),C=a(99746),P=a(22767),N=a(67467),j=a(5056),A=a(28001),x=a(65858),M=a(97958),L=a(99742),U="myShares.mySharesEmptyState",R=i.T.encloseNamespace(U);function _(){return n.createElement(M.u,null,n.createElement(M.u.Image,{src:L.W.EmptyStates.MY_VIDEOS_PUBLIC,altText:R("heading")}),n.createElement(M.u.Heading,null,n.createElement(d.x,{namespace:U,phrase:"heading"})),n.createElement(M.u.Info,null,n.createElement(d.x,{namespace:U,phrase:"info"})),n.createElement(M.u.Cta,{text:i.T.getPhrase(U,"cta"),appLink:{application:O.O.SIGN_UP,action:f.e.SignUp.SIGN_UP},analyticsData:{},analyticsOptions:{actionType:x.Vw.Click,location:x.LZ.MySharesLanding,entity:x.py.AppLink,workflowPhase:x.eu.Start,descriptor:x.Yu.SignUp}}))}var D=a(69003),T=a(12909),V="myShares.myShares",F=i.T.encloseNamespace(V);function G(e){var t,a,i;(0,E.M)({title:F("myShares")});var x=(0,b.T)(),M=x.hasPermissions,L=x.hasLocalPermissions,U=x.getGatedPermission,R=(0,S.r)(null),G=R.hasShareFlowV2,H=R.hasClassrooms,J=(0,k.G)().isPlugin,z=(0,y.k)(),B=(0,v.vb)().accessPolicy,W=(0,I.R)().experience,Y=(0,D.cl)(e.typeId),Z=!L(m.E.ViewMySharesLanding)||M(m.C.ViewMyShares)&&G,$=G&&M(m.C.ViewInsights),X=(null===(t=null==B?void 0:B.metadata)||void 0===t?void 0:t.hasDemoInsights)||"minimal"===W,Q=s.a.useBasicFetch(u.L.config()),q=s.a.useBasicFetch(g.N.currentUser()),K=s.a.useBasicFetch((null===(a=q.data)||void 0===a?void 0:a.isAuthenticated)&&h.h.yearGroups(q.data.customerId)),ee=s.a.useBasicFetch(X&&p.X.interactiveMetadata()),te=(0,w.a)({interactiveInsights:!0,shouldFetch:Z,params:{type:[c.y.Link,c.y.LegacyDirect]}});return n.useEffect(function(){M(m.C.ViewMyShares)&&G||r.Q.Ab.PageLoad("/")},[Z]),Z?n.createElement("div",{className:"px-3"},"soft-gate"===U(m.C.ViewMyShares)&&n.createElement(T.H,null),n.createElement(C.p,{analyticsUrl:null===(i=Q.data)||void 0===i?void 0:i.analyticsWebUrl,hasAnalytics:M(m.C.ViewCustomerAnalytics)}),n.createElement("div",{className:"border-bottom pb-2 mb-4"},n.createElement("h1",{className:"mb-2"},n.createElement(d.x,{namespace:V,phrase:"myShares"})),H&&n.createElement("p",{className:"mb-0"},n.createElement(d.x,{namespace:V,phrase:"classroomsHint"})," ",n.createElement(o.F,{appLink:{application:O.O.CLASSROOMS,action:f.e.Classrooms.HOME},className:"info-link"},n.createElement(d.x,{namespace:V,phrase:"classroomsCta"})))),X&&ee.data&&n.createElement(P.l,{demoInteractive:ee.data,breakpoints:z,imageCdnUrl:te.imageCdnUrl,yearGroups:K.data,shareType:c.y.Link}),function(){var e;return te.showPartialLoading?n.createElement(A.L,null):te.sentShares.length?n.createElement(n.Fragment,null,n.createElement(j.R,{sentShares:te.sentShares,sharedObjects:te.sharedObjects.items,shareRecipients:te.shareRecipients.items,interactivesPendingReview:te.interactivesPendingReview.itemsArr,getObjectActions:function(e){return(0,D.sD)({share:e.share,sharedObject:e.sharedObject,audienceParams:Y.audienceAppLinkParams,hasInsights:$,isPlugin:J,breakpoints:z})},groupByDateShared:!0,breakpoints:z,hasDemoInsights:X,imageCdnUrl:null===(e=Q.data)||void 0===e?void 0:e.imageCdnUrl,yearGroups:K.data}),(te.hasMore||te.isFetching)&&n.createElement(l._,{isFetching:te.isFetching,fetchNext:te.fetchNext,nextCursor:te.nextCursor})):n.createElement(N.o,null)}()):n.createElement(_,null)}},12909:(e,t,a)=>{a.d(t,{H:()=>m});var n=a(32735),r=a(15611),i=a(83914),s=a(83345),c=a(35223),o=a(14070),l=a(97291),d="signUp.softGateBanner";function m(){return n.createElement("div",{role:"alert",className:"bg-light-indigo text-indigo rounded p-2 mb-4 d-flex align-items-center"},n.createElement(i.x,{svgName:c.vn.StarOutline,size:i.S.Large}),n.createElement(s.x,{namespace:d,phrase:"softGate"})," ",n.createElement(r.F,{appLink:{application:l.O.SIGN_UP,action:o.e.SignUp.PREMIUM_FEATURES},className:"indigo-link text-indigo text-underline d-inline"},n.createElement(s.x,{namespace:d,phrase:"learnMore"})))}}}]);
2
- //# sourceMappingURL=7617-9d34c841e6-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7617],{33518:(e,t,a)=>{var n;a.d(t,{e:()=>n}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(n||(n={}))},54405:(e,t,a)=>{a.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},99746:(e,t,a)=>{a.d(t,{p:()=>p});var n=a(32735),r=a(57900),i=a(97395),s=a(2948),c=a(91693),o=a(83345),l=a(4594),d=a(35223),m=a(86702);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var h="lite.insightsAdminAlert";function p(e){var t,a,p=(t=(0,s.D)(m.y.INSIGHTS_ADMIN_ALERT,!0,{storage:r.Z1.LocalStorage}),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,s,c=[],o=!0,l=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){l=!0,r=e}finally{try{if(!o&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(l)throw r}}return c}}(t,a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=p[0],v=p[1];return e.hasAnalytics&&g?n.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},n.createElement("div",null,n.createElement(o.x,{namespace:h,phrase:"adminAlert"}),n.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var t="";return e.video.typeId===l.E.Interactive&&(t="/interactives/".concat(e.video.id,"/views")),e.video.typeId===l.E.Video&&(t="/videos/".concat(e.video.id,"/views")),e.video.typeId===l.E.Clip&&(t="/clips/".concat(e.video.id,"/views")),i._.safeUrlConcat(e.analyticsUrl,t)}(),target:"_blank"},n.createElement(o.x,{namespace:h,phrase:"analytics"})),"."),n.createElement(c.h,{svgName:d.vn.Close,className:"text-blue",onClick:function(){v(!1)}})):n.createElement(n.Fragment,null)}},22767:(e,t,a)=>{a.d(t,{l:()=>m});var n=a(32735),r=a(23481),i=a(2510),s=a(55219),c=a(18006),o=a(9566);const l={background:"HAuP3"};var d=r.T.encloseNamespace("myShares.demoInsights");function m(e){var t,a=e.breakpoints.xs||e.breakpoints.sm,r=e.shareType===i.y.Open?o.po:o.vJ,m=e.shareType===i.y.Open?o.$Z:o.GJ,u=Object.assign(Object.assign({},m),{sharedObject:Object.assign(Object.assign({},e.demoInteractive),{id:c.A})});return n.createElement("div",{className:e.className},n.createElement(s.g,{heading:null!==(t=e.heading)&&void 0!==t?t:d("demoHeading"),isFirst:!0}),n.createElement("div",{className:"".concat(l.background," rounded-3 mb-4")},n.createElement(s.F,{shareData:u,getObjectActions:function(){return[Object.assign(Object.assign({},o.VE),{button:!a,appLink:r})]},imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups,breakpoints:e.breakpoints,className:"bg-light-orange",appLink:function(){return r}})))}},18006:(e,t,a)=>{a.d(t,{A:()=>n});var n="GRWx6w"},9566:(e,t,a)=>{a.d(t,{$Z:()=>g,G6:()=>u,GJ:()=>p,VE:()=>b,_w:()=>h,po:()=>y,vJ:()=>v});var n=a(23481),r=a(110),i=a(33518),s=a(2510),c=a(4594),o=a(35223),l=a(14070),d=a(97291),m=n.T.encloseNamespace("myShares.demoInsights"),u={type:s.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:c.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}},h=Object.assign(Object.assign({},u),{type:s.y.Open,expireDate:r.O.add(new Date(u.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),p={share:u,sharedObject:null,shareRecipients:null,dateShared:r.O.subtract(new Date,7,"days").toISOString()},g=Object.assign(Object.assign({},p),{share:h}),v={application:d.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},y={application:d.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},b={svgName:o.vn.Analytics,label:m("demoInsights"),appLink:v,group:"insights",className:"btn btn-outline-dark"}},49243:(e,t,a)=>{a.r(t),a.d(t,{MySharesView:()=>F});var n=a(32735),r=a(81886),i=a(23481),s=a(20354),c=a(2510),o=a(15611),l=a(87801),d=a(83345),m=a(16714),u=a(39151),h=a(1666),p=a(54405),g=a(31949),v=a(25882),y=a(79967),b=a(22902),E=a(79612),S=a(37802),f=a(14070),O=a(97291),k=a(46390),I=a(99998),w=a(98623),C=a(99746),j=a(22767),A=a(67467),P=a(5056),N=a(28001),M=a(65858),L=a(97958),x=a(99742),R="myShares.mySharesEmptyState",_=i.T.encloseNamespace(R);function D(){return n.createElement(L.u,null,n.createElement(L.u.Image,{src:x.W.EmptyStates.MY_VIDEOS_PUBLIC,altText:_("heading")}),n.createElement(L.u.Heading,null,n.createElement(d.x,{namespace:R,phrase:"heading"})),n.createElement(L.u.Info,null,n.createElement(d.x,{namespace:R,phrase:"info"})),n.createElement(L.u.Cta,{text:i.T.getPhrase(R,"cta"),appLink:{application:O.O.SIGN_UP,action:f.e.SignUp.SIGN_UP},analyticsData:{},analyticsOptions:{actionType:M.Vw.Click,location:M.LZ.MySharesLanding,entity:M.py.AppLink,workflowPhase:M.eu.Start,descriptor:M.Yu.SignUp}}))}var U=a(69003),T="myShares.myShares",V=i.T.encloseNamespace(T);function F(e){var t,a,i;(0,E.M)({title:V("myShares")});var M=(0,b.T)(),L=M.hasPermissions,x=M.hasLocalPermissions,R=(0,S.r)(null),_=R.hasShareFlowV2,F=R.hasClassrooms,G=(0,k.G)().isPlugin,H=(0,y.k)(),J=(0,v.v)().accessPolicy,z=(0,I.R)().experience,B=(0,U.cl)(e.typeId),W=!x(m.E.ViewMySharesLanding)||L(m.C.ViewMyShares)&&_,Y=_&&L(m.C.ViewInsights),Z=(null===(t=null==J?void 0:J.metadata)||void 0===t?void 0:t.hasDemoInsights)||"minimal"===z,$=s.a.useBasicFetch(u.L.config()),X=s.a.useBasicFetch(g.N.currentUser()),Q=s.a.useBasicFetch((null===(a=X.data)||void 0===a?void 0:a.isAuthenticated)&&h.h.yearGroups(X.data.customerId)),q=s.a.useBasicFetch(Z&&p.X.interactiveMetadata()),K=(0,w.a)({interactiveInsights:!0,shouldFetch:W,params:{type:[c.y.Link,c.y.LegacyDirect]}});return n.useEffect(function(){L(m.C.ViewMyShares)&&_||r.Q.Ab.PageLoad("/")},[W]),W?n.createElement("div",{className:"px-3"},n.createElement(C.p,{analyticsUrl:null===(i=$.data)||void 0===i?void 0:i.analyticsWebUrl,hasAnalytics:L(m.C.ViewCustomerAnalytics)}),n.createElement("div",{className:"border-bottom pb-2 mb-4"},n.createElement("h1",{className:"mb-2"},n.createElement(d.x,{namespace:T,phrase:"myShares"})),F&&n.createElement("p",{className:"mb-0"},n.createElement(d.x,{namespace:T,phrase:"classroomsHint"})," ",n.createElement(o.F,{appLink:{application:O.O.CLASSROOMS,action:f.e.Classrooms.HOME},className:"info-link"},n.createElement(d.x,{namespace:T,phrase:"classroomsCta"})))),Z&&q.data&&n.createElement(j.l,{demoInteractive:q.data,breakpoints:H,imageCdnUrl:K.imageCdnUrl,yearGroups:Q.data,shareType:c.y.Link}),function(){var e;return K.showPartialLoading?n.createElement(N.L,null):K.sentShares.length?n.createElement(n.Fragment,null,n.createElement(P.R,{sentShares:K.sentShares,sharedObjects:K.sharedObjects.items,shareRecipients:K.shareRecipients.items,interactivesPendingReview:K.interactivesPendingReview.itemsArr,getObjectActions:function(e){return(0,U.sD)({share:e.share,sharedObject:e.sharedObject,audienceParams:B.audienceAppLinkParams,hasInsights:Y,isPlugin:G,breakpoints:H})},groupByDateShared:!0,breakpoints:H,hasDemoInsights:Z,imageCdnUrl:null===(e=$.data)||void 0===e?void 0:e.imageCdnUrl,yearGroups:Q.data}),(K.hasMore||K.isFetching)&&n.createElement(l._,{isFetching:K.isFetching,fetchNext:K.fetchNext,nextCursor:K.nextCursor})):n.createElement(A.o,null)}()):n.createElement(D,null)}}}]);
2
+ //# sourceMappingURL=7617-211f084b70-lite.chunk.js.map