@clickview/lite 0.74.0-rc.0 → 0.74.0-rc.2

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 (110) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{3816-lite-f459e281d1.chunk.css → 7577-lite-efcdc36bde.chunk.css} +1 -1
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{2126-4a3a267af7-lite.chunk.js → 2126-d77b244321-lite.chunk.js} +2 -2
  5. package/dist/scripts/{2126-4a3a267af7-lite.chunk.js.map → 2126-d77b244321-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/2258-6851fce9d7-lite.chunk.js +3 -0
  7. package/dist/scripts/2258-6851fce9d7-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{2541-9104968024-lite.chunk.js → 2541-d2d0da16cf-lite.chunk.js} +1 -1
  9. package/dist/scripts/{2541-9104968024-lite.chunk.js.map → 2541-d2d0da16cf-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/3677-aadf9fd2cc-lite.chunk.js +2 -0
  11. package/dist/scripts/3677-aadf9fd2cc-lite.chunk.js.map +1 -0
  12. package/dist/scripts/3978-0e2106b5aa-lite.chunk.js +2 -0
  13. package/dist/scripts/3978-0e2106b5aa-lite.chunk.js.map +1 -0
  14. package/dist/scripts/4400-7381394a2e-lite.chunk.js +2 -0
  15. package/dist/scripts/4400-7381394a2e-lite.chunk.js.map +1 -0
  16. package/dist/scripts/5135-9fa172bfc3-lite.chunk.js +2 -0
  17. package/dist/scripts/5135-9fa172bfc3-lite.chunk.js.map +1 -0
  18. package/dist/scripts/{5434-671d92b4e3-lite.chunk.js → 5434-20de24cb39-lite.chunk.js} +1 -1
  19. package/dist/scripts/{5434-671d92b4e3-lite.chunk.js.map → 5434-20de24cb39-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/{5780-eb7c4d1db7-lite.chunk.js → 5780-3ee0f5d974-lite.chunk.js} +2 -2
  21. package/dist/scripts/5780-3ee0f5d974-lite.chunk.js.map +1 -0
  22. package/dist/scripts/5870-057fef9e27-lite.chunk.js +3 -0
  23. package/dist/scripts/5870-057fef9e27-lite.chunk.js.map +1 -0
  24. package/dist/scripts/618-33ead82bb3-lite.chunk.js +2 -0
  25. package/dist/scripts/618-33ead82bb3-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{6282-62e8305b89-lite.chunk.js → 6282-2e7901a54a-lite.chunk.js} +1 -1
  27. package/dist/scripts/{6282-62e8305b89-lite.chunk.js.map → 6282-2e7901a54a-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/6379-1fac9e5c3c-lite.chunk.js +2 -0
  29. package/dist/scripts/6379-1fac9e5c3c-lite.chunk.js.map +1 -0
  30. package/dist/scripts/647-cf8ade72c6-lite.chunk.js +2 -0
  31. package/dist/scripts/647-cf8ade72c6-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{6741-969accd2bc-lite.chunk.js → 6741-9ccafc6ff5-lite.chunk.js} +3 -3
  33. package/dist/scripts/{6741-969accd2bc-lite.chunk.js.map → 6741-9ccafc6ff5-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{690-aeaed228cb-lite.chunk.js → 690-e3a972ec48-lite.chunk.js} +1 -1
  35. package/dist/scripts/{690-aeaed228cb-lite.chunk.js.map → 690-e3a972ec48-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/6909-0cc76e0fcc-lite.chunk.js +2 -0
  37. package/dist/scripts/6909-0cc76e0fcc-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{6948-3eab72b8e2-lite.chunk.js → 6948-9121ca4b39-lite.chunk.js} +3 -3
  39. package/dist/scripts/{6948-3eab72b8e2-lite.chunk.js.map → 6948-9121ca4b39-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/7234-4fdc8f5ae3-lite.chunk.js +2 -0
  41. package/dist/scripts/7234-4fdc8f5ae3-lite.chunk.js.map +1 -0
  42. package/dist/scripts/7577-a930db95e5-lite.chunk.js +2 -0
  43. package/dist/scripts/7577-a930db95e5-lite.chunk.js.map +1 -0
  44. package/dist/scripts/7742-8a303defe5-lite.chunk.js +2 -0
  45. package/dist/scripts/7742-8a303defe5-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{8-f1d9aa4678-lite.chunk.js → 8-9f5e438ed9-lite.chunk.js} +2 -2
  47. package/dist/scripts/{8-f1d9aa4678-lite.chunk.js.map → 8-9f5e438ed9-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{8280-2e8afc8fa9-lite.chunk.js → 8280-6d9466991b-lite.chunk.js} +1 -1
  49. package/dist/scripts/{8280-2e8afc8fa9-lite.chunk.js.map → 8280-6d9466991b-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/8451-9ab30b6e35-lite.chunk.js +2 -0
  51. package/dist/scripts/8451-9ab30b6e35-lite.chunk.js.map +1 -0
  52. package/dist/scripts/9241-c523dc7aac-lite.chunk.js +2 -0
  53. package/dist/scripts/9241-c523dc7aac-lite.chunk.js.map +1 -0
  54. package/dist/scripts/9345-df0cbb196f-lite.chunk.js +3 -0
  55. package/dist/scripts/9345-df0cbb196f-lite.chunk.js.map +1 -0
  56. package/dist/scripts/9630-6bcd453382-lite.chunk.js +2 -0
  57. package/dist/scripts/9630-6bcd453382-lite.chunk.js.map +1 -0
  58. package/dist/scripts/{9649-29507ab972-lite.chunk.js → 9649-fc995e7732-lite.chunk.js} +1 -1
  59. package/dist/scripts/{9649-29507ab972-lite.chunk.js.map → 9649-fc995e7732-lite.chunk.js.map} +1 -1
  60. package/dist/scripts/9767-a23d603cc5-lite.chunk.js +2 -0
  61. package/dist/scripts/9767-a23d603cc5-lite.chunk.js.map +1 -0
  62. package/dist/scripts/{9963-f2ce3a321f-lite.chunk.js → 9963-8c527743bb-lite.chunk.js} +1 -1
  63. package/dist/scripts/{9963-f2ce3a321f-lite.chunk.js.map → 9963-8c527743bb-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{bundle-5b65703152.min.js → bundle-6a0c1aecd5.min.js} +3 -3
  65. package/dist/scripts/{bundle-5b65703152.min.js.map → bundle-6a0c1aecd5.min.js.map} +1 -1
  66. package/package.json +1 -1
  67. package/dist/scripts/1362-56810ef4c8-lite.chunk.js +0 -3
  68. package/dist/scripts/1362-56810ef4c8-lite.chunk.js.map +0 -1
  69. package/dist/scripts/3677-4904f30c6a-lite.chunk.js +0 -2
  70. package/dist/scripts/3677-4904f30c6a-lite.chunk.js.map +0 -1
  71. package/dist/scripts/3816-15829f9da8-lite.chunk.js +0 -2
  72. package/dist/scripts/3816-15829f9da8-lite.chunk.js.map +0 -1
  73. package/dist/scripts/3978-a551dd2648-lite.chunk.js +0 -2
  74. package/dist/scripts/3978-a551dd2648-lite.chunk.js.map +0 -1
  75. package/dist/scripts/4400-755a158a52-lite.chunk.js +0 -2
  76. package/dist/scripts/4400-755a158a52-lite.chunk.js.map +0 -1
  77. package/dist/scripts/5135-166ec46620-lite.chunk.js +0 -2
  78. package/dist/scripts/5135-166ec46620-lite.chunk.js.map +0 -1
  79. package/dist/scripts/5780-eb7c4d1db7-lite.chunk.js.map +0 -1
  80. package/dist/scripts/5870-eae3bb745c-lite.chunk.js +0 -3
  81. package/dist/scripts/5870-eae3bb745c-lite.chunk.js.map +0 -1
  82. package/dist/scripts/618-996d8b560b-lite.chunk.js +0 -2
  83. package/dist/scripts/618-996d8b560b-lite.chunk.js.map +0 -1
  84. package/dist/scripts/6379-3414d6c295-lite.chunk.js +0 -2
  85. package/dist/scripts/6379-3414d6c295-lite.chunk.js.map +0 -1
  86. package/dist/scripts/647-6a592af19b-lite.chunk.js +0 -2
  87. package/dist/scripts/647-6a592af19b-lite.chunk.js.map +0 -1
  88. package/dist/scripts/6909-6805b6a0d9-lite.chunk.js +0 -2
  89. package/dist/scripts/6909-6805b6a0d9-lite.chunk.js.map +0 -1
  90. package/dist/scripts/7234-bcddfe2112-lite.chunk.js +0 -2
  91. package/dist/scripts/7234-bcddfe2112-lite.chunk.js.map +0 -1
  92. package/dist/scripts/7742-9e79cc452b-lite.chunk.js +0 -2
  93. package/dist/scripts/7742-9e79cc452b-lite.chunk.js.map +0 -1
  94. package/dist/scripts/8451-0103210a8f-lite.chunk.js +0 -2
  95. package/dist/scripts/8451-0103210a8f-lite.chunk.js.map +0 -1
  96. package/dist/scripts/9241-2386134dd3-lite.chunk.js +0 -2
  97. package/dist/scripts/9241-2386134dd3-lite.chunk.js.map +0 -1
  98. package/dist/scripts/9345-0a7f58bb53-lite.chunk.js +0 -3
  99. package/dist/scripts/9345-0a7f58bb53-lite.chunk.js.map +0 -1
  100. package/dist/scripts/9630-ca2a850260-lite.chunk.js +0 -2
  101. package/dist/scripts/9630-ca2a850260-lite.chunk.js.map +0 -1
  102. package/dist/scripts/9767-1b583ceb6c-lite.chunk.js +0 -2
  103. package/dist/scripts/9767-1b583ceb6c-lite.chunk.js.map +0 -1
  104. /package/dist/css/{1362-lite-7aa2f8a851.chunk.css → 2258-lite-7aa2f8a851.chunk.css} +0 -0
  105. /package/dist/scripts/{1362-56810ef4c8-lite.chunk.js.LICENSE.txt → 2258-6851fce9d7-lite.chunk.js.LICENSE.txt} +0 -0
  106. /package/dist/scripts/{5870-eae3bb745c-lite.chunk.js.LICENSE.txt → 5870-057fef9e27-lite.chunk.js.LICENSE.txt} +0 -0
  107. /package/dist/scripts/{6741-969accd2bc-lite.chunk.js.LICENSE.txt → 6741-9ccafc6ff5-lite.chunk.js.LICENSE.txt} +0 -0
  108. /package/dist/scripts/{6948-3eab72b8e2-lite.chunk.js.LICENSE.txt → 6948-9121ca4b39-lite.chunk.js.LICENSE.txt} +0 -0
  109. /package/dist/scripts/{9345-0a7f58bb53-lite.chunk.js.LICENSE.txt → 9345-df0cbb196f-lite.chunk.js.LICENSE.txt} +0 -0
  110. /package/dist/scripts/{bundle-5b65703152.min.js.LICENSE.txt → bundle-6a0c1aecd5.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9630-6bcd453382-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
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9649],{7355:(e,t,n)=>{n.r(t),n.d(t,{SeriesView:()=>ce});var r=n(32735),i=n(70680),a=n(81886),o=n(23481),s=n(20354),c=n(65858),l=n(67814),u=n(49935),d=n(37929),p=n(87801),m=n(1860),f=n(75100),v=n(79718),b=n(7733),h=n(51365),y=n(16714),g=n(183),E=n(23788),S=n(21750),P=n(39151),k=n(60011),w=n(31949),I=n(63719),O=n(56520),C=n(91286),j=n(60115),L=n(22902),A=n(79612),T=n(76753),x=n(35223),N=n(68140),_=n(14070),F=n(97291),V=n(64364);function D(e){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D(e)}function B(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,U(r.key),r)}}function U(e){var t=function(e){if("object"!=D(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=D(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==D(t)?t:t+""}function H(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(H=function(){return!!e})()}function Q(e){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Q(e)}function R(e,t){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},R(e,t)}var J="shared.seriesNotFoundError",M=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=Q(t),function(e,t){if(t&&("object"==D(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,H()?Reflect.construct(t,n||[],Q(e).constructor):t.apply(e,n))}(this,t,["Series doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&R(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"SeriesNotFoundError"}},{key:"heading",get:function(){return o.T.getPhrase(J,"heading")}},{key:"description",get:function(){return o.T.getPhrase(J,"description")}}])&&B(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(V.H),G=n(46390),W=n(10671),Z=n(58321),K=n(7179),Y=n(44110),$=n(97816),q=n(10741),z=n(33192),X=n(22490),ee=n(82431),te=n(97958),ne=n(83345),re=n(99742),ie="series.seriesEmptyState";function ae(){return r.createElement(ne.D.Provider,{value:ie},r.createElement(te.u,null,r.createElement(te.u.Image,{src:re.W.EmptyStates.Playlists.PLAYLIST_VIDEOS}),r.createElement(te.u.Heading,null,r.createElement(ne.x,{phrase:"heading"}))))}var oe=o.T.encloseNamespace("shared.series"),se=function(e){return b.o[e.name.charCodeAt(0)%b.o.length]};function ce(e){var t,n,o,b=(0,i.I0)(),V=(0,Z.U)({locationContext:c.LZ.VideoThumbnail}).commonVideoProps,D=(0,L.T)(),B=D.hasPermissions,U=D.hasLocalPermissions,H=(0,G.G)().isPlugin,Q=(0,O.R0)(),R=Q.openInCurationStudioLabel,J=Q.isUserCurator,te=Q.getOpenInCurationStudioLink;(0,K.P)({id:e.id,app:"series",shareId:e.shareId});var ne=s.a.useBasicFetch(P.L.config()),re=s.a.useBasicFetch(w.N.currentUser()),ie=s.a.useBasicFetch(e.shareId?k.J.sharedSeries(e.id,e.shareId):k.J.series(e.id)),ce=(0,Y.i)();(0,A.M)(T.CG.getSeriesMetadata({content:ie.data,phraseContext:{phraseHandler:oe,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:z.f.getCanonicalLink({stripPresentationSlug:!0,customAppLink:ee.j.getSeriesAppLink(ie.data)}),allowIndexing:z.f.allowIndexing()}));var le=(0,W._)({location:W.i.VideoItem,shareId:e.shareId}),ue=s.a.useBasicFetch(e.classificationId&&S.x.path(e.classificationId));function de(e){return!z.f.isBot()||!e}function pe(t){var n;return de(t)?k.J.seriesVideos(e.id,null===(n=re.data)||void 0===n?void 0:n.id,fe,t):null}function me(e){return s.a.getFetch(b)(pe(e))}var fe=!!re.data&&N.d.getOrSetSortType(re.data.id,e.sort,E.D.Series),ve={classificationId:e.classificationId,mtv:e.moviesAndTv},be=(0,j.K)(!!re.data&&pe,me),he=be.items,ye=be.isFetching,ge=be.nextCursor;(0,$.V)(he),(0,C.v)(ie,{notFound:M});var Ee=!B(y.C.StudentExperience)&&U(y.E.UseSeriesActions),Se=(0,I.h)({name:null===(t=ie.data)||void 0===t?void 0:t.name});return r.createElement(h.M.Provider,{value:le},r.createElement("div",{className:"px-3"},ne.data&&ie.data?r.createElement(l.p,{heading:ie.data.name,banner:ie.data.banner,imageCdnUrl:ne.data.imageCdnUrl,actions:function(){var e,t,n;if(H||!Ee)return[];var r=[{label:oe("share"),appLink:ie&&{application:F.O.DEFAULT,action:_.e.Default.SHARE,args:[null===(e=ie.data)||void 0===e?void 0:e.id],params:{entityType:"series"}},svgName:x.vn.Share,className:"btn btn-outline-dark me-2",button:!0}];return J&&r.push({label:R,href:te(null===(t=ie.data)||void 0===t?void 0:t.typeId,null===(n=ie.data)||void 0===n?void 0:n.id),openInNewTab:!0}),r}(),actionsDropdownClassName:"btn btn-outline-dark",blockColourClass:se(ie.data)}):r.createElement(l.v,null),r.createElement("div",null,r.createElement("div",{className:(null===(n=ie.data)||void 0===n?void 0:n.description)||e.moviesAndTv&&ue.data?"border-bottom py-3 mb-3":"pt-3 mb-2"},e.hideBreadCrumbs?r.createElement(r.Fragment,null):!ie.data||e.classificationId&&!ue.data?r.createElement(u.b2,null):r.createElement(u.Oo,{breadcrumbs:Se}),r.createElement("div",{className:"d-flex align-items-center"},(null===(o=ie.data)||void 0===o?void 0:o.description)&&r.createElement("div",{className:"mb-0 ".concat(e.classificationId?"pt-2":"")},r.createElement(d.D,{lines:2},(function(){return r.createElement("p",{className:"mb-0 d-inline"},ie.data.description)}))),ie.data&&r.createElement("div",{className:"ms-auto"},r.createElement(v.p,{variant:"outline-dark",type:fe,analyticsOptions:{location:c.LZ.VideoListHeader,entity:c.py.Video,actionType:c.Vw.Sort,workflowPhase:c.eu.Complete},getSortAppLink:function(e){return ee.j.getSeriesAppLink(ie.data,Object.assign(Object.assign({},ve),{sort:e}))}})))),he?0===he.length?r.createElement(ae,null):r.createElement(r.Fragment,null,r.createElement(f.E4,{videos:he,getVideoAppLink:function(t,n){var r;if(e.shareId){var i=a.Q.C$.getCurrentAppLink();return Object.assign(Object.assign({},i),{params:{videoId:t.id,contextId:e.id,context:g.Q.Series}})}var o=Object.assign(Object.assign({},n),{context:g.Q.Series,contextId:e.id,moviesAndTv:e.moviesAndTv||void 0,includeContext:null===(r=re.data)||void 0===r?void 0:r.isAuthenticated});return X.W.getAppLink(t,o)},hasPermissions:B,presentationAudiences:e.moviesAndTv?null:ce.data,getPreviewQuestionsAppLink:function(e){return q.j.getPreviewQuestionsAppLink(e)},commonVideoProps:V}),(ye||ge)&&de(ge)&&r.createElement(p._,{isFetching:ye,fetchNext:me,nextCursor:ge})):r.createElement(m.S,null))))}}}]);
2
- //# sourceMappingURL=9649-29507ab972-lite.chunk.js.map
2
+ //# sourceMappingURL=9649-fc995e7732-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/9649-29507ab972-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/shared/errors/series/series-not-found/SeriesNotFoundError.ts","file:///app/packages/projects/lite/src/shared/views/series/empty-state/SeriesEmptyState.tsx","file:///app/packages/projects/lite/src/shared/views/series/SeriesView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.seriesNotFoundError';\n\nexport class SeriesNotFoundError extends ErrorPageError {\n constructor() {\n super('Series doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'SeriesNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}","import React from 'react';\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';\n\nconst namespace = 'series.seriesEmptyState';\n\nexport function SeriesEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Playlists.PLAYLIST_VIDEOS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { ExpandableText } from 'libs/shared/components/expandable-text/ExpandableText';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, Config, CurrentUser, Series, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { SeriesNotFoundError } from 'shared/errors/series/series-not-found/SeriesNotFoundError';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { SeriesEmptyState } from './empty-state/SeriesEmptyState';\n\nconst namespace = 'shared.series';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getFallbackBannerColourClass = (series: Series): string => {\n return BG_COLOUR_CLASS_NAMES[series.name.charCodeAt(0) % BG_COLOUR_CLASS_NAMES.length];\n};\n\ninterface SeriesViewProps {\n id: string;\n classificationId?: string;\n shareId?: string;\n moviesAndTv?: boolean;\n sort?: VideoSortType;\n hideBreadCrumbs?: boolean;\n}\n\nexport function SeriesView(props: SeriesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n\n useDeepLinks({ id: props.id, app: 'series', shareId: props.shareId });\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const series = Flight.useBasicFetch<Series>(props.shareId\n ? SeriesRequests.sharedSeries(props.id, props.shareId)\n : SeriesRequests.series(props.id));\n\n const audiences = usePresentationAudiences();\n\n useSetPageMetadata(PageMetadataHelper.getSeriesMetadata({\n content: series.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n stripPresentationSlug: true,\n customAppLink: SeriesAppLinkHelper.getSeriesAppLink(series.data)\n }),\n allowIndexing: SeoHelper.allowIndexing()\n }));\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem, shareId: props.shareId });\n\n const topicPath = Flight.useBasicFetch<Classification[]>(\n props.classificationId &&\n ClassificationRequests.path(props.classificationId)\n );\n\n /**\n * Infinite scrolling will be restricted for public browsing as a crawler/bot.\n * The rationale behind this is that we don't want to preload or allow crawlers\n * to enumerate the entirety of our series collections. Some series have > 10k videos\n * and they don't all need to be indexed (i.e. old news/current affair series).\n * \n * Public browsing by regular users will continue to paginate, along with authenticated\n * users. - Mike\n */\n function shouldFetch(cursor?: string) {\n if (SeoHelper.isBot() && cursor)\n return false;\n\n return true;\n }\n\n function getVideosRequest(cursor?: string) {\n if (!shouldFetch(cursor))\n return null;\n\n return SeriesRequests.seriesVideos(props.id, currentUser.data?.id, sort, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getVideosRequest(cursor));\n }\n\n function getBannerActions(): ActionOptions[] {\n if (isPlugin || !showHeaderActions) {\n return [];\n }\n\n const actions: ActionOptions[] = [{\n label: getPhrase('share'),\n appLink: series && {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [series.data?.id],\n params: { entityType: 'series' }\n },\n svgName: cvSvgLibrary.Share,\n className: 'btn btn-outline-dark me-2',\n button: true\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(series.data?.typeId, series.data?.id),\n openInNewTab: true\n });\n\n return actions;\n }\n\n function getVideoAppLink(video: Video, opts: GetVideoAppLinkOptions): Core.AppLink {\n if (props.shareId) {\n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n return {\n ...currentAppLink,\n params: {\n videoId: video.id,\n contextId: props.id,\n context: RelatedVideosContext.Series\n }\n };\n }\n\n const options: GetVideoAppLinkOptions = {\n ...opts,\n context: RelatedVideosContext.Series,\n contextId: props.id,\n moviesAndTv: props.moviesAndTv || undefined,\n includeContext: currentUser.data?.isAuthenticated\n };\n\n return VideoAppLinkHelper.getAppLink(video, options);\n }\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data && VideoSortHelper.getOrSetSortType(\n currentUser.data.id,\n props.sort,\n VideoSortType.Series\n );\n\n const seriesParams = {\n classificationId: props.classificationId,\n mtv: props.moviesAndTv\n };\n\n const {\n items: videos,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(currentUser.data ? getVideosRequest : false, fetchNext);\n\n useVideoMixin(videos);\n\n useHandleObjectError(series, {\n notFound: SeriesNotFoundError\n });\n\n const showHeaderActions = !hasPermissions(PermissionName.StudentExperience) &&\n hasLocalPermissions(LocalPermissionName.UseSeriesActions);\n\n const breadcrumbs = useBreadcrumbs({ name: series.data?.name });\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n {config.data && series.data\n ? (\n <BannerHeader\n heading={series.data.name}\n banner={series.data.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n actions={getBannerActions()}\n actionsDropdownClassName='btn btn-outline-dark'\n blockColourClass={getFallbackBannerColourClass(series.data)}\n />\n ) : <PartialBannerHeader />\n }\n \n <div>\n <div className={series.data?.description || (props.moviesAndTv && topicPath.data) ? 'border-bottom py-3 mb-3' : 'pt-3 mb-2'}>\n {(() => {\n if (props.hideBreadCrumbs)\n return <></>;\n\n if (!series.data || (props.classificationId && !topicPath.data))\n return <PartialBreadcrumbs />;\n\n return (\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n );\n })()}\n\n <div className='d-flex align-items-center'>\n {series.data?.description && (\n <div className={`mb-0 ${props.classificationId ? 'pt-2' : ''}`}>\n <ExpandableText lines={2}>\n {() => <p className='mb-0 d-inline'>{series.data.description}</p>}\n </ExpandableText>\n </div>\n )}\n\n {series.data && (\n <div className='ms-auto'>\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n getSortAppLink={sort => {\n return SeriesAppLinkHelper.getSeriesAppLink(series.data, { ...seriesParams, sort });\n }}\n />\n </div>\n )}\n </div>\n </div>\n\n {(() => {\n if (!videos)\n return <PartialVideoList />;\n\n if (videos.length === 0)\n return <SeriesEmptyState />;\n\n return (\n <>\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n hasPermissions={hasPermissions}\n presentationAudiences={props.moviesAndTv ? null : audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={commonVideoProps}\n />\n {(isFetching || nextCursor) && shouldFetch(nextCursor) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n );\n })()}\n </div>\n </div>\n </VideoActionsContext.Provider>\n );\n}\n"],"names":["namespace","SeriesNotFoundError","LanguageService","ErrorPageError","SeriesEmptyState","value","EmptyState","src","ImageUrls","Text","phrase","getPhrase","getFallbackBannerColourClass","series","name","charCodeAt","SeriesView","props","dispatch","commonVideoProps","useCommonVideoProps","locationContext","usePermissions","hasPermissions","hasLocalPermissions","isPlugin","usePluginHelper","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","useDeepLinks","id","app","shareId","config","ConfigRequests","currentUser","UserRequests","SeriesRequests","audiences","usePresentationAudiences","useSetPageMetadata","PageMetadataHelper","content","data","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","customAppLink","SeriesAppLinkHelper","allowIndexing","videoActions","useVideoActions","location","topicPath","classificationId","ClassificationRequests","shouldFetch","cursor","getVideosRequest","sort","fetchNext","VideoSortHelper","VideoSortType","seriesParams","mtv","moviesAndTv","videos","items","isFetching","nextCursor","useVideoMixin","notFound","showHeaderActions","PermissionName","breadcrumbs","useBreadcrumbs","VideoActionsContext","className","BannerHeader","heading","banner","imageCdnUrl","actions","label","appLink","application","action","args","params","entityType","svgName","button","push","href","typeId","openInNewTab","getBannerActions","actionsDropdownClassName","blockColourClass","description","hideBreadCrumbs","Breadcrumbs","ExpandableText","lines","VideoSortSelect","variant","type","analyticsOptions","entity","actionType","workflowPhase","getSortAppLink","length","VideoList","getVideoAppLink","video","opts","currentAppLink","videoId","contextId","context","RelatedVideosContext","options","undefined","includeContext","isAuthenticated","VideoAppLinkHelper","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","InfiniteScrollFooter","PartialVideoList"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/9649-fc995e7732-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/shared/errors/series/series-not-found/SeriesNotFoundError.ts","file:///app/packages/projects/lite/src/shared/views/series/empty-state/SeriesEmptyState.tsx","file:///app/packages/projects/lite/src/shared/views/series/SeriesView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.seriesNotFoundError';\n\nexport class SeriesNotFoundError extends ErrorPageError {\n constructor() {\n super('Series doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'SeriesNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}","import React from 'react';\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';\n\nconst namespace = 'series.seriesEmptyState';\n\nexport function SeriesEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Playlists.PLAYLIST_VIDEOS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { ExpandableText } from 'libs/shared/components/expandable-text/ExpandableText';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, Config, CurrentUser, Series, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { SeriesNotFoundError } from 'shared/errors/series/series-not-found/SeriesNotFoundError';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { SeriesEmptyState } from './empty-state/SeriesEmptyState';\n\nconst namespace = 'shared.series';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getFallbackBannerColourClass = (series: Series): string => {\n return BG_COLOUR_CLASS_NAMES[series.name.charCodeAt(0) % BG_COLOUR_CLASS_NAMES.length];\n};\n\ninterface SeriesViewProps {\n id: string;\n classificationId?: string;\n shareId?: string;\n moviesAndTv?: boolean;\n sort?: VideoSortType;\n hideBreadCrumbs?: boolean;\n}\n\nexport function SeriesView(props: SeriesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n\n useDeepLinks({ id: props.id, app: 'series', shareId: props.shareId });\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const series = Flight.useBasicFetch<Series>(props.shareId\n ? SeriesRequests.sharedSeries(props.id, props.shareId)\n : SeriesRequests.series(props.id));\n\n const audiences = usePresentationAudiences();\n\n useSetPageMetadata(PageMetadataHelper.getSeriesMetadata({\n content: series.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n stripPresentationSlug: true,\n customAppLink: SeriesAppLinkHelper.getSeriesAppLink(series.data)\n }),\n allowIndexing: SeoHelper.allowIndexing()\n }));\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem, shareId: props.shareId });\n\n const topicPath = Flight.useBasicFetch<Classification[]>(\n props.classificationId &&\n ClassificationRequests.path(props.classificationId)\n );\n\n /**\n * Infinite scrolling will be restricted for public browsing as a crawler/bot.\n * The rationale behind this is that we don't want to preload or allow crawlers\n * to enumerate the entirety of our series collections. Some series have > 10k videos\n * and they don't all need to be indexed (i.e. old news/current affair series).\n * \n * Public browsing by regular users will continue to paginate, along with authenticated\n * users. - Mike\n */\n function shouldFetch(cursor?: string) {\n if (SeoHelper.isBot() && cursor)\n return false;\n\n return true;\n }\n\n function getVideosRequest(cursor?: string) {\n if (!shouldFetch(cursor))\n return null;\n\n return SeriesRequests.seriesVideos(props.id, currentUser.data?.id, sort, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getVideosRequest(cursor));\n }\n\n function getBannerActions(): ActionOptions[] {\n if (isPlugin || !showHeaderActions) {\n return [];\n }\n\n const actions: ActionOptions[] = [{\n label: getPhrase('share'),\n appLink: series && {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [series.data?.id],\n params: { entityType: 'series' }\n },\n svgName: cvSvgLibrary.Share,\n className: 'btn btn-outline-dark me-2',\n button: true\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(series.data?.typeId, series.data?.id),\n openInNewTab: true\n });\n\n return actions;\n }\n\n function getVideoAppLink(video: Video, opts: GetVideoAppLinkOptions): Core.AppLink {\n if (props.shareId) {\n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n return {\n ...currentAppLink,\n params: {\n videoId: video.id,\n contextId: props.id,\n context: RelatedVideosContext.Series\n }\n };\n }\n\n const options: GetVideoAppLinkOptions = {\n ...opts,\n context: RelatedVideosContext.Series,\n contextId: props.id,\n moviesAndTv: props.moviesAndTv || undefined,\n includeContext: currentUser.data?.isAuthenticated\n };\n\n return VideoAppLinkHelper.getAppLink(video, options);\n }\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data && VideoSortHelper.getOrSetSortType(\n currentUser.data.id,\n props.sort,\n VideoSortType.Series\n );\n\n const seriesParams = {\n classificationId: props.classificationId,\n mtv: props.moviesAndTv\n };\n\n const {\n items: videos,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(currentUser.data ? getVideosRequest : false, fetchNext);\n\n useVideoMixin(videos);\n\n useHandleObjectError(series, {\n notFound: SeriesNotFoundError\n });\n\n const showHeaderActions = !hasPermissions(PermissionName.StudentExperience) &&\n hasLocalPermissions(LocalPermissionName.UseSeriesActions);\n\n const breadcrumbs = useBreadcrumbs({ name: series.data?.name });\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n {config.data && series.data\n ? (\n <BannerHeader\n heading={series.data.name}\n banner={series.data.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n actions={getBannerActions()}\n actionsDropdownClassName='btn btn-outline-dark'\n blockColourClass={getFallbackBannerColourClass(series.data)}\n />\n ) : <PartialBannerHeader />\n }\n \n <div>\n <div className={series.data?.description || (props.moviesAndTv && topicPath.data) ? 'border-bottom py-3 mb-3' : 'pt-3 mb-2'}>\n {(() => {\n if (props.hideBreadCrumbs)\n return <></>;\n\n if (!series.data || (props.classificationId && !topicPath.data))\n return <PartialBreadcrumbs />;\n\n return (\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n );\n })()}\n\n <div className='d-flex align-items-center'>\n {series.data?.description && (\n <div className={`mb-0 ${props.classificationId ? 'pt-2' : ''}`}>\n <ExpandableText lines={2}>\n {() => <p className='mb-0 d-inline'>{series.data.description}</p>}\n </ExpandableText>\n </div>\n )}\n\n {series.data && (\n <div className='ms-auto'>\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n getSortAppLink={sort => {\n return SeriesAppLinkHelper.getSeriesAppLink(series.data, { ...seriesParams, sort });\n }}\n />\n </div>\n )}\n </div>\n </div>\n\n {(() => {\n if (!videos)\n return <PartialVideoList />;\n\n if (videos.length === 0)\n return <SeriesEmptyState />;\n\n return (\n <>\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n hasPermissions={hasPermissions}\n presentationAudiences={props.moviesAndTv ? null : audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={commonVideoProps}\n />\n {(isFetching || nextCursor) && shouldFetch(nextCursor) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n );\n })()}\n </div>\n </div>\n </VideoActionsContext.Provider>\n );\n}\n"],"names":["namespace","SeriesNotFoundError","LanguageService","ErrorPageError","SeriesEmptyState","value","EmptyState","src","ImageUrls","Text","phrase","getPhrase","getFallbackBannerColourClass","series","name","charCodeAt","SeriesView","props","dispatch","commonVideoProps","useCommonVideoProps","locationContext","usePermissions","hasPermissions","hasLocalPermissions","isPlugin","usePluginHelper","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","useDeepLinks","id","app","shareId","config","ConfigRequests","currentUser","UserRequests","SeriesRequests","audiences","usePresentationAudiences","useSetPageMetadata","PageMetadataHelper","content","data","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","customAppLink","SeriesAppLinkHelper","allowIndexing","videoActions","useVideoActions","location","topicPath","classificationId","ClassificationRequests","shouldFetch","cursor","getVideosRequest","sort","fetchNext","VideoSortHelper","VideoSortType","seriesParams","mtv","moviesAndTv","videos","items","isFetching","nextCursor","useVideoMixin","notFound","showHeaderActions","PermissionName","breadcrumbs","useBreadcrumbs","VideoActionsContext","className","BannerHeader","heading","banner","imageCdnUrl","actions","label","appLink","application","action","args","params","entityType","svgName","button","push","href","typeId","openInNewTab","getBannerActions","actionsDropdownClassName","blockColourClass","description","hideBreadCrumbs","Breadcrumbs","ExpandableText","lines","VideoSortSelect","variant","type","analyticsOptions","entity","actionType","workflowPhase","getSortAppLink","length","VideoList","getVideoAppLink","video","opts","currentAppLink","videoId","contextId","context","RelatedVideosContext","options","undefined","includeContext","isAuthenticated","VideoAppLinkHelper","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","InfiniteScrollFooter","PartialVideoList"],"sourceRoot":""}
@@ -0,0 +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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9767-a23d603cc5-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":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9963],{45460:(e,t,a)=>{a.d(t,{F:()=>i});var n=a(32735),r=a(35223),l=a(83914);var o=function(e){switch(e){case"up":return"JAT0R";case"down":return"ld41u";case"right":return"HHkPe";case"left":return"jZTRR"}};function i(e){return n.createElement(l.x,{svgName:r.vn.Caret,className:"".concat(o(e.direction)," svg-container d-inline-block ").concat(e.className)})}i.defaultProps={direction:"right"}},39958:(e,t,a)=>{a.d(t,{$:()=>p});var n=a(32735),r=a(57900),l=a(45460),o=a(11607),i=a(82146),c=a(83345),s=a(79967);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var m="libraries.folderList",u="has:expanded:library:folders";function p(e){var t,a,p,f=(a=n.useState(r.SG.get(u)||!1),p=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,l,o,i=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=l.call(a)).done)&&(i.push(n.value),i.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw r}}return i}}(a,p)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?d(e,t):void 0}}(a,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.")}()),v=f[0],g=f[1],h=e.expandFolders||v,b=(t=(0,s.k)()).xxl||t.xl||t.lg?6:t.md?4:3;function y(){g(!h),r.SG.set(u,!h)}var E=h?e.folders:e.folders.slice(0,b),k=e.folders.length>b&&!e.expandFolders;return n.createElement(n.Fragment,null,n.createElement("div",{className:"d-flex justify-content-between align-items-center"},e.showHeading&&n.createElement(o.L,{className:"d-inline-flex align-items-center mb-2 px-2 ".concat(k?"":"cursor-default"),onClick:y},k&&n.createElement(l.F,{direction:h?"down":"right"}),n.createElement("h2",{className:"h4 mb-0"},n.createElement(c.x,{namespace:m,phrase:"folders",options:{count:e.folders.length}}))),!(h||!k)&&n.createElement("div",{className:"d-flex justify-content-end justify-self-end px-2"},n.createElement(o.L,{onClick:y,className:"text-dark hover-text-underline d-inline-block"},n.createElement(c.x,{namespace:m,phrase:"seeAll",options:{count:e.folders.length}}))),!(!h||!k)&&n.createElement("div",{className:"d-flex justify-content-end justify-self-end px-2"},n.createElement(o.L,{onClick:y,className:"text-dark hover-text-underline d-inline-block"},n.createElement(c.x,{namespace:m,phrase:"seeLess"}))),e.extraButtons?e.extraButtons:n.createElement(n.Fragment,null)),n.createElement("div",{className:"row mx-1"},E.map((function(t){return n.createElement("div",{key:t.id,className:"col-4 col-md-3 col-lg-2 px-1 pb-3"},n.createElement(i.y,{folder:t,getAppLink:e.getAppLink,getFolderActions:e.getFolderActions,drag:e.drag,drop:e.drop}))}))))}p.defaultProps={showHeading:!0}},1302:(e,t,a)=>{a.d(t,{i:()=>o});var n=a(32735);const r={partialFolderHeading:"dhbsL",partialFolderThumbnail:"CI9vk",partialFolderName:"l0Nll"};var l=function(){return n.createElement("div",{className:"col-4 col-md-3 col-lg-2 px-1 pb-3"},n.createElement("div",{className:"".concat(r.partialFolderThumbnail," partial-loading-background rounded-top-lg")}),n.createElement("div",{className:"".concat(r.partialFolderName," partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2")}," "))};function o(e){var t=e.count,a=void 0===t?3:t;return n.createElement(n.Fragment,null,n.createElement("div",{className:"".concat(r.partialFolderHeading," h4 mb-2 partial-loading-background")}," "),n.createElement("div",{className:"row mx-n1"},Array(a).fill(null).map((function(e,t){return n.createElement(l,{key:t})}))))}},82146:(e,t,a)=>{a.d(t,{y:()=>p});var n=a(32735),r=a(97395),l=a(65858),o=a(83657),i=a(15611),c=a(88711),s=a(7432),d=a(11834),m=a(54610);const u={actions:"cN3nB",actionsContainer:"xM37V",ownerLogo:"g3JFo",dropStyle:"kvCLS",dragStyle:"md9Na"};function p(e){var t,a,p,f,v,g,h=e.folder.thumbnail?r._.urlBuilder(e.folder.thumbnail.url,{size:m.h2.Small}):null,b=null===(f=null===(p=null===(a=null===(t=e.folder)||void 0===t?void 0:t.libraries)||void 0===a?void 0:a.data)||void 0===p?void 0:p[0])||void 0===f?void 0:f.owner,y=e.showOwnerLogo&&(null===(v=null==b?void 0:b.logo)||void 0===v?void 0:v.url)?r._.urlBuilder(b.logo.url,{size:m.h2.Small}):null,E=null===(g=e.getFolderActions)||void 0===g?void 0:g.call(e,e.folder),k=e.analyticsData?Object.assign({id:e.folder.id.toString(),name:e.folder.name},e.analyticsData):void 0,x=e.analyticsOptions?Object.assign({actionType:l.Vw.Click,entity:l.py.Folder},e.analyticsOptions):void 0;return n.createElement(c.j,{draggable:e.drag&&{id:e.folder.id,data:e.folder},droppable:e.drop&&{id:e.folder.id,data:e.folder},dropStye:u.dropStyle,dragStyle:u.dragStyle},n.createElement("div",{className:"position-relative"},n.createElement(i.F,{className:"rounded-3 d-block text-decoration-none",appLink:e.getAppLink(e.folder),title:e.folder.name,analyticsData:k,analyticsOptions:x},n.createElement(s.Z,{data:h,imageType:m.__.Thumbnails,imageClassName:"rounded-top-lg"},n.createElement(d.oy,{name:e.folder.name,type:d.mS.Folder,extraClasses:"rounded-top-lg"})),n.createElement("h3",{className:"bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2"},n.createElement("span",{className:"text-truncate d-block"},e.folder.name))),(null==E?void 0:E.length)&&n.createElement(o.e,{actions:E,className:u.actionsContainer,actionsDropdownClassName:u.actions,dropdownToggleSvgSize:null}),!!y&&n.createElement("img",{src:y,className:"rounded-circle ".concat(u.ownerLogo),alt:"".concat(null==b?void 0:b.name," logo"),title:(null==b?void 0:b.name)||""})))}},98860:(e,t,a)=>{a.d(t,{P:()=>i});var n=a(20354),r=a(98064),l=a(3010),o=a(45719);function i(e){var t=n.a.useGetFetch();function a(t){return r.D.childFolders(e,t)}return(0,l.i)(!!e&&a,!!e&&function(e){t(a(e))}),(0,o.P)(!!e&&function(e){return a(e).key})}},21325:(e,t,a)=>{a.d(t,{o:()=>i});var n=a(32735),r=a(81886),l=a(96560),o=a(67058);function i(e){n.useEffect((function(){e.hasCompleted&&!e.hasError&&e.data.type!==l.r.CustomLibrary&&r.Q.Ry.throw(new o.d)}),[e.hasCompleted])}},14997:(e,t,a)=>{a.r(t),a.d(t,{LibraryFolderView:()=>ne});var n=a(32735),r=a(70680),l=a(23481),o=a(20354),i=a(65858),c=a(43500),s=a(67814),d=a(49935),m=a(39958),u=a(91693),p=a(4201),f=a(83345),v=a(79718),g=a(51365),h=a(16714),b=a(94644),y=a(39151),E=a(98064),k=a(31949),x=a(1575),S=a(69883),N=a(63719),F=a(91286),L=a(60115),w=a(22902),C=a(79612),A=a(35223),O=a(68140),V=a(14070),I=a(97291),P=a(10671),j=a(58321),T=a(44110),B=a(97816),D=a(87801),H=a(75100),R=a(183),_=a(10741),M=a(22490),Z=a(97958),U=a(99742),z="libraries.libraryFolderEmptyState";function Q(){return n.createElement(f.D.Provider,{value:z},n.createElement(Z.u,null,n.createElement(Z.u.Image,{src:U.W.EmptyStates.Libraries.FOLDER}),n.createElement(Z.u.Heading,null,n.createElement(f.x,{phrase:"heading"})),n.createElement(Z.u.Info,null,n.createElement(f.x,{phrase:"info"}))))}var W="libraries.libraryFolderVideos";function G(e){var t,a=(0,p.of)().focusSearchBar,r=(0,w.T)().hasPermissions,l=r(h.C.ViewSearch);return e.videos.length||e.hasSubFolders?e.videos.length?n.createElement("div",null,e.hasSubFolders&&n.createElement("div",{className:"d-flex justify-content-between align-items-center"},n.createElement("h2",{className:"h4 mb-0"},n.createElement(f.x,{namespace:W,phrase:"videos"})),n.createElement("div",{className:"d-flex"},l&&n.createElement(u.h,{svgName:A.vn.Search,appLink:{application:I.O.SEARCH,action:V.e.Search.HOME,params:{source:c.fi.School}},className:"btn btn-outline-dark d-none d-sm-inline-block",onClick:a,analyticsData:{},analyticsOptions:{entity:i.py.SearchResults,location:i.LZ.Libraries,actionType:i.Vw.Click,descriptor:i.Bk.School}},n.createElement(f.x,{namespace:W,phrase:"searchLibrary",options:{smartCount:null===(t=e.libraries)||void 0===t?void 0:t.length}})),n.createElement(v.p,{variant:"outline-dark",type:e.sort,getSortAppLink:e.getSortAppLink,analyticsOptions:{location:i.LZ.VideoListHeader,entity:i.py.Video,actionType:i.Vw.Sort,workflowPhase:i.eu.Complete}}))),n.createElement(H.E4,{videos:e.videos,getVideoAppLink:function(t,a){var n;return M.W.getAppLink(t,Object.assign(Object.assign({},a),{context:R.Q.Folder,contextId:e.folderId,includeContext:null===(n=e.currentUser)||void 0===n?void 0:n.isAuthenticated}))},presentationAudiences:e.audiences,hasPermissions:r,getPreviewQuestionsAppLink:function(e){return _.j.getPreviewQuestionsAppLink(e)},commonVideoProps:e.commonVideoProps}),(e.hasMore||e.isFetching)&&n.createElement(D._,{isFetching:e.isFetching,fetchNext:e.fetchNext,nextCursor:e.nextCursor})):n.createElement(n.Fragment,null):n.createElement(Q,null)}var J=a(98860),$=a(21325),K=a(1302),q=a(1860);const X={subheading:"IJZtA"};function Y(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"m-3"},n.createElement(K.i,null)),n.createElement("div",{className:"mx-3 mb-3"},n.createElement("div",{className:"".concat(X.subheading," partial-loading-background mb-2")}),n.createElement(q.S,null)))}var ee=a(8406),te="libraries.libraryFolder",ae=l.T.encloseNamespace(te);function ne(e){var t,a,l,D,H,R,_,M,Z=(0,r.I0)(),U=(0,S.Z)(),z=(0,p.of)().focusSearchBar,Q=o.a.useBasicFetch(E.D.domainLibraries(["customLibrary","sharedLibrary"])),W=o.a.useBasicFetch(E.D.library(e.libraryId)),K=o.a.useBasicFetch(E.D.folder(e.folderId)),q=(0,J.P)(e.folderId),X=o.a.useBasicFetch(k.N.currentUser()),ne=o.a.useBasicFetch(y.L.config()),re=(0,P._)({location:P.i.VideoItem}),le=(0,w.T)().hasPermissions,oe=(0,j.U)({locationContext:i.LZ.VideoThumbnail}).commonVideoProps,ie=(0,N.h)({name:null===(t=K.data)||void 0===t?void 0:t.name}),ce=(0,T.i)();(0,C.M)({title:null===(a=K.data)||void 0===a?void 0:a.name}),(0,F.v)([W,K]),(0,$.o)(W);var se=!!X.data&&O.d.getOrSetSortType(X.data.id,e.sort),de=(0,L.K)(ve,ge,(function(e,t){if(1===e)return(0,b.r)(t);U.error(ae("error"))})),me=de.items,ue=de.hasMore,pe=de.isFetching,fe=de.nextCursor;function ve(t){return x.R.collectionVideos(e.folderId,se,t)}function ge(e){return o.a.getFetch(Z)(ve(e))}(0,B.V)(me);var he=!(!q.hasCompleted||(null===(l=q.items)||void 0===l?void 0:l.length)),be=le(h.C.ViewSearch);return n.createElement(g.M.Provider,{value:re},W.data&&K.data&&ne.data?n.createElement(s.p,{heading:K.data.name,banner:K.data.banner,imageCdnUrl:ne.data.imageCdnUrl,blockColourClass:(0,ee.W)(K.data),logo:null===(D=W.data.owner)||void 0===D?void 0:D.logo}):n.createElement(s.v,null),n.createElement("div",{className:"d-flex justify-content-between align-items-center py-3 mx-3 ".concat(he?"":"border-bottom")},W.data&&K.data?n.createElement(d.Oo,{breadcrumbs:ie}):n.createElement(d.b2,null),n.createElement("div",{className:"d-flex"},(he||!(null==me?void 0:me.length))&&be&&n.createElement(u.h,{svgName:A.vn.Search,appLink:{application:I.O.SEARCH,action:V.e.Search.HOME,params:{source:c.fi.School}},className:"btn btn-outline-dark d-none d-sm-inline-block",onClick:z,analyticsData:{},analyticsOptions:{entity:i.py.SearchResults,location:i.LZ.Libraries,actionType:i.Vw.Click,descriptor:i.Bk.School}},n.createElement(f.x,{namespace:te,phrase:"searchLibrary",options:{smartCount:null!==(R=null===(H=Q.data)||void 0===H?void 0:H.length)&&void 0!==R?R:1}})),he&&K.data&&n.createElement(v.p,{variant:"outline-dark",type:se,getSortAppLink:function(t){return(0,ee.a)(e.libraryId,K.data,t)},analyticsOptions:{location:i.LZ.VideoListHeader,entity:i.py.Video,actionType:i.Vw.Sort,workflowPhase:i.eu.Complete}}))),me&&q?n.createElement(n.Fragment,null,!!(null===(_=q.items)||void 0===_?void 0:_.length)&&n.createElement("div",{className:"px-2 py-3"},n.createElement(m.$,{folders:q.items,getAppLink:function(t){return(0,ee.a)(e.libraryId,t,se)},expandFolders:!me.length})),n.createElement("div",{className:"px-3 pb-3"},n.createElement(G,{folderId:e.folderId,videos:me,hasSubFolders:!!(null===(M=q.items)||void 0===M?void 0:M.length),hasMore:ue,isFetching:pe,fetchNext:ge,nextCursor:fe,sort:se,getSortAppLink:function(t){return(0,ee.a)(e.libraryId,K.data,t)},audiences:ce.data,libraries:Q.data,currentUser:X.data,commonVideoProps:oe}))):n.createElement(Y,null))}},8406:(e,t,a)=>{a.d(t,{W:()=>c,a:()=>i});var n=a(28400),r=a(7733),l=a(14070),o=a(97291);function i(e,t,a){return e&&t?{application:o.O.LIBRARIES,action:l.e.Libraries.FOLDER,args:[e,t.id,n.m.slugify(t.name)],params:{sort:a}}:null}function c(e){for(var t,a,n=0,l=0;null!==(a=l<(null===(t=e.name)||void 0===t?void 0:t.length))&&void 0!==a&&a;l++)n+=e.name.charCodeAt(l);return r.o[n%r.o.length]}}}]);
2
- //# sourceMappingURL=9963-f2ce3a321f-lite.chunk.js.map
2
+ //# sourceMappingURL=9963-8c527743bb-lite.chunk.js.map