@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/904-2784e45cfc-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/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"],"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","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}"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","title","tooltipClassName","showIndicator","Indicator","spanHack","spanHackClassName","getSortStudents","sortBy","id","desc","shouldFilterStudent","filter","summary","awaitingMarking","percentCorrect","unanswered","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","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","style","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","defaultProps","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","label","group","InteractiveInsightsQuestionsDemoView","anonymiseUsers","config","audienceAppLinkParams","dateRangeAppLinkParams","results","video","name","hasDataLoaded","params","tabs","yearGroups","markingRequired","isDemo","hasData","interactionId","isFetching"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9295,9149,4519],{57724:(e,t,n)=>{n.d(t,{g:()=>l});var r=n(32735),a=n(31453),s=n(83345),o="shared.newBadge";function l(e){return r.createElement("span",{className:(0,a.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium text-blue","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-blue",e.className)},e.text||r.createElement(s.x,{phrase:"new",namespace:o}))}},35690:(e,t,n)=>{n.d(t,{QD:()=>S,Qv:()=>I,__:()=>A});var r=n(32735),a=n(68050),s=n(69111),o=n(42648),l=n(82602),i=n(31453),c=n(1619),m=n(83345),u=n(4594),d="sharev2.shareViewCount";function p(e){return[u.E.Playlist,u.E.Series].includes(e.share.objectTypeId)?r.createElement("span",null,"-"):r.createElement(m.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var g=n(2510),f=n(83914),v=n(35223);function h(e){return[u.E.Playlist,u.E.Series].includes(e.share.objectTypeId)?r.createElement("span",null,"-"):r.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},r.createElement(f.x,{svgName:v.vn.User}),r.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===g.y.Open)return"".concat(t);if(e.share.type===g.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var y=n(21789),b=n(15611),x=n(91693);const w={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var E="assign.previousAssignments";function C(e){return r.createElement("div",{className:(0,i.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},r.createElement("h3",{className:"h6 m-0 p-0"},r.createElement(m.x,{namespace:E,phrase:"heading",options:{count:e.count}})),r.createElement(x.h,{svgName:e.show?v.vn.ChevronUp:v.vn.ChevronDown,onClick:e.onToggle}))}function A(){var e="d-flex align-items-end justify-content-start fw-medium";return r.createElement(m.D.Provider,{value:E},r.createElement(a.Z,{className:"gx-2 px-3 mb-2"},r.createElement(s.Z,{xs:4,className:e},r.createElement(m.x,{phrase:"assignedTo"})),r.createElement(s.Z,{xs:2,className:e},r.createElement(m.x,{phrase:"views"})),r.createElement(s.Z,{xs:2,className:e},r.createElement(m.x,{phrase:"viewedBy"})),r.createElement(s.Z,{xs:4,className:e},r.createElement(m.x,{phrase:"dateCreated"}))))}function N(e){var t,n,o=y.x.getClassroomForShare(e.share,e.classrooms),u=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return r.createElement(b.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==u?void 0:u.data,analyticsOptions:null==u?void 0:u.options,className:(0,i.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",w.shareListItem,e.className)},r.createElement(a.Z,{className:"gx-2"},r.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},r.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==o?void 0:o.name,svgSize:f.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,i.A)(w.shareAvatar),titleClassName:(0,i.A)("text-truncate",w.shareAvatarTitle),hideSubtitle:!0})),r.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},r.createElement(p,{share:e.share})),r.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},r.createElement(h,{share:e.share})),r.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},r.createElement("span",null,(0,l.WU)(e.share.dateCreated))),r.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},r.createElement("span",{className:(0,i.A)("cursor-pointer text-info hover-text-underline",w.visibleOnHover)},r.createElement(m.x,{namespace:E,phrase:"view"})))))}function I(e){var t;return r.createElement("div",{className:(0,i.A)("d-flex flex-column border-top rounded-top overflow-hidden")},r.createElement(o.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return r.createElement(N,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var r;return null===(r=e.getItemAnalytics)||void 0===r?void 0:r.call(e,t,n)},className:(0,i.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function S(e){if(!e.assignments.length)return r.createElement(r.Fragment,null);var t=e.show&&e.assignments.length>3;return r.createElement("div",{className:(0,i.A)("bg-white rounded-3 p-3",t&&"pb-0")},r.createElement(C,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&r.createElement(r.Fragment,null,r.createElement(A,null),r.createElement(I,Object.assign({},e))))}},7908:(e,t,n)=>{n.r(t),n.d(t,{AssignFlowView:()=>Q});var r=n(32735),a=n(89067),s=n(72985),o=n(23481),l=n(31453),i=n(65858),c=n(9111),m=n(99998),u=n(35690),d=n(7786),p=n(57724),g=n(83345),f="shared.recommendedBadge";function v(e){var t;return r.createElement("span",{className:(0,l.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium text-teal","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-teal",e.className)},null!==(t=e.text)&&void 0!==t?t:r.createElement(g.x,{phrase:"recommended",namespace:f}))}function h(e){return"existing-classroom"===e.type?e.hasClassrooms?r.createElement(v,{size:"sm",invert:e.hovered}):null:"open-classroom"===e.type?e.hasClassrooms?r.createElement(p.g,{size:"sm",invert:e.hovered}):r.createElement("div",{className:"d-flex align-items-center gap-2"},r.createElement(p.g,{size:"sm",invert:e.hovered}),r.createElement(v,{size:"sm",invert:e.hovered})):null}var y=n(11607),b=n(12528),x=n(83914),w=n(37963),E=n(35223);const C={optionItem:"Lu2bY"};function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var N={"flow-selector":"purple","existing-classroom":"purple","open-classroom":"blue"};function I(e){var t,n,a=(t=(0,w.X)(),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 r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||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}}(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=a[0],o=a[1],i=e.item.badgeComponent;return r.createElement(y.L,{onClick:function(){return e.onClick(e.item)},className:(0,l.A)("d-flex flex-column gap-4 align-items-start align-self-stretch justify-content-center","text-left cursor-pointer p-3 border rounded-3 user-select-none hover-bg-light-blue",C.optionItem),ref:s},r.createElement("div",{className:"d-flex flex-column gap-2 w-100"},r.createElement("div",{className:"d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center gap-2"},r.createElement("div",{className:"d-flex align-items-center gap-2 order-2 order-md-0"},r.createElement("div",null,r.createElement(b.f,{svgName:E.vn.Classrooms,svgSize:x.S.Standard,variant:N[e.item.id],textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("h3",{className:"h6 m-0"},e.item.title)),!!i&&r.createElement(i,{hovered:o})),e.item.subTitle&&r.createElement("p",{className:"mb-0 text-gray-900"},e.item.subTitle)))}function S(e){return r.createElement("div",{className:"bg-white rounded-bottom-3 p-3 d-flex flex-column gap-3 justify-content-center align-items-center"},!!e.title&&r.createElement("h2",{className:"h4 m-0"},e.title),r.createElement("div",{className:"d-flex flex-column justify-content-center align-items-center gap-3 w-100"},e.options.map(function(t){return r.createElement(I,{item:t,onClick:e.onClick,key:t.id})})))}var T=n(2948),j=n(20354),k=n(75896),P=n(2510),O=n(18488),F=n(21789),D=n(37802),L=n(86099),Z=n(95890),U=n(88630);function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var M="show:previous:assignments",_=o.T.encloseNamespace("assign.flowSelectorView");function B(e){var t=function(e){var t,n,r,a,s,o,l=(s=(0,T.D)(M,!1),o=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(s,o)||function(e,t){if(e){if("string"==typeof e)return z(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)?z(e,t):void 0}}(s,o)||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.")}()),i=l[0],c=l[1],m=(0,Z._)({entityType:e.entityType,objectId:e.objectId}),u=(0,D.r)(null),d=u.isLoadingSettings,p=u.hasClassrooms,g=j.a.useBasicFetch(O.o.getSharesByObjectId(e.objectId)),f=(null===(t=g.data)||void 0===t?void 0:t.filter(function(e){return[P.y.Classroom,P.y.Open].includes(e.type)}))||[],v=k.m.uniq(f.map(F.x.getClassroomIdFromShare).filter(function(e){return!!e})),h=j.a.useBasicFetch(g.hasCompleted&&U.F.getClassroomsByIds(v,null===(n=m.currentUser.data)||void 0===n?void 0:n.customerId)),y=j.a.useBasicFetch(p&&U.F.getPublished(null===(r=m.currentUser.data)||void 0===r?void 0:r.customerId));return{data:{loaded:m.loaded&&!d&&!!g.data&&!!h.data&&!!y.data,previousAssignments:f,previousAssignmentClassrooms:h},showPreviousAssignments:i,hasClassrooms:p&&!!(null===(a=y.data)||void 0===a?void 0:a.data.length),canCreateClassrooms:m.canCreateClassrooms,getPreviousAssignItemAppLink:function(e){var t=(0,L.pY)(e);if(t)return t},onTogglePreviousAssignment:function(){c(!i)}}}({entityType:e.entityType,objectId:e.objectId}),n=(0,m.R)().experience,a=t.data,s=a.loaded,o=a.previousAssignmentClassrooms,p=a.previousAssignments,g=(0,d.y)({data:{entity:{id:e.objectId,type:e.entityType}},analyticsOptions:{location:i.LZ.Popup,entity:i.py.Assign}}),f=g.log,v=g.getData,y=[{id:"existing-classroom",title:_("existingClassroomTitle"),subTitle:_("existingClassroomDescription"),badgeComponent:function(e){var n=e.hovered;return r.createElement(h,{type:"existing-classroom",hasClassrooms:t.hasClassrooms&&t.canCreateClassrooms,hovered:n})}},{id:"open-classroom",title:_("openClassroomTitle"),subTitle:_("openClassroomDescription"),badgeComponent:function(e){var n=e.hovered;return r.createElement(h,{type:"open-classroom",hasClassrooms:t.hasClassrooms&&t.canCreateClassrooms,hovered:n})}}];return r.createElement(c.G,{size:"lg",animation:e.animate,title:_("title"),closePopup:e.closePopup,bodyClassName:"d-flex flex-column gap-3 p-0",contentClassName:(0,l.A)(s&&"bg-transparent border-0"),showLoadingSpinner:!s||e.loading},r.createElement(S,{options:y,onClick:function(r){if("existing-classroom"===r.id){if("minimal"===n)return e.goToNoClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"no-classroom"});if(!t.hasClassrooms&&t.canCreateClassrooms)return e.goToCreateClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"create-classroom"});if(!t.hasClassrooms&&!t.canCreateClassrooms)return e.goToNoExistingClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"no-existing-classroom"});e.goToExistingClassroomFlow(),f({type:"select-existing-classroom-flow"})}else"open-classroom"===r.id&&(e.goToOpenClassroomFlow(),f({type:"select-open-classroom-flow"}))}}),r.createElement(u.QD,{assignments:p,show:t.showPreviousAssignments,classrooms:o.data,onToggle:t.onTogglePreviousAssignment,getItemAppLink:t.getPreviousAssignItemAppLink,getItemAnalytics:function(e,t){var n=v({type:"view-previous-assignment",share:e,yIndex:t}),r=n.analyticsOptions;return{data:n.data,options:r}}}))}var H=n(77568);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 r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return V(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)?V(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 V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Q(e){var t,n=$(r.useState(null!==(t=e.selectedFlow)&&void 0!==t?t:"flow-selector"),2),o=n[0],l=n[1],i=$(r.useState(null),2),c=i[0],m=i[1],u=$(r.useState(!0),2),d=u[0],p=u[1];function g(e){p(!1),l(e)}var f={objectId:e.objectId,entityType:e.entityType,closePopup:e.closePopup,initialStep:c,goToCreateClassroomPrompt:function(){m("create-classroom"),g("existing-classroom")},goToNoClassroomPrompt:function(){m("no-classroom"),g("existing-classroom")},goToNoExistingClassroomPrompt:function(){m("no-existing-classroom"),g("existing-classroom")},goToExistingClassroomFlow:function(){return g("existing-classroom")},goToFlowSelector:function(){return g("flow-selector")},goToOpenClassroomFlow:function(){return g("open-classroom")}};return r.createElement(a.r,{data:f,step:o,setStep:g,closePopup:e.closePopup,animate:d,steps:{"flow-selector":{view:B},"open-classroom":{view:H.OpenClassroomFlowView},"existing-classroom":{view:s.ExistingClassroomFlowView}}})}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var r=["second","minute","hour","day","week","month","year"],a=["秒","分钟","小时","天","周","个月","年"],s={},o=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function i(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var r=function(e,t){return(+(t?i(t):new Date)-+i(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,r=e=Math.abs(e),a=0;e>=l[a]&&a<l.length;a++)e/=l[a];return(e=Math.floor(e))>(0==(a*=2)?9:1)&&(a+=1),t(e,a,r)[n].replace("%s",e.toString())}(r,function(e){return s[e]||s.en_US}(t))};o("en_US",function(e,t){if(0===t)return["just now","right now"];var n=r[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),o("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=a[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
2
- //# sourceMappingURL=9295-eb130a0b17-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/9295-eb130a0b17-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/new-badge/NewBadge.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-view-count/ShareViewCount.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount.tsx","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/previous-assignments.scss","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/PreviousAssignments.tsx","file:///app/packages/libs/shared/src/components/recommended-badge/RecommendedBadge.tsx","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/components/flow-option-badge/FlowOptionBadge.tsx","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/components/flow-selector-options/flow-selector-options.scss","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/components/flow-selector-options/FlowSelectorOptions.tsx","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/hooks/useFlowSelectorData.ts","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/FlowSelectorView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/assign-flow-view/AssignFlowView.tsx","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.newBadge';\n\ninterface NewBadgeProps {\n size: 'sm' | 'std';\n invert?: boolean;\n text?: string;\n className?: string;\n}\n\nexport function NewBadge(props: NewBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium text-blue',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-blue',\n props.className\n )}>\n {props.text || <Text phrase='new' namespace={namespace} />}\n </span>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nconst namespace = 'sharev2.shareViewCount';\n\ninterface ShareViewCountProps {\n share: Share;\n}\n\nexport function ShareViewCount(props: ShareViewCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n \n if (isCollection)\n return <span>-</span>;\n\n return <Text namespace={namespace} phrase='viewCount' options={{ smartCount: props.share.viewCount || 0 }} />;\n}","import React from 'react';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface ShareViewedByCountProps {\n share: Share;\n}\n\nexport function ShareViewedByCount(props: ShareViewedByCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n\n if (isCollection)\n return <span>-</span>;\n \n function getViewCount(): string {\n const shareAccessCount = props.share.accessCount || 0;\n if (props.share.type === ShareType.Open)\n return `${shareAccessCount}`;\n\n if (props.share.type === ShareType.Classroom) {\n const totalRecipients = props.share.recipients.length;\n return `${shareAccessCount}/${totalRecipients}`;\n }\n\n return `${shareAccessCount}`;\n }\n \n return (\n <span className='d-inline-flex flex-row gap-2 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} />\n <span>{getViewCount()}</span>\n </span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"shareListItem\":\"vLROV\",\"visibleOnHover\":\"o2KJH\",\"shareAvatar\":\"zDcMp\",\"shareAvatarTitle\":\"U8yMQ\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { ShareAvatar } from 'libs/shared/apps/share-v2/components/share-avatar/ShareAvatar';\nimport { ShareViewCount } from 'libs/shared/apps/share-v2/components/share-view-count/ShareViewCount';\nimport { ShareViewedByCount } from 'libs/shared/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './previous-assignments.scss';\n\nconst namespace = 'assign.previousAssignments';\n\ninterface PreviousAssignmentsHeaderProps {\n count: number;\n show: boolean;\n onToggle: () => void;\n}\n\nfunction PreviousAssignmentsHeader(props: PreviousAssignmentsHeaderProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center justify-content-between', props.show && 'mb-3')}>\n <h3 className='h6 m-0 p-0'><Text namespace={namespace} phrase='heading' options={{ count: props.count }} /></h3>\n <IconButton\n svgName={props.show ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={props.onToggle}\n />\n </div>\n );\n}\n\nexport function PreviousAssignmentsListHeader(): JSX.Element {\n const columnClassNames = 'd-flex align-items-end justify-content-start fw-medium';\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Row className='gx-2 px-3 mb-2'>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='assignedTo' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='views' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='viewedBy' />\n </Col>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='dateCreated' />\n </Col>\n </Row>\n </LanguageNamespaceContext.Provider>\n );\n}\n\ntype ItemAnalytics = {\n data: HashObject;\n options: AnalyticsOptions;\n}\ninterface PreviousAssignmentListItemProps {\n share: Share;\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n\n getItemAnalytics?: (share: Share) => ItemAnalytics;\n className?: string;\n}\n\nfunction PreviousAssignmentListItem(props: PreviousAssignmentListItemProps): JSX.Element {\n const shareClassroom = ShareHelper.getClassroomForShare(props.share, props.classrooms);\n\n const analytics = props.getItemAnalytics?.(props.share);\n\n return (\n <AppLink\n key={props.share.shareId}\n appLink={props.getItemAppLink(props.share)}\n analyticsData={analytics?.data}\n analyticsOptions={analytics?.options}\n className={classNames('d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline', styles.shareListItem, props.className)}\n >\n <Row className='gx-2'>\n <Col xs={4} className='d-flex align-items-center'>\n <ShareAvatar\n type={props.share.type}\n privacy={props.share.privacy}\n classroomName={shareClassroom?.name}\n svgSize={SvgContainerSize.Small}\n openClassroomName={props.share.options?.openClassroomName}\n className={classNames(styles.shareAvatar)}\n titleClassName={classNames('text-truncate', styles.shareAvatarTitle)}\n hideSubtitle\n />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewCount share={props.share} />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewedByCount share={props.share} />\n </Col>\n <Col xs={4} lg={3} className='d-flex align-items-center justify-content-start'>\n <span>{formatDate(props.share.dateCreated)}</span>\n </Col>\n <Col lg={1} className='align-items-center justify-content-end d-none d-lg-flex'>\n <span className={classNames('cursor-pointer text-info hover-text-underline', styles.visibleOnHover)}>\n <Text namespace={namespace} phrase='view' />\n </span>\n </Col>\n </Row>\n </AppLink>\n );\n}\n\ninterface PreviousAssignmentsListProps {\n assignments: Share[];\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n scrollHeightMax?: number;\n}\n\nexport function PreviousAssignmentsList(props: PreviousAssignmentsListProps): JSX.Element {\n return (\n <div className={classNames(\n 'd-flex flex-column border-top rounded-top overflow-hidden'\n )}>\n <Scrollbars\n autoHeight\n autoHeightMin={0}\n autoHeightMax={props.scrollHeightMax ?? 215}\n autoHide\n >\n {props.assignments.map((share, idx) => (\n <PreviousAssignmentListItem\n share={share}\n classrooms={props.classrooms}\n getItemAppLink={props.getItemAppLink}\n getItemAnalytics={share => props.getItemAnalytics?.(share, idx)}\n className={classNames(idx % 2 === 0 && 'bg-gray-100')}\n key={share.shareId}\n />\n ))}\n </Scrollbars>\n </div>\n );\n}\n\ninterface PreviousAssignmentsProps {\n show: boolean;\n assignments: Share[];\n classrooms: Classroom[];\n onToggle: () => void;\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n}\n\nexport function PreviousAssignments(props: PreviousAssignmentsProps): JSX.Element {\n if (!props.assignments.length)\n return <></>;\n \n const noBottomPadding = props.show && props.assignments.length > 3;\n \n return (\n <div className={classNames('bg-white rounded-3 p-3', noBottomPadding && 'pb-0')}>\n <PreviousAssignmentsHeader count={props.assignments.length} onToggle={props.onToggle} show={props.show} />\n {props.show && (\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList {...props} />\n </>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.recommendedBadge';\n\ninterface RecommendedBadgeProps {\n invert?: boolean;\n text?: string;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function RecommendedBadge(props: RecommendedBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium text-teal',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-teal',\n props.className\n )}>\n {props.text ??\n <Text phrase='recommended' namespace={namespace} />\n }\n </span>\n );\n}","import React from 'react';\n\nimport { NewBadge } from 'libs/shared/components/new-badge/NewBadge';\nimport { RecommendedBadge } from 'libs/shared/components/recommended-badge/RecommendedBadge';\n\nimport { AssignFlowSteps } from 'apps/assign/interfaces/Assign';\n\n\ninterface FlowOptionBadgeProps {\n hovered: boolean;\n hasClassrooms: boolean;\n type: AssignFlowSteps;\n}\n\nexport function FlowOptionBadge(props: FlowOptionBadgeProps): JSX.Element {\n if (props.type === 'existing-classroom') {\n if (props.hasClassrooms)\n return <RecommendedBadge size='sm' invert={props.hovered} />;\n return null;\n }\n\n if (props.type === 'open-classroom') {\n if (props.hasClassrooms)\n return <NewBadge size='sm' invert={props.hovered} />;\n return (\n <div className='d-flex align-items-center gap-2'>\n <NewBadge size='sm' invert={props.hovered} />\n <RecommendedBadge size='sm' invert={props.hovered} />\n </div>\n );\n }\n\n return null;\n}","// extracted by mini-css-extract-plugin\nexport default {\"optionItem\":\"Lu2bY\"};","import React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { AssignFlowSteps } from 'apps/assign/interfaces/Assign';\n\nimport styles from './flow-selector-options.scss';\n\nexport interface FlowOptionItem {\n id: AssignFlowSteps;\n title: string;\n subTitle?: string;\n badgeComponent?: ({ hovered }: {hovered: boolean}) => JSX.Element;\n}\n\nconst IdVariantMap: {[key in AssignFlowSteps]: ButtonProps['variant']} = {\n 'flow-selector': 'purple',\n 'existing-classroom': 'purple',\n 'open-classroom': 'blue'\n};\n\ninterface FlowSelectorOptionItemProps {\n item: FlowOptionItem;\n onClick: (option: FlowOptionItem) => void;\n}\n\nfunction FlowSelectorOptionItem(props: FlowSelectorOptionItemProps): JSX.Element {\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const BadgeComponent = props.item.badgeComponent;\n\n return (\n <DivButton\n onClick={() => props.onClick(props.item)}\n className={classNames(\n 'd-flex flex-column gap-4 align-items-start align-self-stretch justify-content-center',\n 'text-left cursor-pointer p-3 border rounded-3 user-select-none hover-bg-light-blue',\n styles.optionItem\n )}\n ref={hoverRef}\n >\n <div className='d-flex flex-column gap-2 w-100'>\n <div className='d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center gap-2'>\n <div className='d-flex align-items-center gap-2 order-2 order-md-0'>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant={IdVariantMap[props.item.id]}\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n <h3 className='h6 m-0'>\n {props.item.title}\n </h3>\n </div>\n {!!BadgeComponent && <BadgeComponent hovered={hovered} />}\n </div>\n {props.item.subTitle && <p className='mb-0 text-gray-900'>{props.item.subTitle}</p>}\n </div>\n </DivButton>\n );\n}\n\ninterface FlowSelectorOptions {\n title?: string;\n options: [FlowOptionItem, FlowOptionItem];\n onClick: (option: FlowOptionItem) => void;\n}\n\nexport function FlowSelectorOptions(props: FlowSelectorOptions): JSX.Element {\n return (\n <div className='bg-white rounded-bottom-3 p-3 d-flex flex-column gap-3 justify-content-center align-items-center'>\n {!!props.title &&\n <h2 className='h4 m-0'>{props.title}</h2>\n }\n <div className='d-flex flex-column justify-content-center align-items-center gap-3 w-100'>\n {props.options.map(option => (\n <FlowSelectorOptionItem item={option} onClick={props.onClick} key={option.id} />\n ))}\n </div>\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BasePaginatedCollection, Classroom } from 'libs/shared/interfaces';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nconst SHOW_PREVIOUS_ASSIGNMENTS = 'show:previous:assignments';\n\ninterface UseAssignDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function useFlowSelectorData(options: UseAssignDataOptions) {\n /**\n * We want to persist if the user has opened previous shares accordion\n * when they hit back or re-open the modal\n */\n const [ showPreviousAssignments, setShowPreviousAssignments ] =\n useViewModel<boolean>(SHOW_PREVIOUS_ASSIGNMENTS, false);\n\n const assignData = useAssignSharedData({\n entityType: options.entityType,\n objectId: options.objectId\n });\n\n const { isLoadingSettings, hasClassrooms } = useSettings(null);\n\n const previousShares = Flight.useBasicFetch<Share[]>(ShareRequests.getSharesByObjectId(options.objectId));\n // @todo Replace with backend filters\n const previousAssignments = previousShares.data?.filter(\n share => [ ShareType.Classroom, ShareType.Open ].includes(share.type)\n ) || [];\n const previousAssignmentClassroomIds = ArrayHelper.uniq(\n previousAssignments.map(ShareHelper.getClassroomIdFromShare).filter(x => !!x)\n );\n const previousAssignmentClassrooms = Flight.useBasicFetch<Classroom[]>(\n previousShares.hasCompleted &&\n ClassroomRequests.getClassroomsByIds(previousAssignmentClassroomIds, assignData.currentUser.data?.customerId)\n );\n const userClassrooms = Flight.useBasicFetch<BasePaginatedCollection<Classroom>>(\n hasClassrooms && ClassroomRequests.getPublished(assignData.currentUser.data?.customerId)\n );\n\n function getPreviousAssignItemAppLink(share: Share): Core.AppLink {\n const appLink = getInsightsOverviewAppLink(share);\n\n if (!appLink)\n return;\n\n return appLink;\n }\n\n function onTogglePreviousAssignment() {\n setShowPreviousAssignments(!showPreviousAssignments);\n }\n\n const dataLoaded = (\n assignData.loaded &&\n !isLoadingSettings &&\n !!previousShares.data &&\n !!previousAssignmentClassrooms.data &&\n !!userClassrooms.data\n );\n\n return {\n data: {\n loaded: dataLoaded,\n previousAssignments,\n previousAssignmentClassrooms\n },\n showPreviousAssignments,\n hasClassrooms: (hasClassrooms && !!userClassrooms.data?.data.length),\n canCreateClassrooms: assignData.canCreateClassrooms,\n getPreviousAssignItemAppLink,\n onTogglePreviousAssignment\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\n\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\n\nimport { PreviousAssignments } from 'apps/assign/components/previous-assignments/PreviousAssignments';\nimport { getAssignEventLogger } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { FlowOptionBadge } from './components/flow-option-badge/FlowOptionBadge';\nimport { FlowOptionItem, FlowSelectorOptions } from './components/flow-selector-options/FlowSelectorOptions';\nimport { useFlowSelectorData } from './hooks/useFlowSelectorData';\n\nconst namespace = 'assign.flowSelectorView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface FlowSelectorViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToCreateClassroomPrompt: () => void;\n goToOpenClassroomFlow: () => void;\n goToExistingClassroomFlow: () => void;\n goToNoClassroomPrompt: () => void;\n goToNoExistingClassroomPrompt: () => void;\n}\n\nexport function FlowSelectorView(props: FlowSelectorViewProps): JSX.Element {\n const viewModel = useFlowSelectorData({\n entityType: props.entityType,\n objectId: props.objectId\n });\n\n const { experience } = useClassroomExperience();\n\n const {\n loaded,\n previousAssignmentClassrooms,\n previousAssignments\n } = viewModel.data;\n\n const { log, getData } = getAssignEventLogger({\n data: {\n entity: {\n id: props.objectId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n entity: EntityType.Assign\n }\n });\n \n const choices: [FlowOptionItem, FlowOptionItem] = [\n {\n id: 'existing-classroom',\n title: getPhrase('existingClassroomTitle'),\n subTitle: getPhrase('existingClassroomDescription'),\n badgeComponent: ({ hovered }) => <FlowOptionBadge type='existing-classroom' hasClassrooms={viewModel.hasClassrooms && viewModel.canCreateClassrooms} hovered={hovered} />\n },\n {\n id: 'open-classroom',\n title: getPhrase('openClassroomTitle'),\n subTitle: getPhrase('openClassroomDescription'),\n badgeComponent: ({ hovered }) => <FlowOptionBadge type='open-classroom' hasClassrooms={viewModel.hasClassrooms && viewModel.canCreateClassrooms} hovered={hovered} />\n }\n ];\n\n function onClickFlowOption(option: FlowOptionItem) {\n if (option.id === 'existing-classroom') {\n if (experience === 'minimal') {\n props.goToNoClassroomPrompt();\n log({\n type: 'select-existing-classroom-flow',\n initialStep: 'no-classroom'\n });\n return;\n }\n /** \n * If a user clicks 'existing-classroom' flow and they dont have classrooms but can create classrooms then\n * We take them through the 'existing-classroom' flow with 'create-classroom-prompt' as initial step\n */\n if (!viewModel.hasClassrooms && viewModel.canCreateClassrooms) {\n props.goToCreateClassroomPrompt();\n log({\n type: 'select-existing-classroom-flow',\n initialStep: 'create-classroom'\n });\n return;\n }\n\n if (!viewModel.hasClassrooms && !viewModel.canCreateClassrooms) {\n props.goToNoExistingClassroomPrompt();\n log({\n type: 'select-existing-classroom-flow',\n initialStep: 'no-existing-classroom'\n });\n return;\n }\n \n props.goToExistingClassroomFlow();\n log({\n type: 'select-existing-classroom-flow'\n });\n } else if (option.id === 'open-classroom') {\n props.goToOpenClassroomFlow();\n\n log({\n type: 'select-open-classroom-flow'\n });\n }\n }\n\n function getItemAnalytics(share: Share, yIndex: number) {\n const { analyticsOptions, data } = getData({\n type: 'view-previous-assignment',\n share,\n yIndex\n });\n\n return {\n data,\n options: analyticsOptions\n };\n }\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n title={getPhrase('title')}\n closePopup={props.closePopup}\n bodyClassName='d-flex flex-column gap-3 p-0'\n contentClassName={classNames(loaded && 'bg-transparent border-0')}\n showLoadingSpinner={!loaded || props.loading}\n >\n <FlowSelectorOptions\n options={choices}\n onClick={onClickFlowOption}\n />\n\n <PreviousAssignments\n assignments={previousAssignments}\n show={viewModel.showPreviousAssignments}\n classrooms={previousAssignmentClassrooms.data}\n onToggle={viewModel.onTogglePreviousAssignment}\n getItemAppLink={viewModel.getPreviousAssignItemAppLink}\n getItemAnalytics={getItemAnalytics}\n />\n </Popup>\n );\n}","import React from 'react';\n\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopup } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssignFlowSteps } from 'apps/assign/interfaces/Assign';\nimport { ExistingClassroomFlowView, ExistingClassroomFlowViewProps } from 'apps/assign/views/existing-classroom-flow-view/ExistingClassroomFlowView';\nimport { FlowSelectorView, FlowSelectorViewProps } from 'apps/assign/views/flow-selector-view/FlowSelectorView';\nimport { OpenClassroomFlowView, OpenClassroomFlowViewProps } from 'apps/assign/views/open-classroom-flow-view/OpenClassroomFlowView';\n\ntype AllAssignFlowViewProps = FlowSelectorViewProps\n & ExistingClassroomFlowViewProps\n & OpenClassroomFlowViewProps;\n\ninterface AssignViewProps extends PopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n selectedFlow?: AssignFlowSteps\n}\n\nexport function AssignFlowView(props: AssignViewProps): JSX.Element {\n const [ selectedFlow, setSelectedFlow ] = React.useState<AssignFlowSteps>(props.selectedFlow ?? 'flow-selector');\n const [ existingClassroomInitialStep, setExistingClassroomInitialStep ] = React.useState<'create-classroom' | 'no-classroom' | 'no-existing-classroom'>(null);\n const [ animate, setAnimate ] = React.useState(true);\n\n function setFlow(flow: AssignFlowSteps) {\n setAnimate(false);\n setSelectedFlow(flow);\n }\n\n function goToCreateClassroomPrompt() {\n setExistingClassroomInitialStep('create-classroom');\n setFlow('existing-classroom');\n }\n\n function goToNoClassroomPrompt() {\n setExistingClassroomInitialStep('no-classroom');\n setFlow('existing-classroom');\n }\n\n function goToNoExistingClassroomPrompt() {\n setExistingClassroomInitialStep('no-existing-classroom');\n setFlow('existing-classroom');\n }\n\n const data: AllAssignFlowViewProps = {\n objectId: props.objectId,\n entityType: props.entityType,\n closePopup: props.closePopup,\n initialStep: existingClassroomInitialStep,\n goToCreateClassroomPrompt,\n goToNoClassroomPrompt,\n goToNoExistingClassroomPrompt,\n goToExistingClassroomFlow: () => setFlow('existing-classroom'),\n goToFlowSelector: () => setFlow('flow-selector'),\n goToOpenClassroomFlow: () => setFlow('open-classroom')\n };\n \n return (\n <MultiStepPopup<AllAssignFlowViewProps, AssignFlowSteps>\n data={data}\n step={selectedFlow}\n setStep={setFlow}\n closePopup={props.closePopup}\n animate={animate}\n steps={{\n 'flow-selector': { view: FlowSelectorView },\n 'open-classroom': { view: OpenClassroomFlowView },\n 'existing-classroom': { view: ExistingClassroomFlowView }\n }}\n />\n );\n}","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["namespace","NewBadge","props","className","size","invert","text","phrase","ShareViewCount","MasterType","includes","share","objectTypeId","Text","options","smartCount","viewCount","ShareViewedByCount","SvgContainer","svgName","shareAccessCount","accessCount","type","ShareType","totalRecipients","recipients","length","getViewCount","PreviousAssignmentsHeader","show","count","IconButton","onClick","onToggle","PreviousAssignmentsListHeader","columnClassNames","value","Row","Col","xs","PreviousAssignmentListItem","shareClassroom","ShareHelper","classrooms","analytics","getItemAnalytics","AppLink","key","shareId","appLink","getItemAppLink","analyticsData","data","analyticsOptions","ShareAvatar","privacy","classroomName","name","svgSize","S","openClassroomName","titleClassName","hideSubtitle","lg","dateCreated","PreviousAssignmentsList","autoHeight","autoHeightMin","autoHeightMax","scrollHeightMax","autoHide","assignments","map","idx","PreviousAssignments","noBottomPadding","RecommendedBadge","FlowOptionBadge","hasClassrooms","hovered","IdVariantMap","FlowSelectorOptionItem","hoverRef","BadgeComponent","item","badgeComponent","DivButton","ref","IconCircle","variant","id","textVariant","svgWrapperClassName","title","subTitle","FlowSelectorOptions","option","SHOW_PREVIOUS_ASSIGNMENTS","getPhrase","LanguageService","FlowSelectorView","viewModel","showPreviousAssignments","setShowPreviousAssignments","assignData","useAssignSharedData","entityType","objectId","useSettings","isLoadingSettings","previousShares","ShareRequests","previousAssignments","filter","previousAssignmentClassroomIds","ArrayHelper","x","previousAssignmentClassrooms","hasCompleted","ClassroomRequests","currentUser","customerId","userClassrooms","loaded","canCreateClassrooms","getPreviousAssignItemAppLink","onTogglePreviousAssignment","useFlowSelectorData","experience","useClassroomExperience","getAssignEventLogger","entity","location","log","getData","choices","Popup","animation","animate","closePopup","bodyClassName","contentClassName","showLoadingSpinner","loading","goToNoClassroomPrompt","initialStep","goToCreateClassroomPrompt","goToNoExistingClassroomPrompt","goToExistingClassroomFlow","goToOpenClassroomFlow","yIndex","AssignFlowView","selectedFlow","setSelectedFlow","existingClassroomInitialStep","setExistingClassroomInitialStep","setAnimate","setFlow","flow","goToFlowSelector","MultiStepPopup","step","setStep","steps","view","OpenClassroomFlowView","ExistingClassroomFlowView","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","toString","unit"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9528],{38307:(e,t,n)=>{n.d(t,{c:()=>h,l:()=>g});var r=n(32735),a=n(232),i=n.n(a),o=n(8604),s=n(83345);const c={heatMap:"epapa",legend:"uhH4p"};function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var u="shared.engagementHeatMap",d="#f1f1f1",m=i().scale(["#daf07d","#08bd1a"]),v=[0,.01,.25,.5,.75,1];function p(e,t){return e?m(e/t).hex():d}function f(e,t){for(var n=[],r=0;r<e.length;r++){var a=r>0&&e[r-1],i=e[r],o=r<e.length-1&&e[r+1];i===a&&i===o||n.push("".concat(p(i,t)," ").concat(100/e.length*r,"%"))}return"linear-gradient(to right, ".concat(n.join(","),")")}function g(){var e=Math.max.apply(Math,v),t=100/v.length;return r.createElement("div",{className:"d-flex justify-content-between w-100"},r.createElement(s.x,{namespace:u,phrase:"less"}),r.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(c.legend)},v.map(function(n,a){return r.createElement("div",{key:a,style:{width:"".concat(t,"%"),backgroundColor:p(n,e)}})})),r.createElement(s.x,{namespace:u,phrase:"more"}))}function h(e){var t,n,a,i=(0,o.O)(e.engagement),s=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return l(e)}(a=i)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return r.createElement("div",{className:"border rounded ".concat(c.heatMap," ").concat(null!==(n=e.className)&&void 0!==n?n:""),style:{background:f(i,s)}})}},84621:(e,t,n)=>{n.d(t,{L:()=>o});var r=n(32735),a=n(83914);const i={icon:"sAmpy",count:"faDs4"};function o(e){return r.createElement("section",{className:"d-flex flex-column border rounded p-3 h-100"},r.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},r.createElement("div",{className:"".concat(i.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},r.createElement(a.x,{svgName:e.svgName,size:a.S.Small})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&r.createElement("div",{className:"".concat(i.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},70072:(e,t,n)=>{n.d(t,{d:()=>r});var r={fontSize:"12px",fontFamily:'"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',fontWeight:"400",color:"#313543"}},8604:(e,t,n)=>{function r(e){var t=e.videoDuration||0;return new Array(Math.ceil(t)).fill(null).map(function(t,n){return(null==e?void 0:e.heatMap[n])||0})}function a(e){return null==e?void 0:e.reduce(function(t,n){return t+n.engagementRate/e.length},0)}n.d(t,{O:()=>r,Q:()=>a})},39157:(e,t,n)=>{n.d(t,{HI:()=>m,R6:()=>l,Rt:()=>p,UU:()=>d,Zs:()=>u,nq:()=>v});var r=n(75896),a=n(94892),i=n(28972),o=n(8246),s=n(83140),c=n(80845);function l(e,t,n){var i={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},o=(0,c.Q)(e),s=new Set(o.map(function(e){return e.id}));t.students.forEach(function(t){var o=Object.assign(Object.assign({},t),{summary:p(e,t)});o.summary.awaitingMarking?i.markingRequired.push(o):r.m.last(t.results).attempts.filter(function(e){var t;return!!s.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===s.size?(i.completed.push(o),o.summary.percentCorrect>=((null==n?void 0:n.HIGH)||a.i.HIGH)&&i.highScore.push(o),o.summary.percentCorrect<((null==n?void 0:n.MODERATE)||a.i.MODERATE)&&i.lowScore.push(o)):i.notCompleted.push(o)});var l=r.m.sortBy(i.lowScore,function(e){return e.summary.percentCorrect}),u=r.m.sortBy(i.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},i),{lowScore:l,highScore:u})}function u(e,t){return(0,c.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function d(e){return"".concat(e.questionId,":").concat(e.resultId)}function m(e,t,n){var r=(0,c.j_)(t),a=(0,c.f6)(e,r);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=n[d(e)])||void 0===t?void 0:t.status)===o.N.Correct}))?o.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=n[d(e)])||void 0===t?void 0:t.status)===o.N.Incorrect}))?o.N.Incorrect:void 0}function v(e,t){var n=t.students.length,r=0,a=0,o=0,l=0,u=0;return t.students.forEach(function(t){var n=(0,c.j_)(t);if(n){u+=t.results.length;var d=s.A.isInteractionCorrect(e,n);d===i.w.Correct&&r++,d===i.w.UnAnswered&&o++,d===i.w.AwaitingMarking&&l++,d!==i.w.UnAnswered&&a++}}),{percentCorrect:n>0?r/n:0,correct:r,answered:a,unanswered:o,awaitingMarking:l,attempts:u}}function p(e,t){var n=(0,c.j_)(t),r=(0,c.Q)(e),a=r.length,o=0,l=0;r.forEach(function(e){var t=s.A.isInteractionCorrect(e,n);t===i.w.Correct&&o++,t===i.w.AwaitingMarking&&l++});var u=a>0?o/a:0,d=new Set(r.map(function(e){return e.id})),m=n.attempts.filter(function(e){var t;return!!d.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:m,attempts:t.results.length,unanswered:a-m,percentCorrect:u,correct:o,awaitingMarking:l}}},77640:(e,t,n)=>{n.d(t,{t:()=>p});var r=n(32735),a=n(23481),i=n(31453),o=n(26136),s=n(97408),c=n(83914),l=n(76881),u=n(86613),d=n(64818),m=n(26521),v=a.T.encloseNamespace("shared.userRecipientItemMetadata");function p(e){var t=function(e){var t,n=e.user,r=e.anonymiseUsers,a=e.showDisplayName;if(n.sessionId||n.deleted){var i=(0,o.B)(n,r),s=i.split(" ").filter(function(e){return!!e});return{name:i,surname:s.slice(1).join(" "),avatarUrl:null}}return{name:r?(0,o.B)(n,!0):a?d.l.getDisplayName(n):d.l.getFullName(n),surname:n.surname,avatarUrl:null===(t=n.avatar)||void 0===t?void 0:t.url}}(e),n=t.name,a=t.surname,p=t.avatarUrl;return r.createElement(r.Fragment,null,r.createElement("div",{className:"".concat(m.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block flex-shrink-0")},r.createElement(s.q,{imageUrl:p,imageCdnUrl:e.imageCdnUrl,initials:d.l.getInitials(n,a),showAnonymousUser:!(e.anonymiseUsers||!e.user.sessionId&&!e.user.deleted),anonymiseUsers:e.anonymiseUsers,anonymousSvgSize:c.S.Small})),r.createElement("div",{className:e.detailsClassName},r.createElement("h4",{className:(0,i.A)("font-size-normal fw-normal m-0",e.nameClassName)},n),e.showSubText&&"id"in e.user&&r.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=d.l.getUserType(e),n=d.l.getUserRole(e);if(t===l.Y.Staff)return n===u.i.Admin?v("admin"):v("staff");var r=d.l.getYearGroup(e);return(null==r?void 0:r.name)&&"Learners"!==r.name?r.name:v("student")}(e.user))))}p.defaults={showSubText:!0}},28972:(e,t,n)=>{var r;n.d(t,{w:()=>r}),function(e){e[e.Correct=0]="Correct",e[e.Incorrect=1]="Incorrect",e[e.AwaitingMarking=2]="AwaitingMarking",e[e.Answered=3]="Answered",e[e.UnAnswered=4]="UnAnswered",e[e.NotApplicable=5]="NotApplicable"}(r||(r={}))},8246:(e,t,n)=>{var r;n.d(t,{N:()=>r}),function(e){e[e.Incorrect=0]="Incorrect",e[e.Correct=1]="Correct",e[e.PendingReview=2]="PendingReview"}(r||(r={}))},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},83140:(e,t,n)=>{n.d(t,{A:()=>f});var r=n(28972),a=n(8246),i=n(56644);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t,n){return(t=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(){return r.w.NotApplicable}function l(e,t){var n=e.actionableItems.filter(function(e){return e.isCorrect});return n.every(function(e){return!t(e.id)})?r.w.UnAnswered:n.every(function(e){var n;return e.name.trim().toLowerCase()===(null===(n=t(e.id))||void 0===n?void 0:n.trim().toLowerCase())})?r.w.Correct:r.w.Incorrect}function u(e,t){return e.actionableItems.every(function(e){return!t(e.id)})?r.w.UnAnswered:e.actionableItems.filter(function(e){return e.isCorrect}).every(function(e){var n,r=t(e.id);return(null==r?void 0:r.toString())===(null===(n=e.id)||void 0===n?void 0:n.toString())||r===e.name})?r.w.Correct:r.w.Incorrect}function d(e,t){return function(n){var r=null==t?void 0:t.attempts.find(function(t){return t.id===e.id});return null==r?void 0:r.answers.find(function(e){return e.id===n})}}function m(e,t){var n=d(e,t);return u(e,function(e){var t=n(e);return null==t?void 0:t.text})}function v(e,t){return function(e,t){var n;return e.actionableItems.forEach(function(e){var i=t(e.id);n=i?i.status!==a.N.Correct?i.status!==a.N.Incorrect?r.w.AwaitingMarking:r.w.Incorrect:r.w.Correct:r.w.UnAnswered}),n}(e,d(e,t))}var p=s(s(s(s(s(s(s({},i.Z9.Annotation,c),i.Z9.Image,c),i.Z9.MissingWord,function(e,t){var n=d(e,t);return l(e,function(e){var t=n(e);return null==t?void 0:t.text})}),i.Z9.MultipleChoice,m),i.Z9.ShortAnswer,v),i.Z9.TrueOrFalse,m),i.Z9.Illustration,v),f={notApplicable:c,awaitingMarking:function(){return r.w.AwaitingMarking},isMissingWordCorrect:l,isMultipleChoiceCorrect:u,isInteractionCorrect:function(e,t){return(0,p[e.typeId])(e,t)}}},9566:(e,t,n)=>{n.d(t,{$Z:()=>f,G6:()=>m,GJ:()=>p,VE:()=>y,_w:()=>v,po:()=>h,vJ:()=>g});var r=n(23481),a=n(110),i=n(33518),o=n(2510),s=n(4594),c=n(35223),l=n(14070),u=n(97291),d=r.T.encloseNamespace("myShares.demoInsights"),m={type:o.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:s.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},v=Object.assign(Object.assign({},m),{type:o.y.Open,expireDate:a.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),p={share:m,sharedObject:null,shareRecipients:null,dateShared:a.O.subtract(new Date,7,"days").toISOString()},f=Object.assign(Object.assign({},p),{share:v}),g={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},h={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},y={svgName:c.vn.Analytics,label:d("demoInsights"),appLink:g,group:"insights",className:"btn btn-outline-dark"}},38926:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsOverviewDemoView:()=>A});var r=n(32735),a=n(23481),i=n(2948),o=n(20354),s=n(26025),c=n(2510),l=n(38143),u=n(39151),d=n(54405),m=n(31949),v=n(93322),p=n(79612),f=n(9540),g=n(54948),h=n(9566),y=n(10447),S=n(14070),w=n(97291);function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var b=a.T.encloseNamespace("insights.interactiveInsightsOverviewView");function A(e){var t,n,a,A,I,C,O=(I=(0,i.D)(l.g.ANONYMISE_USERS),C=1,function(e){if(Array.isArray(e))return e}(I)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,s=[],c=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw a}}return s}}(I,C)||function(e,t){if(e){if("string"==typeof e)return E(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)?E(e,t):void 0}}(I,C)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,v.F)();var M=o.a.useBasicFetch(m.N.currentUser()),N=o.a.useBasicFetch(u.L.config()),k=o.a.useBasicFetch(d.X.interactiveMetadata()),j=o.a.useBasicFetch(d.X.interactive()),R=s.B.getAudienceAppLinkParams(),_=s.B.getDateRangeAppLinkParams(),T=o.a.useBasicFetch(d.X.interactiveResults()),U=o.a.useBasicFetch(d.X.aggregateHeatmap()),x=o.a.useBasicFetch(d.X.videoViews());(0,p.M)({title:k.data?b("pageTitle",{video:null===(t=k.data)||void 0===t?void 0:t.name}):null});var D=M.data&&N.data&&k.data&&j.data&&T.data&&U.data&&!!x.data,L=Object.assign(Object.assign({},R),_),H=function(e,t,n){return n===c.y.Open?{resultsAppLink:{application:w.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_STUDENTS_OPEN_CLASSROOM_DEMO,args:[e],params:t},questionsAppLink:{application:w.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_QUESTIONS_OPEN_CLASSROOM_DEMO,args:[e],params:t},heatmapAppLink:{application:w.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_HEATMAP_OPEN_CLASSROOM_DEMO,args:[e],params:t}}:{resultsAppLink:{application:w.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_STUDENTS_DEMO,args:[e],params:t},questionsAppLink:{application:w.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_QUESTIONS_DEMO,args:[e],params:t},heatmapAppLink:{application:w.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_HEATMAP_DEMO,args:[e],params:t}}}("",L,e.type),V=e.type===c.y.Open?h._w:h.G6;return D?r.createElement("div",{className:"px-3"},r.createElement(f.j,{video:k.data,tabs:(0,y.aq)(null===(n=k.data)||void 0===n?void 0:n.id,"insights",L,e.type),dateRangeAppLinkParams:_,share:Object.assign(Object.assign({},V),{objectId:null===(a=k.data)||void 0===a?void 0:a.id}),yearGroups:[],markingRequired:e.type!==c.y.Open,isDemo:!0,hasData:!0}),r.createElement(g.m,{aggregateEngagement:U.data,interactive:j.data,interactiveMetadata:k.data,classroomStudents:null,results:T.data,osCount:null===(A=x.data)||void 0===A?void 0:A.osCount,config:N.data,interactiveInsightsAppLinks:H,anonymiseUsers:O,hasDataLoaded:D,share:V})):r.createElement(r.Fragment,null)}},26521:(e,t,n)=>{n.d(t,{Z:()=>r});const r={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}}}]);
2
- //# sourceMappingURL=9528-4e954d9dff-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/9528-4e954d9dff-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/engagement-heat-map.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/EngagementHeatMap.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/EngagementUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/InteractiveUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/enums/InteractionCorrectness.ts","file:///app/packages/libs/shared/src/enums/InteractiveAnswerStatus.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/utils/InteractiveCorrectnessHelper.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"epapa\",\"legend\":\"uhH4p\"};","import React from 'react';\nimport chroma from 'chroma-js';\n\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport styles from './engagement-heat-map.scss';\n\nconst namespace = 'shared.engagementHeatMap';\n\nconst ZERO_COLOUR = '#f1f1f1';\nconst MIN_COLOUR = '#daf07d';\nconst MAX_COLOUR = '#08bd1a';\n\nconst COLOUR_SCALE = chroma.scale([ MIN_COLOUR, MAX_COLOUR ]);\n\nconst LEGEND_VALUES = [ 0, 0.01, 0.25, 0.5, 0.75, 1 ];\n\nfunction getBackgroundColor(value: number, max: number): string {\n if (!value)\n return ZERO_COLOUR;\n\n return COLOUR_SCALE(value / max).hex();\n}\n\nfunction getGradient(data: number[], max: number): string {\n const gradient: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const previousValue = i > 0 && data[i - 1];\n const currentValue = data[i];\n const nextValue = i < data.length - 1 && data[i + 1];\n\n /**\n * We want to capture colour changes but if a value has the same value\n * of both of its neighbours, we can skip it.\n */\n if (currentValue === previousValue && currentValue === nextValue)\n continue;\n\n gradient.push(`${getBackgroundColor(currentValue, max)} ${100 / data.length * i}%`);\n }\n\n return `linear-gradient(to right, ${gradient.join(',')})`;\n}\n\nexport function EngagementHeatMapLegend(): JSX.Element {\n const max = Math.max(...LEGEND_VALUES);\n const legendSquareWidthPercentage = 100 / LEGEND_VALUES.length;\n\n return (\n <div className='d-flex justify-content-between w-100'>\n <Text namespace={namespace} phrase='less' />\n <div className={`d-flex mx-1 flex-grow-1 ${styles.legend}`}>\n {LEGEND_VALUES.map((val, idx) => (\n <div\n key={idx}\n style={{\n width: `${legendSquareWidthPercentage}%`,\n backgroundColor: getBackgroundColor(val, max)\n }}\n />\n ))}\n </div>\n <Text namespace={namespace} phrase='more' />\n </div>\n );\n}\n\ninterface EngagementHeatMapProps {\n engagement: Engagement;\n max?: number;\n className?: string;\n}\n\nexport function EngagementHeatMap(props: EngagementHeatMapProps): JSX.Element {\n const heatMap = getFullHeatMap(props.engagement);\n const max = props.max ?? Math.max(...heatMap);\n\n return (\n <div\n className={`border rounded ${styles.heatMap} ${props.className ?? ''}`}\n style={{\n background: getGradient(heatMap, max)\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import { Engagement } from 'libs/shared/interfaces';\n\n/**\n * The heat map in the API response won't contain trailing zeros so we need to add those\n * in manually.\n */\nexport function getFullHeatMap(engagement: Engagement): number[] {\n const videoDuration = engagement.videoDuration || 0;\n \n return (new Array(Math.ceil(videoDuration))).fill(null).map((t, idx) => engagement?.heatMap[idx] || 0);\n}\n\nexport function getEngagementRate(engagement: Engagement[]): number {\n return engagement?.reduce((prev, next) => prev + next.engagementRate / engagement.length, 0);\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n const interactionIds = new Set(interactions.map(i => i.id));\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n const result = ArrayHelper.last(s.results);\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n if (answeredInteractions === interactionIds.size) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: answeredInteractions,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: AnonUser,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if (user.sessionId || user.deleted) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: anonName,\n surname: nameParts.slice(1).join(' '),\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: AnonUser;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n nameClassName?: string;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block flex-shrink-0`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!props.anonymiseUsers && (!!props.user.sessionId || !!props.user.deleted)}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className={classNames('font-size-normal fw-normal m-0', props.nameClassName)}>\n {name}\n </h4>\n {props.showSubText && `id` in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","export enum InteractionCorrectness {\n Correct,\n Incorrect,\n AwaitingMarking,\n \n Answered,\n UnAnswered,\n NotApplicable\n}","export enum InteractiveAnswerStatus {\n Incorrect = 0,\n Correct = 1,\n PendingReview = 2\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 { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResult, StudentAnswer } from 'libs/shared/interfaces';\n\ntype GetStudentAnswerByActionableItemId = (id: string) => string;\n\nfunction notApplicable(): InteractionCorrectness {\n return InteractionCorrectness.NotApplicable;\n}\n\nfunction awaitingMarking(): InteractionCorrectness {\n return InteractionCorrectness.AwaitingMarking;\n}\n\nfunction isMissingWordCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n const items = interaction.actionableItems.filter(a => a\n .isCorrect);\n\n if (items.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n\n const correct = items.every(a => a.name.trim().toLowerCase() === getStudentAnswer(a.id)?.trim().toLowerCase());\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMultipleChoiceCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n if (interaction.actionableItems.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n \n const correctItems = interaction.actionableItems.filter(a => a.isCorrect);\n\n const correct = correctItems.every(a => {\n const studentAnswer = getStudentAnswer(a.id);\n\n /**\n * In the past we've only ever checked the answer name. But since we introduced the ability to have image interactions\n * with no question text, we've need to swap to saving the id. But past submissions still have the name\n * - Sha\n */\n return studentAnswer?.toString() === a.id?.toString() || studentAnswer === a.name;\n });\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n getStudentAnswer: (id: string) => StudentAnswer\n): InteractionCorrectness {\n let correctness: InteractionCorrectness;\n\n // There should only be one actionableItem\n interaction.actionableItems.forEach(item => {\n const studentAnswer = getStudentAnswer(item.id);\n\n if (!studentAnswer) {\n correctness = InteractionCorrectness.UnAnswered;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Correct) {\n correctness = InteractionCorrectness.Correct;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Incorrect) {\n correctness = InteractionCorrectness.Incorrect;\n return;\n }\n\n correctness = InteractionCorrectness.AwaitingMarking;\n });\n\n return correctness;\n}\n\ntype IsCorrectFunction = (interaction: Interaction, result: InteractiveResult) => InteractionCorrectness;\n\nfunction getGetStudentAnswer(interaction: Interaction, result: InteractiveResult): (id: string) => StudentAnswer {\n return (id: string) => {\n const attempt = result?.attempts.find(a => a.id === interaction.id);\n return attempt?.answers.find(s => s.id === id);\n };\n}\n\nfunction wrapIsMissingWordCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMissingWordCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMultipleChoiceCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMultipleChoiceCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n result: InteractiveResult\n): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n return isMarkableAnswerMarkedCorrect(interaction, getStudentAnswer);\n}\n\nconst IsCorrectLookup: {[typeId: number]: IsCorrectFunction} = {\n [InteractionTypeId.Annotation]: notApplicable,\n [InteractionTypeId.Image]: notApplicable,\n [InteractionTypeId.MissingWord]: wrapIsMissingWordCorrect,\n [InteractionTypeId.MultipleChoice]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.ShortAnswer]: wrapIsMarkableAnswerMarkedCorrect,\n [InteractionTypeId.TrueOrFalse]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.Illustration]: wrapIsMarkableAnswerMarkedCorrect\n};\n\nfunction isInteractionCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const isCorrectFn = IsCorrectLookup[interaction.typeId];\n\n return isCorrectFn(interaction, result);\n}\n\nexport const InteractiveCorrectnessHelper = {\n notApplicable,\n awaitingMarking,\n isMissingWordCorrect,\n isMultipleChoiceCorrect,\n isInteractionCorrect\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 { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\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 { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsOverviewDemoViewProps {\n type?: ShareType;\n}\n\nexport function InteractiveInsightsOverviewDemoView(props: InteractiveInsightsOverviewDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\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 const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(\n InsightsDemoRequests.videoViews()\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n interactiveMetadata.data &&\n interactive.data &&\n results.data &&\n aggregateEngagement.data &&\n !!videoViews.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(\n '',\n params,\n props.type\n );\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n if (!hasDataLoaded)\n return <></>;\n \n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'insights', params, props.type)}\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 <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n classroomStudents={null}\n results={results.data}\n osCount={videoViews.data?.osCount}\n config={config.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n share={share}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getInteractiveInsightsAppLinks(id: string, params?: HashObject, type?: ShareType) {\n if (type === ShareType.Open) {\n return {\n resultsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n },\n questionsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n },\n heatmapAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n }\n };\n }\n \n return {\n resultsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n },\n questionsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n },\n heatmapAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\n args: [id],\n params\n }\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};"],"names":["namespace","ZERO_COLOUR","COLOUR_SCALE","LEGEND_VALUES","getBackgroundColor","value","max","hex","getGradient","data","gradient","i","length","previousValue","currentValue","nextValue","push","join","EngagementHeatMapLegend","Math","legendSquareWidthPercentage","className","Text","phrase","map","val","idx","key","style","width","backgroundColor","EngagementHeatMap","props","heatMap","engagement","background","InsightCard","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","getFullHeatMap","videoDuration","Array","ceil","fill","t","getEngagementRate","reduce","prev","next","engagementRate","groupStudents","interactive","results","scoreThreshold","groups","markingRequired","lowScore","highScore","completed","notCompleted","interactions","interactionIds","Set","id","students","forEach","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","attempts","filter","a","has","answers","questionId","percentCorrect","HIGH","MODERATE","sortedLowScore","sortedHighScore","getInteractionById","interactionId","find","toString","getMarkedAnswerId","answer","resultId","getMarkedStatus","studentResults","markedAnswers","result","studentResponse","every","status","getInteractionResultsSummary","interaction","numStudents","numCorrect","answered","unanswered","correctness","correct","numInteractions","answeredInteractions","getPhrase","UserRecipientItemMetadata","user","anonymiseUsers","showDisplayName","sessionId","deleted","anonName","nameParts","split","n","name","surname","slice","avatarUrl","avatar","url","getUserProps","avatarClassName","imageUrl","imageCdnUrl","initials","showAnonymousUser","anonymousSvgSize","detailsClassName","nameClassName","showSubText","getSubText","userType","role","yearGroup","defaults","InteractionCorrectness","InteractiveAnswerStatus","InsightsDemoRequests","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","notApplicable","isMissingWordCorrect","getStudentAnswer","items","actionableItems","isCorrect","trim","toLowerCase","isMultipleChoiceCorrect","studentAnswer","getGetStudentAnswer","attempt","wrapIsMultipleChoiceCorrect","text","wrapIsMarkableAnswerMarkedCorrect","item","isMarkableAnswerMarkedCorrect","IsCorrectLookup","InteractiveCorrectnessHelper","isInteractionCorrect","isCorrectFn","typeId","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","label","appLink","group","LanguageService","InteractiveInsightsOverviewDemoView","SharedViewModelKeys","useLockContentWidth","currentUser","UserRequests","config","ConfigRequests","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","useSetPageMetadata","video","hasDataLoaded","params","interactiveInsightsAppLinks","ShareType","resultsAppLink","args","questionsAppLink","heatmapAppLink","getInteractiveInsightsAppLinks","InsightsHeader","tabs","yearGroups","isDemo","hasData","InteractiveInsightsOverview","classroomStudents","osCount"],"sourceRoot":""}