@clickview/lite 0.70.1-dev.5 → 0.70.1-dev.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{9583-lite-9eda71423d.chunk.css → 3878-lite-877e596a24.chunk.css} +3 -0
- package/dist/css/{5797-lite-1dfd2c337d.chunk.css → 5099-lite-7d7c063e62.chunk.css} +3 -0
- package/dist/css/{8191-lite-ee877f2ecd.chunk.css → 6984-lite-53c3fa4d18.chunk.css} +3 -0
- package/dist/css/{8723-lite-676baa8218.chunk.css → 7103-lite-ee0c975440.chunk.css} +3 -0
- package/dist/css/{7783-lite-1dfd2c337d.chunk.css → 7394-lite-7d7c063e62.chunk.css} +3 -0
- package/dist/css/7502-lite-9b2ed5bd56.chunk.css +4 -0
- package/dist/css/{5721-lite-9eda71423d.chunk.css → 7548-lite-877e596a24.chunk.css} +3 -0
- package/dist/css/{549-lite-b49bde8e4d.chunk.css → 7657-lite-ad909396f3.chunk.css} +3 -1
- package/dist/css/{6783-lite-e85973335b.chunk.css → 829-lite-27b58d07b3.chunk.css} +3 -0
- package/dist/css/{5635-lite-ee877f2ecd.chunk.css → 9673-lite-53c3fa4d18.chunk.css} +3 -0
- package/dist/scripts/1107-0fb4769540-lite.chunk.js +2 -0
- package/dist/scripts/1107-0fb4769540-lite.chunk.js.map +1 -0
- package/dist/scripts/1437-658ad1fe2b-lite.chunk.js +2 -0
- package/dist/scripts/1437-658ad1fe2b-lite.chunk.js.map +1 -0
- package/dist/scripts/1710-ef798f1e0d-lite.chunk.js +2 -0
- package/dist/scripts/1710-ef798f1e0d-lite.chunk.js.map +1 -0
- package/dist/scripts/2024-4fec8f175b-lite.chunk.js +2 -0
- package/dist/scripts/2024-4fec8f175b-lite.chunk.js.map +1 -0
- package/dist/scripts/2435-a846651e83-lite.chunk.js +2 -0
- package/dist/scripts/2435-a846651e83-lite.chunk.js.map +1 -0
- package/dist/scripts/2809-84ce060e14-lite.chunk.js +2 -0
- package/dist/scripts/2809-84ce060e14-lite.chunk.js.map +1 -0
- package/dist/scripts/3878-45fd0861cc-lite.chunk.js +2 -0
- package/dist/scripts/3878-45fd0861cc-lite.chunk.js.map +1 -0
- package/dist/scripts/4096-c834372efb-lite.chunk.js +2 -0
- package/dist/scripts/4096-c834372efb-lite.chunk.js.map +1 -0
- package/dist/scripts/4456-ada4977b41-lite.chunk.js +2 -0
- package/dist/scripts/4456-ada4977b41-lite.chunk.js.map +1 -0
- package/dist/scripts/4806-a05a2a3012-lite.chunk.js +2 -0
- package/dist/scripts/4806-a05a2a3012-lite.chunk.js.map +1 -0
- package/dist/scripts/5099-297f8cd028-lite.chunk.js +2 -0
- package/dist/scripts/5099-297f8cd028-lite.chunk.js.map +1 -0
- package/dist/scripts/5829-903613bbf0-lite.chunk.js +3 -0
- package/dist/scripts/5829-903613bbf0-lite.chunk.js.map +1 -0
- package/dist/scripts/5925-937fec8a93-lite.chunk.js +2 -0
- package/dist/scripts/5925-937fec8a93-lite.chunk.js.map +1 -0
- package/dist/scripts/6459-ac139cb154-lite.chunk.js +2 -0
- package/dist/scripts/6459-ac139cb154-lite.chunk.js.map +1 -0
- package/dist/scripts/6629-4edaed39c8-lite.chunk.js +3 -0
- package/dist/scripts/6629-4edaed39c8-lite.chunk.js.map +1 -0
- package/dist/scripts/6984-9d8b378bcc-lite.chunk.js +2 -0
- package/dist/scripts/6984-9d8b378bcc-lite.chunk.js.map +1 -0
- package/dist/scripts/7103-ef79582538-lite.chunk.js +2 -0
- package/dist/scripts/7103-ef79582538-lite.chunk.js.map +1 -0
- package/dist/scripts/7394-5448807e14-lite.chunk.js +2 -0
- package/dist/scripts/7394-5448807e14-lite.chunk.js.map +1 -0
- package/dist/scripts/7502-78b085caad-lite.chunk.js +2 -0
- package/dist/scripts/7502-78b085caad-lite.chunk.js.map +1 -0
- package/dist/scripts/7548-5eb0d3b7a0-lite.chunk.js +2 -0
- package/dist/scripts/7548-5eb0d3b7a0-lite.chunk.js.map +1 -0
- package/dist/scripts/7593-cc4e09c847-lite.chunk.js +2 -0
- package/dist/scripts/7593-cc4e09c847-lite.chunk.js.map +1 -0
- package/dist/scripts/7657-e302fda4f2-lite.chunk.js +2 -0
- package/dist/scripts/7657-e302fda4f2-lite.chunk.js.map +1 -0
- package/dist/scripts/8057-431c6be34c-lite.chunk.js +2 -0
- package/dist/scripts/8057-431c6be34c-lite.chunk.js.map +1 -0
- package/dist/scripts/8224-b9b5d3b1a5-lite.chunk.js +2 -0
- package/dist/scripts/8224-b9b5d3b1a5-lite.chunk.js.map +1 -0
- package/dist/scripts/829-aff9937989-lite.chunk.js +3 -0
- package/dist/scripts/829-aff9937989-lite.chunk.js.map +1 -0
- package/dist/scripts/{9250-ec244ab17a-lite.chunk.js → 8723-708f2373d6-lite.chunk.js} +3 -3
- package/dist/scripts/{9250-ec244ab17a-lite.chunk.js.map → 8723-708f2373d6-lite.chunk.js.map} +1 -1
- package/dist/scripts/8960-c159492ba3-lite.chunk.js +2 -0
- package/dist/scripts/8960-c159492ba3-lite.chunk.js.map +1 -0
- package/dist/scripts/9673-8a2740611a-lite.chunk.js +2 -0
- package/dist/scripts/9673-8a2740611a-lite.chunk.js.map +1 -0
- package/dist/scripts/9882-f1a9cc55ec-lite.chunk.js +2 -0
- package/dist/scripts/9882-f1a9cc55ec-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-d2cf17c78d.min.js → bundle-5a89651ec2.min.js} +3 -3
- package/dist/scripts/{bundle-d2cf17c78d.min.js.map → bundle-5a89651ec2.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/css/7428-lite-e2d7497beb.chunk.css +0 -8
- package/dist/scripts/1565-ba78a2a25c-lite.chunk.js +0 -2
- package/dist/scripts/1565-ba78a2a25c-lite.chunk.js.map +0 -1
- package/dist/scripts/2024-abf6cf1842-lite.chunk.js +0 -2
- package/dist/scripts/2024-abf6cf1842-lite.chunk.js.map +0 -1
- package/dist/scripts/2072-50b656cb3b-lite.chunk.js +0 -2
- package/dist/scripts/2072-50b656cb3b-lite.chunk.js.map +0 -1
- package/dist/scripts/2574-02faf4a2d2-lite.chunk.js +0 -2
- package/dist/scripts/2574-02faf4a2d2-lite.chunk.js.map +0 -1
- package/dist/scripts/396-2ffc09cc70-lite.chunk.js +0 -2
- package/dist/scripts/396-2ffc09cc70-lite.chunk.js.map +0 -1
- package/dist/scripts/4377-001a8ee263-lite.chunk.js +0 -2
- package/dist/scripts/4377-001a8ee263-lite.chunk.js.map +0 -1
- package/dist/scripts/4806-c2dce3650d-lite.chunk.js +0 -2
- package/dist/scripts/4806-c2dce3650d-lite.chunk.js.map +0 -1
- package/dist/scripts/4948-30af9a446d-lite.chunk.js +0 -2
- package/dist/scripts/4948-30af9a446d-lite.chunk.js.map +0 -1
- package/dist/scripts/549-2d591052e3-lite.chunk.js +0 -2
- package/dist/scripts/549-2d591052e3-lite.chunk.js.map +0 -1
- package/dist/scripts/5635-6e2559f04d-lite.chunk.js +0 -2
- package/dist/scripts/5635-6e2559f04d-lite.chunk.js.map +0 -1
- package/dist/scripts/5679-80c1d8434e-lite.chunk.js +0 -2
- package/dist/scripts/5679-80c1d8434e-lite.chunk.js.map +0 -1
- package/dist/scripts/5721-2141ed4fb6-lite.chunk.js +0 -2
- package/dist/scripts/5721-2141ed4fb6-lite.chunk.js.map +0 -1
- package/dist/scripts/5797-f84ce545b9-lite.chunk.js +0 -2
- package/dist/scripts/5797-f84ce545b9-lite.chunk.js.map +0 -1
- package/dist/scripts/581-fe733617bd-lite.chunk.js +0 -2
- package/dist/scripts/581-fe733617bd-lite.chunk.js.map +0 -1
- package/dist/scripts/5829-689f5be5d1-lite.chunk.js +0 -3
- package/dist/scripts/5829-689f5be5d1-lite.chunk.js.map +0 -1
- package/dist/scripts/6046-5652117548-lite.chunk.js +0 -2
- package/dist/scripts/6046-5652117548-lite.chunk.js.map +0 -1
- package/dist/scripts/6629-910e316a83-lite.chunk.js +0 -3
- package/dist/scripts/6629-910e316a83-lite.chunk.js.map +0 -1
- package/dist/scripts/6783-7efd15103a-lite.chunk.js +0 -3
- package/dist/scripts/6783-7efd15103a-lite.chunk.js.map +0 -1
- package/dist/scripts/7064-f5e8bc71bc-lite.chunk.js +0 -2
- package/dist/scripts/7064-f5e8bc71bc-lite.chunk.js.map +0 -1
- package/dist/scripts/7428-546d62999f-lite.chunk.js +0 -2
- package/dist/scripts/7428-546d62999f-lite.chunk.js.map +0 -1
- package/dist/scripts/7482-9016f79093-lite.chunk.js +0 -2
- package/dist/scripts/7482-9016f79093-lite.chunk.js.map +0 -1
- package/dist/scripts/7757-9b72774917-lite.chunk.js +0 -2
- package/dist/scripts/7757-9b72774917-lite.chunk.js.map +0 -1
- package/dist/scripts/7783-18da4064c0-lite.chunk.js +0 -2
- package/dist/scripts/7783-18da4064c0-lite.chunk.js.map +0 -1
- package/dist/scripts/8191-ff27deee6c-lite.chunk.js +0 -2
- package/dist/scripts/8191-ff27deee6c-lite.chunk.js.map +0 -1
- package/dist/scripts/8672-094d54cbbd-lite.chunk.js +0 -2
- package/dist/scripts/8672-094d54cbbd-lite.chunk.js.map +0 -1
- package/dist/scripts/8723-c3aaa1643a-lite.chunk.js +0 -2
- package/dist/scripts/8723-c3aaa1643a-lite.chunk.js.map +0 -1
- package/dist/scripts/9583-3b2623e754-lite.chunk.js +0 -2
- package/dist/scripts/9583-3b2623e754-lite.chunk.js.map +0 -1
- /package/dist/css/{4377-lite-856c02f000.chunk.css → 1107-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{581-lite-a1cdc302ab.chunk.css → 1437-lite-a1cdc302ab.chunk.css} +0 -0
- /package/dist/css/{7757-lite-856c02f000.chunk.css → 4456-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{9250-lite-37216d4207.chunk.css → 8723-lite-37216d4207.chunk.css} +0 -0
- /package/dist/scripts/{5829-689f5be5d1-lite.chunk.js.LICENSE.txt → 5829-903613bbf0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6629-910e316a83-lite.chunk.js.LICENSE.txt → 6629-4edaed39c8-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6783-7efd15103a-lite.chunk.js.LICENSE.txt → 829-aff9937989-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9250-ec244ab17a-lite.chunk.js.LICENSE.txt → 8723-708f2373d6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-d2cf17c78d.min.js.LICENSE.txt → bundle-5a89651ec2.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/1710-ef798f1e0d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/engagement-table.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/EngagementTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/EngagementTable.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/FilterParamUtils.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/constants/ScoreThresholds.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"rwDjh\",\"avatarContainer\":\"kW4ZM\"};","import React from 'react';\nimport { Column, ColumnInstance, Row } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { anonymiseUserName, getAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Engagement, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './engagement-table.scss';\n\nconst namespace = 'shared.engagementTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<EngagementTableData>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={`d-inline-block ${props.column.isSorted ? 'fw-bold' : ''}`}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport interface EngagementTableData extends Engagement {\n user: UserOrAnonSession;\n}\n\nfunction getMaxHeatMapValue(engagement: Engagement[]): number {\n let max = 0;\n\n engagement.forEach(e => {\n const localMax = Math.max(...e.heatMap);\n\n if (localMax > max)\n max = localMax;\n });\n\n return max;\n}\n\nfunction getUsersName(user: UserOrAnonSession, anonymiseUsers: boolean) {\n const fullName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = fullName.split(' ').filter(n => !!n);\n\n return {\n name: nameParts[0],\n surname: nameParts.slice(1).join(' ')\n };\n}\n\ninterface EngagementColumnProps {\n engagement: Engagement[],\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function useGetColumns(props: EngagementColumnProps): Column<EngagementTableData>[] {\n return React.useMemo(() => {\n const maxHeatMapValue = getMaxHeatMapValue(props.engagement);\n\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n width: 22,\n accessor: 'user',\n sortType: (rowA: Row<EngagementTableData>, rowB: Row<EngagementTableData>) => {\n const nameA = anonymiseUserName(rowA.values.user, props.anonymiseUsers);\n const nameB = anonymiseUserName(rowB.values.user, props.anonymiseUsers);\n\n return nameA > nameB ? 1 : -1;\n },\n Cell: ({ value }) => {\n const { name, surname } = getUsersName(value, props.anonymiseUsers);\n return (\n <CellWrapper className='d-flex align-items-center h-100'>\n <span className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n imageUrl={!props.anonymiseUsers && 'avatar' in value ? value.avatar?.url : null}\n showAnonymousUser={'sessionId' in value}\n />\n </span>\n <span className={'ms-2 clamp-1'}>\n {name} {surname}\n </span>\n </CellWrapper>\n );\n }\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='views' />,\n accessor: 'viewCount',\n width: 15,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n Cell: ({ value }) => (\n <CellWrapper className='d-flex align-items-center h-100'>\n <div>{value}</div>\n </CellWrapper>\n )\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='engagement' />,\n accessor: 'engagementRate',\n width: 20,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n Cell: ({ value }) => (\n <CellWrapper className='w-33'>\n <PercentageIndicator\n percentage={value}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n </CellWrapper>\n )\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='heatMap' />,\n accessor: 'heatMap',\n width: 48,\n disableSortBy: true,\n Cell: ({ row: { original } }) => (\n <CellWrapper className='d-flex align-items-center h-100'>\n <EngagementHeatMap\n engagement={original}\n max={maxHeatMapValue}\n className={`${styles.heatMap} flex-grow-1`}\n />\n </CellWrapper>\n )\n }\n ];\n }, [props.anonymiseUsers]);\n}\n\nexport function useGetTableData(\n engagement: Engagement[],\n users: User[],\n anonSessions: AnonSessions\n): EngagementTableData[] {\n const data: EngagementTableData[] = [];\n\n engagement.forEach(e => {\n const user = users?.find(u => u.id === e.userId);\n\n // Omit deleted users\n if (user)\n data.push({ ...e, user });\n else if (e.sessionId)\n data.push({ ...e, user: getAnonSession(e.sessionId, anonSessions) });\n else if ((e as any).user)\n data.push({ ...e, user: (e as any).user });\n });\n \n return data;\n}","import React from 'react';\n\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Engagement, User } from 'libs/shared/interfaces';\n\nimport { useGetColumns, useGetTableData } from './EngagementTableUtils';\n\nconst theme: TableTheme = {\n table: 'bg-white rounded px-0',\n header: 'border-bottom',\n headerCell: 'm-3',\n cell: 'mx-3 my-2'\n};\n\ninterface EngagementTableProps {\n engagement: Engagement[];\n imageCdnUrl: string;\n users?: User[];\n anonymiseUsers: boolean;\n border?: boolean;\n anonSessions?: AnonSessions;\n theme?: Partial<TableTheme>;\n hideWhenEmpty?: boolean;\n}\n\nEngagementTable.defaultProps = {\n hideWhenEmpty: true\n};\n\nexport function EngagementTable(props: EngagementTableProps): JSX.Element {\n const columns = useGetColumns({\n engagement: props.engagement,\n imageCdnUrl: props.imageCdnUrl,\n anonymiseUsers: props.anonymiseUsers\n });\n\n const mergedTheme = { ...theme, ...props.theme };\n\n const data = useGetTableData(props.engagement, props.users, props.anonSessions);\n\n if (!data.length && props.hideWhenEmpty)\n return <></>;\n\n return (\n <Table\n columns={columns}\n data={data}\n theme={{\n ...mergedTheme,\n table: props.border ? `${mergedTheme.table} border` : mergedTheme.table\n }}\n enableSort\n />\n );\n}","import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonSession, AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { StudentResults } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getUniqueNamesConfig(id: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${id}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: UserOrAnonSession, shouldAnonymise: boolean): string {\n if (!user)\n return '';\n\n if (!shouldAnonymise)\n return 'sessionId' in user ? user.sessionName : UserHelper.getFullName(user);\n\n return uniqueNamesGenerator(getUniqueNamesConfig('sessionId' in user ? user.sessionName : user.id));\n}\n\nexport function getAnonSession(sessionId: string, anonSessions: AnonSessions): AnonSession {\n const fallback = {\n sessionId: sessionId,\n sessionName: getPhrase('anonymousUser')\n };\n\n if (!sessionId || !anonSessions)\n return fallback;\n\n const anonSession = anonSessions[sessionId];\n\n if (anonSession)\n return anonSession;\n\n return fallback;\n}\n\nexport function getUserOrAnonSession(result: StudentResults, anonSessions: AnonSessions): UserOrAnonSession {\n if (result.user)\n return result.user;\n\n return getAnonSession(result.sessionId, anonSessions);\n}\n","import { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nexport function getFilterParamsKey(filters: FilterQueryParams): string {\n const keys: string[] = [];\n\n Object.keys(filters).forEach((key: keyof FilterQueryParams) => {\n const val = filters[key];\n\n if (!val)\n return;\n\n keys.push(`${key}:${Array.isArray(val) ? val.join(',') : val}`);\n });\n\n return keys.join(':');\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 \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(): JSX.Element[] {\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}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};"],"names":["getPhrase","LanguageService","CellWrapper","props","className","children","HeaderCell","column","isSorted","phraseKey","useGetColumns","engagement","max","maxHeatMapValue","forEach","e","localMax","Math","heatMap","Header","width","accessor","sortType","rowA","rowB","values","user","anonymiseUsers","Cell","nameParts","value","name","split","filter","n","surname","slice","join","Avatar","imageCdnUrl","initials","UserHelper","imageUrl","avatar","url","showAnonymousUser","sortDescFirst","PercentageIndicator","percentage","layout","disableSortBy","original","row","EngagementHeatMap","theme","table","header","headerCell","cell","EngagementTable","columns","mergedTheme","data","users","anonSessions","find","u","id","userId","push","sessionId","useGetTableData","length","hideWhenEmpty","Table","border","enableSort","defaultProps","anonymiseUserName","shouldAnonymise","sessionName","seed","floor","Date","getMinutes","dictionaries","separator","style","getAnonSession","fallback","getUserOrAnonSession","result","getFilterParamsKey","filters","keys","Object","key","val","Array","isArray","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","canSort","sortIndicator","SvgContainer","svgName","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","getRowId","useTable","plugins","useSortBy","useRowSelect","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","map","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","childProps","childComponent","cells","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","onSortEnd","onSortingRowsEnd","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","ScoreThresholdDefaults","HIGH","MODERATE","ScoreThresholdInsights"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2024],{26025:(e,r,t)=>{t.d(r,{B:()=>o});var n=t(1048),a=t(75795),o={getAudienceAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,r=n.t.isObject(e.params)?e.params:{},t=r.users,o=r.classrooms,s=r.classroomGroups,i=function(e){var t=r[e];if(t)return Array.isArray(t)?t:[t]},u={};return t&&(u.users=i("users")),o&&(u.classrooms=i("classrooms")),s&&(u.classroomGroups=i("classroomGroups")),u},getDateRangeAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,r=n.t.isObject(e.params)?e.params:{},t=r.from,o=r.to,s=r.rangeName,i={};return t&&(i.from=t),o&&(i.to=o),s&&(i.rangeName=s),i}}},74901:(e,r,t)=>{function n(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return a(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?a(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}t.d(r,{K:()=>o});var o=function(e){var r=[],t=[];return e.users&&r.push.apply(r,n(e.users)),e.classrooms&&t.push.apply(t,n(e.classrooms)),e.classroomGroups&&t.push.apply(t,n(e.classroomGroups)),{userId:r,groupId:t}}},1568:(e,r,t)=>{t.r(r),t.d(r,{GenerateInteractiveResultsReportView:()=>N});var n=t(32735),a=t(23481),o=t(2948),s=t(20354),i=t(110),u=t(84806),c=t(71553),l=t(41196),d=t(26025),m=t(74901),p=t(40003),f=t(2606),v=t(9111),y=t(13876),g=t(83345),h=t(38143),b=t(28972),w=t(20768),A=t(31949),S=t(69883),E=t(91286),I=t(83140),R=t(80845),k=t(64818);function C(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,a,o,s,i=[],u=!0,c=!1;try{if(o=(t=t.call(e)).next,0===r){if(Object(t)!==t)return;u=!1}else for(;!(u=(n=o.call(t)).done)&&(i.push(n.value),i.length!==r);u=!0);}catch(e){c=!0,a=e}finally{try{if(!u&&null!=t.return&&(s=t.return(),Object(s)!==s))return}finally{if(c)throw a}}return i}}(e,r)||function(e,r){if(e){if("string"==typeof e)return O(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?O(e,r):void 0}}(e,r)||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 O(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}var j="shared.generateReport",F=a.T.encloseNamespace(j);function M(e){var r=i.O.convertUTCToLocal(e).toString();return i.O.format(r,"Do MMMM YYYY")}function N(e){var r,t,a=C((0,o.D)(h.g.ANONYMISE_USERS),1)[0],i=(0,S.Z)(),O=s.a.useGetFetchAsync(),N=d.B.getAudienceAppLinkParams(),L=d.B.getDateRangeAppLinkParams(),P=(0,p.wO)((0,p.Hb)(),L),_=C(n.useState(!1),2),G=_[0],q=_[1],D=s.a.useBasicFetch(A.N.currentUser()),Q=s.a.useBasicFetch(w.b.interactiveMetadata(e.interactiveId)),x=s.a.useBasicFetch((null===(r=Q.data)||void 0===r?void 0:r.interactiveId)?w.b.interactive(Q.data.interactiveId):null),B=(0,l.W)(e.interactiveId,Object.assign(Object.assign({},P),(0,m.K)(N)));(0,E.v)([x,Q,B]);var T=(0,R.Q)(x.data),U=(0,u.Fx)(x.data,B.data,!1,a);return n.createElement(g.D.Provider,{value:j},n.createElement(v.G,{title:F("title"),showLoadingSpinner:!D.hasCompleted,closePopup:e.closePopup},n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(g.x,{phrase:"description"})),n.createElement("p",null,n.createElement(g.x,{phrase:"dateRange",options:{dateFrom:M(P.start),dateTo:M(P.end)}})),n.createElement("p",null,n.createElement(g.x,{phrase:"emailDescription",options:{email:null===(t=D.data)||void 0===t?void 0:t.email}})),n.createElement(y.u,null,n.createElement(y.u.Cancel,{onClick:e.closePopup}),n.createElement(y.u.Submit,{variant:"dark",onClick:function(){q(!0);var r={interactiveName:Q.data.name,userId:D.data.id,customerId:D.data.customerId,questions:T.map((function(e){return e.name})),rows:U.map((function(e){return{name:k.l.getFullName(e.user),unanswered:e.summary.unanswered,percentage:(0,f.DV)((0,f.Ki)(e.summary.percentCorrect)),correct:e.summary.correct,totalQuestions:e.summary.answered+e.summary.unanswered,results:T.map((function(r){switch(I.A.isInteractionCorrect(r,(0,R.j_)(e))){case b.w.Correct:return F("correct");case b.w.Incorrect:return F("incorrect");case b.w.NotApplicable:return"-";case b.w.AwaitingMarking:return F("awaitingMarking");case b.w.UnAnswered:case b.w.Answered:default:return""}}))}}))};O(c.I.interactiveResultsReport(r)).then((function(){i.success(F("success"))})).catch((function(){i.error(F("error"))})).finally(e.closePopup)},text:F("generateReport"),showSpinner:G})))))}},94644:(e,r,t)=>{t.d(r,{r:()=>l});var n=t(50242),a=t(81886),o=t(67058),s=t(14553),i=t(49267),u=t(49075),c={notFound:o.d,forbidden:{rating:s.q,yearLevel:s.q,region:i.a,privacy:s.q},badRequest:u._,internalServerError:u._};function l(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},c),r);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==n.o.InternalServer?o!==n.o.NotFound?o!==n.o.Forbidden?t.badRequest||a.Q.Ry.throw(new s.badRequest):t.forbidden||a.Q.Ry.throw(new s.forbidden.privacy):t.notFound||a.Q.Ry.throw(new s.notFound):t.internalServerError||a.Q.Ry.throw(new u._))}}},91286:(e,r,t)=>{t.d(r,{v:()=>s});var n=t(32735),a=t(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,r,t){var s=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){s.forEach((function(e){(0,a.r)(e.statusCode,r,t)}))}),[o(s),r,t])}}}]);
|
|
2
|
+
//# sourceMappingURL=2024-4fec8f175b-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/2024-4fec8f175b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AudienceUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/views/generate-report/GenerateInteractiveResultsReportView.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","import { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\n\nexport const getAudienceParams = (queryParams: AudienceQueryParams) => {\n const userId: string[] = [];\n const groupId: string[] = [];\n\n if (queryParams.users)\n userId.push(...queryParams.users);\n\n if (queryParams.classrooms)\n groupId.push(...queryParams.classrooms);\n\n if (queryParams.classroomGroups)\n groupId.push(...queryParams.classroomGroups);\n return {\n userId,\n groupId\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';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { useGetResultsTableData } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTableUtils';\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { getFormattedPercentage, getPercentageToFixed } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { CurrentUser, Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.generateReport';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getReportFriendlyDate(date: string): string {\n const localDate = DateHelper.convertUTCToLocal(date).toString();\n return DateHelper.format(localDate, 'Do MMMM YYYY');\n}\n\ninterface GenerateInteractiveResultsReportViewProps extends PopupViewProps {\n interactiveId: string;\n}\n\nexport function GenerateInteractiveResultsReportView(props: GenerateInteractiveResultsReportViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const startEndParams = getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams);\n\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const results = useFetchInteractiveResults(props.interactiveId, {\n ...startEndParams,\n ...getAudienceParams(audienceAppLinkParams)\n });\n\n useHandleObjectError([ interactive, interactiveMetadata, results ]);\n\n const interactions = getInteractions(interactive.data);\n\n const answerData = useGetResultsTableData(interactive.data, results.data, false, anonymiseUsers);\n\n function onClickGenerate(): void {\n setShowSpinner(true);\n\n const body: InteractiveResultsReport = {\n interactiveName: interactiveMetadata.data.name,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n questions: interactions.map(i => i.name),\n rows: answerData.map(answer => {\n return {\n name: UserHelper.getFullName(answer.user),\n unanswered: answer.summary.unanswered,\n percentage: getFormattedPercentage(getPercentageToFixed(answer.summary.percentCorrect)),\n correct: answer.summary.correct,\n totalQuestions: answer.summary.answered + answer.summary.unanswered,\n results: interactions.map(interaction => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(answer)\n );\n\n switch (correctness) {\n case InteractionCorrectness.Correct:\n return getPhrase('correct');\n\n case InteractionCorrectness.Incorrect:\n return getPhrase('incorrect');\n\n case InteractionCorrectness.NotApplicable:\n return '-';\n\n case InteractionCorrectness.AwaitingMarking:\n return getPhrase('awaitingMarking');\n\n case InteractionCorrectness.UnAnswered:\n case InteractionCorrectness.Answered:\n default:\n return '';\n }\n })\n };\n })\n };\n\n fetchAsync(InteractiveResultsRequests.interactiveResultsReport(body))\n .then(() => {\n alerts.success(getPhrase('success'));\n })\n .catch(() => {\n alerts.error(getPhrase('error'));\n })\n .finally(props.closePopup);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={!currentUser.hasCompleted}\n closePopup={props.closePopup}\n >\n <>\n <p>\n <Text phrase='description' />\n </p>\n <p>\n <Text phrase='dateRange' options={({\n dateFrom: getReportFriendlyDate(startEndParams.start),\n dateTo: getReportFriendlyDate(startEndParams.end)\n })} />\n </p>\n <p>\n <Text phrase='emailDescription' options={({ email: currentUser.data?.email })} />\n </p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='dark'\n onClick={onClickGenerate}\n text={getPhrase('generateReport')}\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </>\n </Popup>\n </LanguageNamespaceContext.Provider>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}"],"names":["AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","getAudienceParams","queryParams","userId","groupId","push","namespace","getPhrase","getReportFriendlyDate","date","localDate","toString","GenerateInteractiveResultsReportView","props","anonymiseUsers","alerts","fetchAsync","audienceAppLinkParams","dateRangeAppLinkParams","startEndParams","showSpinner","setShowSpinner","currentUser","interactiveMetadata","interactiveId","interactive","data","results","interactions","answerData","value","title","showLoadingSpinner","hasCompleted","closePopup","phrase","options","dateFrom","start","dateTo","end","email","onClick","variant","body","interactiveName","name","id","customerId","questions","map","i","rows","answer","user","unanswered","summary","percentage","percentCorrect","correct","totalQuestions","answered","interaction","I","then","success","error","text","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","useEffect","forEach"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2435],{38307:(e,t,a)=>{a.d(t,{c:()=>y,l:()=>p});var n=a(32735),r=a(232),i=a.n(r),c=a(8604),l=a(83345);const o={heatMap:"epapa",legend:"uhH4p"};function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var u="shared.engagementHeatMap",d="#f1f1f1",m=i().scale(["#daf07d","#08bd1a"]),f=[0,.01,.25,.5,.75,1];function g(e,t){return e?m(e/t).hex():d}function v(e,t){for(var a=[],n=0;n<e.length;n++){var r=n>0&&e[n-1],i=e[n],c=n<e.length-1&&e[n+1];i===r&&i===c||a.push("".concat(g(i,t)," ").concat(100/e.length*n,"%"))}return"linear-gradient(to right, ".concat(a.join(","),")")}function p(){var e=Math.max.apply(Math,f),t=100/f.length;return n.createElement("div",{className:"d-flex justify-content-between w-100"},n.createElement(l.x,{namespace:u,phrase:"less"}),n.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(o.legend)},f.map((function(a,r){return n.createElement("div",{key:r,style:{width:"".concat(t,"%"),backgroundColor:g(a,e)}})}))),n.createElement(l.x,{namespace:u,phrase:"more"}))}function y(e){var t,a,r,i=(0,c.O)(e.engagement),l=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return s(e)}(r=i)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?s(e,t):void 0}}(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return n.createElement("div",{className:"border rounded ".concat(o.heatMap," ").concat(null!==(a=e.className)&&void 0!==a?a:""),style:{background:v(i,l)}})}},8604:(e,t,a)=>{function n(e){return new Array(Math.ceil(e.videoDuration)).fill(null).map((function(t,a){return e.heatMap[a]||0}))}a.d(t,{O:()=>n})},40782:(e,t,a)=>{a.d(t,{I:()=>n,O:()=>o});var n,r=a(32735),i=a(2606),c=a(362);function l(e){var t=r.useCallback((function(t){if(t){var a=t.r.baseVal.value,n=2*Math.PI*a,r=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=r.toString()}}),[e.percentage]);return r.createElement("svg",null,r.createElement("circle",{r:(0,i.pu)(e.size),className:c.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&r.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function o(e){var t,a=(0,i.Ki)(e.percentage),o=e.size||(e.layout===n.LabelInside?i.Mk.Large:i.Mk.Small),s=e.customLabel||(0,i.DV)(a);return e.layout===n.LabelOnly?r.createElement("span",{className:(0,i.IA)(a)},s):r.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&r.createElement("span",{className:"me-2"},s),r.createElement("div",{className:(0,i.tw)(o,a)},r.createElement(l,{percentage:a,size:o,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&r.createElement("span",{className:c.Z.centredPercentageText},s)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),o.defaultProps={layout:n.CircleOnly}},2606:(e,t,a)=>{a.d(t,{DV:()=>p,IA:()=>f,Ki:()=>v,Mk:()=>l,V4:()=>m,pu:()=>d,tw:()=>g,zR:()=>y});var n=a(94892),r=a(362);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t,a){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var l,o=.2,s=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(l||(l={}));var u=c(c(c({},l.ExtraSmall,{size:2}),l.Small,{size:2}),l.Large,{size:5.8});function d(e){var t=u[e].size,a=e===l.Large?s:o;return"".concat(t/2-2*a,"rem")}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?r.Z.circleSuccess:e>=t.MODERATE?r.Z.circleWarning:r.Z.circleDanger}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function g(e,t){var a="d-inline-block ".concat(r.Z.circleContainer);return e===l.Large&&(a+=" ".concat(r.Z.lgCircleContainer)),e===l.ExtraSmall&&(a+=" ".concat(r.Z.xsCircleContainer)),y(t)&&(a+=" ".concat(r.Z.pendingCircle)),a}function v(e){if(!y(e))return+e.toFixed(2)}function p(e){return y(e)?"--%":"".concat(Math.round(100*e),"%")}function y(e){return"number"!=typeof e}},54405:(e,t,a)=>{a.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},93322:(e,t,a)=>{a.d(t,{F:()=>i});var n=a(32735),r=a(13126);function i(){n.useEffect((function(){return r.e.lockContentWidth(),function(){return r.e.unlockContentWidth()}}),[])}},18006:(e,t,a)=>{a.d(t,{c:()=>n,q:()=>r});var n="D8qRe7",r="GRWx6w"},44183:(e,t,a)=>{a.r(t),a.d(t,{InsightsHeatmapDemoView:()=>w});var n=a(32735),r=a(23481),i=a(2948),c=a(20354),l=a(26025),o=a(60051),s=a(39151),u=a(54405),d=a(47812),m=a(31949),f=a(93322),g=a(79612),v=a(86702),p=a(53936),y=a(35274),h=a(18006),b=a(10447);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var E=r.T.encloseNamespace("shared.insightsHeatmap");function w(){var e,t,a,r,w=(a=(0,i.D)(v.y.ANONYMISE_USERS),r=1,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,c,l=[],o=!0,s=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(l.push(n.value),l.length!==t);o=!0);}catch(e){s=!0,r=e}finally{try{if(!o&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(s)throw r}}return l}}(a,r)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?k(e,t):void 0}}(a,r)||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,f.F)();var S=c.a.useBasicFetch(m.N.currentUser()),x=c.a.useBasicFetch(u.X.interactiveMetadata()),A=c.a.useBasicFetch(s.L.config()),C=l.B.getAudienceAppLinkParams(),j=l.B.getDateRangeAppLinkParams(),L=c.a.useBasicFetch(u.X.aggregateHeatmap()),M=c.a.useBasicFetch(u.X.individualHeatmap()),N=c.a.useBasicFetch(u.X.users()),z=c.a.useBasicFetch(u.X.videoViews()),I=c.a.useBasicFetch(x.data&&d.k.createViewKey(function(){var e;return(null===(e=A.data)||void 0===e?void 0:e.liteUrl.includes("staging"))?h.c:h.q}(),o.f.Share));(0,g.M)({title:x.data?E("pageTitle",{video:null===(e=x.data)||void 0===e?void 0:e.name}):null});var D=S.data&&z.data&&x.data&&L.data&&I.data,O=!!M.data,R=Object.assign(Object.assign({},C),j);return n.createElement("div",{className:"px-3"},n.createElement(p.j,{video:x.data,tabs:(0,b.aq)(null===(t=x.data)||void 0===t?void 0:t.id,"heatmap",R),dateRangeAppLinkParams:j,isDemo:!0}),n.createElement(y.w,{aggregateEngagement:L.data,individualEngagement:M.data,videoViews:z.data,config:A.data,users:N.data,viewKey:I.data,hasDataLoaded:!!D,tableDataLoaded:O,anonymiseUsers:w,audienceAppLinkParams:C,dateRangeAppLinkParams:j}))}},362:(e,t,a)=>{a.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
|
|
2
|
+
//# sourceMappingURL=2435-a846651e83-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/2435-a846651e83-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/utils/EngagementUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/heatmap/InsightsHeatmapDemoView.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.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}","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 return (new Array(Math.ceil(engagement.videoDuration))).fill(null).map((t, idx) => engagement.heatMap[idx] || 0);\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","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 { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\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, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey, User } from 'libs/shared/interfaces';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function InsightsHeatmapDemoView() {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<User[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(getDemoInteractiveId(), MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n currentUser.data &&\n videoViews.data &&\n video.data &&\n aggregateEngagement.data &&\n viewKey.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n function getDemoInteractiveId() {\n if (config.data?.liteUrl.includes('staging')) return DEMO_INTERACTIVE_STAGING_ID;\n\n return DEMO_INTERACTIVE_PROD_ID;\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n isDemo\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data}\n videoViews={videoViews.data}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={!!hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["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","getFullHeatMap","Array","ceil","videoDuration","fill","t","PercentageIndicatorLayout","ProgressCircle","ref","circle","radius","r","baseVal","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","toString","size","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","InsightsDemoRequests","interactive","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","useLockContentWidth","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","getPhrase","InsightsHeatmapDemoView","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","liteUrl","includes","getDemoInteractiveId","title","name","hasDataLoaded","tableDataLoaded","params","tabs","id","isDemo"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2809],{34079:(e,t,r)=>{r.d(t,{O:()=>s});var n=r(32735),a=r(23481),l=r(40782),i=r(36532),o=a.T.encloseNamespace("interactives.pendingIndicator");function c(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function s(e){var t=function(){return n.createElement("div",{className:c(e)},!!e.showLabel&&n.createElement("em",null,o("pending")),n.createElement(l.O,null))};return e.title?n.createElement(i.u,{title:e.title,spanHack:!0,spanHackClassName:e.tooltipClassName||"h-100 w-100 d-flex align-items-center"},n.createElement(t,null)):n.createElement(t,null)}},69087:(e,t,r)=>{r.d(t,{d:()=>k});var n=r(32735),a=r(38129),l=r(23481),i=r(75896),o=r(83914),c=r(8246),s=r(35223);function u(e){var t=e.answer;return n.createElement("div",{key:t.id,className:"".concat(function(e){switch(e){case c.N.Correct:return"bg-light-green";case c.N.Incorrect:return"bg-light-red";case c.N.PendingReview:return"bg-light-blue"}}(t.status)," rounded p-2 mb-2")},n.createElement("div",{className:"d-flex align-items-center gap-2"},t.status===c.N.Correct&&n.createElement(o.x,{svgName:s.vn.Check,className:"svg-container flex-shrink-0 text-success"}),t.status===c.N.Incorrect&&n.createElement(o.x,{svgName:s.vn.Close,className:"svg-container flex-shrink-0 text-danger"}),!e.customAnswer&&n.createElement("span",{className:e.textClassName},t.text)),e.children)}var m=l.T.encloseNamespace("shared.interactionResponses");function d(e){return d="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},d(e)}function f(e,t,r){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var g=function(){return n.createElement(n.Fragment,null)},v=f(f(f(f(f(f(f({},a.Z9.Annotation,g),a.Z9.Image,g),a.Z9.MissingWord,(function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map((function(e){return n.createElement("li",{key:e.id},n.createElement(u,{answer:e,textClassName:"bg-white p-1 border border-gray-300 rounded"}))}))):n.createElement(n.Fragment,null)})),a.Z9.MultipleChoice,(function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map((function(e){return n.createElement("li",{key:e.id},n.createElement(u,{answer:e}))}))):n.createElement(n.Fragment,null)})),a.Z9.TrueOrFalse,(function(e){var t=i.m.first(e.answers);return t?n.createElement(u,{answer:t}):n.createElement(n.Fragment,null)})),a.Z9.ShortAnswer,(function(e){var t=i.m.first(e.answers);return t?n.createElement(u,{answer:t},e.children):n.createElement(n.Fragment,null)})),a.Z9.Illustration,(function(e){var t=i.m.first(e.answers);return t?n.createElement(u,{answer:t,customAnswer:!0},n.createElement("div",{className:"ratio ratio-16x9"},n.createElement("img",{className:"img-fluid bg-white border rounded h-100 w-100",src:t.text,alt:"".concat(m("illustrationAlt"),": ").concat(e.interaction.name)})),e.children):n.createElement(n.Fragment,null)})),b=r(97408),p=r(44526),y=r(56151),h=r(3894),E=r(69737),w=r(83140),S=r(80845),N=r(64818);const I={avatarContainer:"O7oaA"};function k(e){var t,r,a,l,i,o,c=v[e.interaction.typeId];if(!c)return n.createElement(n.Fragment,null);var s=(0,S.j_)(e.studentResults),u=(0,S.f6)(e.interaction.id,s),m=w.A.isInteractionCorrect(e.interaction,s);return n.createElement("div",{className:"position-relative"},n.createElement("div",{className:"rounded ".concat(null!==(t=e.className)&&void 0!==t?t:"")},n.createElement("div",{className:"d-flex"},!!e.showStudentDetails&&n.createElement("div",{className:"me-2"},n.createElement("div",{className:I.avatarContainer},n.createElement(b.q,{imageCdnUrl:e.imageCdnUrl,initials:e.anonymisedUserName?N.l.getInitialsFromFullName(e.anonymisedUserName):N.l.getInitials(null===(r=e.studentResults.user)||void 0===r?void 0:r.name,null===(a=e.studentResults.user)||void 0===a?void 0:a.surname),imageUrl:e.anonymisedUserName?null:null===(i=null===(l=e.studentResults.user)||void 0===l?void 0:l.avatar)||void 0===i?void 0:i.url,showAnonymousUser:!!(null===(o=e.studentResults)||void 0===o?void 0:o.sessionId)}))),n.createElement("div",{className:"flex-grow-1"},!!e.showStudentDetails&&n.createElement(y.U,{studentResults:e.studentResults,correctness:m,anonymisedUserName:e.anonymisedUserName}),n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",{className:"flex-grow-1 mb-2 ".concat(e.responseComponentClass?e.responseComponentClass:"")},u?n.createElement(c,{interaction:e.interaction,answers:u.answers,imageCdnUrl:e.imageCdnUrl,user:e.studentResults.user,showFeedback:e.showFeedback,showAvatar:e.showAvatar},n.createElement(h.Z,{studentAttempt:u,correctness:m,markInteraction:e.markInteraction,markedStatus:e.markedStatus})):n.createElement(E.R,null)),!e.showStudentDetails&&n.createElement(p.Y,{correctness:m}))))))}},9193:(e,t,r)=>{r.d(t,{D:()=>f});var n=r(32735),a=r(70680),l=r(23481),i=r(20354),o=r(71553),c=r(39157),s=r(69883);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=l.T.encloseNamespace("reportsShared.dataHooks"),f=function(e,t,r){var l,f,g=(l=(0,n.useState)({}),f=2,function(e){if(Array.isArray(e))return e}(l)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,o=[],c=!0,s=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=l.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return o}}(l,f)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(l,f)||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.")}()),v=g[0],b=g[1],p=(0,a.I0)(),y=(0,s.Z)();return{markedAnswers:v,addMarkedAnswers:function(e,t){e.forEach((function(e){b((function(r){return Object.assign(Object.assign({},r),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(0,c.UU)(e),Object.assign(Object.assign({},e),{status:t})))}))}))},submitMarkedAnswers:function(){var n=Object.keys(v).map((function(e){return v[e]}));if(n.length){var a=0,l=0;n.forEach((function(r){var n=r.id,a=r.resultId,l=r.questionId,u=r.status;i.a.fetch(p,o.I.mark(e,t,n,{id:n,resultId:a,questionId:l,status:u},c,null,s))}))}function c(){l++}function s(){var e,t;++a===n.length&&(e="",t=!1,0===l&&(e=d("error",{smartCount:n.length}),t=!0),l<a&&(e=d("success",{smartCount:l})+" ".concat(d("partialError",{smartCount:a-l}))),l===a&&(e=d("success",{smartCount:l})),t?y.error(e):y.success(e),b({}),r&&r())}}}}},97364:(e,t,r)=>{r.d(t,{C:()=>l,P:()=>a});var n=r(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function l(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=n.T.HIGH||"not_completed"===e&&!t.unanswered}},1704:(e,t,r)=>{r.d(t,{l:()=>s});var n=r(32735),a=r(23481),l=r(9111),i=r(13876);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var c=a.T.encloseNamespace("shared.confirmationPopup");function s(e){var t,r,a=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,o=[],c=!0,s=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=l.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return o}}(t,r)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(t,r)||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],u=a[1];return n.createElement(l.G,{title:e.title,closePopup:e.closePopup},n.createElement(n.Fragment,null,e.children,n.createElement(i.u,null,n.createElement(i.u.Cancel,{onClick:e.closePopup,variant:e.cancelButtonVariant,text:e.cancelButtonText||c("cancel")}),n.createElement(i.u.Submit,{onClick:function(){u(!0),e.onClickConfirm()},text:e.confirmButtonText||c("confirm"),variant:e.confirmButtonVariant,showSpinner:s,disabled:e.disabledConfirmButton}))))}s.defaultProps={confirmButtonVariant:"primary",cancelButtonVariant:"link"}},40782:(e,t,r)=>{r.d(t,{I:()=>n,O:()=>c});var n,a=r(32735),l=r(2606),i=r(362);function o(e){var t=a.useCallback((function(t){if(t){var r=t.r.baseVal.value,n=2*Math.PI*r,a=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=a.toString()}}),[e.percentage]);return a.createElement("svg",null,a.createElement("circle",{r:(0,l.pu)(e.size),className:i.Z.backgroundCircle}),!(0,l.zR)(e.percentage)&&a.createElement("circle",{ref:t,r:(0,l.pu)(e.size),className:(0,l.V4)(e.percentage,e.scoreThresholds)}))}function c(e){var t,r=(0,l.Ki)(e.percentage),c=e.size||(e.layout===n.LabelInside?l.Mk.Large:l.Mk.Small),s=e.customLabel||(0,l.DV)(r);return e.layout===n.LabelOnly?a.createElement("span",{className:(0,l.IA)(r)},s):a.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&a.createElement("span",{className:"me-2"},s),a.createElement("div",{className:(0,l.tw)(c,r)},a.createElement(o,{percentage:r,size:c,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&a.createElement("span",{className:i.Z.centredPercentageText},s)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),c.defaultProps={layout:n.CircleOnly}},2606:(e,t,r)=>{r.d(t,{DV:()=>b,IA:()=>f,Ki:()=>v,Mk:()=>o,V4:()=>d,pu:()=>m,tw:()=>g,zR:()=>p});var n=r(94892),a=r(362);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function i(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o,c=.2,s=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(o||(o={}));var u=i(i(i({},o.ExtraSmall,{size:2}),o.Small,{size:2}),o.Large,{size:5.8});function m(e){var t=u[e].size,r=e===o.Large?s:c;return"".concat(t/2-2*r,"rem")}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?a.Z.circleSuccess:e>=t.MODERATE?a.Z.circleWarning:a.Z.circleDanger}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function g(e,t){var r="d-inline-block ".concat(a.Z.circleContainer);return e===o.Large&&(r+=" ".concat(a.Z.lgCircleContainer)),e===o.ExtraSmall&&(r+=" ".concat(a.Z.xsCircleContainer)),p(t)&&(r+=" ".concat(a.Z.pendingCircle)),r}function v(e){if(!p(e))return+e.toFixed(2)}function b(e){return p(e)?"--%":"".concat(Math.round(100*e),"%")}function p(e){return"number"!=typeof e}},6748:(e,t,r)=>{r.d(t,{i:()=>N});var n=r(32735),a=r(42648),l=r(35509),i=r(91967),o=r(15611),c=r(17808),s=r(1287),u=r(83914),m=r(90281),d={opacity:"0.8",cursor:"grabbing"},f=r(35223);function g(e){return function(e){if(Array.isArray(e))return b(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){if(e){if("string"==typeof e)return b(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function p(e){var t,r,n,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(r=e.current)||void 0===r?void 0:r.scrollLeft)+1<(null===(n=e.current)||void 0===n?void 0:n.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const y={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var E=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r};function w(e){var t,r;return e.column.canSort?n.createElement("span",{className:"".concat(y.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(r=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==r?r:"")},n.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?f.vn.ArrowRight:f.vn.ArrowLeft,size:u.S.Small})):n.createElement(n.Fragment,null)}function S(e){var t,r,a,u,m,f,v,b,p={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(p.initialState={selectedRowIds:(v=e.initialSelectedRowIds,b={},v.forEach((function(e){return b[e]=!0})),b)}),e.getRowId&&(p.getRowId=e.getRowId);var y,E=l.useTable.apply(void 0,[p].concat((y=function(e){var t=[l.useSortBy,l.useRowSelect,"flex"===e.layout?l.useFlexLayout:l.useBlockLayout];return e.allowFiltering&&(t=[].concat(g(t),[l.useFilters])),e.allowGlobalFiltering&&(t=[].concat(g(t),[l.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return h(e)}(y)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(y)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}(y)||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.")}()))),S=E.getTableProps,N=E.getTableBodyProps,I=E.headerGroups,k=E.rows,C=E.prepareRow,A=E.toggleAllRowsSelected,x=E.setGlobalFilter,j=E.setHiddenColumns,O=E.state.sortBy;function R(){return k.map((function(t){C(t);var r=function(t){var r,n,a,l,o,c=i.q.isFunction(null===(r=e.theme)||void 0===r?void 0:r.row)?e.theme.row(t):null!==(a=null===(n=e.theme)||void 0===n?void 0:n.row)&&void 0!==a?a:"";return t.isSelected&&(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)&&(c+=" ".concat(null===(o=e.theme)||void 0===o?void 0:o.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function l(){e.onSelectRow&&(e.allowSelectMultipleRows||A(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,i){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return a?n.createElement("div",{role:"row",key:t.id},n.createElement(o.F,Object.assign({},e,c,{className:r,appLink:a}),U(t))):n.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:r,onClick:l}),U(t))}var u=t.getRowProps();return e.enableSortableRows?n.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:n.forwardRef((function(e,t){return c(e,t)}))}):c(u)}))}function U(t){return t.cells.map((function(r){var a=function(t,r){var n,a,l="";return"function"==typeof(null===(n=e.theme)||void 0===n?void 0:n.cell)&&(l=e.theme.cell(t,r)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(l=e.theme.cell),e.onSelectCell&&(l+=" cursor-pointer"),l}(t,r);return n.createElement("div",Object.assign({key:r.column.id},r.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(r)}}),r.render("Cell"))}))}return n.useEffect((function(){e.onSort&&e.onSort(O)}),[O]),n.useEffect((function(){e.globalFilter&&x(e.globalFilter)}),[e.globalFilter]),n.useEffect((function(){e.hiddenColumns&&j(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),n.createElement("div",Object.assign({},S(),{className:null!==(r=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==r?r:""}),n.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},I.map((function(t){var r,a;return n.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(r=e.theme)||void 0===r?void 0:r.headerRow)&&void 0!==a?a:""}),t.headers.map((function(t){var r,a;return n.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(r=e.theme)||void 0===r?void 0:r.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return n.createElement(w,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&n.createElement(w,{column:t,theme:e.theme}))})))}))),n.createElement("div",Object.assign({},N(),{className:null!==(f=null===(m=e.theme)||void 0===m?void 0:m.body)&&void 0!==f?f:""}),e.enableSortableRows?n.createElement(c.Q,{ids:k.map((function(e){return e.original.id})),getDragOverlay:function(t){var r,a,l=k.findIndex((function(e){return e.original.id===t})),i=k[l];return n.createElement("div",Object.assign({},e,{className:(r=e.theme,a="g-0 ",r&&(a+=r.row),a),style:d}),U(i))},onSortEnd:e.onSortingRowsEnd},R()):R()))}function N(e){var t=e.enableSlider,r=e.scrollIncrement,l=e.scrollable,o=E(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,r=n.useRef(null),a=(e=n.useState(p(r)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,o=[],c=!0,s=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=l.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return o}}(e,t)||v(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.")}()),l=a[0],o=a[1],c=i.q.throttle((function(){o(p(r))}),200),s=n.useCallback((function(e){var t;r.current&&(null===(t=r.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(o(p(r)),e.addEventListener("scroll",c)),r.current=e}),[]);return n.useEffect((function(){(null==r?void 0:r.current)&&o(p(r))}),[r]),{ref:s,scrollState:l,scroll:function(e){var t;null===(t=r.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,d=c.scroll;if(l)return n.createElement(a.$B,{renderTrackHorizontal:function(){return n.createElement("div",{className:y.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},n.createElement(S,Object.assign({},o)));if(!t)return n.createElement(S,Object.assign({},o));function f(e){d(r*("right"===e?1:-1))}return n.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},n.createElement("div",{className:"px-4"},n.createElement("div",{className:"position-relative"},n.createElement(m.W,{direction:m.f.Left,onClick:function(){return f("left")},hide:!u.canScrollLeft}),n.createElement("div",{className:"".concat(y.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},n.createElement(S,Object.assign({},o))),n.createElement(m.W,{direction:m.f.Right,onClick:function(){return f("right")},hide:!u.canScrollRight}))))}N.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},93322:(e,t,r)=>{r.d(t,{F:()=>l});var n=r(32735),a=r(13126);function l(){n.useEffect((function(){return a.e.lockContentWidth(),function(){return a.e.unlockContentWidth()}}),[])}},68536:(e,t,r)=>{r.d(t,{x:()=>he});var n=r(32735),a=r(23481),l=r(92869),i=r(75896),o=r(69087),c=r(97958),s=r(83345),u="shared.interactionResponseList";function m(e){return n.createElement(n.Fragment,null,n.createElement(c.u,{className:"m-4"},n.createElement(c.u.Image,{src:function(){switch(e.filter){case"correct":return e.correctImageUrl;case"incorrect":return e.incorrectImageUrl;case"marking_required":return e.markingRequiredImageUrl;case"skipped":return e.skippedImageUrl}}(),className:"w-25 h-auto"}),n.createElement(c.u.Info,null,n.createElement(s.x,{namespace:u,phrase:function(){switch(e.filter){case"correct":return"correctEmptyState";case"incorrect":return"incorrectEmptyState";case"marking_required":return"markingRequiredEmptyState";case"skipped":return"skippedEmptyState"}}()}))))}function d(e){function t(t){return"rounded-pill bg-light ".concat(function(t){return t===e.filter}(t)?"bg-dark text-white":"")}return n.createElement("div",{className:"d-flex gap-2 m-3"},n.createElement("button",{className:t("marking_required"),onClick:function(){return e.toggleFilter("marking_required")}},n.createElement(s.x,{namespace:u,phrase:"markingRequired"})),n.createElement("button",{className:t("correct"),onClick:function(){return e.toggleFilter("correct")}},n.createElement(s.x,{namespace:u,phrase:"correct"})),n.createElement("button",{className:t("incorrect"),onClick:function(){return e.toggleFilter("incorrect")}},n.createElement(s.x,{namespace:u,phrase:"incorrect"})),n.createElement("button",{className:t("skipped"),onClick:function(){return e.toggleFilter("skipped")}},n.createElement(s.x,{namespace:u,phrase:"skipped"})))}var f=r(86572),g=a.T.encloseNamespace("interactives.interactionResponseListHeader");function v(e){var t,r=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return n.createElement("div",{className:"rounded bg-white"},n.createElement("div",{className:"p-2 position-relative"},n.createElement("div",{className:"d-flex"},n.createElement(f.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),!!r&&n.createElement("div",{className:"mt-2"},n.createElement("strong",null,g("suggestedResponse")),n.createElement("p",{className:"m-0"},r))))}var b=a.T.encloseNamespace("shared.submitMarkedAnswers");function p(e){return n.createElement("div",{className:"d-flex justify-content-end"},n.createElement("button",{className:"btn btn-outline-dark",onClick:e.submit,disabled:e.disabled},b("submitAnswers")))}var y=r(26136),h=r(39157),E=r(69186),w=r(36532),S=r(28972),N=r(83140),I=r(80845);const k={awaitingMarking:"PPNkp"};function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var x="shared.interactionResponseList",j=a.T.encloseNamespace(x);function O(e){var t,r,a,l,i=(a=n.useState(),l=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,o=[],c=!0,s=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=l.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return o}}(a,l)||function(e,t){if(e){if("string"==typeof e)return A(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(e,t):void 0}}(a,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=i[0],f=i[1],g=(r=e.interaction,e.results.students.filter((function(e){return N.A.isInteractionCorrect(r,(0,I.j_)(e))===S.w.AwaitingMarking})).reduce((function(e,t){var r;return Object.assign(Object.assign({},e),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=C(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=C(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==C(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(null===(r=t.user)||void 0===r?void 0:r.id)||t.sessionId,!0))}),{})),b=Object.keys(e.markedAnswers).length;if(!(null===(t=e.results.students)||void 0===t?void 0:t.length))return n.createElement("div",{className:"d-flex flex-column h-100"},n.createElement(c.u,{className:"bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center"},n.createElement(c.u.Image,{src:e.emptyStateImageUrl,size:"small"}),n.createElement(c.u.Heading,null,j("emptyStateHeading")),n.createElement(c.u.Info,{className:"w-100"},j("emptyStateDescription"))));var O=e.results.students.filter((function(t){var r=(0,I.j_)(t),n=N.A.isInteractionCorrect(e.interaction,r),a={correct:S.w.Correct,incorrect:S.w.Incorrect,marking_required:S.w.AwaitingMarking,skipped:S.w.UnAnswered};return!u||u in a&&n===a[u]}));return n.createElement(n.Fragment,null,e.reportsStyling&&n.createElement(v,{interaction:e.interaction}),n.createElement("div",{className:e.reportsStyling?"d-flex justify-content-end":"d-flex align-items-center justify-content-between border-bottom px-3 py-2"},!e.reportsStyling&&n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(s.x,{namespace:x,phrase:"studentAnswers"})),!!Object.keys(g).length&&n.createElement(w.u,{id:"submitAnswers",title:j("demoOnly"),spanHack:e.isDemo},n.createElement("div",{className:"".concat(e.isDemo?"pointer-events-none":""," ").concat(e.reportsStyling?"mt-2":"")},n.createElement(p,{submit:e.submitMarkedAnswers,disabled:!b})))),n.createElement(n.Fragment,null,!e.reportsStyling&&n.createElement(d,{filter:u,toggleFilter:function(e){f(u===e?null:e)}}),!e.reportsStyling&&!O.length&&u&&n.createElement(m,{filter:u,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl}),O&&n.createElement("ul",{className:"list-unstyled mb-0"},O.map((function(t,r){var a,l=(0,y.B2)((0,y.DV)(t,e.anonSessions),e.anonymiseUsers),i=g[(null===(a=t.user)||void 0===a?void 0:a.id)||t.sessionId],c=e.reportsStyling?"bg-white p-2":"bg-white px-3 pt-3 pb-2";return i&&(c+=" ".concat(k.awaitingMarking," my-1")),n.createElement("li",{key:r,className:e.reportsStyling?"":"border-bottom"},e.reportsStyling?n.createElement(E.O,{interaction:e.interaction,studentResults:t,markedStatus:(0,h.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:l,className:c,showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):n.createElement(o.d,{interaction:e.interaction,studentResults:t,markedStatus:(0,h.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:l,className:c,showFeedback:!0}))}))),e.reportsStyling&&!!g.length&&n.createElement("div",{className:"mt-2"},n.createElement(p,{submit:e.submitMarkedAnswers,disabled:!b}))))}var R=r(34079);function U(e){var t;return n.createElement("div",null,n.createElement("p",{className:"mb-0"},(t=e.interaction.data.sentence)?t.split(/({\d+})/).map((function(t,r){var a=t.match(/{(\d+)}/);if(a){var l=a[1],i=e.interaction.actionableItems.find((function(e){return+e.order==+l}));if(i)return n.createElement("span",{className:"bg-white border border-gray-300 rounded p-1 lh-lg",key:r},i.name)}return t})):""))}var T=r(7730);const P={row:"fXno_",answerImage:"pDAuW",answerWidth:"YHK27"};function M(e){var t,r;return(null===(r=i.m.first(null===(t=e.interaction)||void 0===t?void 0:t.actionableItems).data)||void 0===r?void 0:r.imageUrl)?n.createElement("div",{className:P.answerWidth},n.createElement(T.n,{interaction:e.interaction,size:"sm",showFeedback:!1,showCorrectnessIcons:!0,isDisplayOnly:!0})):n.createElement("ul",{className:"".concat(P.answerWidth," list-unstyled row g-2")},e.interaction.actionableItems.map((function(t){return n.createElement("li",{key:t.id,className:"col-12"},n.createElement("div",{className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border py-1 px-2 m-0")},n.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),n.createElement("span",null,t.name)))})))}var F="shared.questionTable";function L(e){var t,r=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return r?n.createElement("div",{className:"".concat(P.answerWidth," bg-light-blue rounded p-2 mb-2")},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("p",{className:"fw-semibold mb-2"},n.createElement(s.x,{namespace:F,phrase:"suggestedResponse"}))),n.createElement("p",{className:"mb-0"},r)):n.createElement(n.Fragment,null)}function B(e){return n.createElement("ul",{className:"list-unstyled d-flex gap-2"},e.interaction.actionableItems.map((function(t){return n.createElement("li",{key:t.id,className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border px-2 py-1 mb-2 w-50")},n.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),n.createElement("span",null,t.name))})))}var W=r(38129);function D(e){var t=function(){switch(e.interaction.typeId){case W.Z9.MultipleChoice:return n.createElement(M,{interaction:e.interaction,indexToLetter:V});case W.Z9.TrueOrFalse:return n.createElement(B,{interaction:e.interaction,indexToLetter:V});case W.Z9.ShortAnswer:return n.createElement(L,{interaction:e.interaction});case W.Z9.MissingWord:return n.createElement(U,{interaction:e.interaction});default:return null}}();return t?n.createElement("div",{className:"w-100 mt-3"},t):n.createElement(n.Fragment,null)}var q=r(40782);function Z(e){return Z="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},Z(e)}var H=a.T.encloseNamespace("shared.questionTable");function _(e,t,r){var n=e.cells.find((function(e){return e.column.id===r})).value,a=t.cells.find((function(e){return e.column.id===r})).value;return n.awaitingMarking?-1:a.awaitingMarking||n.percentCorrect>=a.percentCorrect?1:-1}function z(e){var t;return n.createElement("div",{className:"d-flex ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function G(e){return n.createElement(z,{className:e.column.isSorted&&"fw-bold"},H(e.phraseKey))}function V(e){return String.fromCharCode(e+"A".charCodeAt(0))}var K=r(8246),$=a.T.encloseNamespace("shared.questionTable");function Q(e,t){var r=e.actionableItems.map((function(t,r){return{id:t.id,label:e.typeId===W.Z9.MultipleChoice?V(r):t.name,isCorrect:t.isCorrect,count:0}}));return t.students.forEach((function(t){var n=i.m.last(t.results).attempts,a=i.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){var t=i.m.findWhere(r,{id:e.id});t&&t.count++}))})),r}function J(e,t){var r=e.actionableItems.map((function(e){return{id:e.id,label:e.name,isCorrect:e.isCorrect,count:0}}));return r.push({label:$("incorrect"),count:0,isCorrect:!1}),t.students.forEach((function(t){var n=i.m.last(t.results).attempts,a=i.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){var t=i.m.findWhere(r,{id:e.id});t&&e.status===K.N.Correct?t.count++:i.m.findWhere(r,{label:$("incorrect")}).count++}))})),r}function X(e,t){var r=[{label:$("correct"),isCorrect:!0,count:0},{label:$("incorrect"),isCorrect:!1,count:0}];return t.students.forEach((function(t){var n=i.m.last(t.results).attempts,a=i.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){if(e.status===K.N.Correct&&i.m.findWhere(r,{label:$("correct")}).count++,e.status===K.N.Incorrect&&i.m.findWhere(r,{label:$("incorrect")}).count++,e.status===K.N.PendingReview){var t=i.m.findWhere(r,{label:$("pending")});t||(r.push({label:$("pending"),count:0,isCorrect:!1}),t=i.m.findWhere(r,{label:$("pending")})),t.count++}}))})),r}var Y=r(83914),ee=r(35223),te="shared.questionTable",re=a.T.encloseNamespace(te);function ne(e){var t=function(){if(e.interaction&&e.results){var t;switch(e.interaction.typeId){case W.Z9.ShortAnswer:case W.Z9.Illustration:t=X;break;case W.Z9.MissingWord:t=J;break;case W.Z9.MultipleChoice:case W.Z9.TrueOrFalse:t=Q}return t(e.interaction,e.results)}}(),r=null==t?void 0:t.reduce((function(e,t){return t.count>e?t.count:e}),0);function a(e){var t="border rounded me-2";return e.count?e.label===re("pending")?"".concat(t," border-blue bg-light-blue"):e.isCorrect?"".concat(t," border-green bg-light-green"):"".concat(t," border-red bg-light-red"):"".concat(t," border bg-light px-1")}return n.createElement("div",{className:"border border rounded p-3 mb-3"},n.createElement("div",{className:"d-flex align-items-center gap-2 mb-3"},n.createElement("div",{className:"rounded-circle bg-light-teal text-teal"},n.createElement(Y.x,{svgName:ee.vn.Lightbulb,size:Y.S.Large})),n.createElement("h2",{className:"h6 mb-0"},n.createElement("span",null,n.createElement(s.x,{namespace:te,phrase:"questionSummary"})))),n.createElement("div",{className:"d-flex gap-2"},n.createElement("div",{className:"max-w-25"},null==t?void 0:t.map((function(e){return n.createElement("p",{key:e.label,className:"text-truncate mb-2"},e.label)}))),n.createElement("div",{className:"flex-grow-1"},null==t?void 0:t.map((function(t,l){return n.createElement("div",{key:"".concat(e.interaction.id).concat(l),className:"d-flex mb-2"},n.createElement("div",{className:a(t),style:{width:"".concat(t.count/r*100,"%"),height:20}}),n.createElement("span",null,t.count))})))))}var ae=a.T.encloseNamespace("shared.selectedInteractionEmptyState");function le(e){return n.createElement(c.u,{className:"rounded h-100 bg-white justify-content-center py-4"},n.createElement(c.u.Image,{src:e.emptyStateUrl,size:"small"}),n.createElement(c.u.Info,{className:"w-100"},ae("emptyStateText")))}var ie=r(97364),oe=r(6748),ce=r(57266);function se(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ue(e){var t,r,a,o,c=(a=n.useState((0,ie.P)(e.sortBy,"correctlyAnswered")),o=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,o=[],c=!0,s=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=l.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return o}}(a,o)||function(e,t){if(e){if("string"==typeof e)return se(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?se(e,t):void 0}}(a,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.")}()),s=c[0],u=c[1],m=function(e,t,r,a){return n.useMemo((function(){var r=(0,I.Q)(e),n=r.reduce((function(e,t,r){return Object.assign(Object.assign({},e),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=Z(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=Z(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Z(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},t.id,r))}),{}),l=r.map((function(e){return Object.assign(Object.assign({},e),{questionNumber:n[e.id],resultsSummary:(0,h.nq)(e,t)})}));if("correctlyAnswered"===(null==a?void 0:a.id)){var o=i.m.sortBy(l,(function(e){return e.resultsSummary.awaitingMarking?-1:e.resultsSummary.percentCorrect}));return a.desc?o.reverse():o}return l}),[r,a])}(e.interactive,e.results,e.refreshTable,i.m.first(s)),d=e.selectedInteractionId&&(0,h.Zs)(e.interactive,e.selectedInteractionId);return n.createElement("div",{className:"row"},n.createElement("div",{className:"col-6 flex-grow-1"},n.createElement(oe.i,{key:e.selectedInteractionId,columns:(r=e.showAnswersInTable,[{Header:function(e){var t=e.column;return n.createElement(G,{column:t,phraseKey:"#"})},accessor:"questionNumber",id:"index",Cell:function(e){var t=e.row.original.questionNumber;return n.createElement(z,null,t+1,".")},width:15,disableSortBy:!0},{Header:function(e){var t=e.column;return n.createElement(G,{column:t,phraseKey:"question"})},accessor:"data",Cell:function(e){var t=e.row.original,a=e.initialState.selectedRowIds,l=null==a?void 0:a[null==t?void 0:t.id];return n.createElement(z,{className:"flex-column"},n.createElement("div",{className:"".concat(l?"":"clamp-1"," pe-2")},n.createElement(f.y,{interaction:t,containerClassName:"d-flex"})),r&&l&&n.createElement(D,{interaction:t}))},disableSortBy:!0},{Header:function(e){var t=e.column;return n.createElement(G,{column:t,phraseKey:"score"})},accessor:"resultsSummary",id:"correctlyAnswered",Cell:function(e){var t=e.value,r=t.percentCorrect;return t.awaitingMarking?n.createElement(R.O,{title:H("markingRequired"),className:"flex-grow-1",tooltipClassName:"d-block",showLabel:!0}):n.createElement(q.O,{percentage:r,layout:q.I.LabelBefore})},width:60,sortDescFirst:!0,sortType:_}]),data:m,theme:e.theme,onSelectRow:function(e){var t=e.original;l.t.preventScrollTop(),ce.e.updateParams({interactionId:t.id},{merge:!0})},initialSelectedRowIds:d?[d.id]:null,getRowId:function(e){return e.id},enableSort:!0,manualSort:!0,onSort:u,initialSortBy:s})),n.createElement("div",{className:"col-6 d-flex flex-column"},!e.reportsStyling&&e.selectedInteractionId&&!!(null===(t=e.results.students)||void 0===t?void 0:t.length)&&n.createElement(ne,{interaction:d,results:e.results}),n.createElement("div",{className:"rounded flex-grow-1 ".concat(e.reportsStyling?"":"border")},!!d&&n.createElement(O,{interaction:d,results:e.results,markedAnswers:e.markedAnswers,addMarkedAnswers:e.addMarkedAnswers,submitMarkedAnswers:e.submitMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,emptyStateImageUrl:e.emptyStateImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl,reportsStyling:e.reportsStyling,isDemo:e.isDemo,anonSessions:e.anonSessions}),!d&&n.createElement(le,{emptyStateUrl:e.selectQuestionImageUrl}))))}var me=r(9193),de=r(1704),fe=r(99742);const ge={partialInsights:"mhxg4"};function ve(){return n.createElement("div",null,n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ge.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ge.partialInsights," rounded partial-loading-background")}))))}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var pe=a.T.encloseNamespace("shared.interactiveInsightsQuestions"),ye={table:"bg-white rounded border h-100 pb-2",header:"border-bottom px-3 py-2 mb-2",headerCell:"d-flex align-items-center",cell:"",row:"px-3 py-2 bg-light-blue-hover",selectedRow:"bg-gray-100",sortIndicator:"ms-2"};function he(e){var t,r,a,l,i,o=(l=n.useState(!1),i=2,function(e){if(Array.isArray(e))return e}(l)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,o=[],c=!0,s=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=l.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return o}}(l,i)||function(e,t){if(e){if("string"==typeof e)return be(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?be(e,t):void 0}}(l,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=o[0],s=o[1],u=(0,me.D)(null===(t=e.interactive)||void 0===t?void 0:t.id,null===(r=e.interactiveMetadata)||void 0===r?void 0:r.id,(function(){return s(!1)})),m=u.markedAnswers,d=u.addMarkedAnswers,f=u.submitMarkedAnswers;return n.createElement(n.Fragment,null,!e.hasDataLoaded&&n.createElement(ve,null),e.hasDataLoaded&&n.createElement(ue,{interactive:e.interactive,results:e.results,markedAnswers:m,addMarkedAnswers:d,submitMarkedAnswers:function(){return s(!0)},imageCdnUrl:e.config.imageCdnUrl,selectedInteractionId:e.interactionId,refreshTable:e.isFetching,emptyStateImageUrl:fe.W.Insights.NO_RESPONSES,selectQuestionImageUrl:fe.W.Insights.NO_DATA,anonymiseUsers:e.anonymiseUsers,sortBy:e.sortBy,showAnswersInTable:!0,theme:ye,correctImageUrl:fe.W.Insights.JIGSAW,incorrectImageUrl:fe.W.Insights.RED_JIGSAW,skippedImageUrl:fe.W.Insights.SKIPPED,markingRequiredImageUrl:fe.W.Insights.CLIPBOARD,isDemo:e.isDemo,anonSessions:e.anonSessions}),c&&n.createElement(de.l,{title:pe("markPopupTitle",{smartCount:null!==(a=Object.keys(m).length)&&void 0!==a?a:0}),closePopup:function(){return s(!1)},confirmButtonText:pe("submit"),confirmButtonVariant:"dark",onClickConfirm:f},n.createElement("p",null,pe("markPopupBody"))))}},362:(e,t,r)=>{r.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
|
|
2
|
+
//# sourceMappingURL=2809-84ce060e14-lite.chunk.js.map
|