@clickview/lite 0.74.0-rc.2 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/3677-43784effdf-lite.chunk.js +2 -0
  3. package/dist/scripts/3677-43784effdf-lite.chunk.js.map +1 -0
  4. package/dist/scripts/3978-84811f1db1-lite.chunk.js +2 -0
  5. package/dist/scripts/3978-84811f1db1-lite.chunk.js.map +1 -0
  6. package/dist/scripts/4400-e6d6e73b2c-lite.chunk.js +2 -0
  7. package/dist/scripts/4400-e6d6e73b2c-lite.chunk.js.map +1 -0
  8. package/dist/scripts/5135-c6eae4df36-lite.chunk.js +2 -0
  9. package/dist/scripts/5135-c6eae4df36-lite.chunk.js.map +1 -0
  10. package/dist/scripts/618-d8d8f7d8c1-lite.chunk.js +2 -0
  11. package/dist/scripts/618-d8d8f7d8c1-lite.chunk.js.map +1 -0
  12. package/dist/scripts/6379-4b78ae2469-lite.chunk.js +2 -0
  13. package/dist/scripts/6379-4b78ae2469-lite.chunk.js.map +1 -0
  14. package/dist/scripts/647-ad2e2f0add-lite.chunk.js +2 -0
  15. package/dist/scripts/647-ad2e2f0add-lite.chunk.js.map +1 -0
  16. package/dist/scripts/6909-7a8ac9f30a-lite.chunk.js +2 -0
  17. package/dist/scripts/6909-7a8ac9f30a-lite.chunk.js.map +1 -0
  18. package/dist/scripts/7234-5ccd8259d1-lite.chunk.js +2 -0
  19. package/dist/scripts/7234-5ccd8259d1-lite.chunk.js.map +1 -0
  20. package/dist/scripts/7577-12a01937f0-lite.chunk.js +2 -0
  21. package/dist/scripts/7577-12a01937f0-lite.chunk.js.map +1 -0
  22. package/dist/scripts/7742-c9755a67d4-lite.chunk.js +2 -0
  23. package/dist/scripts/7742-c9755a67d4-lite.chunk.js.map +1 -0
  24. package/dist/scripts/8451-2ef1dfce61-lite.chunk.js +2 -0
  25. package/dist/scripts/8451-2ef1dfce61-lite.chunk.js.map +1 -0
  26. package/dist/scripts/9241-238326bcb2-lite.chunk.js +2 -0
  27. package/dist/scripts/9241-238326bcb2-lite.chunk.js.map +1 -0
  28. package/dist/scripts/9345-a373f08fe5-lite.chunk.js +3 -0
  29. package/dist/scripts/9345-a373f08fe5-lite.chunk.js.map +1 -0
  30. package/dist/scripts/9630-9ca1798eee-lite.chunk.js +2 -0
  31. package/dist/scripts/9630-9ca1798eee-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{9767-a23d603cc5-lite.chunk.js → 9767-281d5e0883-lite.chunk.js} +2 -2
  33. package/dist/scripts/9767-281d5e0883-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{bundle-6a0c1aecd5.min.js → bundle-0260bfcbaa.min.js} +3 -3
  35. package/dist/scripts/{bundle-6a0c1aecd5.min.js.map → bundle-0260bfcbaa.min.js.map} +1 -1
  36. package/package.json +1 -1
  37. package/dist/scripts/3677-aadf9fd2cc-lite.chunk.js +0 -2
  38. package/dist/scripts/3677-aadf9fd2cc-lite.chunk.js.map +0 -1
  39. package/dist/scripts/3978-0e2106b5aa-lite.chunk.js +0 -2
  40. package/dist/scripts/3978-0e2106b5aa-lite.chunk.js.map +0 -1
  41. package/dist/scripts/4400-7381394a2e-lite.chunk.js +0 -2
  42. package/dist/scripts/4400-7381394a2e-lite.chunk.js.map +0 -1
  43. package/dist/scripts/5135-9fa172bfc3-lite.chunk.js +0 -2
  44. package/dist/scripts/5135-9fa172bfc3-lite.chunk.js.map +0 -1
  45. package/dist/scripts/618-33ead82bb3-lite.chunk.js +0 -2
  46. package/dist/scripts/618-33ead82bb3-lite.chunk.js.map +0 -1
  47. package/dist/scripts/6379-1fac9e5c3c-lite.chunk.js +0 -2
  48. package/dist/scripts/6379-1fac9e5c3c-lite.chunk.js.map +0 -1
  49. package/dist/scripts/647-cf8ade72c6-lite.chunk.js +0 -2
  50. package/dist/scripts/647-cf8ade72c6-lite.chunk.js.map +0 -1
  51. package/dist/scripts/6909-0cc76e0fcc-lite.chunk.js +0 -2
  52. package/dist/scripts/6909-0cc76e0fcc-lite.chunk.js.map +0 -1
  53. package/dist/scripts/7234-4fdc8f5ae3-lite.chunk.js +0 -2
  54. package/dist/scripts/7234-4fdc8f5ae3-lite.chunk.js.map +0 -1
  55. package/dist/scripts/7577-a930db95e5-lite.chunk.js +0 -2
  56. package/dist/scripts/7577-a930db95e5-lite.chunk.js.map +0 -1
  57. package/dist/scripts/7742-8a303defe5-lite.chunk.js +0 -2
  58. package/dist/scripts/7742-8a303defe5-lite.chunk.js.map +0 -1
  59. package/dist/scripts/8451-9ab30b6e35-lite.chunk.js +0 -2
  60. package/dist/scripts/8451-9ab30b6e35-lite.chunk.js.map +0 -1
  61. package/dist/scripts/9241-c523dc7aac-lite.chunk.js +0 -2
  62. package/dist/scripts/9241-c523dc7aac-lite.chunk.js.map +0 -1
  63. package/dist/scripts/9345-df0cbb196f-lite.chunk.js +0 -3
  64. package/dist/scripts/9345-df0cbb196f-lite.chunk.js.map +0 -1
  65. package/dist/scripts/9630-6bcd453382-lite.chunk.js +0 -2
  66. package/dist/scripts/9630-6bcd453382-lite.chunk.js.map +0 -1
  67. package/dist/scripts/9767-a23d603cc5-lite.chunk.js.map +0 -1
  68. /package/dist/scripts/{9345-df0cbb196f-lite.chunk.js.LICENSE.txt → 9345-a373f08fe5-lite.chunk.js.LICENSE.txt} +0 -0
  69. /package/dist/scripts/{bundle-6a0c1aecd5.min.js.LICENSE.txt → bundle-0260bfcbaa.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9345-a373f08fe5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/projects/lite/src/apps/watch-history/flight-requests/VideoHistoryRequests.ts","file:///app/packages/projects/lite/src/apps/watch-history/components/watch-history-video-list/WatchHistoryVideoList.tsx","file:///app/packages/projects/lite/src/apps/watch-history/hooks/useWatchHistory.ts","file:///app/packages/projects/lite/src/apps/watch-history/hooks/useWatchHistoryVideoActions.ts","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/empty-state/WatchHistoryEmptyState.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/partial-loading/partial-watch-history.scss","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/partial-loading/PartialWatchHistory.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/WatchHistoryView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["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 { fetchItems, ...data } = useGrowingBatchFetchFunc({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.length]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<T> {\n getRequest: (items: T[]) => Flight.Request;\n _getKey?: (obj: T) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<T>(options: UseGrowingBatchFetchFuncOptions<T>) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: T[]) {\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(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\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 fetchItems\n };\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoHistoryCollection } from 'libs/shared/interfaces';\n\nexport const VideoHistoryRequests = {\n userVideoHistory(\n cursor?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n let key = 'video:history';\n let url = `{gateway}/v1/users/me/watch-history`;\n\n if (cursor) {\n key += `:${cursor}`;\n url += `?cursor=${cursor}`;\n }\n\n return {\n key,\n url,\n formatData: (historyCollection: VideoHistoryCollection) => {\n return {\n data: historyCollection.data.map(historyData => {\n // Convert last watched times from UTC to local time\n const lastTimeWatchedLocal = DateHelper.format(historyData.lastTimeWatched);\n const lastDateWatchedLocal = DateHelper.format(lastTimeWatchedLocal, 'YYYY-MM-DD');\n\n return {\n ...historyData,\n lastTimeWatched: lastTimeWatchedLocal,\n lastDateWatched: lastDateWatchedLocal\n };\n }),\n pagination: historyCollection.pagination\n };\n },\n success,\n error,\n always\n };\n },\n\n videoHistory(\n ids: string[],\n namespace?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const params = ids.sort().map(i => `videoId=${i}`);\n\n return {\n key: `video:history:videos:${params.join('&')}`,\n url: `{gateway}/v1/videos/history?${params.join('&')}`,\n normalizeOptions: {\n namespace\n },\n formatData: (historyCollection: HashObject[]) => {\n if (!historyCollection?.length)\n return historyCollection;\n\n /**\n * Data is formatted to enable it to be merged with the existing video object in the store\n * Where we need to merge more history properties with the video object, map them below.\n */\n return historyCollection.map((watchHistory: HashObject) => ({\n id: watchHistory.videoId,\n lastProgressPoint: watchHistory.lastProgressPoint\n }));\n },\n success,\n error,\n always\n };\n },\n\n removeFromHistory(videoId: string, invalidationKeys: string[] = []): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/videos/${videoId}/watch-history`,\n key: `remove:video:history:${videoId}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [\n 'video:history',\n ...invalidationKeys\n ]\n };\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, VideoHistory, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'watchHistory.watchHistoryVideoList';\n\nfunction formatDate(date: string): string {\n const diff = DateHelper.timeSince(new Date(date), 'day');\n\n if (diff === 0)\n return LanguageService.getPhrase(namespace, 'today');\n\n if (diff === 1)\n return LanguageService.getPhrase(namespace, 'yesterday');\n\n return DateHelper.format(date, 'Do MMMM');\n}\n\ninterface WatchHistoryVideoListProps {\n videoHistory: VideoHistory[];\n videos: VideoTypes[];\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport function WatchHistoryVideoList(props: WatchHistoryVideoListProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const historyGroups = ArrayHelper.groupBy(props.videoHistory, 'lastDateWatched');\n\n const videoGroups: { [index: string]: VideoTypes[] } = {};\n\n const sortedDates = Object.keys(historyGroups).sort().reverse();\n\n // Map video history to video objects and mixin lastProgressPoint\n sortedDates.forEach(date => {\n videoGroups[date] = historyGroups[date].map(history => {\n const video = props.videos.find(v => v.id.toString() === history.videoId.toString());\n\n if (!video)\n return null;\n\n return {\n ...video,\n lastProgressPoint: history.lastProgressPoint\n };\n }).filter(Boolean);\n });\n\n const sortedDatesGroupCount = sortedDates.reduce((dateCounts: HashObject, currentDate: string) => {\n const dateTotal = videoGroups[currentDate].length;\n const runningTotal = dateTotal + (dateCounts.runningTotal ?? 0);\n\n return {\n ...dateCounts,\n runningTotal,\n [currentDate]: runningTotal - dateTotal\n };\n }, {});\n\n return (\n <>\n {sortedDates.map(date => {\n // TODO: Fix bug where watch history endpoint returns workspace videos that cannot be fetched/displayed.\n // This is caused by 1 user sharing their workspace video with another user.\n if (!videoGroups[date].length)\n return <React.Fragment key={date}></React.Fragment>;\n\n return (\n <div key={date} className='pb-3'>\n <h2 className='h4'>{formatDate(date)}</h2>\n <VideoList\n videos={videoGroups[date]}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n hasPermissions={hasPermissions}\n startingPositionIndex={sortedDatesGroupCount[date]}\n presentationAudiences={props.presentationAudiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n })}\n </>\n );\n}","import { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, VideoHistory } from 'libs/shared/interfaces';\n\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { VideoHistoryRequests } from '../flight-requests/VideoHistoryRequests';\n\nconst namespace = 'watchHistory.hooks';\n\nexport function useWatchHistory() {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n const { hasLocalPermissions } = usePermissions();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n function getUserVideoHistoryRequest(cursor?: string) {\n return VideoHistoryRequests.userVideoHistory(cursor);\n }\n\n function fetchNext(cursor?: string) {\n return fetch(getUserVideoHistoryRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n \n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewWatchHistoryLanding) && currentUser.hasCompleted;\n\n const {\n items: videoHistory,\n hasMore,\n isFetching\n } = useInfiniteList<VideoHistory>(shouldFetch ? getUserVideoHistoryRequest : false, fetchNext, onError);\n\n const videos = videoHistory?.map(v => v.object) ?? [];\n \n // Hydrate the videos\n const hydratedVideos = useGrowingBatchFetch(videos.map(v => v.id), VideoRequests.watchHistoryVideos);\n\n useVideoMixin(videos);\n\n return {\n videoHistory,\n videos,\n fetchNext,\n isFetching,\n hasMore,\n hasFetchedFirstPage: hydratedVideos.hasFirstRequestCompleted\n };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { VideoActionsOptions } from 'libs/shared/context/VideoActionsContext';\nimport { Video, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\n\nconst namespace = 'watchHistory.hooks';\n\nexport function useWatchHistoryViewActions(removeFromVideoHistory: (v: Video) => void) {\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const getVideoActions = (video: VideoTypes, options?: VideoActionsOptions) => {\n const removeFromWatchHistoryAction = {\n label: LanguageService.getPhrase(namespace, 'removeFromWatchHistory'),\n button: false,\n svgName: cvSvgLibrary.Delete,\n className: 'text-danger',\n onClick: () => {\n removeFromVideoHistory(video);\n },\n // Event logging for this action is handled by the `removeFromVideoHistory` callback\n group: 'delete'\n };\n\n return [ ...videoActions.getVideoActions(video, options), removeFromWatchHistoryAction ];\n };\n\n return {\n ...videoActions,\n getVideoActions\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'watchHistory.watchHistoryEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WatchHistoryEmptyStateProps {\n hasDiscover: boolean;\n}\n\nexport function WatchHistoryEmptyState({ hasDiscover }: WatchHistoryEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.WATCH_HISTORY} altText={getPhrase('info')} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n {hasDiscover &&\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }}\n />\n }\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function WatchHistoryPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.WATCH_HISTORY_PUBLIC} altText={getPhrase('publicInfo')}/>\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.WatchHistoryLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialDate\":\"vq4eE\"};","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-watch-history.scss';\n\nexport function PartialWatchHistory(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={2} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={3} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={2} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={5} />\n </div>\n </>\n );\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor } from 'libs/analytics/interfaces';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Video } from 'libs/shared/interfaces';\n\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\n\nimport { WatchHistoryVideoList } from 'apps/watch-history/components/watch-history-video-list/WatchHistoryVideoList';\nimport { VideoHistoryRequests } from 'apps/watch-history/flight-requests/VideoHistoryRequests';\nimport { useWatchHistory } from 'apps/watch-history/hooks/useWatchHistory';\nimport { useWatchHistoryViewActions } from 'apps/watch-history/hooks/useWatchHistoryVideoActions';\n\nimport { WatchHistoryEmptyState, WatchHistoryPublicEmptyState } from './empty-state/WatchHistoryEmptyState';\nimport { PartialWatchHistory } from './partial-loading/PartialWatchHistory';\n\nconst namespace = 'watchHistory.watchHistory';\n\nexport function WatchHistoryView(): JSX.Element {\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const alerts = useAlerts();\n\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const videoActions = useWatchHistoryViewActions(removeFromVideoHistory);\n\n const {\n videoHistory,\n videos,\n fetchNext,\n hasMore,\n hasFetchedFirstPage,\n isFetching\n } = useWatchHistory();\n\n async function removeFromVideoHistory(video: Video): Promise<void> {\n try {\n await fetchAsync<void>(VideoHistoryRequests.removeFromHistory(video.id));\n\n alerts.success(LanguageService.getPhrase(namespace, 'removeFromHistorySuccess'));\n\n AnalyticsHelper.logUserAction({\n id: video.id,\n name: video.name\n }, {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.RemoveFromWatchHistory,\n location: LocationContext.VideoListItem\n });\n } catch {\n alerts.error(LanguageService.getPhrase(namespace, 'removeFromHistoryError', { name: video.name }));\n }\n }\n \n const audiences = usePresentationAudiences();\n\n if (hasLocalPermissions(LocalPermissionName.ViewWatchHistoryLanding))\n return <WatchHistoryPublicEmptyState />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-3'>\n <h1 className='h2'><Text phrase='heading' /></h1>\n {(() => {\n if (!hasFetchedFirstPage)\n return <PartialWatchHistory />;\n\n if (!videos.length)\n return <WatchHistoryEmptyState hasDiscover={hasPermissions(PermissionName.ViewDiscover)} />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <WatchHistoryVideoList\n videoHistory={videoHistory}\n videos={videos}\n presentationAudiences={audiences.data}\n commonVideoProps={commonVideoProps}\n />\n {(hasMore || isFetching) && <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} />}\n </VideoActionsContext.Provider>\n );\n })()}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin, params } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n isPluginPopup: !!params?.popup,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch, useGrowingBatchFetchFunc } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}) {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(\n videoIds,\n ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace),\n null\n );\n}\n\nexport function useVideoMixinFunc(options: VideoMixinOptions = {}) {\n function getRequest(ids: string[]): Flight.Request {\n return VideoRequests.videoMixinAssocs(ids, options.flightNamespace);\n }\n \n function fetchObjects(items: Types) {\n return fetchItems(getValidObjects(items).map(v => v.id));\n }\n\n const { fetchItems } = useGrowingBatchFetchFunc({ getRequest });\n\n return { fetchObjects };\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","useGrowingBatchFetchFunc","fetchItems","options","getKey","obj","fetchedItems","Set","setRequests","hasFirstRequestCompleted","hasCompleted","unfetchedItems","forEach","key","current","has","push","add","r","SCROLL_TOLERANCE","useInfiniteList","fetchNext","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","VideoHistoryRequests","userVideoHistory","success","error","always","url","formatData","historyCollection","historyData","lastTimeWatchedLocal","lastTimeWatched","lastDateWatchedLocal","lastDateWatched","pagination","videoHistory","ids","namespace","params","sort","i","join","normalizeOptions","watchHistory","videoId","lastProgressPoint","removeFromHistory","invalidationKeys","type","WatchHistoryVideoList","props","hasPermissions","usePermissions","historyGroups","ArrayHelper","videoGroups","sortedDates","Object","keys","reverse","date","history","video","videos","find","v","filter","Boolean","sortedDatesGroupCount","dateCounts","currentDate","dateTotal","runningTotal","className","diff","DateHelper","Date","LanguageService","formatDate","VideoList","getVideoAppLink","VideoAppLinkHelper","startingPositionIndex","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","commonVideoProps","getPhrase","WatchHistoryEmptyState","hasDiscover","value","EmptyState","src","ImageUrls","altText","Text","phrase","text","appLink","application","action","WatchHistoryPublicEmptyState","analyticsData","analyticsOptions","actionType","location","entity","workflowPhase","descriptor","SignUp","PartialWatchHistory","PartialVideoList","numVideos","WatchHistoryView","useSetPageMetadata","title","fetchAsync","hasLocalPermissions","alerts","useCommonVideoProps","locationContext","videoActions","useVideoActions","getVideoActions","removeFromWatchHistoryAction","label","button","svgName","onClick","AnalyticsHelper","name","removeFromVideoHistory","group","useWatchHistoryViewActions","fetch","currentUser","UserRequests","getUserVideoHistoryRequest","shouldFetch","pageNumber","httpStatus","object","hydratedVideos","VideoRequests","useVideoMixin","hasFetchedFirstPage","useWatchHistory","audiences","usePresentationAudiences","VideoActionsContext","InfiniteScrollFooter","PermissionName","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","isLoaded","hasStudentExperience","config","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","subTextType","getSubTextAppLink","series","isPluginPopup","popup","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","redirectOnError","activePresentation","getFallbackPresentation","presentation","getValidObjects","objects","Array","isArray","o","videoIds","useVideoMixinFunc","fetchObjects"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9630],{94644:(e,t,n)=>{n.d(t,{r:()=>l});var r=n(50242),i=n(81886),a=n(67058),o=n(14553),u=n(49267),s=n(49075),c={notFound:a.d,forbidden:{rating:o.q,yearLevel:o.q,region:u.a,privacy:o.q},badRequest:s._,internalServerError:s._};function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var a;a="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},c),t);a&&i.Q.Ry.isStatusCodeError(a)&&(a!==r.o.InternalServer?a!==r.o.NotFound?a!==r.o.Forbidden?n.badRequest||i.Q.Ry.throw(new o.badRequest):n.forbidden||i.Q.Ry.throw(new o.forbidden.privacy):n.notFound||i.Q.Ry.throw(new o.notFound):n.internalServerError||i.Q.Ry.throw(new s._))}}},39902:(e,t,n)=>{n.d(t,{FN:()=>v,SW:()=>h,fh:()=>p});var r=n(32735),i=n(20354),a=n(75896);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(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 u(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}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 l(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},f=50;function p(e,t){var n=a.m.chunk(e,f).map((function(e){return t(a.m.uniq(e))})),r=i.a.useBasicFetchAll(n),o=a.m.flatten(r.data),u=r.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},t.id,t))}),{}):null;return{itemsArr:o,items:u,isFetching:r.isFetching}}function v(e,t,n){var i=h({getRequest:t,_getKey:n}),a=i.fetchItems,o=d(i,["fetchItems"]);return r.useEffect((function(){(null==e?void 0:e.length)&&a(e)}),[null==e?void 0:e.length]),o}function h(e){var t,n,s,d,p,v=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===c(e)?e.id:e},h=r.useRef(new Set),m=(d=r.useState([]),p=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,u=[],s=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return u}}(d,p)||u(d,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=m[0],b=m[1],g=i.a.useBasicFetchAll(y),w=a.m.flatten(g.data),A=g.data.length?w.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},v(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(s=null===(n=g.responses)||void 0===n?void 0:n[0])||void 0===s?void 0:s.hasCompleted),itemsArr:w,items:A,isFetching:g.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach((function(e){var t=v(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&b((function(t){return[].concat(o(t),o(a.m.chunk(n,f).map(e.getRequest)))}))}}}}},91286:(e,t,n)=>{n.d(t,{v:()=>o});var r=n(32735),i=n(94644);function a(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,n){var o=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){o.forEach((function(e){(0,i.r)(e.statusCode,t,n)}))}),[a(o),t,n])}},63719:(e,t,n)=>{n.d(t,{h:()=>u});var r=n(32735),i=n(77316);function a(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u(e){var t,n,u=(t=r.useMemo((function(){return i.p.getBuilder()}),[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,u=[],s=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return u}}(t,n)||a(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=u[0],c=(0,u[1])(s);return c&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(c),[Object.assign(Object.assign({},e),{active:!0})]):c}},10094:(e,t,n)=>{n.d(t,{F:()=>a});var r=n(97395),i=n(78417),a={chaptersAndSubtitles:function(e,t){var n={query:"subtitles[customer],chapters",permissionFilterOption:i.r.StripMetadata,contentRegion:t};return{url:r._.urlBuilder("{gateway}/v1/objects/".concat(e),n),publicUrl:r._.urlBuilder("/api/objects/".concat(e,"/subtitles"),n),key:"videos:".concat(e,":subtitles:chapters:").concat(i.r.StripMetadata),formatData:function(e){return{subtitles:e.subtitles.data,chapters:e.chapters.data}}}},subtitleVtt:function(e,t){return{url:"{player}/srt-to-vtt?url=".concat(e),publicUrl:"/api/player/srt-to-vtt?url=".concat(e),key:"subtitle:".concat(e),formatData:function(e){return Object.assign(Object.assign({},t),{vtt:e})}}}}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var r=n(20354),i=n(16714),a=n(39151),o=n(1666),u=n(31949),s=n(22902),c=n(37802),l=n(22490),d=n(82431),f=n(46390),p=n(27638);function v(e){var t,n,v,h=e||{},m=h.locationContext,y=h.mtv,b=h.flightNamespace,g=h.sharedPlaylist,w=(0,f.G)(),A=w.isPlugin,S=w.params,C=(0,p.u)(m,b),V=C.setFavourite,P=C.canFavourite,F=(0,c.r)(null),I=F.hasTopicDirectories,j=F.isLoadingSettings,O=(0,s.T)(),R=O.hasPermissions,k=O.isLoaded,L=R(i.C.StudentExperience),B=r.a.useBasicFetch(a.L.config()),x=r.a.useBasicFetch(u.N.currentUser()),E=r.a.useBasicFetch((null===(t=x.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(x.data.customerId));return{hasCommonVideoPropsCompleted:!j&&k&&B.hasCompleted&&x.hasCompleted&&(!(null===(n=x.data)||void 0===n?void 0:n.isAuthenticated)||E.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?g&&!(null===(t=x.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:A,isPluginPopup:!!(null==S?void 0:S.popup),canFavourite:P,setFavourite:V,imageCdnUrl:null===(v=B.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:E.data,getClassroomGuideAppLink:l.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:l.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:l.W.getResourceGuidanceAppLink,showNewVideoIndicator:I,companyLogoFallbackUrl:null,hasStudentExperience:L}}}},35014:(e,t,n)=>{n.d(t,{I:()=>f});var r=n(20354),i=n(55171),a=n(16714),o=n(12754),u=n(31949),s=n(22902),c=n(15311),l=n(37802),d=n(11387);function f(e){var t=(0,s.T)(),n=t.hasPermissions,f=t.hasLocalPermissions,p=(0,c.r)().hasProduct,v=r.a.useBasicFetch(u.N.currentUser()),h=(0,l.r)(null).hasPlayPageTranscript,m=p(o.x.Primary);return{canViewGlance:n(a.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:m&&n(a.C.ViewVideoInteractives),canViewClips:m&&n(a.C.ViewVideoClips),canViewCurriculumLinks:n(a.C.ViewCurriculums),canUseActions:f(a.E.UseVideoActions),canViewPublicLayout:!f(a.E.WatchVideos)&&d.C.hasRegionPrefix(),canViewResourceItems:f(a.E.ViewVideoResourceItems),canNavigate:m,canViewTranscript:function(e){var t;return(null===(t=v.data)||void 0===t?void 0:t.isAuthenticated)?h:!!e&&i.e.PublicTranscriptVideoIds.includes(e)}(e)}}},97816:(e,t,n)=>{n.d(t,{V:()=>u,l:()=>s});var r=n(1575),i=n(39902),a=n(31908);function o(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):[]:[]}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=o(e).map((function(e){return e.id}));(0,i.FN)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}),null)}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,i.SW)({getRequest:function(t){return r.R.videoMixinAssocs(t,e.flightNamespace)}}).fetchItems;return{fetchObjects:function(e){return t(o(e).map((function(e){return e.id})))}}}},69630:(e,t,n)=>{n.r(t),n.d(t,{PlayView:()=>K});var r=n(32735),i=n(50242),a=n(81886),o=n(23481),u=n(20354),s=n(28400),c=n(65858),l=n(78417),d=n(16714),f=n(67058),p=n(61990),v=n(33803),h=n(89454),m=n(43012),y=n(39151),b=n(20768),g=n(98064),w=n(31949),A=n(1575),S=n(63719),C=n(26304),V=n(91286),P=n(22902),F=n(79612),I=n(37802),j=n(76753),O=n(14070),R=n(97291),k=n(10094),L=n(58321),B=n(82817),x=n(7179),E=n(49948),T=n(36873),M=n(86698),U=n(35014),q=n(97816),N=n(33192),G=n(22490),_=n(91442),D=n(54301),W=n(87026),Q=o.T.encloseNamespace("shared.play"),H={notFound:p.l,forbidden:{privacy:v.G}};function K(e){var t,n,o,p,v,K,$,Y,Z=e.queryParams,z=Z.context,J=Z.contextId,X=Z.playNext,ee=Z.mtv,te=(0,L.U)({locationContext:c.LZ.PlayPage,mtv:ee}),ne=te.commonVideoProps,re=te.hasCommonVideoPropsCompleted,ie=(0,P.T)().hasPermissions,ae=(0,M.y)().activePresentation,oe=(0,I.r)(null),ue=oe.hasPlayPageTranscript,se=oe.hasNewSearch,ce=(0,U.I)(),le=u.a.useBasicFetch(g.D.streamableLearning()),de=u.a.useBasicFetch(w.N.currentUser()),fe=u.a.useBasicFetch(A.R.video(e.id)),pe=u.a.useBasicFetch(ce.canViewClips&&m.e.videoClips(e.id)),ve=u.a.useBasicFetch(ce.canViewInteractives&&b.b.videoInteractives(e.id)),he=u.a.useBasicFetch(ae&&h.O.audiencesByPresentationId(ae.id)),me=(0,D.l)(e.id),ye=u.a.useBasicFetch(me&&(null===(t=de.data)||void 0===t?void 0:t.contentRegion)&&k.F.chaptersAndSubtitles(e.id,de.data.contentRegion)),be=(null==ye?void 0:ye.data)||{},ge=be.subtitles,we=be.chapters,Ae=null==ge?void 0:ge.filter((function(e){return!e.customer})),Se=Ae&&Ae.length>0?Ae.map((function(e){return k.F.subtitleVtt(e.url,e)})):[],Ce=u.a.useBasicFetchAll(Se),Ve=(null==Ae?void 0:Ae.filter((function(e){return Ce.data.find((function(t){return t.id===e.id}))})))||[],Pe=u.a.useBasicFetch(y.L.config()),Fe=(0,_.a)(),Ie=u.a.useBasicFetch(fe.statusCode===i.o.Forbidden&&A.R.video(e.id,l.r.StripMetadata)),je=(0,B.M)(e.id),Oe=(0,T.k)({video:fe.data,context:z,contextId:J,moviesAndTv:ee,currentUser:de.data}),Re=(0,E.l)(e.id,!0),ke=u.a.useBasicFetch(A.R.regionAlternatives(e.id)),Le=(0,S.h)({name:null===(n=fe.data)||void 0===n?void 0:n.name});return(0,F.M)(j.CG.getVideoMetadata({content:fe.data,regionAlternatives:ke.data,phraseContext:{phraseHandler:Q,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:N.f.getCanonicalLink({stripPresentationSlug:!0,customAppLink:G.W.getAppLink(fe.data)}),allowIndexing:N.f.allowIndexing(),hrefLang:N.f.getContentHrefLang(ke.data,(function(e,t){return{application:R.O.VIDEOS,action:O.e.Videos.PLAY_VIDEO,args:[e,s.m.slugify(t)]}}))})),(0,V.v)(fe,H,{forbidden:!0}),(0,q.V)(null!==(o=Oe.videos)&&void 0!==o?o:[]),(0,x.P)({id:e.id,app:"videos"}),(0,C.b)(Ie),r.useEffect((function(){var e;fe.data&&le.data&&(null===(e=fe.data.libraries)||void 0===e?void 0:e.data.find((function(e){return e.id===le.data.objectId})))&&a.Q.Ry.throw(new f.d)}),[fe.hasCompleted,le.hasCompleted]),fe.data&&de.hasCompleted&&Re.hasCompleted&&re?r.createElement(W.j,{video:fe.data,clips:null===(p=pe.data)||void 0===p?void 0:p.data,interactives:null===(v=ve.data)||void 0===v?void 0:v.data,curriculums:je,relatedVideos:Oe,currentUser:de.data,pointsOfInterest:Re.items,playNext:X,featureAccess:ce,audiences:he.data,params:e.queryParams,canManageVideoAccess:ie(d.C.ManageVideoAccess),shouldShowSideTableOfContents:Fe,tableOfContentsId:null===(K=e.queryParams)||void 0===K?void 0:K.tocId,breadcrumbs:Le,commonVideoProps:ne,hasTheatreMode:ue,shouldShowTranscript:me&&(null===($=Ce.data)||void 0===$?void 0:$.length)>0,vttSubtitles:Ce.data||[],subtitles:Ve,chapters:we,isBot:N.f.isBot(),playerApiUrl:null===(Y=Pe.data)||void 0===Y?void 0:Y.playerApiUrl,hasNewSearch:se}):r.createElement(r.Fragment,null)}K.defaultProps={queryParams:{}}},54301:(e,t,n)=>{n.d(t,{l:()=>o});var r=n(20354),i=n(1575),a=n(35014);function o(e,t){var n,o,u=(0,a.I)(e).canViewTranscript,s=r.a.useBasicFetch(t?i.R.sharedVideo(e,t):i.R.video(e));return u&&!!(null===(o=null===(n=s.data)||void 0===n?void 0:n._isClickViewCurated)||void 0===o?void 0:o.value)}}}]);
2
+ //# sourceMappingURL=9630-9ca1798eee-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9630-9ca1798eee-lite.chunk.js","mappings":"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","sources":["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/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/flight-requests/TranscriptRequests.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/packages/projects/lite/src/shared/views/play/PlayView.tsx","file:///app/packages/projects/lite/src/shared/views/play/hooks/useShowVideoTranscript.ts"],"sourcesContent":["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 { fetchItems, ...data } = useGrowingBatchFetchFunc({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.length]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<T> {\n getRequest: (items: T[]) => Flight.Request;\n _getKey?: (obj: T) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<T>(options: UseGrowingBatchFetchFuncOptions<T>) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: T[]) {\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(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\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 fetchItems\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 React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Chapter, Subtitle } from 'libs/shared/interfaces';\n\nexport interface TranscriptResponse {\n subtitles: Subtitle[];\n chapters: Chapter[];\n}\n\nexport const TranscriptRequests = {\n chaptersAndSubtitles(videoId: string, contentRegion?: string): Flight.PublicRequest {\n const queryStringObj = {\n query: 'subtitles[customer],chapters',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n contentRegion\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${videoId}/subtitles`, queryStringObj),\n key: `videos:${videoId}:subtitles:chapters:${PermissionFilterOption.StripMetadata}`,\n formatData: (data: any) => {\n return { subtitles: data.subtitles.data, chapters: data.chapters.data };\n }\n };\n },\n\n subtitleVtt(url: string, subtitleObj: Subtitle): Flight.PublicRequest {\n return {\n url: `{player}/srt-to-vtt?url=${url}`,\n publicUrl: `/api/player/srt-to-vtt?url=${url}`,\n key: `subtitle:${url}`,\n formatData: (data: any) => {\n return {\n ...subtitleObj,\n vtt: data\n };\n }\n };\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin, params } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n isPluginPopup: !!params?.popup,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n canViewTranscript: boolean;\n}\n\nexport function useVideoFeatureAccess(videoId?: string) {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { hasPlayPageTranscript } = useSettings(null);\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n function shouldShowTranscript(videoId: string): boolean {\n if (currentUser.data?.isAuthenticated)\n return hasPlayPageTranscript;\n\n if (!videoId)\n return false;\n\n return HardCoded.PublicTranscriptVideoIds.includes(videoId);\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP,\n canViewTranscript: shouldShowTranscript(videoId)\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch, useGrowingBatchFetchFunc } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}) {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(\n videoIds,\n ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace),\n null\n );\n}\n\nexport function useVideoMixinFunc(options: VideoMixinOptions = {}) {\n function getRequest(ids: string[]): Flight.Request {\n return VideoRequests.videoMixinAssocs(ids, options.flightNamespace);\n }\n \n function fetchObjects(items: Types) {\n return fetchItems(getValidObjects(items).map(v => v.id));\n }\n\n const { fetchItems } = useGrowingBatchFetchFunc({ getRequest });\n\n return { fetchObjects };\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClipCollection, Config, CurrentUser, InteractiveCollection, PresentationAudience, RegionAlternative, Video, VttSubtitleResponse } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { TranscriptRequests, TranscriptResponse } from 'shared/flight-requests/TranscriptRequests';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\nimport { useShowTranscriptForVideo } from 'shared/views/play/hooks/useShowVideoTranscript';\n\nimport { PlayPage } from './components/play-page/PlayPage';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nexport interface PlayViewProps {\n id: string;\n queryParams?: PlayViewQueryParams;\n}\n\nPlayView.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayView(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.PlayPage, mtv });\n\n const { hasPermissions } = usePermissions();\n\n const { activePresentation } = usePresentation();\n const { hasPlayPageTranscript, hasNewSearch } = useSettings(null);\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<ClipCollection>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.id)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.id)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n\n const shouldFetchTranscript = useShowTranscriptForVideo(props.id);\n const transcript = Flight.useBasicFetch<TranscriptResponse>(\n shouldFetchTranscript && currentUser.data?.contentRegion &&\n TranscriptRequests.chaptersAndSubtitles(props.id, currentUser.data.contentRegion)\n );\n const { subtitles: allSubtitles, chapters } = transcript?.data || {};\n // only show transcript for ClickView produced subtitle\n const subtitles = allSubtitles?.filter(subtitle => !subtitle.customer);\n\n const captionsRequests = (subtitles && subtitles.length > 0)\n ? subtitles.map(subtitle => TranscriptRequests.subtitleVtt(subtitle.url, subtitle))\n : [];\n const captions = Flight.useBasicFetchAll<VttSubtitleResponse>(captionsRequests);\n const filteredSubtitles = subtitles?.filter(\n subtitle => captions.data.find(caption => caption.id === subtitle.id)\n ) || [];\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n stripPresentationSlug: true,\n customAppLink: VideoAppLinkHelper.getAppLink(video.data)\n }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPage\n video={video.data}\n clips={clips.data?.data}\n interactives={interactives.data?.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTheatreMode={hasPlayPageTranscript}\n shouldShowTranscript={shouldFetchTranscript && captions.data?.length > 0}\n vttSubtitles={captions.data || []}\n subtitles={filteredSubtitles}\n chapters={chapters}\n isBot={SeoHelper.isBot()}\n playerApiUrl={config.data?.playerApiUrl}\n hasNewSearch={hasNewSearch}\n />\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Video } from 'libs/shared/interfaces';\n\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\n\nexport function useShowTranscriptForVideo(videoId: string, shareId?: string) {\n const { canViewTranscript } = useVideoFeatureAccess(videoId);\n\n const video = Flight.useBasicFetch<Video>(\n shareId ? VideoRequests.sharedVideo(videoId, shareId) : VideoRequests.video(videoId)\n );\n\n return canViewTranscript && !!video.data?._isClickViewCurated?.value;\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","useGrowingBatchFetchFunc","fetchItems","options","getKey","obj","fetchedItems","Set","setRequests","hasFirstRequestCompleted","hasCompleted","unfetchedItems","forEach","key","current","has","push","add","r","generateCacheKey","flightObjs","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","useBreadcrumbs","match","breadcrumbs","useBuilder","active","TranscriptRequests","chaptersAndSubtitles","videoId","contentRegion","queryStringObj","query","permissionFilterOption","url","publicUrl","formatData","subtitles","chapters","subtitleVtt","subtitleObj","vtt","useCommonVideoProps","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","params","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","isPluginPopup","popup","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","useVideoFeatureAccess","hasLocalPermissions","hasProduct","hasPlayPageTranscript","hasNP","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","canViewTranscript","shouldShowTranscript","getValidObjects","objects","filter","o","useVideoMixin","videoIds","v","ids","useVideoMixinFunc","fetchObjects","getPhrase","videoErrors","PlayView","props","queryParams","context","contextId","playNext","activePresentation","hasNewSearch","featureAccess","streamableLibrary","clips","interactives","audiences","shouldFetchTranscript","transcript","allSubtitles","subtitle","customer","captionsRequests","captions","filteredSubtitles","find","caption","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","customAppLink","allowIndexing","hrefLang","application","action","args","videos","app","libraries","library","objectId","canManageVideoAccess","tableOfContentsId","tocId","hasTheatreMode","vttSubtitles","isBot","playerApiUrl","defaultProps","useShowTranscriptForVideo","shareId","_isClickViewCurated","value"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9767],{22406:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(32735),a=n(23481),o=n(83914),i=n(36532),l=n(35223);const c={tag:"XRj8d",tooltip:"X6mLk"};var s="specialEventCalendar.comingSoonTag";function u(e){return r.createElement(i.u,{title:a.T.getPhrase(s,"tooltip"),spanHackClassName:"d-block ".concat(c.tooltip),spanHack:!0},r.createElement("div",{className:"d-flex text-dark align-items-center ".concat(c.tag," ").concat(e.className)},r.createElement(o.x,{svgName:l.vn.Timer}),!e.onlyIcon&&a.T.getPhrase(s,"comingSoon")))}},78408:(e,t,n)=>{n.d(t,{s:()=>i});var r=n(32735),a=n(15611);const o={dateItem:"I3SBm",label:"PRORs",body:"RfiM_",bodyDay:"ZOVny",bodyRange:"vYhXN",bodyMonth:"mYslO",month:"EPkkQ"};function i(e){var t,n,i;return r.createElement(a.F,{appLink:null===(t=e.getAppLink)||void 0===t?void 0:t.call(e),className:"text-decoration-none text-center bg-white text-dark border border-3 ".concat(null===(n=e.theme)||void 0===n?void 0:n.border," rounded-3 d-block fw-semibold ").concat(e.className),analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions},r.createElement("div",{className:"position-relative ".concat(o.dateItem)},r.createElement("div",{className:"".concat(null===(i=e.theme)||void 0===i?void 0:i.background," py-1 ").concat(o.label," d-flex align-items-center justify-content-center")},e.label?e.label:r.createElement(r.Fragment,null," ")),r.createElement("div",{className:"".concat(function(){switch(e.body.type){case"range":return o.bodyRange;case"day":return o.bodyDay;case"month":return o.bodyMonth}}()," ").concat(o.body," my-2")},e.body.text),r.createElement("div",{className:"mb-0 ".concat(o.month)},e.month)))}},67814:(e,t,n)=>{n.d(t,{p:()=>O,v:()=>N});var r=n(32735),a=n(110),o=n(50690),i=n(22406),l=n(78408),c=n(83657),s=n(23481),u=n(15611),d=n(83914),m=n(35223),f="shared.backButton";function v(e){var t=Object.assign({textShadow:!0},e),n=t.backToName,a=t.appLink,o=t.color,i=t.extraClasses,l=t.textShadow,c=n?s.T.getPhrase(f,"backTo",{backToName:n}):s.T.getPhrase(f,"back"),v="black"===o?"":"text-white",p=l?"text-shadow":"";return r.createElement(u.F,{appLink:a,className:"d-inline-flex align-items-center h5 mb-0 ".concat(i," ").concat(v," ").concat(p)},r.createElement(d.x,{svgName:m.vn.ChevronLeft,size:d.S.Medium}),r.createElement("span",{className:"ms-1"},c))}v.defaultProps={color:"black",extraClasses:""};var p=n(4527),h=n(83345),g=n(7733),b=n(10587),y=n(94232),C=n(54610),w=n(79967),E=n(9085),S=n(67453);const k={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var x="".concat(b.y[C.__.Banners].width,":").concat(b.y[C.__.Banners].height);function A(e){return e.length<160?"h1":k.headingLarge}var O=r.memo((function(e){var t,n,s,u,d=e.heading,m=e.banner,f=e.imageCdnUrl,b=e.actions,O=e.sortComponent,N=e.blockColourClass,j=e.specialEvent,P=r.useContext(y.n),D=(0,w.k)().xxl?1920:1200,L=r.useMemo((function(){if(!j||e.showComingSoon)return!1;var t=a.O.format(new Date,"YYYY-MM-DD");return j.endDate?j.startDate<=t&&j.endDate>=t:j.startDate===t}),[j]),M=e.imageOptions||{width:D,ratio:x,resizeType:C.Nq.Cover},F=!!m&&!!f&&S.j.createBannerUrl(m,{fallbackBaseUrl:f,fallbackCategoryName:d,type:C.__.Banners},M),I={className:"banner banner-header ".concat(e.bannerClassName),style:F?{backgroundImage:"url('".concat(F,"')")}:{}};!m&&N&&(delete I.style,I.className+=" ".concat(N));var T=e.detailsComponent,R=(0,E.x)(e.heading,g.o);return o.b.renderInPortalIfExists(r.createElement("header",Object.assign({},I),r.createElement("div",{className:"container ".concat(k.container," position-relative inner-banner")},e.backButtonAppLink&&r.createElement("div",{className:"pt-3"},r.createElement(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),r.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(k.bannerContent," px-2 ").concat((null===(t=e.logo)||void 0===t?void 0:t.url)?k.bannerContentWithLogo:""))},!!j&&r.createElement("div",{className:"position-relative ".concat(k.specialEventContainer)},r.createElement(l.s,{body:{type:j.endDate?"range":"day",text:j.endDate?"".concat(a.O.format(j.startDate,"DD"),"-").concat(a.O.format(j.endDate,"DD")):a.O.format(j.startDate,"DD")},month:function(e){return e.endDate?a.O.isSame(e.startDate,e.endDate,"month")?a.O.format(e.startDate,"MMMM"):"".concat(a.O.format(e.startDate,"MMM")," - ").concat(a.O.format(e.endDate,"MMM")):a.O.format(e.startDate,"MMMM")}(j),theme:e.calendarTheme})),r.createElement("div",null,L&&r.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},r.createElement(h.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&r.createElement(i.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),r.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&r.createElement("div",{className:"".concat(k.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(R)},r.createElement(p.w,{src:S.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:C.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),r.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(k.heading," ").concat(A(d)," ").concat(e.alignLogoLeft?"w-50":"")},d,T&&r.createElement(T,null)))),!!b&&r.createElement("div",{className:k.actionsContainer},r.createElement(c.e,{actions:b,sortComponent:O,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(u=e.logo)||void 0===u?void 0:u.url)&&r.createElement("div",{className:k.logoContainer},r.createElement("img",{src:S.j.createUrl(e.logo.url,{size:C.h2.Medium}),className:"rounded-circle"})))),null==P?void 0:P.container)}),(function(e,t){var n,r;return e.actions===t.actions&&e.heading===t.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(r=t.logo)||void 0===r?void 0:r.url)}));function N(){var e=r.useContext(y.n);return o.b.renderInPortalIfExists(r.createElement("div",{className:"partial-banner partial-loading-background ".concat(k.banner)}),null==e?void 0:e.container)}},79718:(e,t,n)=>{n.d(t,{p:()=>m});var r=n(32735),a=n(23481),o=n(91967),i=n(15611),l=n(23788);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 s(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u="shared.videoSortSelect",d=o.q.memoize((function(){return s(s(s(s(s(s({},l.D.RecentlyAdded,{name:a.T.getPhrase(u,"recentlyAdded")}),l.D.AtoZ,{name:a.T.getPhrase(u,"atoz")}),l.D.ZtoA,{name:a.T.getPhrase(u,"ztoa")}),l.D.Newest,{name:a.T.getPhrase(u,"newest")}),l.D.Oldest,{name:a.T.getPhrase(u,"oldest")}),l.D.Series,{name:a.T.getPhrase(u,"series")})}));function m(e){var t,n,o=e.sortTypes||(t=e.includeProductionYear,n=d(),t&&(n=Object.assign(s({},l.D.ProductionYear,{name:a.T.getPhrase(u,"productionYear")}),n)),n);return r.createElement("div",{className:"dropdown"},r.createElement("button",{className:"btn btn-".concat(e.variant," ms-2 dropdown-toggle"),type:"button",id:"sort-select","data-bs-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},o[e.type].name),r.createElement("ul",{className:"dropdown-menu dropdown-menu-end","aria-labelledby":"sort-select"},Object.keys(o).map((function(t){var n="dropdown-item";return t===e.type&&(n+=" active"),r.createElement("li",{key:t},r.createElement(i.F,{className:n,appLink:e.getSortAppLink(t),analyticsData:{sort:o[t].name},analyticsOptions:e.analyticsOptions},o[t].name))}))))}m.defaultProps={variant:"light"}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(50242),a=n(81886),o=n(67058),i=n(14553),l=n(49267),c=n(49075),s={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:l.a,privacy:i.q},badRequest:c._,internalServerError:c._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},s),t);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==r.o.InternalServer?o!==r.o.NotFound?o!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new i.badRequest):n.forbidden||a.Q.Ry.throw(new i.forbidden.privacy):n.notFound||a.Q.Ry.throw(new i.notFound):n.internalServerError||a.Q.Ry.throw(new c._))}}},39902:(e,t,n)=>{n.d(t,{FN:()=>v,SW:()=>p,fh:()=>f});var r=n(32735),a=n(20354),o=n(75896);function i(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e){return s="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},s(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},m=50;function f(e,t){var n=o.m.chunk(e,m).map((function(e){return t(o.m.uniq(e))})),r=a.a.useBasicFetchAll(n),i=o.m.flatten(r.data),l=r.data.length?i.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:i,items:l,isFetching:r.isFetching}}function v(e,t,n){var a=p({getRequest:t,_getKey:n}),o=a.fetchItems,i=d(a,["fetchItems"]);return r.useEffect((function(){e.length&&o(e)}),[null==e?void 0:e.length]),i}function p(e){var t,n,c,d,f,v=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===s(e)?e.id:e},p=r.useRef(new Set),h=(d=r.useState([]),f=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(d,f)||l(d,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.")}()),g=h[0],b=h[1],y=a.a.useBasicFetchAll(g),C=o.m.flatten(y.data),w=y.data.length?C.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},v(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(c=null===(n=y.responses)||void 0===n?void 0:n[0])||void 0===c?void 0:c.hasCompleted),itemsArr:C,items:w,isFetching:y.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach((function(e){var t=v(e);p.current.has(t)||(n.push(e),p.current.add(t))})),n.length&&b((function(t){return[].concat(i(t),i(o.m.chunk(n,m).map(e.getRequest)))}))}}}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var r=n(32735),a=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){i.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[o(i),t,n])}},60115:(e,t,n)=>{n.d(t,{K:()=>s});var r=n(32735),a=n(50242),o=n(91967),i=400,l=n(45719);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,s,u,d){var m,f,v,p,h=(m=(0,r.useState)(0),f=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(m,f)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(m,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.")}()),g=h[0],b=h[1],y=t,C=(0,l.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),s,u);return v={fetchNextPage:function(){if(t&&e&&C)return b((function(e){return e+1})),y(C.nextCursor)},hasMore:!!(null==C?void 0:C.nextCursor),isFetching:null==C?void 0:C.isFetching,scrollContainer:d},p=function(){if(!v.isFetching){if(v.scrollContainer){var e=v.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-i)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-i)return;v.fetchNextPage()}},(0,r.useEffect)((function(){var e=o.q.throttle(p,200),t=v.scrollContainer||window;return v.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[v.hasMore,v.fetchNextPage,v.scrollContainer]),(0,r.useEffect)((function(){C&&C.shouldInitialFetch&&t&&(y(),b((function(e){return e+1})))}),[null==C?void 0:C.shouldInitialFetch,t]),(0,r.useEffect)((function(){var e,t;if((null==C?void 0:C.statusCode)&&o.q.isFunction(n)){var r=+(null===(t=null===(e=C.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==a.k.ClientError&&r!==a.k.ServerError||n(g,C.statusCode)}}),[null==C?void 0:C.statusCode]),{items:null==C?void 0:C.items,hasMore:!!(null==C?void 0:C.nextCursor),nextCursor:null==C?void 0:C.nextCursor,isFetching:null==C?void 0:C.isFetching,totalItems:null==C?void 0:C.totalItems,hasFirstPageCompleted:null==C?void 0:C.hasFirstPageCompleted}}},63719:(e,t,n)=>{n.d(t,{h:()=>l});var r=n(32735),a=n(77316);function o(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e){var t,n,l=(t=r.useMemo((function(){return a.p.getBuilder()}),[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(t,n)||o(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=l[0],s=(0,l[1])(c);return s&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(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.")}()}(s),[Object.assign(Object.assign({},e),{active:!0})]):s}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var r=n(20354),a=n(16714),o=n(39151),i=n(1666),l=n(31949),c=n(22902),s=n(37802),u=n(22490),d=n(82431),m=n(46390),f=n(27638);function v(e){var t,n,v,p=e||{},h=p.locationContext,g=p.mtv,b=p.flightNamespace,y=p.sharedPlaylist,C=(0,m.G)(),w=C.isPlugin,E=C.params,S=(0,f.u)(h,b),k=S.setFavourite,x=S.canFavourite,A=(0,s.r)(null),O=A.hasTopicDirectories,N=A.isLoadingSettings,j=(0,c.T)(),P=j.hasPermissions,D=j.isLoaded,L=P(a.C.StudentExperience),M=r.a.useBasicFetch(o.L.config()),F=r.a.useBasicFetch(l.N.currentUser()),I=r.a.useBasicFetch((null===(t=F.data)||void 0===t?void 0:t.isAuthenticated)&&i.h.yearGroups(F.data.customerId));return{hasCommonVideoPropsCompleted:!N&&D&&M.hasCompleted&&F.hasCompleted&&(!(null===(n=F.data)||void 0===n?void 0:n.isAuthenticated)||I.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?y&&!(null===(t=F.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:g}):null},isPlugin:w,isPluginPopup:!!(null==E?void 0:E.popup),canFavourite:x,setFavourite:k,imageCdnUrl:null===(v=M.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:I.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:O,companyLogoFallbackUrl:null,hasStudentExperience:L}}}},44110:(e,t,n)=>{n.d(t,{i:()=>i});var r=n(20354),a=n(89454),o=n(86698),i=function(){var e=(0,o.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,i=t||n();return r.a.useBasicFetch(!!i&&a.O.presentationAudiences(i.id))}},97816:(e,t,n)=>{n.d(t,{V:()=>l,l:()=>c});var r=n(1575),a=n(39902),o=n(31908);function i(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(o.M.isVideo(e)||o.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(o.M.isVideo(e)||o.M.isClip(e))})):[]:[]}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i(e).map((function(e){return e.id}));(0,a.FN)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}),null)}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.SW)({getRequest:function(t){return r.R.videoMixinAssocs(t,e.flightNamespace)}}).fetchItems;return{fetchObjects:function(e){return t(i(e).map((function(e){return e.id})))}}}}}]);
2
- //# sourceMappingURL=9767-a23d603cc5-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9767],{22406:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(32735),a=n(23481),o=n(83914),i=n(36532),l=n(35223);const c={tag:"XRj8d",tooltip:"X6mLk"};var s="specialEventCalendar.comingSoonTag";function u(e){return r.createElement(i.u,{title:a.T.getPhrase(s,"tooltip"),spanHackClassName:"d-block ".concat(c.tooltip),spanHack:!0},r.createElement("div",{className:"d-flex text-dark align-items-center ".concat(c.tag," ").concat(e.className)},r.createElement(o.x,{svgName:l.vn.Timer}),!e.onlyIcon&&a.T.getPhrase(s,"comingSoon")))}},78408:(e,t,n)=>{n.d(t,{s:()=>i});var r=n(32735),a=n(15611);const o={dateItem:"I3SBm",label:"PRORs",body:"RfiM_",bodyDay:"ZOVny",bodyRange:"vYhXN",bodyMonth:"mYslO",month:"EPkkQ"};function i(e){var t,n,i;return r.createElement(a.F,{appLink:null===(t=e.getAppLink)||void 0===t?void 0:t.call(e),className:"text-decoration-none text-center bg-white text-dark border border-3 ".concat(null===(n=e.theme)||void 0===n?void 0:n.border," rounded-3 d-block fw-semibold ").concat(e.className),analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions},r.createElement("div",{className:"position-relative ".concat(o.dateItem)},r.createElement("div",{className:"".concat(null===(i=e.theme)||void 0===i?void 0:i.background," py-1 ").concat(o.label," d-flex align-items-center justify-content-center")},e.label?e.label:r.createElement(r.Fragment,null," ")),r.createElement("div",{className:"".concat(function(){switch(e.body.type){case"range":return o.bodyRange;case"day":return o.bodyDay;case"month":return o.bodyMonth}}()," ").concat(o.body," my-2")},e.body.text),r.createElement("div",{className:"mb-0 ".concat(o.month)},e.month)))}},67814:(e,t,n)=>{n.d(t,{p:()=>O,v:()=>N});var r=n(32735),a=n(110),o=n(50690),i=n(22406),l=n(78408),c=n(83657),s=n(23481),u=n(15611),d=n(83914),m=n(35223),f="shared.backButton";function v(e){var t=Object.assign({textShadow:!0},e),n=t.backToName,a=t.appLink,o=t.color,i=t.extraClasses,l=t.textShadow,c=n?s.T.getPhrase(f,"backTo",{backToName:n}):s.T.getPhrase(f,"back"),v="black"===o?"":"text-white",p=l?"text-shadow":"";return r.createElement(u.F,{appLink:a,className:"d-inline-flex align-items-center h5 mb-0 ".concat(i," ").concat(v," ").concat(p)},r.createElement(d.x,{svgName:m.vn.ChevronLeft,size:d.S.Medium}),r.createElement("span",{className:"ms-1"},c))}v.defaultProps={color:"black",extraClasses:""};var p=n(4527),h=n(83345),g=n(7733),b=n(10587),y=n(94232),C=n(54610),w=n(79967),E=n(9085),S=n(67453);const k={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var x="".concat(b.y[C.__.Banners].width,":").concat(b.y[C.__.Banners].height);function A(e){return e.length<160?"h1":k.headingLarge}var O=r.memo((function(e){var t,n,s,u,d=e.heading,m=e.banner,f=e.imageCdnUrl,b=e.actions,O=e.sortComponent,N=e.blockColourClass,j=e.specialEvent,P=r.useContext(y.n),D=(0,w.k)().xxl?1920:1200,L=r.useMemo((function(){if(!j||e.showComingSoon)return!1;var t=a.O.format(new Date,"YYYY-MM-DD");return j.endDate?j.startDate<=t&&j.endDate>=t:j.startDate===t}),[j]),M=e.imageOptions||{width:D,ratio:x,resizeType:C.Nq.Cover},F=!!m&&!!f&&S.j.createBannerUrl(m,{fallbackBaseUrl:f,fallbackCategoryName:d,type:C.__.Banners},M),I={className:"banner banner-header ".concat(e.bannerClassName),style:F?{backgroundImage:"url('".concat(F,"')")}:{}};!m&&N&&(delete I.style,I.className+=" ".concat(N));var T=e.detailsComponent,R=(0,E.x)(e.heading,g.o);return o.b.renderInPortalIfExists(r.createElement("header",Object.assign({},I),r.createElement("div",{className:"container ".concat(k.container," position-relative inner-banner")},e.backButtonAppLink&&r.createElement("div",{className:"pt-3"},r.createElement(v,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),r.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(k.bannerContent," px-2 ").concat((null===(t=e.logo)||void 0===t?void 0:t.url)?k.bannerContentWithLogo:""))},!!j&&r.createElement("div",{className:"position-relative ".concat(k.specialEventContainer)},r.createElement(l.s,{body:{type:j.endDate?"range":"day",text:j.endDate?"".concat(a.O.format(j.startDate,"DD"),"-").concat(a.O.format(j.endDate,"DD")):a.O.format(j.startDate,"DD")},month:function(e){return e.endDate?a.O.isSame(e.startDate,e.endDate,"month")?a.O.format(e.startDate,"MMMM"):"".concat(a.O.format(e.startDate,"MMM")," - ").concat(a.O.format(e.endDate,"MMM")):a.O.format(e.startDate,"MMMM")}(j),theme:e.calendarTheme})),r.createElement("div",null,L&&r.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},r.createElement(h.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&r.createElement(i.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),r.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&r.createElement("div",{className:"".concat(k.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(R)},r.createElement(p.w,{src:S.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:C.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),r.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(k.heading," ").concat(A(d)," ").concat(e.alignLogoLeft?"w-50":"")},d,T&&r.createElement(T,null)))),!!b&&r.createElement("div",{className:k.actionsContainer},r.createElement(c.e,{actions:b,sortComponent:O,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(u=e.logo)||void 0===u?void 0:u.url)&&r.createElement("div",{className:k.logoContainer},r.createElement("img",{src:S.j.createUrl(e.logo.url,{size:C.h2.Medium}),className:"rounded-circle"})))),null==P?void 0:P.container)}),(function(e,t){var n,r;return e.actions===t.actions&&e.heading===t.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(r=t.logo)||void 0===r?void 0:r.url)}));function N(){var e=r.useContext(y.n);return o.b.renderInPortalIfExists(r.createElement("div",{className:"partial-banner partial-loading-background ".concat(k.banner)}),null==e?void 0:e.container)}},79718:(e,t,n)=>{n.d(t,{p:()=>m});var r=n(32735),a=n(23481),o=n(91967),i=n(15611),l=n(23788);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 s(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u="shared.videoSortSelect",d=o.q.memoize((function(){return s(s(s(s(s(s({},l.D.RecentlyAdded,{name:a.T.getPhrase(u,"recentlyAdded")}),l.D.AtoZ,{name:a.T.getPhrase(u,"atoz")}),l.D.ZtoA,{name:a.T.getPhrase(u,"ztoa")}),l.D.Newest,{name:a.T.getPhrase(u,"newest")}),l.D.Oldest,{name:a.T.getPhrase(u,"oldest")}),l.D.Series,{name:a.T.getPhrase(u,"series")})}));function m(e){var t,n,o=e.sortTypes||(t=e.includeProductionYear,n=d(),t&&(n=Object.assign(s({},l.D.ProductionYear,{name:a.T.getPhrase(u,"productionYear")}),n)),n);return r.createElement("div",{className:"dropdown"},r.createElement("button",{className:"btn btn-".concat(e.variant," ms-2 dropdown-toggle"),type:"button",id:"sort-select","data-bs-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},o[e.type].name),r.createElement("ul",{className:"dropdown-menu dropdown-menu-end","aria-labelledby":"sort-select"},Object.keys(o).map((function(t){var n="dropdown-item";return t===e.type&&(n+=" active"),r.createElement("li",{key:t},r.createElement(i.F,{className:n,appLink:e.getSortAppLink(t),analyticsData:{sort:o[t].name},analyticsOptions:e.analyticsOptions},o[t].name))}))))}m.defaultProps={variant:"light"}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(50242),a=n(81886),o=n(67058),i=n(14553),l=n(49267),c=n(49075),s={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:l.a,privacy:i.q},badRequest:c._,internalServerError:c._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},s),t);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==r.o.InternalServer?o!==r.o.NotFound?o!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new i.badRequest):n.forbidden||a.Q.Ry.throw(new i.forbidden.privacy):n.notFound||a.Q.Ry.throw(new i.notFound):n.internalServerError||a.Q.Ry.throw(new c._))}}},39902:(e,t,n)=>{n.d(t,{FN:()=>v,SW:()=>p,fh:()=>f});var r=n(32735),a=n(20354),o=n(75896);function i(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e){return s="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},s(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},m=50;function f(e,t){var n=o.m.chunk(e,m).map((function(e){return t(o.m.uniq(e))})),r=a.a.useBasicFetchAll(n),i=o.m.flatten(r.data),l=r.data.length?i.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:i,items:l,isFetching:r.isFetching}}function v(e,t,n){var a=p({getRequest:t,_getKey:n}),o=a.fetchItems,i=d(a,["fetchItems"]);return r.useEffect((function(){(null==e?void 0:e.length)&&o(e)}),[null==e?void 0:e.length]),i}function p(e){var t,n,c,d,f,v=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===s(e)?e.id:e},p=r.useRef(new Set),h=(d=r.useState([]),f=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(d,f)||l(d,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.")}()),g=h[0],b=h[1],y=a.a.useBasicFetchAll(g),C=o.m.flatten(y.data),w=y.data.length?C.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},v(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(c=null===(n=y.responses)||void 0===n?void 0:n[0])||void 0===c?void 0:c.hasCompleted),itemsArr:C,items:w,isFetching:y.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach((function(e){var t=v(e);p.current.has(t)||(n.push(e),p.current.add(t))})),n.length&&b((function(t){return[].concat(i(t),i(o.m.chunk(n,m).map(e.getRequest)))}))}}}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var r=n(32735),a=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){i.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[o(i),t,n])}},60115:(e,t,n)=>{n.d(t,{K:()=>s});var r=n(32735),a=n(50242),o=n(91967),i=400,l=n(45719);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,s,u,d){var m,f,v,p,h=(m=(0,r.useState)(0),f=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(m,f)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(m,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.")}()),g=h[0],b=h[1],y=t,C=(0,l.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),s,u);return v={fetchNextPage:function(){if(t&&e&&C)return b((function(e){return e+1})),y(C.nextCursor)},hasMore:!!(null==C?void 0:C.nextCursor),isFetching:null==C?void 0:C.isFetching,scrollContainer:d},p=function(){if(!v.isFetching){if(v.scrollContainer){var e=v.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-i)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-i)return;v.fetchNextPage()}},(0,r.useEffect)((function(){var e=o.q.throttle(p,200),t=v.scrollContainer||window;return v.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[v.hasMore,v.fetchNextPage,v.scrollContainer]),(0,r.useEffect)((function(){C&&C.shouldInitialFetch&&t&&(y(),b((function(e){return e+1})))}),[null==C?void 0:C.shouldInitialFetch,t]),(0,r.useEffect)((function(){var e,t;if((null==C?void 0:C.statusCode)&&o.q.isFunction(n)){var r=+(null===(t=null===(e=C.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==a.k.ClientError&&r!==a.k.ServerError||n(g,C.statusCode)}}),[null==C?void 0:C.statusCode]),{items:null==C?void 0:C.items,hasMore:!!(null==C?void 0:C.nextCursor),nextCursor:null==C?void 0:C.nextCursor,isFetching:null==C?void 0:C.isFetching,totalItems:null==C?void 0:C.totalItems,hasFirstPageCompleted:null==C?void 0:C.hasFirstPageCompleted}}},63719:(e,t,n)=>{n.d(t,{h:()=>l});var r=n(32735),a=n(77316);function o(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e){var t,n,l=(t=r.useMemo((function(){return a.p.getBuilder()}),[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(t,n)||o(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=l[0],s=(0,l[1])(c);return s&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(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.")}()}(s),[Object.assign(Object.assign({},e),{active:!0})]):s}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var r=n(20354),a=n(16714),o=n(39151),i=n(1666),l=n(31949),c=n(22902),s=n(37802),u=n(22490),d=n(82431),m=n(46390),f=n(27638);function v(e){var t,n,v,p=e||{},h=p.locationContext,g=p.mtv,b=p.flightNamespace,y=p.sharedPlaylist,C=(0,m.G)(),w=C.isPlugin,E=C.params,S=(0,f.u)(h,b),k=S.setFavourite,x=S.canFavourite,A=(0,s.r)(null),O=A.hasTopicDirectories,N=A.isLoadingSettings,j=(0,c.T)(),P=j.hasPermissions,D=j.isLoaded,L=P(a.C.StudentExperience),M=r.a.useBasicFetch(o.L.config()),F=r.a.useBasicFetch(l.N.currentUser()),I=r.a.useBasicFetch((null===(t=F.data)||void 0===t?void 0:t.isAuthenticated)&&i.h.yearGroups(F.data.customerId));return{hasCommonVideoPropsCompleted:!N&&D&&M.hasCompleted&&F.hasCompleted&&(!(null===(n=F.data)||void 0===n?void 0:n.isAuthenticated)||I.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?y&&!(null===(t=F.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:g}):null},isPlugin:w,isPluginPopup:!!(null==E?void 0:E.popup),canFavourite:x,setFavourite:k,imageCdnUrl:null===(v=M.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:I.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:O,companyLogoFallbackUrl:null,hasStudentExperience:L}}}},44110:(e,t,n)=>{n.d(t,{i:()=>i});var r=n(20354),a=n(89454),o=n(86698),i=function(){var e=(0,o.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,i=t||n();return r.a.useBasicFetch(!!i&&a.O.presentationAudiences(i.id))}},97816:(e,t,n)=>{n.d(t,{V:()=>l,l:()=>c});var r=n(1575),a=n(39902),o=n(31908);function i(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(o.M.isVideo(e)||o.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(o.M.isVideo(e)||o.M.isClip(e))})):[]:[]}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i(e).map((function(e){return e.id}));(0,a.FN)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}),null)}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.SW)({getRequest:function(t){return r.R.videoMixinAssocs(t,e.flightNamespace)}}).fetchItems;return{fetchObjects:function(e){return t(i(e).map((function(e){return e.id})))}}}}}]);
2
+ //# sourceMappingURL=9767-281d5e0883-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9767-281d5e0883-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/libs/shared/src/components/video-sort-select/VideoSortSelect.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/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n logoBgColour?: string;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n function getSpecialEventMonthText(specialEvent: CalendarEvent): string {\n if (!specialEvent.endDate)\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n if (DateHelper.isSame(specialEvent.startDate, specialEvent.endDate, 'month'))\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n return `${DateHelper.format(specialEvent.startDate, 'MMM')} - ${DateHelper.format(specialEvent.endDate, 'MMM')}`;\n }\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n const logoFallbackBgClassName = getBgColorClass(props.heading, BG_COLOUR_CLASS_NAMES);\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={getSpecialEventMonthText(specialEvent)}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft && props.logo?.url &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${logoFallbackBgClassName}`}>\n <LazyImage\n src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })}\n style={{ backgroundColor: props.logoBgColour }}\n />\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Medium })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\n\nconst namespace = 'shared.videoSortSelect';\n\ntype SortTypes = {[sort: string]: { name: string }};\n\nconst getDefaultSortTypes: () => SortTypes = FunctionHelper.memoize(() => {\n return {\n [VideoSortType.RecentlyAdded]: {\n name: LanguageService.getPhrase(namespace, 'recentlyAdded')\n },\n [VideoSortType.AtoZ]: {\n name: LanguageService.getPhrase(namespace, 'atoz')\n },\n [VideoSortType.ZtoA]: {\n name: LanguageService.getPhrase(namespace, 'ztoa')\n },\n [VideoSortType.Newest]: {\n name: LanguageService.getPhrase(namespace, 'newest')\n },\n [VideoSortType.Oldest]: {\n name: LanguageService.getPhrase(namespace, 'oldest')\n },\n [VideoSortType.Series]: {\n name: LanguageService.getPhrase(namespace, 'series')\n }\n };\n});\n\nfunction getSortTypes(productionYear: boolean): SortTypes {\n let defaultSortTypes = getDefaultSortTypes();\n\n if (productionYear) {\n defaultSortTypes = {\n [VideoSortType.ProductionYear]: {\n name: LanguageService.getPhrase(namespace, 'productionYear')\n },\n ...defaultSortTypes\n };\n }\n \n return defaultSortTypes;\n}\n\ninterface VideoSortSelectProps {\n type: VideoSortType;\n getSortAppLink: (sort: string) => Core.AppLink;\n variant?: ButtonProps['variant'];\n sortTypes?: SortTypes;\n analyticsOptions: AnalyticsOptions;\n includeProductionYear?: boolean;\n}\n\nVideoSortSelect.defaultProps = {\n variant: 'light'\n};\n\nexport function VideoSortSelect(props: VideoSortSelectProps): JSX.Element {\n const sortTypes = props.sortTypes || getSortTypes(props.includeProductionYear);\n\n return (\n <div className='dropdown'>\n <button className={`btn btn-${props.variant} ms-2 dropdown-toggle`} type='button' id='sort-select' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>\n {sortTypes[props.type].name}\n </button>\n <ul className='dropdown-menu dropdown-menu-end' aria-labelledby='sort-select'>\n {Object.keys(sortTypes).map(k => {\n let className = 'dropdown-item';\n\n if (k === props.type)\n className += ' active';\n\n return (\n <li key={k}>\n <AppLink\n className={className}\n appLink={props.getSortAppLink(k)}\n analyticsData={{\n sort: sortTypes[k].name\n }}\n analyticsOptions={props.analyticsOptions}\n >\n {sortTypes[k].name}\n </AppLink>\n </li>\n );\n })}\n </ul>\n </div>\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 { fetchItems, ...data } = useGrowingBatchFetchFunc({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.length]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<T> {\n getRequest: (items: T[]) => Flight.Request;\n _getKey?: (obj: T) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<T>(options: UseGrowingBatchFetchFuncOptions<T>) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: T[]) {\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(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\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 fetchItems\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 { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin, params } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n isPluginPopup: !!params?.popup,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch, useGrowingBatchFetchFunc } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}) {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(\n videoIds,\n ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace),\n null\n );\n}\n\nexport function useVideoMixinFunc(options: VideoMixinOptions = {}) {\n function getRequest(ids: string[]): Flight.Request {\n return VideoRequests.videoMixinAssocs(ids, options.flightNamespace);\n }\n \n function fetchObjects(items: Types) {\n return fetchItems(getValidObjects(items).map(v => v.id));\n }\n\n const { fetchItems } = useGrowingBatchFetchFunc({ getRequest });\n\n return { fetchObjects };\n}"],"names":["namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","className","SvgContainer","svgName","onlyIcon","GenericCalendarDate","AppLink","appLink","getAppLink","theme","border","analyticsData","analyticsOptions","background","label","body","type","getBodyClass","text","month","BackButton","textShadow","backToName","color","extraClasses","backPhrase","colorClass","textShadowClass","size","S","defaultProps","RATIO","width","height","getSizeClass","heading","length","BannerHeader","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","getSpecialEventMonthText","calendarTheme","Text","phrase","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","getDefaultSortTypes","name","VideoSortSelect","productionYear","defaultSortTypes","sortTypes","includeProductionYear","variant","id","Object","keys","map","k","key","getSortAppLink","sort","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","data","items","reduce","acc","item","isFetching","useGrowingBatchFetch","objs","_getKey","useGrowingBatchFetchFunc","fetchItems","options","getKey","obj","fetchedItems","Set","setRequests","hasFirstRequestCompleted","hasCompleted","unfetchedItems","forEach","current","has","push","add","r","generateCacheKey","flightObjs","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","SCROLL_TOLERANCE","useInfiniteList","fetchNext","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","scrollTop","scrollHeight","window","innerHeight","document","documentElement","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","useCommonVideoProps","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","params","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","isPluginPopup","popup","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","getValidObjects","objects","filter","o","useVideoMixin","videoIds","v","ids","useVideoMixinFunc","fetchObjects"],"sourceRoot":""}