@clickview/lite 0.82.1 → 0.82.2-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 (142) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
  7. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
  9. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
  10. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
  11. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  12. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  13. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  14. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  15. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  16. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  17. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  18. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  19. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  21. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  22. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  23. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  24. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  25. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  27. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  28. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  29. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  31. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  32. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  33. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  35. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  37. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  39. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  40. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  41. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  43. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  44. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  45. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  47. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7401-98135f09e8-lite.chunk.js +2 -0
  49. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  51. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  53. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  54. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  55. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  56. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  57. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  58. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +2 -0
  59. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  61. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  63. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  64. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  65. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  67. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  69. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  71. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  72. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  73. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  74. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  75. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  76. package/dist/scripts/bundle-9a3e49399a.min.js +3 -0
  77. package/dist/scripts/{bundle-1187cb1e9f.min.js.map → bundle-9a3e49399a.min.js.map} +1 -1
  78. package/package.json +1 -1
  79. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  80. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  83. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  84. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  85. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  86. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  87. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  88. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  89. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  91. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  94. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  96. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  97. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  98. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  99. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  100. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  101. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  102. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  103. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  104. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  105. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  106. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  108. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  109. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  111. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  112. package/dist/scripts/8077-dfd239131d-lite.chunk.js +0 -2
  113. package/dist/scripts/8077-dfd239131d-lite.chunk.js.map +0 -1
  114. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  115. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  117. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  119. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  120. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  121. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  122. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  123. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  124. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  125. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  126. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  127. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  128. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  129. package/dist/scripts/bundle-1187cb1e9f.min.js +0 -3
  130. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  131. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  132. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  133. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  134. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  135. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  136. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  137. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  138. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  139. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  140. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{bundle-1187cb1e9f.min.js.LICENSE.txt → bundle-9a3e49399a.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/289-669c0c8222-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/questions/InteractiveInsightsQuestionsDemoView.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n showIndicator?: boolean;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const { title, showLabel, tooltipClassName, showIndicator = true } = props;\n\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n {!!showIndicator &&\n <PercentageIndicator />\n }\n </div>\n );\n\n if (!title)\n return <Indicator />;\n\n return (\n <Tooltip title={title} spanHack spanHackClassName={tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n\n emptyState?: JSX.Element;\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows() {\n if (!rows.length && props.emptyState)\n return props.emptyState;\n \n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.interactiveInsightsQuestionsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsQuestionsViewProps {\n interactionId: string;\n sortBy: SortStudentsBy;\n type?: ShareType;\n}\n\nexport function InteractiveInsightsQuestionsDemoView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'questions', params, props.type)}\n video={interactiveMetadata.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: interactiveMetadata.data?.id\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InteractiveInsightsQuestions\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactionId={props.interactionId}\n config={config.data}\n sortBy={props.sortBy}\n isFetching={results.isFetching || interactive.isFetching}\n anonymiseUsers={anonymiseUsers}\n results={results.data}\n hasDataLoaded={hasDataLoaded}\n isDemo\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","title","tooltipClassName","showIndicator","Indicator","spanHack","spanHackClassName","getSortStudents","sortBy","id","desc","shouldFilterStudent","filter","summary","awaitingMarking","percentCorrect","unanswered","PercentageIndicatorLayout","ProgressCircle","ref","circle","radius","r","baseVal","value","circumference","Math","PI","offset","percentage","style","strokeDasharray","strokeDashoffset","toString","size","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","DragOverlayStyles","opacity","cursor","calculateScrollState","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","getRowId","useTable","plugins","useSortBy","useRowSelect","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","length","emptyState","map","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","InsightsDemoRequests","interactive","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","group","InteractiveInsightsQuestionsDemoView","anonymiseUsers","config","audienceAppLinkParams","dateRangeAppLinkParams","results","video","name","hasDataLoaded","params","tabs","yearGroups","markingRequired","isDemo","hasData","interactionId","isFetching"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9911],{67814:(e,a,n)=>{n.d(a,{p:()=>T,v:()=>y});var t=n(32735),o=n(110),i=n(50690),l=n(22406),r=n(78408),c=n(83657),s=n(23481),d=n(15611),m=n(83914),u=n(35223),p="shared.backButton";function v(e){var a=Object.assign({textShadow:!0},e),n=a.backToName,o=a.appLink,i=a.color,l=a.extraClasses,r=a.textShadow,c=n?s.T.getPhrase(p,"backTo",{backToName:n}):s.T.getPhrase(p,"back"),v="black"===i?"":"text-white",g=r?"text-shadow":"";return t.createElement(d.F,{appLink:o,className:"d-inline-flex align-items-center h5 mb-0 ".concat(l," ").concat(v," ").concat(g)},t.createElement(m.x,{svgName:u.vn.ChevronLeft,size:m.S.Medium}),t.createElement("span",{className:"ms-1"},c))}v.defaultProps={color:"black",extraClasses:""};var g=n(4527),h=n(83345),b=n(7733),f=n(10587),C=n(94232),E=n(54610),k=n(79967),x=n(9085),L=n(67453);const N={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var w="".concat(f.y[E.__.Banners].width,":").concat(f.y[E.__.Banners].height);function D(e){return e.length<160?"h1":N.headingLarge}var T=t.memo(function(e){var a,n,s,d,m=e.heading,u=e.banner,p=e.imageCdnUrl,f=e.actions,T=e.sortComponent,y=e.blockColourClass,M=e.specialEvent,B=t.useContext(C.n),O=(0,k.k)().xxl?1920:1200,P=t.useMemo(function(){if(!M||e.showComingSoon)return!1;var a=o.O.format(new Date,"YYYY-MM-DD");return M.endDate?M.startDate<=a&&M.endDate>=a:M.startDate===a},[M]),I=e.imageOptions||{width:O,ratio:w,resizeType:E.Nq.Cover},S=!!u&&!!p&&L.j.createBannerUrl(u,{fallbackBaseUrl:p,fallbackCategoryName:m,type:E.__.Banners},I),_={className:"banner banner-header ".concat(e.bannerClassName),style:S?{backgroundImage:"url('".concat(S,"')")}:{}};!u&&y&&(delete _.style,_.className+=" ".concat(y));var j=e.detailsComponent,A=(0,x.x)(e.heading,b.o);return i.b.renderInPortalIfExists(t.createElement("header",Object.assign({},_),t.createElement("div",{className:"container ".concat(N.container," position-relative inner-banner")},e.backButtonAppLink&&t.createElement("div",{className:"pt-3"},t.createElement(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),t.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(N.bannerContent," px-2 ").concat((null===(a=e.logo)||void 0===a?void 0:a.url)?N.bannerContentWithLogo:""))},!!M&&t.createElement("div",{className:"position-relative ".concat(N.specialEventContainer)},t.createElement(r.s,{body:{type:M.endDate?"range":"day",text:M.endDate?"".concat(o.O.format(M.startDate,"DD"),"-").concat(o.O.format(M.endDate,"DD")):o.O.format(M.startDate,"DD")},month:function(e){return e.endDate?o.O.isSame(e.startDate,e.endDate,"month")?o.O.format(e.startDate,"MMMM"):"".concat(o.O.format(e.startDate,"MMM")," - ").concat(o.O.format(e.endDate,"MMM")):o.O.format(e.startDate,"MMMM")}(M),theme:e.calendarTheme})),t.createElement("div",null,P&&t.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},t.createElement(h.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&t.createElement(l.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),t.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&t.createElement("div",{className:"".concat(N.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(A)},t.createElement(g.w,{src:L.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:E.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),t.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(N.heading," ").concat(D(m)," ").concat(e.alignLogoLeft?"w-50":"")},m,j&&t.createElement(j,null)))),!!f&&t.createElement("div",{className:N.actionsContainer},t.createElement(c.e,{actions:f,sortComponent:T,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(d=e.logo)||void 0===d?void 0:d.url)&&t.createElement("div",{className:N.logoContainer},t.createElement("img",{src:L.j.createUrl(e.logo.url,{size:E.h2.Medium}),className:"rounded-circle"})))),null==B?void 0:B.container)},function(e,a){var n,t;return e.actions===a.actions&&e.heading===a.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(t=a.logo)||void 0===t?void 0:t.url)});function y(){var e=t.useContext(C.n);return i.b.renderInPortalIfExists(t.createElement("div",{className:"partial-banner partial-loading-background ".concat(N.banner)}),null==e?void 0:e.container)}},89111:(e,a,n)=>{n.r(a),n.d(a,{PresentationTopicsView:()=>U});var t=n(32735),o=n(23481),i=n(20354),l=n(65858),r=n(15611),c=n(67814),s=n(49935),d=n(91693),m=n(83345),u=n(47770),p=n(30662),v=n(65163),g=n(9513),h=n(54610),b=n(12754),f=n(78479),C=n(42308),E=n(21750),k=n(39151),x=n(79967),L=n(15311),N=n(79612),w=n(37802),D=n(35223),T=n(87114),y=n(14070),M=n(97291),B=n(86698),O=n(33192),P=n(23923),I=(n(28400),n(34181)),S=function(e){return function(a){return(null==a?void 0:a.id)?I.L.getAppLink(a,e||{}):null}};const _={classificationPane:"ftCMX"};var j="subjects.presentationTopics",A=o.T.encloseNamespace(j);function U(e){var a,n,o,I,U,F,z,H,J,V=(0,w.r)(null).hasTopicDirectories,W=(0,x.k)(),Y=i.a.useBasicFetch(k.L.config()),Q=(0,B.y)(),R=Q.availablePresentations,q=Q.activePresentation,X=Q.hasPresentationsLoaded,Z=Q.canAccessPresentation,K=(0,P.B)(),G=(0,L.r)(),$=e.presentationId||(null==q?void 0:q.id),ee=i.a.useBasicFetch($&&E.x.presentationById($)),ae=ee.hasCompleted&&X,ne={name:T.i.getExploreAllTopicsTitle(null===(a=ee.data)||void 0===a?void 0:a.name,null==R?void 0:R.length),banner:{url:T.i.getPresentationLevelImage(null===(n=ee.data)||void 0===n?void 0:n.learningLevel,"topic-banner")}},te=i.a.useBasicFetch(ae&&E.x.topLevelTopics($||(null===(o=ee.data)||void 0===o?void 0:o.id))),oe=A("pageTitleSubject",{title:null===(I=ee.data)||void 0===I?void 0:I.name});(0,N.M)({title:oe,description:A("pageDescription",{title:null===(U=ee.data)||void 0===U?void 0:U.name}),canonicalLink:O.f.getCanonicalLink(),allowIndexing:O.f.allowIndexing()});var ie=S();var le=!!Y.data&&!!R&&te.data,re=Z(null===(F=ee.data)||void 0===F?void 0:F.id),ce={presentationId:null===(z=ee.data)||void 0===z?void 0:z.id,presentationName:null===(H=ee.data)||void 0===H?void 0:H.name,widgetId:C.z.Classifications,templateId:f.f.CoverFixedPillListLarge},se=V?p.q:u.K;return t.createElement("main",{className:"bg-white px-4"},le?t.createElement(c.p,{heading:null==ne?void 0:ne.name,banner:null==ne?void 0:ne.banner,imageCdnUrl:Y.data.imageCdnUrl,imageOptions:{size:h.h2.Large}}):t.createElement(c.v,null),t.createElement("div",{className:"py-3 mb-3 ".concat(re?"border-bottom":"")},re?le?t.createElement(s.Oo,{breadcrumbs:function(){var e;return[{name:A("discover"),appLink:{application:M.O.DASHBOARD,action:y.e.Dashboard.HOME}},{name:T.i.getExploreAllTopicsBreadcrumb(null===(e=ee.data)||void 0===e?void 0:e.name,null==R?void 0:R.length),active:!0}]}()}):t.createElement(s.b2,null):t.createElement(t.Fragment,null)),t.createElement("div",{className:_.classificationPane},le?t.createElement(se,{id:null===(J=ee.data)||void 0===J?void 0:J.id,name:"",description:"",analyticsData:ce,content:null==te?void 0:te.data,appLinks:{classification:ie},hasTableOfContents:!1,settings:{hasTopicDirectories:V},isTertiaryCustomerWithoutExchange:K&&!(null==G?void 0:G.hasProduct(b.x.Exchange)),onToggleFollowClassification:function(){}}):t.createElement(v.QL,{partialLoadingComponent:g.Qh}),le&&V&&(null==R?void 0:R.length)>1&&t.createElement("ul",{className:"pt-3 list-unstyled"},R.filter(function(e){var a;return e.id!==(null===(a=ee.data)||void 0===a?void 0:a.id)}).map(function(e){var a,n,o;return t.createElement("li",{key:e.id},t.createElement(r.F,{className:"d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ".concat(_.link," ").concat(T.i.getMappedPresentationBackgroundColourClass(null==e?void 0:e.learningLevel)),appLink:{application:M.O.SUBJECT,action:y.e.Subjects.PRESENTATION_TOPICS,params:{presentationId:e.id}},appLinkOptions:{middlewareOptions:{presentationSlug:e.vanitySlug}},analyticsData:{id:e.id,name:e.name,description:e.description,currentPresentationId:null===(a=ee.data)||void 0===a?void 0:a.id,currentPresentationName:null===(n=ee.data)||void 0===n?void 0:n.name,currentPresentationDescription:null===(o=ee.data)||void 0===o?void 0:o.description},analyticsOptions:{entity:l.py.Presentation,actionType:l.Vw.Click,location:l.LZ.PresentationClassifications}},t.createElement("div",{className:"h4 text-shadow mb-0"},R.length>2||W.sm||W.xs?t.createElement(m.x,{namespace:j,phrase:"multiPresentationBanner",options:{name:e.name}}):t.createElement(m.x,{namespace:j,phrase:"singlePresentationBanner",options:{name:e.name}})),t.createElement(d.h,{svgName:W.xs?D.vn.Sparkle:D.vn.School,openInNewTab:!0,className:"btn btn-outline-dark",onClick:null},t.createElement(m.x,{namespace:j,phrase:W.xs?"explore":"changeTo",options:{name:e.name}}))))}))))}}}]);
2
- //# sourceMappingURL=9911-8892b6dbfe-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3612],{67814:(e,a,n)=>{n.d(a,{p:()=>T,v:()=>y});var t=n(32735),o=n(110),i=n(50690),l=n(22406),r=n(78408),c=n(83657),s=n(23481),d=n(15611),m=n(83914),u=n(35223),p="shared.backButton";function v(e){var a=Object.assign({textShadow:!0},e),n=a.backToName,o=a.appLink,i=a.color,l=a.extraClasses,r=a.textShadow,c=n?s.T.getPhrase(p,"backTo",{backToName:n}):s.T.getPhrase(p,"back"),v="black"===i?"":"text-white",g=r?"text-shadow":"";return t.createElement(d.F,{appLink:o,className:"d-inline-flex align-items-center h5 mb-0 ".concat(l," ").concat(v," ").concat(g)},t.createElement(m.x,{svgName:u.vn.ChevronLeft,size:m.S.Medium}),t.createElement("span",{className:"ms-1"},c))}v.defaultProps={color:"black",extraClasses:""};var g=n(4527),h=n(83345),b=n(7733),f=n(10587),C=n(94232),E=n(54610),k=n(79967),x=n(9085),L=n(67453);const N={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var w="".concat(f.y[E.__.Banners].width,":").concat(f.y[E.__.Banners].height);function D(e){return e.length<160?"h1":N.headingLarge}var T=t.memo(function(e){var a,n,s,d,m=e.heading,u=e.banner,p=e.imageCdnUrl,f=e.actions,T=e.sortComponent,y=e.blockColourClass,M=e.specialEvent,B=t.useContext(C.n),O=(0,k.k)().xxl?1920:1200,P=t.useMemo(function(){if(!M||e.showComingSoon)return!1;var a=o.O.format(new Date,"YYYY-MM-DD");return M.endDate?M.startDate<=a&&M.endDate>=a:M.startDate===a},[M]),I=e.imageOptions||{width:O,ratio:w,resizeType:E.Nq.Cover},S=!!u&&!!p&&L.j.createBannerUrl(u,{fallbackBaseUrl:p,fallbackCategoryName:m,type:E.__.Banners},I),_={className:"banner banner-header ".concat(e.bannerClassName),style:S?{backgroundImage:"url('".concat(S,"')")}:{}};!u&&y&&(delete _.style,_.className+=" ".concat(y));var j=e.detailsComponent,A=(0,x.x)(e.heading,b.o);return i.b.renderInPortalIfExists(t.createElement("header",Object.assign({},_),t.createElement("div",{className:"container ".concat(N.container," position-relative inner-banner")},e.backButtonAppLink&&t.createElement("div",{className:"pt-3"},t.createElement(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),t.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(N.bannerContent," px-2 ").concat((null===(a=e.logo)||void 0===a?void 0:a.url)?N.bannerContentWithLogo:""))},!!M&&t.createElement("div",{className:"position-relative ".concat(N.specialEventContainer)},t.createElement(r.s,{body:{type:M.endDate?"range":"day",text:M.endDate?"".concat(o.O.format(M.startDate,"DD"),"-").concat(o.O.format(M.endDate,"DD")):o.O.format(M.startDate,"DD")},month:function(e){return e.endDate?o.O.isSame(e.startDate,e.endDate,"month")?o.O.format(e.startDate,"MMMM"):"".concat(o.O.format(e.startDate,"MMM")," - ").concat(o.O.format(e.endDate,"MMM")):o.O.format(e.startDate,"MMMM")}(M),theme:e.calendarTheme})),t.createElement("div",null,P&&t.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},t.createElement(h.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&t.createElement(l.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),t.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&t.createElement("div",{className:"".concat(N.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(A)},t.createElement(g.w,{src:L.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:E.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),t.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(N.heading," ").concat(D(m)," ").concat(e.alignLogoLeft?"w-50":"")},m,j&&t.createElement(j,null)))),!!f&&t.createElement("div",{className:N.actionsContainer},t.createElement(c.e,{actions:f,sortComponent:T,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(d=e.logo)||void 0===d?void 0:d.url)&&t.createElement("div",{className:N.logoContainer},t.createElement("img",{src:L.j.createUrl(e.logo.url,{size:E.h2.Medium}),className:"rounded-circle"})))),null==B?void 0:B.container)},function(e,a){var n,t;return e.actions===a.actions&&e.heading===a.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(t=a.logo)||void 0===t?void 0:t.url)});function y(){var e=t.useContext(C.n);return i.b.renderInPortalIfExists(t.createElement("div",{className:"partial-banner partial-loading-background ".concat(N.banner)}),null==e?void 0:e.container)}},89111:(e,a,n)=>{n.r(a),n.d(a,{PresentationTopicsView:()=>U});var t=n(32735),o=n(23481),i=n(20354),l=n(65858),r=n(15611),c=n(67814),s=n(49935),d=n(91693),m=n(83345),u=n(47770),p=n(30662),v=n(65163),g=n(9513),h=n(54610),b=n(12754),f=n(78479),C=n(42308),E=n(21750),k=n(39151),x=n(79967),L=n(15311),N=n(79612),w=n(37802),D=n(35223),T=n(87114),y=n(14070),M=n(97291),B=n(86698),O=n(33192),P=n(23923),I=(n(28400),n(34181)),S=function(e){return function(a){return(null==a?void 0:a.id)?I.L.getAppLink(a,e||{}):null}};const _={classificationPane:"ftCMX"};var j="subjects.presentationTopics",A=o.T.encloseNamespace(j);function U(e){var a,n,o,I,U,F,z,H,J,V=(0,w.r)(null).hasTopicDirectories,W=(0,x.k)(),Y=i.a.useBasicFetch(k.L.config()),Q=(0,B.y)(),R=Q.availablePresentations,q=Q.activePresentation,X=Q.hasPresentationsLoaded,Z=Q.canAccessPresentation,K=(0,P.B)(),G=(0,L.r)(),$=e.presentationId||(null==q?void 0:q.id),ee=i.a.useBasicFetch($&&E.x.presentationById($)),ae=ee.hasCompleted&&X,ne={name:T.i.getExploreAllTopicsTitle(null===(a=ee.data)||void 0===a?void 0:a.name,null==R?void 0:R.length),banner:{url:T.i.getPresentationLevelImage(null===(n=ee.data)||void 0===n?void 0:n.learningLevel,"topic-banner")}},te=i.a.useBasicFetch(ae&&E.x.topLevelTopics($||(null===(o=ee.data)||void 0===o?void 0:o.id))),oe=A("pageTitleSubject",{title:null===(I=ee.data)||void 0===I?void 0:I.name});(0,N.M)({title:oe,description:A("pageDescription",{title:null===(U=ee.data)||void 0===U?void 0:U.name}),canonicalLink:O.f.getCanonicalLink(),allowIndexing:O.f.allowIndexing()});var ie=S();var le=!!Y.data&&!!R&&te.data,re=Z(null===(F=ee.data)||void 0===F?void 0:F.id),ce={presentationId:null===(z=ee.data)||void 0===z?void 0:z.id,presentationName:null===(H=ee.data)||void 0===H?void 0:H.name,widgetId:C.z.Classifications,templateId:f.f.CoverFixedPillListLarge},se=V?p.q:u.K;return t.createElement("main",{className:"bg-white px-4"},le?t.createElement(c.p,{heading:null==ne?void 0:ne.name,banner:null==ne?void 0:ne.banner,imageCdnUrl:Y.data.imageCdnUrl,imageOptions:{size:h.h2.Large}}):t.createElement(c.v,null),t.createElement("div",{className:"py-3 mb-3 ".concat(re?"border-bottom":"")},re?le?t.createElement(s.Oo,{breadcrumbs:function(){var e;return[{name:A("discover"),appLink:{application:M.O.DASHBOARD,action:y.e.Dashboard.HOME}},{name:T.i.getExploreAllTopicsBreadcrumb(null===(e=ee.data)||void 0===e?void 0:e.name,null==R?void 0:R.length),active:!0}]}()}):t.createElement(s.b2,null):t.createElement(t.Fragment,null)),t.createElement("div",{className:_.classificationPane},le?t.createElement(se,{id:null===(J=ee.data)||void 0===J?void 0:J.id,name:"",description:"",analyticsData:ce,content:null==te?void 0:te.data,appLinks:{classification:ie},hasTableOfContents:!1,settings:{hasTopicDirectories:V},isTertiaryCustomerWithoutExchange:K&&!(null==G?void 0:G.hasProduct(b.x.Exchange)),onToggleFollowClassification:function(){}}):t.createElement(v.QL,{partialLoadingComponent:g.Qh}),le&&V&&(null==R?void 0:R.length)>1&&t.createElement("ul",{className:"pt-3 list-unstyled"},R.filter(function(e){var a;return e.id!==(null===(a=ee.data)||void 0===a?void 0:a.id)}).map(function(e){var a,n,o;return t.createElement("li",{key:e.id},t.createElement(r.F,{className:"d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ".concat(_.link," ").concat(T.i.getMappedPresentationBackgroundColourClass(null==e?void 0:e.learningLevel)),appLink:{application:M.O.SUBJECT,action:y.e.Subjects.PRESENTATION_TOPICS,params:{presentationId:e.id}},appLinkOptions:{middlewareOptions:{presentationSlug:e.vanitySlug}},analyticsData:{id:e.id,name:e.name,description:e.description,currentPresentationId:null===(a=ee.data)||void 0===a?void 0:a.id,currentPresentationName:null===(n=ee.data)||void 0===n?void 0:n.name,currentPresentationDescription:null===(o=ee.data)||void 0===o?void 0:o.description},analyticsOptions:{entity:l.py.Presentation,actionType:l.Vw.Click,location:l.LZ.PresentationClassifications}},t.createElement("div",{className:"h4 text-shadow mb-0"},R.length>2||W.sm||W.xs?t.createElement(m.x,{namespace:j,phrase:"multiPresentationBanner",options:{name:e.name}}):t.createElement(m.x,{namespace:j,phrase:"singlePresentationBanner",options:{name:e.name}})),t.createElement(d.h,{svgName:W.xs?D.vn.Sparkle:D.vn.School,openInNewTab:!0,className:"btn btn-outline-dark",onClick:null},t.createElement(m.x,{namespace:j,phrase:W.xs?"explore":"changeTo",options:{name:e.name}}))))}))))}}}]);
2
+ //# sourceMappingURL=3612-8c6423bd51-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/9911-8892b6dbfe-lite.chunk.js","mappings":"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","sources":["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/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/presentation-topics.scss","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/PresentationTopicsView.tsx"],"sourcesContent":["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 { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: presentationId ? { presentationId } : {}\n});","// extracted by mini-css-extract-plugin\nexport default {\"classificationPane\":\"ftCMX\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { getClassificationAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nimport styles from './presentation-topics.scss';\n\nconst namespace = 'subjects.presentationTopics';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface PresentationTopicsViewQueryParams {\n presentationId?: string;\n}\n\ninterface PresentationTopicsViewProps {\n presentationId?: string;\n}\n\nexport function PresentationTopicsView(props: PresentationTopicsViewProps): React.ReactElement {\n const { hasTopicDirectories } = useSettings(null);\n const breakpoints = useBreakpoints();\n\n /**\n * Data fetching\n */\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const {\n availablePresentations,\n activePresentation,\n hasPresentationsLoaded,\n canAccessPresentation\n } = usePresentation();\n\n const isTertiary = useIsTertiary();\n const products = useProducts();\n\n /**\n * We'll prefer the presentationId query param, but fallback to the\n * user's activePresentation where the queryParam doesn't exist.\n */\n const initialPresentationId = props.presentationId || activePresentation?.id;\n\n const currentPresentation = Flight.useBasicFetch<Presentation>(\n initialPresentationId &&\n ClassificationRequests.presentationById(initialPresentationId)\n );\n\n const hasLoaded = currentPresentation.hasCompleted && hasPresentationsLoaded;\n\n const classification = {\n name: TopicsHelper.getExploreAllTopicsTitle(currentPresentation.data?.name, availablePresentations?.length),\n banner: {\n url: TopicsHelper.getPresentationLevelImage(currentPresentation.data?.learningLevel, 'topic-banner')\n }\n } as Classification;\n\n const children = Flight.useBasicFetch<Classification[]>(\n hasLoaded &&\n ClassificationRequests.topLevelTopics(initialPresentationId || currentPresentation.data?.id)\n );\n\n const title = getPhrase('pageTitleSubject', { title: currentPresentation.data?.name });\n\n useSetPageMetadata({\n title,\n description: getPhrase('pageDescription', { title: currentPresentation.data?.name }),\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing()\n });\n\n const classificationAppLinkFn = getClassificationAppLink();\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: TopicsHelper.getExploreAllTopicsBreadcrumb(currentPresentation.data?.name, availablePresentations?.length),\n active: true\n }];\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = !!config.data && !!availablePresentations && children.data;\n const canViewBreadcrumbs = canAccessPresentation(currentPresentation.data?.id);\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: currentPresentation.data?.id,\n presentationName: currentPresentation.data?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n const TemplateComponent = hasTopicDirectories\n ? StatsCoverFixedPillListLargeWidgetTemplate\n : CoverFixedPillListLargeWidgetTemplate;\n \n return (\n <main className='bg-white px-4'>\n {dataLoaded\n ? (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n imageOptions={{ size: ImageSize.Large }}\n />\n ) : <PartialBannerHeader />\n }\n <div className={`py-3 mb-3 ${canViewBreadcrumbs ? 'border-bottom' : ''}`}>\n {(() => {\n if (!canViewBreadcrumbs)\n return <></>;\n\n if (!dataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ? (\n <TemplateComponent\n id={currentPresentation.data?.id}\n name=''\n description=''\n analyticsData={analyticsData}\n content={children?.data}\n appLinks={{ classification: classificationAppLinkFn }}\n hasTableOfContents={false}\n settings={{ hasTopicDirectories }}\n isTertiaryCustomerWithoutExchange={isTertiary && !products?.hasProduct(ProductId.Exchange)}\n // TODO: Should this be optional?\n onToggleFollowClassification={() => {}}\n />\n ) : (\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n )}\n\n {dataLoaded && hasTopicDirectories && availablePresentations?.length > 1 && (\n <ul className='pt-3 list-unstyled'>\n {availablePresentations.filter(p => p.id !== currentPresentation.data?.id).map(presentation => {\n return (\n <li key={presentation.id}>\n <AppLink\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link} ${TopicsHelper.getMappedPresentationBackgroundColourClass(presentation?.learningLevel)}`}\n appLink={{\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: { presentationId: presentation.id }\n }}\n appLinkOptions={{ middlewareOptions: { presentationSlug: presentation.vanitySlug } }}\n analyticsData={{\n id: presentation.id,\n name: presentation.name,\n description: presentation.description,\n currentPresentationId: currentPresentation.data?.id,\n currentPresentationName: currentPresentation.data?.name,\n currentPresentationDescription: currentPresentation.data?.description\n }}\n analyticsOptions={{\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.PresentationClassifications\n }}\n >\n <div className='h4 text-shadow mb-0'>\n {(availablePresentations.length > 2 || breakpoints.sm || breakpoints.xs) ? (\n <Text namespace={namespace} phrase='multiPresentationBanner' options={{ name: presentation.name }} />\n ) : (\n <Text namespace={namespace} phrase='singlePresentationBanner' options={{ name: presentation.name }} />\n )}\n </div>\n <IconButton\n svgName={breakpoints.xs ? cvSvgLibrary.Sparkle : cvSvgLibrary.School}\n openInNewTab\n className='btn btn-outline-dark'\n onClick={null}\n >\n <Text\n namespace={namespace}\n phrase={breakpoints.xs ? 'explore' : 'changeTo'}\n options={{ name: presentation.name }}\n />\n </IconButton>\n </AppLink>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </main>\n );\n}\n"],"names":["namespace","BackButton","props","textShadow","backToName","appLink","color","extraClasses","backPhrase","LanguageService","colorClass","textShadowClass","AppLink","className","SvgContainer","svgName","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","type","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","GenericCalendarDate","body","text","month","getSpecialEventMonthText","theme","calendarTheme","Text","phrase","ComingSoonTag","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","getClassificationAppLink","params","classification","id","ClassificationAppLinkHelper","getPhrase","PresentationTopicsView","hasTopicDirectories","useSettings","breakpoints","config","ConfigRequests","usePresentation","availablePresentations","activePresentation","hasPresentationsLoaded","canAccessPresentation","isTertiary","useIsTertiary","products","initialPresentationId","presentationId","currentPresentation","ClassificationRequests","hasLoaded","hasCompleted","name","TopicsHelper","data","learningLevel","children","title","useSetPageMetadata","description","canonicalLink","SeoHelper","allowIndexing","classificationAppLinkFn","dataLoaded","canViewBreadcrumbs","analyticsData","presentationName","widgetId","WidgetTypeId","templateId","WidgetTemplate","TemplateComponent","StatsCoverFixedPillListLargeWidgetTemplate","CoverFixedPillListLargeWidgetTemplate","Breadcrumbs","breadcrumbs","application","action","active","getBreadcrumbs","content","appLinks","hasTableOfContents","settings","isTertiaryCustomerWithoutExchange","hasProduct","ProductId","onToggleFollowClassification","partialLoadingComponent","filter","p","map","presentation","key","appLinkOptions","middlewareOptions","presentationSlug","vanitySlug","currentPresentationId","currentPresentationName","currentPresentationDescription","analyticsOptions","entity","actionType","location","sm","xs","options","IconButton","openInNewTab","onClick"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/3612-8c6423bd51-lite.chunk.js","mappings":"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","sources":["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/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/presentation-topics.scss","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/PresentationTopicsView.tsx"],"sourcesContent":["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 { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: presentationId ? { presentationId } : {}\n});","// extracted by mini-css-extract-plugin\nexport default {\"classificationPane\":\"ftCMX\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { getClassificationAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nimport styles from './presentation-topics.scss';\n\nconst namespace = 'subjects.presentationTopics';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface PresentationTopicsViewQueryParams {\n presentationId?: string;\n}\n\ninterface PresentationTopicsViewProps {\n presentationId?: string;\n}\n\nexport function PresentationTopicsView(props: PresentationTopicsViewProps): React.ReactElement {\n const { hasTopicDirectories } = useSettings(null);\n const breakpoints = useBreakpoints();\n\n /**\n * Data fetching\n */\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const {\n availablePresentations,\n activePresentation,\n hasPresentationsLoaded,\n canAccessPresentation\n } = usePresentation();\n\n const isTertiary = useIsTertiary();\n const products = useProducts();\n\n /**\n * We'll prefer the presentationId query param, but fallback to the\n * user's activePresentation where the queryParam doesn't exist.\n */\n const initialPresentationId = props.presentationId || activePresentation?.id;\n\n const currentPresentation = Flight.useBasicFetch<Presentation>(\n initialPresentationId &&\n ClassificationRequests.presentationById(initialPresentationId)\n );\n\n const hasLoaded = currentPresentation.hasCompleted && hasPresentationsLoaded;\n\n const classification = {\n name: TopicsHelper.getExploreAllTopicsTitle(currentPresentation.data?.name, availablePresentations?.length),\n banner: {\n url: TopicsHelper.getPresentationLevelImage(currentPresentation.data?.learningLevel, 'topic-banner')\n }\n } as Classification;\n\n const children = Flight.useBasicFetch<Classification[]>(\n hasLoaded &&\n ClassificationRequests.topLevelTopics(initialPresentationId || currentPresentation.data?.id)\n );\n\n const title = getPhrase('pageTitleSubject', { title: currentPresentation.data?.name });\n\n useSetPageMetadata({\n title,\n description: getPhrase('pageDescription', { title: currentPresentation.data?.name }),\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing()\n });\n\n const classificationAppLinkFn = getClassificationAppLink();\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: TopicsHelper.getExploreAllTopicsBreadcrumb(currentPresentation.data?.name, availablePresentations?.length),\n active: true\n }];\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = !!config.data && !!availablePresentations && children.data;\n const canViewBreadcrumbs = canAccessPresentation(currentPresentation.data?.id);\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: currentPresentation.data?.id,\n presentationName: currentPresentation.data?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n const TemplateComponent = hasTopicDirectories\n ? StatsCoverFixedPillListLargeWidgetTemplate\n : CoverFixedPillListLargeWidgetTemplate;\n \n return (\n <main className='bg-white px-4'>\n {dataLoaded\n ? (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n imageOptions={{ size: ImageSize.Large }}\n />\n ) : <PartialBannerHeader />\n }\n <div className={`py-3 mb-3 ${canViewBreadcrumbs ? 'border-bottom' : ''}`}>\n {(() => {\n if (!canViewBreadcrumbs)\n return <></>;\n\n if (!dataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ? (\n <TemplateComponent\n id={currentPresentation.data?.id}\n name=''\n description=''\n analyticsData={analyticsData}\n content={children?.data}\n appLinks={{ classification: classificationAppLinkFn }}\n hasTableOfContents={false}\n settings={{ hasTopicDirectories }}\n isTertiaryCustomerWithoutExchange={isTertiary && !products?.hasProduct(ProductId.Exchange)}\n // TODO: Should this be optional?\n onToggleFollowClassification={() => {}}\n />\n ) : (\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n )}\n\n {dataLoaded && hasTopicDirectories && availablePresentations?.length > 1 && (\n <ul className='pt-3 list-unstyled'>\n {availablePresentations.filter(p => p.id !== currentPresentation.data?.id).map(presentation => {\n return (\n <li key={presentation.id}>\n <AppLink\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link} ${TopicsHelper.getMappedPresentationBackgroundColourClass(presentation?.learningLevel)}`}\n appLink={{\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: { presentationId: presentation.id }\n }}\n appLinkOptions={{ middlewareOptions: { presentationSlug: presentation.vanitySlug } }}\n analyticsData={{\n id: presentation.id,\n name: presentation.name,\n description: presentation.description,\n currentPresentationId: currentPresentation.data?.id,\n currentPresentationName: currentPresentation.data?.name,\n currentPresentationDescription: currentPresentation.data?.description\n }}\n analyticsOptions={{\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.PresentationClassifications\n }}\n >\n <div className='h4 text-shadow mb-0'>\n {(availablePresentations.length > 2 || breakpoints.sm || breakpoints.xs) ? (\n <Text namespace={namespace} phrase='multiPresentationBanner' options={{ name: presentation.name }} />\n ) : (\n <Text namespace={namespace} phrase='singlePresentationBanner' options={{ name: presentation.name }} />\n )}\n </div>\n <IconButton\n svgName={breakpoints.xs ? cvSvgLibrary.Sparkle : cvSvgLibrary.School}\n openInNewTab\n className='btn btn-outline-dark'\n onClick={null}\n >\n <Text\n namespace={namespace}\n phrase={breakpoints.xs ? 'explore' : 'changeTo'}\n options={{ name: presentation.name }}\n />\n </IconButton>\n </AppLink>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </main>\n );\n}\n"],"names":["namespace","BackButton","props","textShadow","backToName","appLink","color","extraClasses","backPhrase","LanguageService","colorClass","textShadowClass","AppLink","className","SvgContainer","svgName","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","type","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","GenericCalendarDate","body","text","month","getSpecialEventMonthText","theme","calendarTheme","Text","phrase","ComingSoonTag","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","getClassificationAppLink","params","classification","id","ClassificationAppLinkHelper","getPhrase","PresentationTopicsView","hasTopicDirectories","useSettings","breakpoints","config","ConfigRequests","usePresentation","availablePresentations","activePresentation","hasPresentationsLoaded","canAccessPresentation","isTertiary","useIsTertiary","products","initialPresentationId","presentationId","currentPresentation","ClassificationRequests","hasLoaded","hasCompleted","name","TopicsHelper","data","learningLevel","children","title","useSetPageMetadata","description","canonicalLink","SeoHelper","allowIndexing","classificationAppLinkFn","dataLoaded","canViewBreadcrumbs","analyticsData","presentationName","widgetId","WidgetTypeId","templateId","WidgetTemplate","TemplateComponent","StatsCoverFixedPillListLargeWidgetTemplate","CoverFixedPillListLargeWidgetTemplate","Breadcrumbs","breadcrumbs","application","action","active","getBreadcrumbs","content","appLinks","hasTableOfContents","settings","isTertiaryCustomerWithoutExchange","hasProduct","ProductId","onToggleFollowClassification","partialLoadingComponent","filter","p","map","presentation","key","appLinkOptions","middlewareOptions","presentationSlug","vanitySlug","currentPresentationId","currentPresentationName","currentPresentationDescription","analyticsOptions","entity","actionType","location","sm","xs","options","IconButton","openInNewTab","onClick"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3840],{22406:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(32735),r=n(23481),i=n(83914),o=n(36532),l=n(35223);const s={tag:"XRj8d",tooltip:"X6mLk"};var c="specialEventCalendar.comingSoonTag";function u(e){return a.createElement(o.u,{title:r.T.getPhrase(c,"tooltip"),spanHackClassName:"d-block ".concat(s.tooltip),spanHack:!0},a.createElement("div",{className:"d-flex text-dark align-items-center ".concat(s.tag," ").concat(e.className)},a.createElement(i.x,{svgName:l.vn.Timer}),!e.onlyIcon&&r.T.getPhrase(c,"comingSoon")))}},78408:(e,t,n)=>{n.d(t,{s:()=>o});var a=n(32735),r=n(15611);const i={dateItem:"I3SBm",label:"PRORs",body:"RfiM_",bodyDay:"ZOVny",bodyRange:"vYhXN",bodyMonth:"mYslO",month:"EPkkQ"};function o(e){var t,n,o;return a.createElement(r.F,{appLink:null===(t=e.getAppLink)||void 0===t?void 0:t.call(e),className:"text-decoration-none text-center bg-white text-dark border border-3 ".concat(null===(n=e.theme)||void 0===n?void 0:n.border," rounded-3 d-block fw-semibold ").concat(e.className),analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions},a.createElement("div",{className:"position-relative ".concat(i.dateItem)},a.createElement("div",{className:"".concat(null===(o=e.theme)||void 0===o?void 0:o.background," py-1 ").concat(i.label," d-flex align-items-center justify-content-center")},e.label?e.label:a.createElement(a.Fragment,null," ")),a.createElement("div",{className:"".concat(function(){switch(e.body.type){case"range":return i.bodyRange;case"day":return i.bodyDay;case"month":return i.bodyMonth}}()," ").concat(i.body," my-2")},e.body.text),a.createElement("div",{className:"mb-0 ".concat(i.month)},e.month)))}},49087:(e,t,n)=>{n.d(t,{G:()=>i});var a=n(1048),r=n(4594),i={isPlaylist:function(e){return(null==e?void 0:e.typeId)===r.E.Playlist},isOwner:function(e,t){var n;return!(!t||!e||a.t.isEmpty(e._liteOwner))&&e._liteOwner.id.toString()===(null===(n=t.id)||void 0===n?void 0:n.toString())},getVideoCount:function(e){var t,n,a;if(e){var r=0;return(null===(t=e.videos)||void 0===t?void 0:t.count)&&(r+=e.videos.count),(null===(n=e.clips)||void 0===n?void 0:n.count)&&(r+=e.clips.count),(null===(a=e.interactives)||void 0===a?void 0:a.count)&&(r+=e.interactives.count),r}}}},67814:(e,t,n)=>{n.d(t,{p:()=>k,v:()=>P});var a=n(32735),r=n(110),i=n(50690),o=n(22406),l=n(78408),s=n(83657),c=n(23481),u=n(15611),d=n(83914),m=n(35223),p="shared.backButton";function f(e){var t=Object.assign({textShadow:!0},e),n=t.backToName,r=t.appLink,i=t.color,o=t.extraClasses,l=t.textShadow,s=n?c.T.getPhrase(p,"backTo",{backToName:n}):c.T.getPhrase(p,"back"),f="black"===i?"":"text-white",v=l?"text-shadow":"";return a.createElement(u.F,{appLink:r,className:"d-inline-flex align-items-center h5 mb-0 ".concat(o," ").concat(f," ").concat(v)},a.createElement(d.x,{svgName:m.vn.ChevronLeft,size:d.S.Medium}),a.createElement("span",{className:"ms-1"},s))}f.defaultProps={color:"black",extraClasses:""};var v=n(4527),y=n(83345),g=n(7733),h=n(10587),b=n(94232),C=n(54610),w=n(79967),S=n(9085),E=n(67453);const I={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var A="".concat(h.y[C.__.Banners].width,":").concat(h.y[C.__.Banners].height);function O(e){return e.length<160?"h1":I.headingLarge}var k=a.memo(function(e){var t,n,c,u,d=e.heading,m=e.banner,p=e.imageCdnUrl,h=e.actions,k=e.sortComponent,P=e.blockColourClass,L=e.specialEvent,N=a.useContext(b.n),x=(0,w.k)().xxl?1920:1200,j=a.useMemo(function(){if(!L||e.showComingSoon)return!1;var t=r.O.format(new Date,"YYYY-MM-DD");return L.endDate?L.startDate<=t&&L.endDate>=t:L.startDate===t},[L]),F=e.imageOptions||{width:x,ratio:A,resizeType:C.Nq.Cover},T=!!m&&!!p&&E.j.createBannerUrl(m,{fallbackBaseUrl:p,fallbackCategoryName:d,type:C.__.Banners},F),V={className:"banner banner-header ".concat(e.bannerClassName),style:T?{backgroundImage:"url('".concat(T,"')")}:{}};!m&&P&&(delete V.style,V.className+=" ".concat(P));var D=e.detailsComponent,M=(0,S.x)(e.heading,g.o);return i.b.renderInPortalIfExists(a.createElement("header",Object.assign({},V),a.createElement("div",{className:"container ".concat(I.container," position-relative inner-banner")},e.backButtonAppLink&&a.createElement("div",{className:"pt-3"},a.createElement(f,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),a.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(I.bannerContent," px-2 ").concat((null===(t=e.logo)||void 0===t?void 0:t.url)?I.bannerContentWithLogo:""))},!!L&&a.createElement("div",{className:"position-relative ".concat(I.specialEventContainer)},a.createElement(l.s,{body:{type:L.endDate?"range":"day",text:L.endDate?"".concat(r.O.format(L.startDate,"DD"),"-").concat(r.O.format(L.endDate,"DD")):r.O.format(L.startDate,"DD")},month:function(e){return e.endDate?r.O.isSame(e.startDate,e.endDate,"month")?r.O.format(e.startDate,"MMMM"):"".concat(r.O.format(e.startDate,"MMM")," - ").concat(r.O.format(e.endDate,"MMM")):r.O.format(e.startDate,"MMMM")}(L),theme:e.calendarTheme})),a.createElement("div",null,j&&a.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},a.createElement(y.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&a.createElement(o.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),a.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&a.createElement("div",{className:"".concat(I.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(M)},a.createElement(v.w,{src:E.j.createUrl(null===(c=e.logo)||void 0===c?void 0:c.url,{size:C.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),a.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(I.heading," ").concat(O(d)," ").concat(e.alignLogoLeft?"w-50":"")},d,D&&a.createElement(D,null)))),!!h&&a.createElement("div",{className:I.actionsContainer},a.createElement(s.e,{actions:h,sortComponent:k,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(u=e.logo)||void 0===u?void 0:u.url)&&a.createElement("div",{className:I.logoContainer},a.createElement("img",{src:E.j.createUrl(e.logo.url,{size:C.h2.Medium}),className:"rounded-circle"})))),null==N?void 0:N.container)},function(e,t){var n,a;return e.actions===t.actions&&e.heading===t.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(a=t.logo)||void 0===a?void 0:a.url)});function P(){var e=a.useContext(b.n);return i.b.renderInPortalIfExists(a.createElement("div",{className:"partial-banner partial-loading-background ".concat(I.banner)}),null==e?void 0:e.container)}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),i=n(67058),o=n(14553),l=n(49267),s=n(49075),c={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:l.a,privacy:o.q},badRequest:s._,internalServerError:s._};function u(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 o=Object.assign(Object.assign({},c),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==a.o.InternalServer?i!==a.o.NotFound?i!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new o.badRequest):n.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):n.notFound||r.Q.Ry.throw(new o.notFound):n.internalServerError||r.Q.Ry.throw(new s._))}}},39902:(e,t,n)=>{n.d(t,{FN:()=>f,SW:()=>v,fh:()=>p});var a=n(32735),r=n(20354),i=n(75896);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if(e){if("string"==typeof e)return 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}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},m=50;function p(e,t){var n=i.m.chunk(e,m).map(function(e){return t(i.m.uniq(e))}),a=r.a.useBasicFetchAll(n),o=i.m.flatten(a.data),l=a.data.length?o.reduce(function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))},{}):null;return{itemsArr:o,items:l,isFetching:a.isFetching,hasCompleted:a.hasCompleted}}function f(e,t,n){var r=null!=n?n:function(e){return"object"===c(e)?e.id:e},i=v({getRequest:t,_getKey:n}),o=i.fetchItems,l=d(i,["fetchItems"]);return a.useEffect(function(){(null==e?void 0:e.length)&&o(e)},[null==e?void 0:e.map(r).join(",")]),l}function v(e){var t,n,s,d,p,f=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===c(e)?e.id:e},v=a.useRef(new Set),y=(d=a.useState([]),p=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(d,p)||l(d,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=y[0],h=y[1],b=r.a.useBasicFetchAll(g),C=i.m.flatten(b.data),w=b.data.length?C.reduce(function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))},{}):null;return{hasFirstRequestCompleted:!!(null===(s=null===(n=b.responses)||void 0===n?void 0:n[0])||void 0===s?void 0:s.hasCompleted),itemsArr:C,items:w,isFetching:b.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach(function(e){var t=f(e);v.current.has(t)||(n.push(e),v.current.add(t))}),n.length&&h(function(t){return[].concat(o(t),o(i.m.chunk(n,m).map(e.getRequest)))})}}}}},91286:(e,t,n)=>{n.d(t,{v:()=>o});var a=n(32735),r=n(94644);function i(e){return e.map(function(e){return e.statusCode}).join(":")}function o(e,t,n){var o=Array.isArray(e)?e:[e];(0,a.useEffect)(function(){o.forEach(function(e){(0,r.r)(e.statusCode,t,n)})},[i(o),t,n])}},60115:(e,t,n)=>{n.d(t,{K:()=>c});var a=n(32735),r=n(50242),i=n(91967),o=400,l=n(45719);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e,t,n,c,u,d){var m,p,f,v,y=(m=(0,a.useState)(0),p=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(m,p)||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}}(m,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=y[0],h=y[1],b=t,C=(0,l.P)(function(t){if(!e)return null;var n=e(t);return n?n.key:null},c,u);return f={fetchNextPage:function(){if(t&&e&&C)return h(function(e){return e+1}),b(C.nextCursor)},hasMore:!!(null==C?void 0:C.nextCursor),isFetching:null==C?void 0:C.isFetching,scrollContainer:d},v=function(){if(!f.isFetching){if(f.scrollContainer){var e=f.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-o)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-o)return;f.fetchNextPage()}},(0,a.useEffect)(function(){var e=i.q.throttle(v,200),t=f.scrollContainer||window;return f.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[f.hasMore,f.fetchNextPage,f.scrollContainer]),(0,a.useEffect)(function(){C&&C.shouldInitialFetch&&t&&(b(),h(function(e){return e+1}))},[null==C?void 0:C.shouldInitialFetch,t]),(0,a.useEffect)(function(){var e,t;if((null==C?void 0:C.statusCode)&&i.q.isFunction(n)){var a=+(null===(t=null===(e=C.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));a!==r.k.ClientError&&a!==r.k.ServerError||n(g,C.statusCode)}},[null==C?void 0:C.statusCode]),{items:null==C?void 0:C.items,hasMore:!!(null==C?void 0:C.nextCursor),nextCursor:null==C?void 0:C.nextCursor,isFetching:null==C?void 0:C.isFetching,totalItems:null==C?void 0:C.totalItems,hasFirstPageCompleted:null==C?void 0:C.hasFirstPageCompleted}}},63719:(e,t,n)=>{n.d(t,{h:()=>l});var a=n(32735),r=n(77316);function i(e,t){if(e){if("string"==typeof e)return o(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)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function l(e){var t,n,l=(t=a.useMemo(function(){return r.p.getBuilder()},[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(t,n)||i(t,n)||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.")}()),s=l[0],c=(0,l[1])(s);return c&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(c),[Object.assign(Object.assign({},e),{active:!0})]):c}},93840:(e,t,n)=>{n.r(t),n.d(t,{PlaylistView:()=>Ve});var a=n(32735),r=n(70680),i=n(23481),o=n(81886),l=n(20354),s=n(65858),c=n(49087),u=n(87801),d=n(51365),m=n(183),p=n(89454),f=n(21750),v=n(39151),y=n(1666),g=n(5112),h=n(31949),b=n(69883),C=n(63719),w=n(56520),S=n(91286),E=n(60115),I=n(22902);function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var O=n(79612),k=n(76753),P=n(54569),L=n(31908),N=n(14070),x=n(97291),j=n(58321),F=n(7179),T=n(97816),V=n(10741),D=n(33192),M=n(22490),U=n(110),B=n(28400),R=n(97392),_=n(83345),G="playlists.playlistHeaderDetails",H=function(e){var t=e.className;return a.createElement("span",{className:t},"•")};function q(e){var t=e._liteOwner;if(t)return t.name&&t.surname?B.m.toTitleCase(t.name+" "+t.surname.substring(0,1)):t.name?t.name.split(" ")[0]:void 0}function Y(e){var t,n,r=c.G.isOwner(e.playlist,e.currentUser),i=null===(t=e.playlist.followers)||void 0===t?void 0:t.count,o=function(e){if(!e.contentModifiedDate)return"";var t=new Date,n=U.O.convertUTCToLocal(e.contentModifiedDate);return U.O.isBefore(n,U.O.subtract(t,1,"month"))?"":U.O.fromNow(n)}(e.playlist);return a.createElement("div",{className:e.detailsClassName},!e.hideOwnerName&&!r&&a.createElement(a.Fragment,null,(null===(n=e.playlist._isClickViewCurated)||void 0===n?void 0:n.value)?a.createElement(a.Fragment,null,a.createElement("div",{className:e.clickViewAvatarClassName},a.createElement(R.F,null)),a.createElement("span",null,"ClickView")):a.createElement(_.x,{namespace:G,phrase:"createdBy",options:{user:q(e.playlist)}}),a.createElement(H,{className:e.separatorClassName})),"number"==typeof e.totalVideos&&a.createElement(_.x,{namespace:G,phrase:"videos",options:{smartCount:e.totalVideos}}),i>0&&a.createElement(a.Fragment,null,a.createElement(H,{className:e.separatorClassName}),a.createElement(_.x,{namespace:G,phrase:"followers",options:{smartCount:i}})),!!o&&a.createElement(a.Fragment,null,a.createElement(H,{className:e.separatorClassName}),a.createElement(_.x,{namespace:G,phrase:"lastUpdated",options:{timeAgo:o}})))}var Q=n(67814),W=n(49935),$=n(7733),z=n(86764),X=n(16714),Z=n(3747),J=n(37802),K=n(9085),ee=n(46390),te=n(12909);const ne={partialDescription:"vDX0m"};function ae(){return a.createElement(a.Fragment,null,a.createElement(Q.v,null),a.createElement("div",{className:"mb-2"},a.createElement("div",{className:"partial-loading-background my-2 border-bottom ".concat(ne.partialDescription)})))}var re=n(49985),ie=n(80783),oe=n(35223),le=n(40254),se=i.T.encloseNamespace("playlists.playlistHeader"),ce={getPlaylistActions:function(e,t){var n,a,r,i,o,l,u=t.isAuthenticated,d=t.isPlugin,m=t.isMobile,p=t.setIsFollowing,f=t.isFollowing,v=t.setShowFollowSpinner,y=t.showFollowSpinner,g=t.isUserCurator,h=t.openInCuratorLink,b={id:e.playlist.id,name:e.playlist.name,followerCount:null===(n=e.playlist.followers)||void 0===n?void 0:n.count,videoCount:null===(a=e.playlist.videos)||void 0===a?void 0:a.count,interactiveCount:null===(r=e.playlist.interactives)||void 0===r?void 0:r.count,clipCount:null===(i=e.playlist.clips)||void 0===i?void 0:i.count,isClickViewPlaylist:null===(o=e.playlist._isClickViewCurated)||void 0===o?void 0:o.value},C={location:s.LZ.Banner,entity:s.py.Playlist,workflowPhase:s.eu.Start},S=[];if(!u)return S;if(t.isGuest)return S;var E=c.G.isOwner(e.playlist,e.currentUser),I=ie.z.hideAssignButtonOnVideoActions(e.currentUser),A=t.hasShareFlowV2&&!t.isStudent&&!I;return d||(e.playAllAppLink&&S.push({label:se("playAll"),appLink:e.playAllAppLink,svgName:oe.vn.Play,className:m?"":"btn btn-outline-dark me-2",button:!m,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},C),{actionType:s.Vw.Play})}),A&&S.push({label:se("assign"),appLink:le.W.flowSelector({entityType:"playlist",objectId:e.playlist.id}),svgName:oe.vn.Classrooms,className:m?"":"btn btn-outline-dark me-2",button:!m,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},C),{actionType:s.Vw.Share,entity:s.py.Assign})}),g&&S.push({label:(0,w.eR)(),href:h,openInNewTab:!0}),S.push({label:!A&&se("share"),tooltip:A&&se("share"),appLink:{application:x.O.SHARE,action:N.e.Share.SHARE,args:[e.playlist.id],params:{entityType:"playlist"}},svgName:t.hasShareFlowV2?oe.vn.Link:oe.vn.Share,className:m?"":"btn btn-outline-dark me-2 align-self-stretch",button:!m,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},C),{actionType:s.Vw.Share,eventVersion:s.eq.V3})})),E||S.push({label:se(f?"following":"follow"),onClick:function(){p(!f),v(!0),e.follow(!f,function(){v(!1),re.k.logUserAction(b,Object.assign(Object.assign({},C),{actionType:s.Vw.Follow,descriptor:f?s.DL.Off:s.DL.On,workflowPhase:s.eu.Complete}))},function(){v(!1),p(f)})},svgName:f?oe.vn.BellFilled:oe.vn.Bell,className:m?"":"btn follow-btn btn-".concat(f?"outline-dark":"dark"," me-2"),button:!m,showSpinner:y}),E&&(S.push({label:se("edit"),appLink:{application:x.O.PLAYLISTS,action:N.e.Playlists.EDIT_PLAYLIST,args:[e.playlist.id]},svgName:oe.vn.Edit,button:!1,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},C),{actionType:s.Vw.Edit})}),S.push({label:se("delete"),appLink:{application:x.O.PLAYLISTS,action:N.e.Playlists.DELETE_PLAYLIST,args:[e.playlist.id]},svgName:oe.vn.Delete,className:"text-danger",button:!1,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},C),{actionType:s.Vw.Delete})})),(null===(l=e.playlist._isClickViewCurated)||void 0===l?void 0:l.value)&&S.push({label:se("copy"),appLink:{application:x.O.PLAYLISTS,action:N.e.Playlists.COPY_PLAYLIST,args:[e.playlist.id]},button:!1,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},C),{actionType:s.Vw.Copy})}),S}};const ue={clickViewAvatar:"PHe9c"};function de(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 a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return me(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)?me(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 me(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function pe(e){var t=(0,ee.G)().isPlugin,n=(0,I.T)(),r=n.hasPermissions,i=n.getGatedPermission,o=(0,J.r)(null).hasShareFlowV2,l=de(a.useState(e.isFollowing),2),s=l[0],c=l[1],u=de(a.useState(!1),2),d=u[0],m=u[1];a.useEffect(function(){return c(e.isFollowing)},[e.isFollowing]);var p=(0,Z.a)(z.r.XS);if(e.showPartialLoading)return a.createElement(ae,null);var f=e.playlist.description,v=ce.getPlaylistActions(e,{isAuthenticated:e.currentUser.isAuthenticated,isPlugin:t,isMobile:p,setIsFollowing:c,isFollowing:s,setShowFollowSpinner:m,showFollowSpinner:d,isUserCurator:e.isUserCurator,openInCuratorLink:e.openInCuratorLink,hasShareFlowV2:o,isStudent:r(X.C.StudentExperience),isGuest:r(X.C.GuestExperience)}),y=e.getBreadcrumbs();return a.createElement(a.Fragment,null,a.createElement(Q.p,{heading:e.playlist.name,banner:e.playlist.banner,imageCdnUrl:e.imageCdnUrl,actions:v.length&&v,actionsDropdownClassName:"btn btn-outline-dark",blockColourClass:(0,K.x)(e.playlist.name,$.o),detailsComponent:function(){return a.createElement(Y,{playlist:e.playlist,currentUser:e.currentUser,detailsClassName:"mb-n1 font-size-normal fw-normal mt-1",clickViewAvatarClassName:ue.clickViewAvatar,separatorClassName:"mx-1",totalVideos:e.totalVideos})}}),(!!f||!!(null==y?void 0:y.length))&&a.createElement("div",{className:"border-bottom py-3"},!e.playlist||e.classificationId&&!e.topicPath?a.createElement(W.b2,null):a.createElement("div",{className:"pb-2"},"soft-gate"===i(X.C.CreatePlaylist)&&a.createElement(te.H,null),a.createElement(W.Oo,{breadcrumbs:y})),!!f&&a.createElement("p",{className:"mb-0"},f)))}var fe=n(56050),ve=n(91967),ye=n(83914),ge=n(1860),he=n(3534);function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Ce=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function we(e){var t,n,r=e.onSortComplete,i=e.onSortStart,l=e.showPartialLoading,s=Ce(e,["onSortComplete","onSortStart","showPartialLoading"]),c=(t=a.useState(),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return be(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)?be(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=c[0],d=c[1];return l?a.createElement(ge.S,{withReordering:e.canEdit||e.showIndexes}):e.canEdit?a.createElement(he.NB,Object.assign({},s,{currentSortingIndex:u,onSortStart:function(t){var n=e.videos.findIndex(function(e){return e.id.toString()===t.active.id.toString()});d(n),ve.q.isFunction(i)&&i(n)},onSortEnd:function(t){d(null);var n=t.active,a=t.over,i=e.videos.findIndex(function(e){return e.id.toString()===n.id.toString()}),l=e.videos.findIndex(function(e){return e.id.toString()===a.id.toString()});ve.q.isFunction(r)?r(i,l):o.Q.Ry.throw(new fe.H("An onSortComplete callback function must be passed to SortableVideoListComponent"))},dragHandleIcon:oe.vn.Hamburger,dragHandleIconSize:ye.S.XXL,presentationAudiences:e.presentationAudiences})):a.createElement(he.E4,Object.assign({},s))}var Se=n(97958),Ee=n(99742),Ie="playlists.playlistEmptyState";function Ae(){return a.createElement(_.D.Provider,{value:Ie},a.createElement(Se.u,null,a.createElement(Se.u.Image,{src:Ee.W.EmptyStates.Playlists.PLAYLIST_VIDEOS}),a.createElement(Se.u.Heading,null,a.createElement(_.x,{phrase:"heading"})),a.createElement(Se.u.Info,null,a.createElement(_.x,{phrase:"info"}))))}n(75896);var Oe=n(81493),ke=n(9680),Pe=n(10671);function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Ne=i.T.encloseNamespace("playlists.playlist");function xe(e,t,n){re.k.logUserAction({id:t,playlistId:e},{location:s.LZ.VideoList,entity:s.py.Video,actionType:s.Vw.Move,workflowPhase:n})}var je={notFound:Oe.N,forbidden:{privacy:ke.J}};function Fe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Te=i.T.encloseNamespace("playlists.playlist");function Ve(e){var t,n,i,U,B,R,_,G,H,q,Y,Q,W,$,z,X=(0,r.I0)(),Z=(0,b.Z)(),J=l.a.useBasicFetch(v.L.config()),K=l.a.useBasicFetch(h.N.currentUser()),ee=(0,w.R0)(),te=ee.isUserCurator,ne=ee.getOpenInCurationStudioLink,ae=(0,I.T)().hasPermissions,re=l.a.useBasicFetch((null===(t=K.data)||void 0===t?void 0:t.isAuthenticated)&&y.h.yearGroups(K.data.customerId)),ie=l.a.useBasicFetch(e.classificationId&&f.x.path(e.classificationId)),le=l.a.useBasicFetch(e.classificationId&&f.x.classification(e.classificationId,null===(n=K.data)||void 0===n?void 0:n.id)),se=l.a.useBasicFetch(le.hasCompleted&&f.x.presentationById(null===(i=le.data)||void 0===i?void 0:i.presentationId)),ce=(null===(U=K.data)||void 0===U?void 0:U.isAuthenticated)?!e.classificationId||se.hasCompleted:!!(null===(B=se.data)||void 0===B?void 0:B.id),ue=l.a.useBasicFetch(ce&&p.O.presentationAudiences(null===(R=se.data)||void 0===R?void 0:R.id)),de=(0,j.U)({locationContext:s.LZ.VideoThumbnail,mtv:e.moviesAndTv,sharedPlaylist:!!e.shareId}).commonVideoProps,me=e.shareId?g.C.getSharedPlaylist(e.playlistId,e.shareId):g.C.getPlaylist(e.playlistId),fe=e.shareId?g.C.getSharedPlaylistVideosCount(e.playlistId,e.shareId):g.C.getPlaylistVideosCount(e.playlistId),ve=l.a.useBasicFetch(me),ye=l.a.useBasicFetch(fe),ge=function(e,t,n){var a=(0,Pe._)({location:Pe.i.VideoItem,shareId:n});return c.G.isOwner(e,t)?Object.assign(Object.assign({},a),{getVideoActions:function(t,n){var r,i=L.M.getCanBeConsumed(t).canConsume,o={label:Ne("removeFromPlaylist"),button:!1,svgName:oe.vn.Delete,appLink:{application:x.O.PLAYLISTS,action:N.e.Playlists.REMOVE_VIDEO_FROM_PLAYLIST,args:[t.id,e.id],params:{typeId:t.typeId}},className:"text-danger",analyticsOptions:{entity:s.py.Video,actionType:s.Vw.Dissociate,location:s.LZ.VideoListItem,workflowPhase:s.eu.Start,descriptor:s.iF.Playlist},analyticsData:{id:t.id,playlistId:e.id},group:"delete"};return i?[].concat(function(e){if(Array.isArray(e))return Le(e)}(r=a.getVideoActions(t,n))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return Le(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)?Le(e,t):void 0}}(r)||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.")}(),[o]):[o]}}):a}(ve.data,K.data,e.shareId);(0,S.v)(ve,je);var he=function(t){return e.shareId?g.C.getSharedPlaylistVideos(e.playlistId,e.shareId,t):g.C.getPlaylistVideos(e.playlistId,t)},be=l.a.useBasicFetch((null===(_=K.data)||void 0===_?void 0:_.id)&&g.C.getIsFollowingPlaylist(e.playlistId,null===(G=K.data)||void 0===G?void 0:G.id)),Ce=function(e){l.a.getFetch(X)(he(e))},Se=(0,E.K)(he,Ce),Ee=Se.items,Ie=Se.hasMore,Oe=Se.isFetching;(0,T.V)(Ee);var ke,Ve,De,Me,Ue,Be,Re=function(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 a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Fe(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)?Fe(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.")}()}((ke=Ee,Ue=(0,a.useState)(),Be=2,Ve=function(e){if(Array.isArray(e))return e}(Ue)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(Ue,Be)||function(e,t){if(e){if("string"==typeof e)return A(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)?A(e,t):void 0}}(Ue,Be)||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.")}(),De=Ve[0],Me=Ve[1],(0,a.useEffect)(function(){De&&(ke.length!==De.length||function(e,t){var n=!0;if(e.length!==t.length)return!1;for(var a=0;a<e.length;a++)if(e[a].id!==t[a].id){n=!1;break}return n}(ke,De))&&Me(null)},[ke]),[De,Me]),2),_e=Re[0],Ge=Re[1];(0,F.P)({id:e.playlistId,app:"playlists",shareId:e.shareId}),(0,O.M)(k.CG.getPlaylistMetadata({content:ve.data,phraseContext:{phraseHandler:Te,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:D.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1}));var He=!!Ee&&0===Ee.length,qe=function(t,n){var a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return M.W.getAppLink(t,Object.assign(Object.assign({},r),{contextId:e.playlistId,context:m.Q.Playlist,shareId:e.shareId,moviesAndTv:e.moviesAndTv,playNext:n,includeContext:(null===(a=K.data)||void 0===a?void 0:a.isAuthenticated)||!!e.shareId}))},Ye=!(null===(H=K.data)||void 0===H?void 0:H.isAuthenticated)||!!be.hasCompleted,Qe=null==Ee?void 0:Ee.find(function(e){var t;return null===(t=L.M.getCanBeConsumed(e))||void 0===t?void 0:t.canConsume}),We=c.G.isOwner(ve.data,K.data),$e=Ee&&K.data&&J.data,ze=(0,C.h)({name:null===(q=ve.data)||void 0===q?void 0:q.name});return a.createElement(d.M.Provider,{value:(null===(Y=K.data)||void 0===Y?void 0:Y.isAuthenticated)&&ge},a.createElement("div",{className:"bg-white px-3"},a.createElement(pe,{playlist:ve.data,currentUser:K.data,isFollowing:null===(Q=be.data)||void 0===Q?void 0:Q.isFollowing,follow:function(t,n,a){var r,i=t?g.C.followPlaylist:g.C.unfollowPlaylist;l.a.fetch(X,i(e.playlistId,null===(r=K.data)||void 0===r?void 0:r.id,n,function(){a(),Z.error(Te(t?"followError":"unfollowError"))}))},playAllAppLink:Qe&&qe(Qe,!0),showPartialLoading:!ve.data||!$e||!Ye,imageCdnUrl:!!J.data&&J.data.imageCdnUrl,getBreadcrumbs:function(){return e.hideBreadCrumbs?null:ze},topicPath:ie.data,moviesAndTv:e.moviesAndTv,classificationId:e.classificationId,isUserCurator:te,openInCuratorLink:ne(null===(W=ve.data)||void 0===W?void 0:W.typeId,null===($=ve.data)||void 0===$?void 0:$.id),totalVideos:c.G.getVideoCount(ye.data)}),a.createElement("div",{className:"mt-2"},He?a.createElement(Ae,null):a.createElement(we,{videos:_e||Ee,yearGroups:re.data,playlistId:!!ve.data&&ve.data.id,onSortStart:function(t){var n=Ee[t];n&&xe(e.playlistId,n.id,s.eu.Start)},onSortComplete:function(t,n){if(t!==n){var a=Ee[t];if(a){var r=P.l.reorder(Ee,t,n),i=r.reorderedItems,o=r.reorderRequest;Ge(i),xe(e.playlistId,a.id,s.eu.Complete),l.a.fetch(X,g.C.reorderVideos(e.playlistId,o,null,function(){Ge(null)}))}}},canEdit:We,showPartialLoading:!$e,getVideoAppLink:function(e,t){return qe(e,!1,t)},showSignIn:!(null===(z=K.data)||void 0===z?void 0:z.isAuthenticated),getSignInAppLink:function(e){var t=o.Q.C$.getHref(e),n="/"!==t?{redirectUrl:t}:{};return{application:x.O.DEFAULT,action:N.e.Default.CHALLENGE,params:n}},canRemovePrivateVideos:We,presentationAudiences:e.moviesAndTv?null:ue.data,showIndexes:!0,hasPermissions:ae,getPreviewQuestionsAppLink:function(e){return V.j.getPreviewQuestionsAppLink(e)},commonVideoProps:de})),(Ie||Oe)&&a.createElement(u._,{isFetching:Oe,fetchNext:Ce})))}},12909:(e,t,n)=>{n.d(t,{H:()=>d});var a=n(32735),r=n(15611),i=n(83914),o=n(83345),l=n(35223),s=n(14070),c=n(97291),u="signUp.softGateBanner";function d(){return a.createElement("div",{role:"alert",className:"bg-light-indigo text-indigo rounded p-2 mb-4 d-flex align-items-center"},a.createElement(i.x,{svgName:l.vn.StarOutline,size:i.S.Large}),a.createElement(o.x,{namespace:u,phrase:"softGate"})," ",a.createElement(r.F,{appLink:{application:c.O.SIGN_UP,action:s.e.SignUp.PREMIUM_FEATURES},className:"indigo-link text-indigo text-underline d-inline"},a.createElement(o.x,{namespace:u,phrase:"learnMore"})))}},58321:(e,t,n)=>{n.d(t,{U:()=>f});var a=n(20354),r=n(16714),i=n(39151),o=n(1666),l=n(31949),s=n(22902),c=n(37802),u=n(22490),d=n(82431),m=n(46390),p=n(27638);function f(e){var t,n,f,v=e||{},y=v.locationContext,g=v.mtv,h=v.flightNamespace,b=v.sharedPlaylist,C=(0,m.G)(),w=C.isPlugin,S=C.params,E=(0,p.u)(y,h),I=E.setFavourite,A=E.canFavourite,O=(0,c.r)(null),k=O.hasTopicDirectories,P=O.isLoadingSettings,L=(0,s.T)(),N=L.hasPermissions,x=L.isLoaded,j=N(r.C.StudentExperience),F=N(r.C.GuestExperience),T=a.a.useBasicFetch(i.L.config()),V=a.a.useBasicFetch(l.N.currentUser()),D=a.a.useBasicFetch((null===(t=V.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(V.data.customerId));return{hasCommonVideoPropsCompleted:!P&&x&&T.hasCompleted&&V.hasCompleted&&(!(null===(n=V.data)||void 0===n?void 0:n.isAuthenticated)||D.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=V.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:g}):null},isPlugin:w,isPluginPopup:!!(null==S?void 0:S.popup),canFavourite:A,setFavourite:I,imageCdnUrl:null===(f=T.data)||void 0===f?void 0:f.imageCdnUrl,yearGroups:D.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:k,companyLogoFallbackUrl:null,hasStudentExperience:j,hasGuestExperience:F}}}},97816:(e,t,n)=>{n.d(t,{V:()=>l,l:()=>s});var a=n(1575),r=n(39902),i=n(31908);function o(e){return e?Array.isArray(e)?e.filter(function(e){return!!e&&(i.M.isVideo(e)||i.M.isClip(e))}):"data"in e?e.data.filter(function(e){return!!e&&(i.M.isVideo(e)||i.M.isClip(e))}):[]:[]}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=o(e).map(function(e){return e.id});(0,r.FN)(n,function(e){return a.R.videoMixinAssocs(e,t.flightNamespace)},null)}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,r.SW)({getRequest:function(t){return a.R.videoMixinAssocs(t,e.flightNamespace)}}).fetchItems;return{fetchObjects:function(e){return t(o(e).map(function(e){return e.id}))}}}}}]);
2
+ //# sourceMappingURL=3840-98c79fc0d8-lite.chunk.js.map