@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8723-c3aaa1643a-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/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/insights/views/video-list/VideoListView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-header/InsightsHeader.tsx","file:///app/packages/projects/lite/src/apps/my-shares/utils/InsightsAppLinkUtils.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"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 React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, Playlist, Series, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { getInsightsPlaylistTabs, getInsightsSeriesTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\ninterface ShareOptionsViewProps {\n objectId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function VideoListView(props: ShareOptionsViewProps) {\n const dispatch = useDispatch();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const { hasShareFlowV2 } = useSettings(null);\n const { hasPermissions } = usePermissions();\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.Insights });\n\n const isSeries = () => props.typeId === MasterType.Series;\n const isPlaylist = () => props.typeId === MasterType.Playlist;\n\n const seriesRequest = isSeries() && SeriesRequests.series(props.objectId);\n const series = Flight.useBasicFetch<Series>(seriesRequest);\n\n const playlistRequest = isPlaylist() && PlaylistRequests.getPlaylist(props.objectId);\n const playlist = Flight.useBasicFetch<Playlist>(playlistRequest);\n\n const sort = VideoSortType.Series;\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const {\n items: videos,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(currentUser.data ? getVideosRequest : false, fetchNext);\n \n useLockContentWidth();\n useSetPageMetadata({ title: series.data?.name ?? playlist.data?.name });\n useHandleObjectError([ series, playlist ]);\n useVideoMixin(videos);\n\n function getInsightsTabs() {\n if (props.typeId === MasterType.Series)\n return getInsightsSeriesTabs(props.objectId, 'videos', params);\n\n if (props.typeId === MasterType.Playlist)\n return getInsightsPlaylistTabs(props.objectId, 'videos', params);\n\n return [];\n }\n\n function getVideosRequest(cursor?: string) {\n if (props.typeId === MasterType.Series)\n return SeriesRequests.seriesVideos(props.objectId, currentUser.data?.id, sort, cursor);\n\n return PlaylistRequests.getPlaylistVideos(props.objectId, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getVideosRequest(cursor));\n }\n\n function getVideoAppLink(video: Video, opts: GetVideoAppLinkOptions): Core.AppLink {\n const options: GetVideoAppLinkOptions = {\n ...opts,\n context: RelatedVideosContext.Series,\n contextId: props.objectId,\n includeContext: currentUser.data?.isAuthenticated\n };\n\n return VideoAppLinkHelper.getAppLink(video, options);\n }\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <InsightsHeader\n video={series.data ?? playlist.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n <div>\n {(() => {\n if (!videos)\n return <PartialVideoList />;\n\n return (\n <>\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n hasPermissions={hasPermissions}\n // getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video?.series, { sort })}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n // getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n // getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n // getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n // showNewVideoIndicator={false}\n // isPlugin={false}\n commonVideoProps={commonVideoProps}\n />\n {(isFetching || nextCursor) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n );\n })()}\n </div>\n </div>\n </VideoActionsContext.Provider>\n );\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\n\nconst namespace = 'insights.header';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeaderProps {\n video: VideoTypes;\n hasClassrooms?: boolean;\n dateRangeAppLinkParams?: DateRangeQueryParams;\n tabs: PillTab[]\n isDemo?: boolean;\n analyticsWebUrl?: string;\n hasAnalytics?: boolean;\n hasShareFlowV2?: boolean;\n shareId?: string;\n}\n\nexport function InsightsHeader(props: InsightsHeaderProps) {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(\n SharedViewModelKeys.ANONYMISE_USERS,\n false,\n { storage: StorageType.LocalStorage }\n );\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [\n {\n name: 'Reports',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }\n },\n {\n name: props.video.name,\n active: true\n }\n ];\n }\n\n function getActions() {\n const actions = [{\n label: 'Edit time range',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n },\n {\n label: 'Edit audience',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n }];\n\n if (props.video?.typeId === MasterType.Interactive) {\n actions.push({\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n });\n }\n\n return actions;\n }\n\n return (\n <div>\n <InsightsAdminAlert\n analyticsUrl={props.analyticsWebUrl}\n hasAnalytics={props.hasAnalytics}\n video={props.video}\n />\n <section className='mb-4'>\n <div className='mb-3'>\n <div className='d-flex justify-content-between align-items-center mb-3'>\n {props.video\n ? <Breadcrumbs breadcrumbs={getBreadcrumbs()} />\n : <PartialBreadcrumbs />\n }\n <ActionsDropdown\n dropdownToggleClassName='btn btn-outline-dark'\n actions={getActions()}\n />\n </div>\n </div>\n <div className='d-flex align-items-center mb-4'>\n <PillTabSelector tabs={props.tabs} />\n <div className='flex-grow-1' />\n <div className='d-flex gap-3'>\n <label htmlFor='anonymiseNames' className='mb-0'><Text namespace={namespace} phrase='anonymiseNames' /></label>\n <ToggleSwitch id='anonymiseNames' on={anonymiseUsers} onClick={() => setAnonymiseUsers(!anonymiseUsers)} />\n </div>\n </div>\n </section>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.insightsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype InsightsTabs = 'insights' | 'heatmap' | 'results' | 'questions' | 'shareOptions' | 'videos';\n\nexport function getInsightsVideoTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsClipTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsInteractiveTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_STUDENTS,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_QUESTIONS,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsDemoInteractiveTabs(id: string, active: InsightsTabs, params: HashObject) {\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\n args: [id],\n params\n }\n }\n ];\n}\n\nexport function getInsightsSeriesTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject\n) {\n const tabs = [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.SERIES_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n {\n name: 'Videos',\n active: active === 'videos',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.SERIES_VIDEOS,\n args: [id],\n params\n }\n }\n ];\n\n return tabs;\n}\n\nexport function getInsightsPlaylistTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject\n) {\n const tabs = [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.PLAYLIST_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n {\n name: 'Videos',\n active: active === 'videos',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.PLAYLIST_VIDEOS,\n args: [id],\n params\n }\n }\n ];\n\n return tabs;\n}","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","generateCacheKey","flightObjs","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","useEffect","SCROLL_TOLERANCE","useInfiniteList","fetchNext","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","useLockContentWidth","VideoListView","dispatch","config","currentUser","hasShareFlowV2","hasPermissions","commonVideoProps","locationContext","seriesRequest","typeId","objectId","series","playlistRequest","playlist","sort","audienceAppLinkParams","dateRangeAppLinkParams","videoActions","location","getVideosRequest","videos","title","value","video","hasAnalytics","analyticsWebUrl","shareId","getVideoAppLink","opts","context","contextId","includeContext","isAuthenticated","getPreviewQuestionsAppLink","interactive","namespace","InsightsAdminAlert","storage","show","setShow","role","phrase","href","analyticsUrl","videoRoute","getAnalyticsUrl","target","getPhrase","InsightsHeader","actions","anonymiseUsers","setAnonymiseUsers","breadcrumbs","application","action","dropdownToggleClassName","label","args","htmlFor","on","getInsightsVideoTabs","getInsightsClipTabs","getInsightsInteractiveTabs","getInsightsDemoInteractiveTabs","getInsightsSeriesTabs","getInsightsPlaylistTabs","useCommonVideoProps","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","isLoaded","hasStudentExperience","yearGroups","customerId","hasCommonVideoPropsCompleted","subTextType","getSubTextAppLink","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","useVideoMixin","objects","videoIds","filter","o","getValidObjects","v","ids"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9583],{26025:(e,a,t)=>{t.d(a,{B:()=>i});var n=t(1048),r=t(75795),i={getAudienceAppLinkParams:function(){var e=r.O.getCurrentRoute().appLink,a=n.t.isObject(e.params)?e.params:{},t=a.users,i=a.classrooms,s=a.classroomGroups,o=function(e){var t=a[e];if(t)return Array.isArray(t)?t:[t]},c={};return t&&(c.users=o("users")),i&&(c.classrooms=o("classrooms")),s&&(c.classroomGroups=o("classroomGroups")),c},getDateRangeAppLinkParams:function(){var e=r.O.getCurrentRoute().appLink,a=n.t.isObject(e.params)?e.params:{},t=a.from,i=a.to,s=a.rangeName,o={};return t&&(o.from=t),i&&(o.to=i),s&&(o.rangeName=s),o}}},26136:(e,a,t)=>{t.d(a,{B2:()=>o,DV:()=>l,jP:()=>c});var n=t(76198),r=t(23481),i=t(64818),s=r.T.encloseNamespace("shared.analyticsUtils");function o(e,a){return e?a?(0,n._8)((t="sessionId"in e?e.sessionName:e.id,r=+"".concat(t).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:r})):"sessionId"in e?e.sessionName:i.l.getFullName(e):"";var t,r}function c(e,a){var t={sessionId:e,sessionName:s("anonymousUser")};return e&&a&&a[e]||t}function l(e,a){return e.user?e.user:c(e.sessionId,a)}},40782:(e,a,t)=>{t.d(a,{I:()=>n,O:()=>c});var n,r=t(32735),i=t(2606),s=t(362);function o(e){var a=r.useCallback((function(a){if(a){var t=a.r.baseVal.value,n=2*Math.PI*t,r=n-e.percentage*n;a.style.strokeDasharray="".concat(n," ").concat(n),a.style.strokeDashoffset=r.toString()}}),[e.percentage]);return r.createElement("svg",null,r.createElement("circle",{r:(0,i.pu)(e.size),className:s.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&r.createElement("circle",{ref:a,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function c(e){var a,t=(0,i.Ki)(e.percentage),c=e.size||(e.layout===n.LabelInside?i.Mk.Large:i.Mk.Small),l=e.customLabel||(0,i.DV)(t);return e.layout===n.LabelOnly?r.createElement("span",{className:(0,i.IA)(t)},l):r.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(a=e.className)&&void 0!==a?a:"")},e.layout===n.LabelBefore&&r.createElement("span",{className:"me-2"},l),r.createElement("div",{className:(0,i.tw)(c,t)},r.createElement(o,{percentage:t,size:c,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&r.createElement("span",{className:s.Z.centredPercentageText},l)))}!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,a,t)=>{t.d(a,{DV:()=>f,IA:()=>p,Ki:()=>g,Mk:()=>o,V4:()=>d,pu:()=>m,tw:()=>v,zR:()=>h});var n=t(94892),r=t(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 s(e,a,t){return(a=function(e){var a=function(e){if("object"!=i(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,"string");if("object"!=i(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(a)?a:a+""}(a))in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}var o,c=.2,l=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(o||(o={}));var u=s(s(s({},o.ExtraSmall,{size:2}),o.Small,{size:2}),o.Large,{size:5.8});function m(e){var a=u[e].size,t=e===o.Large?l:c;return"".concat(a/2-2*t,"rem")}function d(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=a.HIGH?r.Z.circleSuccess:e>=a.MODERATE?r.Z.circleWarning:r.Z.circleDanger}function p(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=a.HIGH?"text-success":e>=a.MODERATE?"text-warning":"text-danger"}function v(e,a){var t="d-inline-block ".concat(r.Z.circleContainer);return e===o.Large&&(t+=" ".concat(r.Z.lgCircleContainer)),e===o.ExtraSmall&&(t+=" ".concat(r.Z.xsCircleContainer)),h(a)&&(t+=" ".concat(r.Z.pendingCircle)),t}function g(e){if(!h(e))return+e.toFixed(2)}function f(e){return h(e)?"--%":"".concat(Math.round(100*e),"%")}function h(e){return"number"!=typeof e}},94892:(e,a,t)=>{t.d(a,{T:()=>r,i:()=>n});var n={HIGH:.75,MODERATE:.5},r={HIGH:.7,MODERATE:.7}},54405:(e,a,t)=>{t.d(a,{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}}}},9566:(e,a,t)=>{t.d(a,{G:()=>u,V:()=>d});var n=t(23481),r=t(110),i=t(35223),s=t(14070),o=t(97291),c=t(93975),l=n.T.encloseNamespace("myShares.demoInsights"),u={share:{shareId:"demo-insights",type:c.y.Link},sharedObject:null,shareRecipients:null,dateShared:r.O.subtract(new Date,7,"days").toISOString(),viewCount:23},m={application:o.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},d={svgName:i.vn.Analytics,label:l("demoInsights"),appLink:m,group:"insights",className:"btn btn-outline-dark"}},30475:(e,a,t)=>{t.r(a),t.d(a,{InteractiveInsightsOverviewDemoView:()=>_});var n=t(32735),r=t(23481),i=t(2948),s=t(20354),o=t(75896),c=t(26025),l=t(38143),u=t(39151),m=t(54405),d=t(31949),p=t(93322),v=t(79612),g=t(88630),f=t(53936),h=t(54948),y=t(82602),E=t(65853),b=t(91693),k=t(83345),S=t(36532),I=t(49080),A=t(35223),N=t(86099),O=t(24758),L=t(9566),C="insights.shareInfoDemo",T=r.T.encloseNamespace(C);function R(e){var a=e.video&&E.R.getIconAndText({entity:e.video,entityTypeId:e.video.typeId,hasStudentExp:!1,isPasswordProtected:null,linkExpireDate:null,privacy:{privacy:"public",overrideRestrictions:!1},status:I.F.Active,yearGroups:null});return n.createElement("div",{className:"mb-4"},n.createElement("h2",{className:"h4"},n.createElement(k.x,{namespace:C,phrase:"shareInfo"})),n.createElement("div",{className:"d-flex border p-3 rounded-3 align-items-center justify-content-between"},n.createElement("div",{className:"d-flex align-items-center gap-2"},n.createElement(O.A,{shareRecipients:null,imageCdnUrl:e.imageCdnUrl,hasShareLink:!0,maxAvatars:4,shareLinkText:null==a?void 0:a.text}),"·",n.createElement("p",{className:"mb-0"},(0,y.WU)(L.G.dateShared)),"·",n.createElement("p",{className:"mb-0"},n.createElement(k.x,{namespace:C,phrase:"views",options:{count:L.G.viewCount}}))),n.createElement(S.u,{id:"shareButton",title:T("demoOnly"),spanHack:!0},n.createElement(b.h,{appLink:(0,N.YK)(e.video),svgName:A.vn.Share,className:"btn btn-outline-dark pointer-events-none"},n.createElement(k.x,{namespace:C,phrase:"share"})))))}var w=t(10447),M=t(14070),D=t(97291);function x(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var j=r.T.encloseNamespace("insights.interactiveInsightsOverviewView");function _(){var e,a,t,r,y,E,b,k=(E=(0,i.D)(l.g.ANONYMISE_USERS),b=1,function(e){if(Array.isArray(e))return e}(E)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,i,s,o=[],c=!0,l=!1;try{if(i=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;c=!1}else for(;!(c=(n=i.call(t)).done)&&(o.push(n.value),o.length!==a);c=!0);}catch(e){l=!0,r=e}finally{try{if(!c&&null!=t.return&&(s=t.return(),Object(s)!==s))return}finally{if(l)throw r}}return o}}(E,b)||function(e,a){if(e){if("string"==typeof e)return x(e,a);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)?x(e,a):void 0}}(E,b)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,p.F)();var S=s.a.useBasicFetch(d.N.currentUser()),I=s.a.useBasicFetch(u.L.config()),A=s.a.useBasicFetch(m.X.interactiveMetadata()),N=s.a.useBasicFetch(m.X.interactive()),O=c.B.getAudienceAppLinkParams(),L=c.B.getDateRangeAppLinkParams(),C=s.a.useBasicFetch(m.X.interactiveResults()),T=1===(null===(e=O.classrooms)||void 0===e?void 0:e.length)&&!(null===(a=O.classroomGroups)||void 0===a?void 0:a.length),_=s.a.useBasicFetch(T&&g.F.getClassroomStudents(o.m.first(O.classrooms))),V=s.a.useBasicFetch(m.X.aggregateHeatmap()),z=s.a.useBasicFetch(m.X.videoViews());(0,v.M)({title:A.data?j("pageTitle",{video:null===(t=A.data)||void 0===t?void 0:t.name}):null});var P=S.data&&I.data&&A.data&&N.data&&C.data&&(!T||_.data)&&V.data&&!!z.data,H=Object.assign(Object.assign({},O),L),B=function(e,a){return{resultsAppLink:{application:D.O.MY_SHARES,action:M.e.MyShares.INTERACTIVE_STUDENTS_DEMO,args:[""],params:a},questionsAppLink:{application:D.O.MY_SHARES,action:M.e.MyShares.INTERACTIVE_QUESTIONS_DEMO,args:[""],params:a},heatmapAppLink:{application:D.O.MY_SHARES,action:M.e.MyShares.INTERACTIVE_HEATMAP_DEMO,args:[""],params:a}}}(0,H);return n.createElement("div",{className:"px-3"},n.createElement(f.j,{video:A.data,tabs:(0,w.aq)(null===(r=A.data)||void 0===r?void 0:r.id,"insights",H),dateRangeAppLinkParams:L,isDemo:!0}),n.createElement(R,{video:A.data,imageCdnUrl:null===(y=I.data)||void 0===y?void 0:y.imageCdnUrl}),n.createElement(h.m,{aggregateEngagement:V.data,interactive:N.data,interactiveMetadata:A.data,classroomStudents:_.data,results:C.data,videoViews:z.data,config:I.data,interactiveInsightsAppLinks:B,classroomFilterOnly:!1,anonymiseUsers:k,params:H,hasDataLoaded:P,hasShared:!0}))}},93975:(e,a,t)=>{var n;t.d(a,{y:()=>n}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(n||(n={}))},362:(e,a,t)=>{t.d(a,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
|
|
2
|
-
//# sourceMappingURL=9583-3b2623e754-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/9583-3b2623e754-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/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/share-info/ShareInfoDemo.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoUtils.ts","file:///app/packages/projects/lite/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"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 { 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 React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: MySharesTableData = {\n share: {\n shareId: 'demo-insights',\n type: ShareType.Link\n } as ShareLink,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString(),\n viewCount: 23\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\nimport { DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nconst namespace = 'insights.shareInfoDemo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ShareInfoDemoProps {\n video: VideoTypes;\n imageCdnUrl: string;\n}\n\nexport function ShareInfoDemo(props: ShareInfoDemoProps) {\n const shareLinkText = props.video &&\n ShareLinkHelper.getIconAndText({\n entity: props.video,\n entityTypeId: props.video.typeId,\n hasStudentExp: false,\n isPasswordProtected: null,\n linkExpireDate: null,\n privacy: {\n privacy: 'public',\n overrideRestrictions: false\n },\n status: ShareLinkStatus.Active,\n yearGroups: null\n });\n\n return (\n <div className='mb-4'>\n <h2 className='h4'><Text namespace={namespace} phrase='shareInfo' /></h2>\n\n <div className='d-flex border p-3 rounded-3 align-items-center justify-content-between'>\n <div className='d-flex align-items-center gap-2'>\n <SharedToPill\n shareRecipients={null}\n imageCdnUrl={props.imageCdnUrl}\n hasShareLink={true}\n maxAvatars={4}\n shareLinkText={shareLinkText?.text}\n />\n ·\n <p className='mb-0'>{formatDate(DEMO_INSIGHTS_SHARE.dateShared)}</p>\n ·\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ count: DEMO_INSIGHTS_SHARE.viewCount }} /></p>\n </div>\n <Tooltip id='shareButton' title={getPhrase('demoOnly')} spanHack>\n <IconButton\n appLink={getShareAppLink(props.video)}\n svgName={cvSvgLibrary.Share}\n className='btn btn-outline-dark pointer-events-none'\n >\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </Tooltip>\n </div>\n </div>\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 { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BasePaginatedCollection, Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, InteractiveResultSet, User } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { ShareInfoDemo } from 'apps/my-shares/components/share-info/ShareInfoDemo';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function InteractiveInsightsOverviewDemoView() {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n\n const classroomFilterOnly =\n audienceAppLinkParams.classrooms?.length === 1 && !audienceAppLinkParams.classroomGroups?.length;\n const classroomStudents = Flight.useBasicFetch<BasePaginatedCollection<User>>(classroomFilterOnly &&\n ClassroomRequests.getClassroomStudents(ArrayHelper.first(audienceAppLinkParams.classrooms)));\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(\n InsightsDemoRequests.videoViews()\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n interactiveMetadata.data &&\n interactive.data &&\n results.data &&\n (!classroomFilterOnly || classroomStudents.data) &&\n aggregateEngagement.data &&\n !!videoViews.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(\n '',\n params\n );\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'insights', params)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n isDemo\n />\n\n <ShareInfoDemo video={interactiveMetadata.data} imageCdnUrl={config.data?.imageCdnUrl} />\n\n <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n classroomStudents={classroomStudents.data}\n results={results.data}\n videoViews={videoViews.data}\n config={config.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n classroomFilterOnly={false}\n anonymiseUsers={anonymiseUsers}\n params={params}\n hasDataLoaded={hasDataLoaded}\n hasShared={true}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getInteractiveInsightsAppLinks(id: string, params?: HashObject) {\n return {\n resultsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n },\n questionsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n },\n heatmapAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\n args: [id],\n params\n }\n };\n}","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live'\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":["AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","getPhrase","anonymiseUserName","user","shouldAnonymise","id","sessionName","seed","Math","floor","Date","getMinutes","dictionaries","separator","length","style","getAnonSession","sessionId","anonSessions","fallback","getUserOrAnonSession","result","PercentageIndicatorLayout","ProgressCircle","props","ref","circle","radius","r","baseVal","value","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","toString","size","className","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","ScoreThresholdDefaults","ScoreThresholdInsights","InsightsDemoRequests","interactive","url","normalize","interactiveMetadata","interactiveResults","videoViews","individualHeatmap","aggregateHeatmap","DEMO_INSIGHTS_SHARE","share","shareId","type","sharedObject","shareRecipients","dateShared","toISOString","viewCount","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","svgName","group","namespace","LanguageService","ShareInfoDemo","shareLinkText","video","ShareLinkHelper","entity","entityTypeId","typeId","hasStudentExp","isPasswordProtected","linkExpireDate","privacy","overrideRestrictions","status","ShareLinkStatus","yearGroups","Text","phrase","SharedToPill","imageCdnUrl","hasShareLink","maxAvatars","text","options","count","Tooltip","title","spanHack","IconButton","InteractiveInsightsOverviewDemoView","anonymiseUsers","SharedViewModelKeys","useLockContentWidth","currentUser","UserRequests","config","ConfigRequests","audienceAppLinkParams","dateRangeAppLinkParams","results","classroomFilterOnly","classroomStudents","ClassroomRequests","ArrayHelper","aggregateEngagement","useSetPageMetadata","data","name","hasDataLoaded","interactiveInsightsAppLinks","resultsAppLink","args","questionsAppLink","heatmapAppLink","getInteractiveInsightsAppLinks","InsightsHeader","tabs","isDemo","InteractiveInsightsOverview","hasShared","ShareType"],"sourceRoot":""}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/scripts/{bundle-d2cf17c78d.min.js.LICENSE.txt → bundle-5a89651ec2.min.js.LICENSE.txt}
RENAMED
|
File without changes
|