@clickview/lite 0.53.4 → 0.53.6-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{6094-lite-bcd14ea6d2.chunk.css → 1019-lite-bbcf2bff27.chunk.css} +3 -2
- package/dist/css/{1329-lite-be86e46c78.chunk.css → 1329-lite-458183b24f.chunk.css} +2 -2
- package/dist/css/{1838-lite-e6a28b84ed.chunk.css → 1838-lite-981a5e0783.chunk.css} +1 -1
- package/dist/css/{1760-lite-bcd14ea6d2.chunk.css → 2548-lite-bbcf2bff27.chunk.css} +3 -2
- package/dist/css/{3969-lite-29e14c7861.chunk.css → 3969-lite-ed58852d97.chunk.css} +2 -2
- package/dist/css/{422-lite-dace5f41de.chunk.css → 422-lite-b8c1fd1dee.chunk.css} +1 -1
- package/dist/css/{4502-lite-92be6697e7.chunk.css → 4502-lite-eaf1a1113c.chunk.css} +1 -1
- package/dist/css/{5220-lite-9832e2c2fb.chunk.css → 5220-lite-8a8d5d035f.chunk.css} +1 -1
- package/dist/css/{537-lite-56a3fc7e48.chunk.css → 537-lite-4de4c47713.chunk.css} +1 -1
- package/dist/css/{6489-lite-9045df4bb9.chunk.css → 6489-lite-e271aaed2d.chunk.css} +1 -1
- package/dist/css/{6544-lite-d46c2d634c.chunk.css → 6544-lite-319ed51ccc.chunk.css} +1 -1
- package/dist/css/{5549-lite-97ed26d0aa.chunk.css → 6596-lite-bb28584922.chunk.css} +2 -1
- package/dist/css/{841-lite-27b6485cd1.chunk.css → 841-lite-46ef623835.chunk.css} +1 -1
- package/dist/css/{8522-lite-2f2797038e.chunk.css → 8522-lite-f100606ec5.chunk.css} +1 -1
- package/dist/css/{8801-lite-c88eb54bee.chunk.css → 8801-lite-d34200ab29.chunk.css} +2 -2
- package/dist/css/{3640-lite-97ed26d0aa.chunk.css → 9010-lite-bb28584922.chunk.css} +2 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js → 1019-8f977b5095-lite.chunk.js} +2 -2
- package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js.map → 1019-8f977b5095-lite.chunk.js.map} +1 -1
- package/dist/scripts/1080-509aa6e738-lite.chunk.js +2 -0
- package/dist/scripts/1080-509aa6e738-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-e64f0dbd67-lite.chunk.js +2 -0
- package/dist/scripts/1169-e64f0dbd67-lite.chunk.js.map +1 -0
- package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js +3 -0
- package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-976d20185f-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-976d20185f-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
- package/dist/scripts/1518-4f76dbeee8-lite.chunk.js +2 -0
- package/dist/scripts/1518-4f76dbeee8-lite.chunk.js.map +1 -0
- package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js → 1838-95081e8dea-lite.chunk.js} +1 -1
- package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js.map → 1838-95081e8dea-lite.chunk.js.map} +1 -1
- package/dist/scripts/184-6ce393c251-lite.chunk.js +2 -0
- package/dist/scripts/184-6ce393c251-lite.chunk.js.map +1 -0
- package/dist/scripts/{2004-3005565af0-lite.chunk.js → 2004-e20d72976c-lite.chunk.js} +3 -3
- package/dist/scripts/{2004-3005565af0-lite.chunk.js.map → 2004-e20d72976c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2094-58390aa60a-lite.chunk.js → 2094-a16bbca3a3-lite.chunk.js} +2 -2
- package/dist/scripts/2094-a16bbca3a3-lite.chunk.js.map +1 -0
- package/dist/scripts/2142-c46ca4050f-lite.chunk.js +2 -0
- package/dist/scripts/2142-c46ca4050f-lite.chunk.js.map +1 -0
- package/dist/scripts/2199-be40da7440-lite.chunk.js +2 -0
- package/dist/scripts/2199-be40da7440-lite.chunk.js.map +1 -0
- package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js +2 -0
- package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js.map +1 -0
- package/dist/scripts/3969-6d7c342d0c-lite.chunk.js +2 -0
- package/dist/scripts/3969-6d7c342d0c-lite.chunk.js.map +1 -0
- package/dist/scripts/3999-317a4538c6-lite.chunk.js +3 -0
- package/dist/scripts/3999-317a4538c6-lite.chunk.js.map +1 -0
- package/dist/scripts/{422-ee640f76c5-lite.chunk.js → 422-a63a7eb901-lite.chunk.js} +1 -1
- package/dist/scripts/{422-ee640f76c5-lite.chunk.js.map → 422-a63a7eb901-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4502-af4903784e-lite.chunk.js → 4502-a7d60fa257-lite.chunk.js} +1 -1
- package/dist/scripts/{4502-af4903784e-lite.chunk.js.map → 4502-a7d60fa257-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4554-c0d7490a46-lite.chunk.js → 4554-b9aa07891f-lite.chunk.js} +2 -2
- package/dist/scripts/4554-b9aa07891f-lite.chunk.js.map +1 -0
- package/dist/scripts/{4591-379f0fe588-lite.chunk.js → 4591-21c0094f28-lite.chunk.js} +2 -2
- package/dist/scripts/{4591-379f0fe588-lite.chunk.js.map → 4591-21c0094f28-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4683-ce52da47d8-lite.chunk.js → 4683-d3afe2dfa8-lite.chunk.js} +2 -2
- package/dist/scripts/4683-d3afe2dfa8-lite.chunk.js.map +1 -0
- package/dist/scripts/5220-291b2243ad-lite.chunk.js +3 -0
- package/dist/scripts/5220-291b2243ad-lite.chunk.js.map +1 -0
- package/dist/scripts/537-6efb9bc099-lite.chunk.js +3 -0
- package/dist/scripts/537-6efb9bc099-lite.chunk.js.map +1 -0
- package/dist/scripts/5660-6711768c20-lite.chunk.js +2 -0
- package/dist/scripts/5660-6711768c20-lite.chunk.js.map +1 -0
- package/dist/scripts/5936-e839cb8193-lite.chunk.js +2 -0
- package/dist/scripts/5936-e839cb8193-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-bf0ff6257f-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
- package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
- package/dist/scripts/6450-f16821bf09-lite.chunk.js +2 -0
- package/dist/scripts/6450-f16821bf09-lite.chunk.js.map +1 -0
- package/dist/scripts/6489-c242844567-lite.chunk.js +3 -0
- package/dist/scripts/6489-c242844567-lite.chunk.js.map +1 -0
- package/dist/scripts/6544-07898e3fa3-lite.chunk.js +2 -0
- package/dist/scripts/6544-07898e3fa3-lite.chunk.js.map +1 -0
- package/dist/scripts/6596-848fbf79bb-lite.chunk.js +2 -0
- package/dist/scripts/6596-848fbf79bb-lite.chunk.js.map +1 -0
- package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js → 6741-fe09fea334-lite.chunk.js} +3 -3
- package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.map → 6741-fe09fea334-lite.chunk.js.map} +1 -1
- package/dist/scripts/6752-0d139a6c9a-lite.chunk.js +2 -0
- package/dist/scripts/6752-0d139a6c9a-lite.chunk.js.map +1 -0
- package/dist/scripts/696-fa78eb455f-lite.chunk.js +2 -0
- package/dist/scripts/696-fa78eb455f-lite.chunk.js.map +1 -0
- package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js → 7234-d15fe07f0e-lite.chunk.js} +2 -2
- package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js.map → 7234-d15fe07f0e-lite.chunk.js.map} +1 -1
- package/dist/scripts/729-594be12089-lite.chunk.js +2 -0
- package/dist/scripts/729-594be12089-lite.chunk.js.map +1 -0
- package/dist/scripts/{7293-3e6ad36a7a-lite.chunk.js → 7293-35871fc150-lite.chunk.js} +2 -2
- package/dist/scripts/7293-35871fc150-lite.chunk.js.map +1 -0
- package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js → 8192-eb7054ccc6-lite.chunk.js} +2 -2
- package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js.map → 8192-eb7054ccc6-lite.chunk.js.map} +1 -1
- package/dist/scripts/841-11af1334bf-lite.chunk.js +3 -0
- package/dist/scripts/841-11af1334bf-lite.chunk.js.map +1 -0
- package/dist/scripts/{8522-b4b217640c-lite.chunk.js → 8522-8e9c576bf6-lite.chunk.js} +1 -1
- package/dist/scripts/{8522-b4b217640c-lite.chunk.js.map → 8522-8e9c576bf6-lite.chunk.js.map} +1 -1
- package/dist/scripts/8801-3a7652eb35-lite.chunk.js +2 -0
- package/dist/scripts/8801-3a7652eb35-lite.chunk.js.map +1 -0
- package/dist/scripts/9010-ef7ea501ee-lite.chunk.js +2 -0
- package/dist/scripts/9010-ef7ea501ee-lite.chunk.js.map +1 -0
- package/dist/scripts/9139-22fb64f542-lite.chunk.js +2 -0
- package/dist/scripts/9139-22fb64f542-lite.chunk.js.map +1 -0
- package/dist/scripts/9173-e45847aa35-lite.chunk.js +2 -0
- package/dist/scripts/9173-e45847aa35-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js → 9478-13da35c4ee-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.map → 9478-13da35c4ee-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-bf3d621a33-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
- package/dist/scripts/{953-bf3d621a33-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9899-68b030d4e2-lite.chunk.js → 9899-fa58471776-lite.chunk.js} +2 -2
- package/dist/scripts/{9899-68b030d4e2-lite.chunk.js.map → 9899-fa58471776-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-7f9a9b650d.min.js +3 -0
- package/dist/scripts/bundle-7f9a9b650d.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1080-4173ce26bd-lite.chunk.js +0 -2
- package/dist/scripts/1080-4173ce26bd-lite.chunk.js.map +0 -1
- package/dist/scripts/1169-d090f0a147-lite.chunk.js +0 -2
- package/dist/scripts/1169-d090f0a147-lite.chunk.js.map +0 -1
- package/dist/scripts/1329-d48379c043-lite.chunk.js +0 -3
- package/dist/scripts/1329-d48379c043-lite.chunk.js.map +0 -1
- package/dist/scripts/1518-9756fde01e-lite.chunk.js +0 -2
- package/dist/scripts/1518-9756fde01e-lite.chunk.js.map +0 -1
- package/dist/scripts/184-ee581fa2e0-lite.chunk.js +0 -2
- package/dist/scripts/184-ee581fa2e0-lite.chunk.js.map +0 -1
- package/dist/scripts/2094-58390aa60a-lite.chunk.js.map +0 -1
- package/dist/scripts/2199-476ac5922f-lite.chunk.js +0 -2
- package/dist/scripts/2199-476ac5922f-lite.chunk.js.map +0 -1
- package/dist/scripts/3640-1ac0a110f4-lite.chunk.js +0 -2
- package/dist/scripts/3640-1ac0a110f4-lite.chunk.js.map +0 -1
- package/dist/scripts/3969-c0160d0139-lite.chunk.js +0 -2
- package/dist/scripts/3969-c0160d0139-lite.chunk.js.map +0 -1
- package/dist/scripts/4063-786732e7b0-lite.chunk.js +0 -2
- package/dist/scripts/4063-786732e7b0-lite.chunk.js.map +0 -1
- package/dist/scripts/4273-de24896b28-lite.chunk.js +0 -3
- package/dist/scripts/4273-de24896b28-lite.chunk.js.map +0 -1
- package/dist/scripts/4554-c0d7490a46-lite.chunk.js.map +0 -1
- package/dist/scripts/4683-ce52da47d8-lite.chunk.js.map +0 -1
- package/dist/scripts/4850-5ddd277550-lite.chunk.js +0 -2
- package/dist/scripts/4850-5ddd277550-lite.chunk.js.map +0 -1
- package/dist/scripts/5220-85898810a6-lite.chunk.js +0 -3
- package/dist/scripts/5220-85898810a6-lite.chunk.js.map +0 -1
- package/dist/scripts/537-de7445d41a-lite.chunk.js +0 -3
- package/dist/scripts/537-de7445d41a-lite.chunk.js.map +0 -1
- package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js +0 -2
- package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js.map +0 -1
- package/dist/scripts/5660-a356acdbca-lite.chunk.js +0 -2
- package/dist/scripts/5660-a356acdbca-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-92d9cea005-lite.chunk.js +0 -2
- package/dist/scripts/5936-92d9cea005-lite.chunk.js.map +0 -1
- package/dist/scripts/6094-8546003d79-lite.chunk.js +0 -2
- package/dist/scripts/6094-8546003d79-lite.chunk.js.map +0 -1
- package/dist/scripts/6450-601f889072-lite.chunk.js +0 -2
- package/dist/scripts/6450-601f889072-lite.chunk.js.map +0 -1
- package/dist/scripts/6489-532a022587-lite.chunk.js +0 -3
- package/dist/scripts/6489-532a022587-lite.chunk.js.map +0 -1
- package/dist/scripts/6544-ae27efabab-lite.chunk.js +0 -2
- package/dist/scripts/6544-ae27efabab-lite.chunk.js.map +0 -1
- package/dist/scripts/6752-5dddab5e0b-lite.chunk.js +0 -2
- package/dist/scripts/6752-5dddab5e0b-lite.chunk.js.map +0 -1
- package/dist/scripts/6852-9dfd47d085-lite.chunk.js +0 -2
- package/dist/scripts/6852-9dfd47d085-lite.chunk.js.map +0 -1
- package/dist/scripts/7293-3e6ad36a7a-lite.chunk.js.map +0 -1
- package/dist/scripts/841-73ef4ba5ec-lite.chunk.js +0 -3
- package/dist/scripts/841-73ef4ba5ec-lite.chunk.js.map +0 -1
- package/dist/scripts/8801-222a1b2e99-lite.chunk.js +0 -2
- package/dist/scripts/8801-222a1b2e99-lite.chunk.js.map +0 -1
- package/dist/scripts/9139-49023800c6-lite.chunk.js +0 -2
- package/dist/scripts/9139-49023800c6-lite.chunk.js.map +0 -1
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js +0 -2
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-e72459b30e.min.js +0 -3
- package/dist/scripts/bundle-e72459b30e.min.js.map +0 -1
- /package/dist/css/{4273-lite-a3c7435ba4.chunk.css → 3999-lite-a3c7435ba4.chunk.css} +0 -0
- /package/dist/css/{4063-lite-f72fc7b813.chunk.css → 4860-lite-f72fc7b813.chunk.css} +0 -0
- /package/dist/css/{4850-lite-f72fc7b813.chunk.css → 729-lite-f72fc7b813.chunk.css} +0 -0
- /package/dist/scripts/{1329-d48379c043-lite.chunk.js.LICENSE.txt → 1329-bdbbf6c7fd-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1379-976d20185f-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2004-3005565af0-lite.chunk.js.LICENSE.txt → 2004-e20d72976c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4273-de24896b28-lite.chunk.js.LICENSE.txt → 3999-317a4538c6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-85898810a6-lite.chunk.js.LICENSE.txt → 5220-291b2243ad-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{537-de7445d41a-lite.chunk.js.LICENSE.txt → 537-6efb9bc099-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6489-532a022587-lite.chunk.js.LICENSE.txt → 6489-c242844567-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.LICENSE.txt → 6741-fe09fea334-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{841-73ef4ba5ec-lite.chunk.js.LICENSE.txt → 841-11af1334bf-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt → 9478-13da35c4ee-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-bf3d621a33-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-e72459b30e.min.js.LICENSE.txt → bundle-7f9a9b650d.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/5660-6711768c20-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/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/components/play-clip/PlayClip.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/PlayClipView.tsx"],"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}\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};\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.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SignUpDescriptors, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoAtAGlance } from 'libs/shared/components/video-at-a-glance/VideoAtAGlance';\nimport { hasGlanceData } from 'libs/shared/components/video-at-a-glance/VideoAtAGlanceUtils';\nimport { VideoDetailsWithScrollbar } from 'libs/shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'libs/shared/components/video-details/VideoDetailsPartial';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { ClipWidgetItem, ClipWidgetItemProps } from 'libs/shared/components/widgets/items/clip-widget-item/ClipWidgetItem';\nimport { InteractiveWidgetItem, InteractiveWidgetItemProps } from 'libs/shared/components/widgets/items/interactive-widget-item/InteractiveWidgetItem';\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from 'libs/shared/components/widgets/items/resource-widget-item/ResourceWidgetItem';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, FavouriteFunc, Interactive, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getResources } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\nconst namespace = 'shared.playClip';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype DetailsViewType = {\n view: 'v@g' | 'details' | 'loading';\n referrer: 'v@g' | 'details';\n};\n\ninterface PlayClipProps {\n clip: Clip;\n interactives: InteractiveMetadata[];\n clips: Clip[];\n originalVideo: Video;\n currentUser: CurrentUser;\n yearGroups: YearGroup[];\n relatedVideos: RelatedVideosHash;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n glanceTheme?: Theme;\n glanceLoaded: boolean;\n tableOfContentsId: string;\n isPlugin: boolean;\n}\n\nexport function PlayClip(props: PlayClipProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const resourcesRef = React.useRef<HTMLDivElement>(null);\n const interactivesRef = React.useRef<HTMLDivElement>(null);\n\n useTableOfContentsScroll([\n resourcesRef.current,\n interactivesRef.current\n ], props.tableOfContentsId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const hasGlance = hasGlanceData(props.clip, props.glanceTheme) && props.featureAccess.canViewGlance;\n\n const [ detailsView, setDetailsView ] = React.useState<DetailsViewType>({\n view: 'loading',\n referrer: null\n });\n\n React.useEffect(() => {\n if (!props.glanceLoaded)\n return;\n\n setDetailsView({\n view: props.glanceTheme ? 'v@g' : 'details',\n referrer: null\n });\n }, [ props.glanceLoaded, props.glanceTheme ]);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function limitAccess(): boolean {\n if (!props.currentUser?.isAuthenticated)\n return true;\n\n if (!props.hasProduct(ProductId.Primary))\n return true;\n\n if (hasStudentExperience)\n return true;\n\n return false;\n }\n\n const canAccessOriginal = props.originalVideo && !limitAccess() && !!props.clip._canBeConsumed?.value;\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal)\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const resourcesWidget = getResources(props.clip, hasStudentExperience);\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n return (\n <div className='px-4'>\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section className={`mb-2`}>\n {canConsume &&\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode='default'\n location='play-page'\n />\n }\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n\n {/* \n * Toggling between display 'block' and 'none' is *deliberate* done here to facilitate exposure of our content to bots for SEO.\n * The markup of all 3 components should be available in the DOM from the first render. If you're going to refactor,\n * please don't neglect this usecase - Mike\n */}\n <section className={`${detailsView.view === 'v@g' ? 'd-block' : 'd-none'}`}>\n <VideoAtAGlance\n theme={props.glanceTheme}\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n onClickShowDescription={() => setDetailsView({ view: 'details', referrer: 'v@g' })}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n\n <section className={`${detailsView.view === 'details' ? 'd-block' : 'd-none'}`}>\n <VideoDetailsWithScrollbar\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n onClickClose={hasGlance && (() => setDetailsView({ view: 'v@g', referrer: 'details' }))}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n hideTags={hasGlance}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n\n <section className={`${detailsView.view === 'loading' ? 'd-block' : 'd-none'}`}>\n <VideoDetailsPartial />\n </section>\n\n {!!resourcesWidget?.length && (\n <section className='pb-3' id={PlayPageAnchor.Resources} ref={resourcesRef}>\n <FixedWidget<ResourceWidgetItemProps>\n name={getPhrase('resources', { count: resourcesWidget.length })}\n contents={WidgetContents.PlayPageResources}\n collection={resourcesWidget}\n prefetched\n childComponent={ResourceWidgetItem}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: ImageUrls.Fallbacks.RESOURCE_THUMBNAIL,\n actionBehaviour: props.featureAccess.canViewResourceItems ? 'normal' : 'public',\n location: 'play-page',\n titlePosition: 'above',\n hideTypeBadge: true\n }}\n getChildAppLink={getResourceAppLink(\n props.clip?.id,\n props.shareId,\n props.featureAccess.canViewResourceItems\n )}\n analyticsOptions={(() => {\n if (props.featureAccess.canViewResourceItems)\n return {};\n\n return {\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n };\n })()}\n analyticsData={{ widgetId: 'resources' }}\n />\n </section>\n )}\n\n {!!(otherClips?.length && !limitAccess()) && (\n <div className='pb-3'>\n <FixedWidget<ClipWidgetItemProps>\n name={getPhrase('otherClips', { count: otherClips.length })}\n contents={WidgetContents.Clips}\n collection={otherClips}\n prefetched\n getChildAppLink={(clip: Clip) => {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ clip.id, TextHelper.slugify(clip.name) ]\n };\n }}\n childComponent={ClipWidgetItem}\n extraChildComponentProps={{ video: props.originalVideo, imageCdnUrl: props.imageCdnUrl }}\n analyticsData={{ widgetId: 'clips' }}\n />\n </div>\n )}\n\n {!!(props.interactives?.length && !limitAccess()) && (\n <div className='pb-3' id={PlayPageAnchor.Interactives} ref={interactivesRef}>\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('interactives', { count: props.interactives.length })}\n contents={WidgetContents.Interactives}\n collection={props.interactives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n childComponent={InteractiveWidgetItem}\n extraChildComponentProps={{\n video: props.clip,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.imageCdnUrl\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n </div>\n )}\n\n {!!canAccessOriginal && (\n <section className='pb-2 pt-1'>\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </VideoActionsContext.Provider>\n </section>\n )}\n\n <section>\n <RelatedVideos\n currentVideo={props.clip}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n </section>\n </div>\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 * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\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 { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { ThemeRequests } from 'libs/shared/flight-requests/ThemeRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { PlayClip } from 'shared/components/play-clip/PlayClip';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { PlayViewProps } from './PlayClipViewContainer';\n\nconst namespace = 'shared.playClip';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipView.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipView(props: PlayViewProps): JSX.Element {\n const { context, contextId, mtv } = props.queryParams;\n\n const { hasProduct } = useProducts();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayClip);\n const { isPlugin } = usePluginHelper();\n const { hasPermissions } = usePermissions();\n\n const featureAccess = useVideoFeatureAccess();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.id)\n );\n const video = Flight.useBasicFetch<Video>(\n !!clip.data?._parentVideo && VideoRequests.video(clip.data._parentVideo.id)\n );\n useVideoMixin([video.data]);\n\n const childClips = Flight.useBasicFetch<Clip[]>(\n !!clip.data?._parentVideo && featureAccess.canViewClips && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n\n const strippedClip = Flight.useBasicFetch<Clip>(clip.statusCode === HttpStatus.Forbidden &&\n ClipRequests.clip(props.id, PermissionFilterOption.StripMetadata));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldFetchTheme = hasPermissions(PermissionName.ViewVideoGlance) &&\n clip.data?.glance?.theme;\n \n const glanceTheme = Flight.useBasicFetch<Theme>(\n shouldFetchTheme &&\n ThemeRequests.themeImages(clip.data.glance.theme, clip.data.glance.type)\n );\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({\n content: clip.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n }\n }));\n\n useHandleObjectError(clip, clipErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(strippedClip);\n useDeepLinks({ id: props.id, app: 'clips' });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClip\n clip={clip.data}\n interactives={interactives.data}\n clips={childClips.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n // we only show up next videos for clips in a playlist\n relatedVideos={context === 'playlist' ? relatedVideos : { ...relatedVideos, videos: []}}\n canFavourite={canFavourite}\n setFavourite={setFavourite}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n imageCdnUrl={config.data.imageCdnUrl}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest.items}\n glanceTheme={glanceTheme.data}\n glanceLoaded={!shouldFetchTheme || glanceTheme.hasCompleted}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getResourceAppLink","videoId","shareId","canViewResource","resource","application","action","args","id","params","namespace","getPhrase","PlayClip","props","playerContext","hasPermissions","canConsume","clip","videoActions","location","resourcesRef","interactivesRef","current","tableOfContentsId","isArchived","hasStudentExperience","shouldPlayOnExitImmersiveReader","hasGlance","glanceTheme","featureAccess","canViewGlance","view","referrer","detailsView","setDetailsView","limitAccess","currentUser","isAuthenticated","hasProduct","glanceLoaded","canAccessOriginal","originalVideo","_canBeConsumed","value","showPlayerPlaceholder","mode","canViewPublicLayout","resourcesWidget","otherClips","clips","filter","c","toString","className","restrictions","_restrictions","yearGroups","objectId","objectTypeId","canManageVideoAccess","typeId","key","context","queryParams","contextId","moviesAndTv","mtv","playNext","startTime","t","video","type","media","audiences","originalVideoAppLink","name","theme","pointsOfInterest","onClickShowDescription","setStartTime","time","playerRef","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","onLaunchImmersiveReader","isPaused","pause","onExitImmersiveReader","play","onClickClose","hideTags","length","ref","count","contents","collection","prefetched","childComponent","R","extraChildComponentProps","imageCdnUrl","imageErrorFallbackUrl","actionBehaviour","canViewResourceItems","titlePosition","hideTypeBadge","getChildAppLink","analyticsOptions","workflowPhase","descriptor","SignUp","analyticsData","widgetId","C","interactives","interactive","questionsAppLink","phrase","videos","setFavourite","canFavourite","getVideoAppLink","v","opts","presentationAudiences","getPreviewQuestionsAppLink","isPlugin","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","currentVideo","relatedVideos","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","clipErrors","PlayClipView","u","config","canViewInteractives","data","_parentVideo","childClips","canViewClips","strippedClip","customerId","shouldFetchTheme","glance","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","app","hasCompleted","items","tocId","defaultProps"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5936],{49935:(e,t,r)=>{r.d(t,{Oo:()=>f,b2:()=>g});var n=r(32735),a=r(23481),i=r(36848),l=r(86764),c=r(3747),o=r(5859),s=r(35223),u=r(83914);function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var v=a.T.encloseNamespace("shared.breadcrumbComponent"),p=n.forwardRef((function(e,t){var r=e.breadcrumb,a=r.name,l=r.appLink,c=r.active,o=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?n.createElement("strong",null,a):n.createElement(i.F,{appLink:l,ref:t},o&&n.createElement(u.x,{svgName:s.vn.ChevronLeft,size:u.S.Small}),n.createElement("span",{className:o?"ms-2":""},a)))})),f=function(e){var t=e.breadcrumbs,r=(0,c.a)(l.r.XS),a=(null==t?void 0:t.length)||0,i=m(n.useState(!1),2),o=i[0],s=i[1],u=m(n.useState(!1),2),d=u[0],f=u[1],g=n.useRef();if(n.useEffect((function(){var e,r=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;a>3&&r>56&&s(!0)}),[null==t?void 0:t.length]),n.useLayoutEffect((function(){var e;d&&(null===(e=g.current)||void 0===e||e.focus())}),[g.current,d]),!a||r&&a<2)return n.createElement(n.Fragment,null);if(r)return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(p,{breadcrumb:t[a-2],withBackIcon:!0})));var b=n.createElement(p,{breadcrumb:t[0]}),h=a>2?n.createElement(p,{breadcrumb:t[a-2]}):n.createElement(n.Fragment,null),y=n.createElement(p,{breadcrumb:t[a-1]}),E=t.slice(1,a-2);return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},b,o?n.createElement("li",{className:"breadcrumb-item"},n.createElement("button",{className:"btn-link",onClick:function(){s(!1),f(!0)},"aria-label":v("expand")},"...")):E.map((function(e,t){return n.createElement(p,{key:t,breadcrumb:e,ref:0===t?g:null})})),h,y))},g=n.memo((function(e){var t=e.numItems,r=void 0===t?3:t;return(0,c.a)(l.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},o.u.getPartialLoadingItems({numItems:r}).map((function(e,t){var r=e.width;return n.createElement("li",{key:t,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:r},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},71020:(e,t,r)=>{r.d(t,{_:()=>u});var n=r(32735),a=r(80247),i=r(34152),l=r(83914),c=r(35223);const o={container:"VwD1b",spinner:"eJ85e"};function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function u(e){var t,r,u=(t=(0,i.YD)(),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),m=u[0],d=u[1];return n.useEffect((function(){var t;e.fetchOnScroll&&d&&!e.isFetching&&(null===(t=e.fetchNext)||void 0===t||t.call(e,e.nextCursor))}),[d,e.isFetching]),n.createElement("div",{className:"p-3 text-center ".concat(o.container),ref:m},e.isFetching?n.createElement(a.Z,{as:"span",animation:"border",role:"status",className:o.spinner}):n.createElement(l.x,{svgName:c.vn.ChevronDown,className:"svg-container cursor-pointer",size:l.S.Large,onClick:function(){var t;return null===(t=e.fetchNext)||void 0===t?void 0:t.call(e,e.nextCursor)}}))}u.defaultProps={fetchOnScroll:!1}},17997:(e,t,r)=>{r.d(t,{H:()=>d});var n=r(32735),a=r(23481),i=r(36848),l=r(83345),c=r(22843),o=r(84591),s=r(68626),u="shared.interactiveWidgetItemV2",m=a.T.encloseNamespace(u),d=n.memo((function(e){var t,r,a=e.data,d=e.thumbnailSize,v=e.preloadImage,p=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]}),f=null===(r=null===(t=a._timepoints)||void 0===t?void 0:t.value)||void 0===r?void 0:r.length;return n.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},n.createElement(o.u,{type:"static",textPosition:s.z.Independent,video:a,appLink:e.getAppLink(a),imageOptions:{size:d},preload:v,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,hideDuration:!1,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,showOwner:e.showOwner}),n.createElement("div",{className:"mt-2"},n.createElement(c.h,Object.assign({},e,{video:a,appLink:e.getAppLink(a)}))),n.createElement("div",{className:"mt-n1"},n.createElement(i.F,{appLink:p,className:"cursor-pointer",ariaLabel:"".concat(m("previewQuestions",{count:f,smartCount:f})," ").concat(m("ariaPreview",{name:a.name}))},n.createElement(l.x,{namespace:u,phrase:"previewQuestions",options:{count:f,smartCount:f}}))))}))},74696:(e,t,r)=>{r.d(t,{S:()=>s});var n=r(32735),a=r(68050),i=r(69111),l=r(9977),c=r(79967);const o={partialOptions:"Gufgq",partialName:"SicQQ",partialDescription:"dPGMq",partialThumbnail:"vZrnb",partialDragHandle:"iq73R"};function s(e){return n.createElement("div",{className:"mx-2"},Array(e.numVideos).fill(null).map((function(t,r){return n.createElement("div",{className:"d-flex",key:r},e.allowBulkActions&&n.createElement("div",{className:"form-check pe-3 pe-sm-2 mx-0 mx-md-2"}),n.createElement(u,Object.assign({},e)))})))}function u(e){var t=(0,c.k)(),r="sm"===l.O.getSize(t,"md"),s=e.withReordering&&!t.xs;return n.createElement(a.Z,{className:"".concat(r?"":"py-2"," flex-grow-1")},n.createElement(i.Z,Object.assign({},l.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(r?"pb-2 pe-1":"mb-1 pe-3 pe-md-2")}),n.createElement(a.Z,null,!!s&&n.createElement("div",{className:"d-flex align-items-center justify-content-center col-2"},n.createElement("div",{className:"partial-loading-background ".concat(o.partialDragHandle)})),n.createElement(i.Z,{xs:l.O.getThumbnailColSize(s)},n.createElement("div",{className:"partial-loading-background ".concat(r?"rounded":"rounded-3"," ").concat(o.partialThumbnail)})))),n.createElement(i.Z,Object.assign({},l.O.getDetailsColumns(),{className:r?"pb-2":"px-2"}),n.createElement("div",{className:"partial-loading-background mb-1 ".concat(o.partialName)}),n.createElement("div",{className:"partial-loading-background ".concat(o.partialDescription)})))}s.defaultProps={numVideos:15}},3133:(e,t,r)=>{r.d(t,{R:()=>s});var n=r(32735),a=r(20789),i=r(86794),l=r(2786),c=r(64818);const o={avatarContainer:"kd18L",cvIcon:"smUBc"};function s(e){var t;if(!e.owner&&!e.isClickViewCurated)return n.createElement(n.Fragment,null);if(e.isClickViewCurated)return n.createElement("div",{className:"clamp-1 d-flex align-items-center"},n.createElement("div",{className:"".concat(o.avatarContainer," me-1 border rounded-circle position-relative")},n.createElement(i.b,{className:"me-1 ".concat(o.cvIcon)},n.createElement(l.Sd,null))),"ClickView");var r=c.l.getCommunityName(e.owner);return r?n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"".concat(o.avatarContainer," me-1")},n.createElement(a.q,{imageCdnUrl:e.imageCdnUrl,initials:c.l.getInitials(e.owner.name,e.owner.surname),imageUrl:null===(t=e.owner.avatar)||void 0===t?void 0:t.url})),n.createElement("div",{className:"clamp-1"},r)):n.createElement(n.Fragment,null)}},47862:(e,t,r)=>{r.d(t,{K:()=>m});var n=r(32735),a=r(65858),i=r(36848),l=r(83345),c=r(84591),o=r(3133),s=r(54610),u=r(68626);var m=n.memo((function(e){var t,r=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]});return n.createElement("div",{className:"flex-shrink-0 px-1 ".concat("rXatl")},n.createElement("div",{className:"row m-0 border rounded p-2 h-100"},n.createElement("div",{className:"col-6 p-0"},n.createElement(c.u,{video:e.data,appLink:e.getAppLink(e.data),type:"cosmetic",imageOptions:{size:s.h2.Small},textPosition:u.z.Independent,preload:!0,analyticsOptions:{location:a.LZ.SlidingListItem}})),n.createElement("div",{className:"col-6 p-0"},n.createElement("div",{className:"ps-2"},n.createElement(i.F,{appLink:e.getAppLink(e.data)},n.createElement("h3",{className:"h6 mb-1"},n.createElement("span",{className:"clamp-2"},e.data.name))),n.createElement(o.R,{owner:e.data.owner,isClickViewCurated:null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value,imageCdnUrl:e.imageCdnUrl}),n.createElement(i.F,{className:"info-link",appLink:r},n.createElement(l.x,{namespace:"shared.interactiveWidgetItem",phrase:"previewQuestions"}))))))}))},94644:(e,t,r)=>{r.d(t,{r:()=>u});var n=r(50242),a=r(81886),i=r(67058),l=r(14553),c=r(49267),o=r(49075),s={notFound:i.d,forbidden:{rating:l.q,yearLevel:l.q,region:c.a,privacy:l.q},badRequest:o._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var l=Object.assign(Object.assign({},s),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==n.o.NotFound?i!==n.o.Forbidden?r.badRequest||a.Q.Ry.throw(new l.badRequest):r.forbidden||a.Q.Ry.throw(new l.forbidden.privacy):r.notFound||a.Q.Ry.throw(new l.notFound))}}},91286:(e,t,r)=>{r.d(t,{v:()=>l});var n=r(32735),a=r(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function l(e,t,r){var l=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){l.forEach((function(e){(0,a.r)(e.statusCode,t,r)}))}),[i(l),t,r])}},59598:(e,t,r)=>{var n;r.d(t,{K:()=>n}),function(e){e.Resources="resources",e.Interactives="interactives",e.Video="video",e.Clips="clips",e.CurriculumLinks="curriculum-links",e.VideoDetails="video-details",e.RelatedVideos="related-videos",e.ClippedFrom="clipped-from"}(n||(n={}))},5859:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}r.d(t,{u:()=>i});var a={numItems:5,minWidth:50,maxWidth:100},i={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=Object.assign(Object.assign({},a),t);return(e=Array(r.numItems),function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*r.maxWidth),r.minWidth),"px")}}))}}},84062:(e,t,r)=>{r.d(t,{M:()=>g});var n=r(32735),a=r(38750),i=r(65858),l=r(38647),c=r(16714),o=r(22902),s=r(31908),u=r(26492),m=r(78166),d=r(27638),v=r(22490),p=r(57245);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function g(e){var t,r,g=e.shareLink?i.LZ.PlaySharedInteractive:i.LZ.PlayInteractive,b=(t=n.useState(!0),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=b[0],y=b[1],E=s.M.isVideoTypeArchived(e.interactive),N=n.useMemo((function(){return(0,a.oD)()}),[]),I=(0,d.u)(g),A=I.setFavourite,w=I.canFavourite,S=(0,o.T)().hasPermissions;return n.createElement("div",{className:"px-3"},E&&n.createElement(u.T,{typeId:e.interactive.typeId,hasStudentExperience:!0}),n.createElement("div",{className:"mb-3"},n.createElement(p._,{config:e.config,video:e.interactive,currentUser:e.currentUser,shareLink:e.shareLink,viewKey:e.viewKey,startTime:e.startTime,onShowSummary:function(e){y(!e)},summaryPortalNode:N})),n.createElement("div",null,h&&n.createElement("h1",{className:"h3 d-flex"},e.interactive.name,n.createElement(l.m,{tooltipPlacement:"right",className:"ps-1",video:e.interactive,yearGroups:e.yearGroups}))),n.createElement(a.t0,{node:N}),!S(c.C.StudentExperience)&&n.createElement(m.Z,{currentVideo:e.interactive,yearGroups:e.yearGroups,currentUser:e.currentUser,setFavourite:A,canFavourite:w,relatedVideos:e.relatedVideos,audiences:e.audiences,getVideoAppLink:function(t,r){var n;return v.W.getAppLink(t,Object.assign(Object.assign({},r),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:null===(n=e.shareLink)||void 0===n?void 0:n.id,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv,isPlugin:e.isPlugin}))}},25758:(e,t,r)=>{r.d(t,{x:()=>q});var n=r(32735),a=r(38750),i=r(23481),l=r(28400),c=r(65858),o=r(83657),s=r(36848),u=r(49935),m=r(17997),d=r(83345),v=r(38647),p=r(11518),f=r(47862),g=r(10439),b=r(35429),h=r(5960),y=r(4594),E=r(58704),N=r(37802),I=r(31908),A=r(47938),w=r(78166),S=r(14070),x=r(97291),C=r(10671),k=r(27638),P=r(22490),V=r(83914),O=r(83523),L=r(76177),T=r(35223),j=i.T.encloseNamespace("interactives.previewInteractive");function F(e){return n.createElement("div",{className:"alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center",role:"alert"},e.isArchived?n.createElement("div",{className:"d-flex align-items-center"},n.createElement(V.x,{svgName:T.vn.Archive,size:V.S.Standard,className:"me-2 svg-container"}),n.createElement("div",{className:"w-100"},n.createElement("p",{className:"fw-semibold mb-0"},j("archivedInfoTitle")),n.createElement("p",{className:"mb-1"},j("archivedInfo")))):n.createElement(d.x,{phrase:"alert"}),e.isPreviewPreventScrubbingEnabled&&n.createElement(L.u,{title:j("previewPreventScrubbingExplain"),trigger:"hover",spanHack:!0},n.createElement("div",{className:"d-flex mt-1 mt-lg-0"},n.createElement("div",{className:"me-2"},n.createElement(d.x,{phrase:"previewPreventScrubbing"})),n.createElement(O.Z,{on:e.isPreviewingPreventScrubbing,onClick:e.toggleStudentMode}))))}function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var M="interactives.previewInteractive",U=i.T.encloseNamespace(M);function q(e){var t,r,i,V,O,L,T,j,q,G,_=e.shareId?c.LZ.PreviewSharedInteractive:c.LZ.PreviewInteractive,D=(0,b.g)(),W=(q=n.useState(!1),G=2,function(e){if(Array.isArray(e))return e}(q)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(q,G)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?R(e,t):void 0}}(q,G)||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.")}()),Z=W[0],z=W[1],Q=I.M.getCanBeConsumed(e.interactive).canConsume,$=(0,C._)({location:C.i.PlayPage,shareId:e.shareId}),B=(0,k.u)(_),K=B.setFavourite,H=B.canFavourite,X=(0,N.r)(null).hasPlayPageV2;T=Z,j=function(){var e,t,r;null===(r=null===(t=null===(e=D.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.togglePreviewPreventScrubbing)||void 0===r||r.call(t)},n.useEffect((function(){j()}),[T]);var Y,J,ee,te,re=(Y=e.interactive)._parentClip||Y._parentVideo;I.M.isClip(re)?(J=null===(r=null===(t=re.interactives)||void 0===t?void 0:t.data)||void 0===r?void 0:r.filter((function(t){return t.id.toString()!==e.interactive.id.toString()})),ee=re.name,te={application:x.O.CLIPS,action:S.e.Clips.PLAY_CLIP,args:[re.id,l.m.slugify(re.name)]}):(J=null===(V=null===(i=re.interactives)||void 0===i?void 0:i.data)||void 0===V?void 0:V.filter((function(t){return t.id.toString()!==e.interactive.id.toString()})),ee=re.name,te={application:x.O.VIDEOS,action:S.e.Videos.PLAY_VIDEO,args:[re.id,l.m.slugify(re.name)]});var ne=e.interactive.status===h.X.Draft;return n.createElement(d.D.Provider,{value:M},n.createElement("div",{className:"px-4"},(null===(O=e.breadcrumbs)||void 0===O?void 0:O.length)&&n.createElement("div",{className:"mb-2"},n.createElement(u.Oo,{breadcrumbs:e.breadcrumbs})),n.createElement(A.W,{restrictions:e.interactive._restrictions,yearGroups:e.yearGroups,objectId:e.interactive.id,objectTypeId:y.E.Interactive,canManageVideoAccess:e.canManageVideoAccess}),n.createElement(F,{isPreviewPreventScrubbingEnabled:e.isPreviewPreventScrubbingEnabled,isPreviewingPreventScrubbing:Z,toggleStudentMode:function(){z(!Z)},isArchived:I.M.isVideoTypeArchived(e.interactive)}),n.createElement("div",{className:"mb-3"},Q&&n.createElement(g.r,{key:e.interactive.id,objectId:e.interactive.id,objectTypeId:e.interactive.typeId,shareId:e.shareId,startTime:null!==(L=e.queryParams.t)&&void 0!==L?L:e.queryParams.startTime,mode:"default",location:"play-page"})),n.createElement("div",{className:"d-flex justify-content-between align-items-center"},n.createElement("div",{className:"inline-block w-100"},n.createElement("div",{className:"ms-2 float-end"},n.createElement(o.e,{actions:$.getVideoActions(e.interactive),actionsDropdownClassName:"btn btn-outline-dark",fetchMore:function(){return $.fetchMoreActions(e.interactive)}})),n.createElement("h1",{className:"h3 mb-2"},ne&&n.createElement("div",{className:"badge draft-badge me-2 align-bottom flex-shrink-0 h-auto lh-base"},n.createElement(d.x,{phrase:"draft"})),e.interactive.name,n.createElement(v.m,{tooltipPlacement:"right",className:"ps-1",video:e.interactive,yearGroups:e.yearGroups})),I.M.canViewOriginalVideo(e.interactive)&&n.createElement("div",{className:"mb-1 me-3 clamp-1"},n.createElement(d.x,{phrase:"viewOriginal"})," ",n.createElement(s.F,{appLink:te,className:"text-info"},ee)))),e.interactive.description&&n.createElement("p",null,e.interactive.description),n.createElement("div",{className:"mb-3"},n.createElement(a.t0,{node:D.questionListPortalNode})),!!(null==J?void 0:J.length)&&n.createElement("div",{className:"pb-3"},X?n.createElement(p.kM,{name:U("otherInteractives",{count:J.length}),contents:E.z.Interactives,collection:J,prefetched:!0,getChildAppLink:function(e){return{application:x.O.INTERACTIVES,action:S.e.Interactives.VIEW_INTERACTIVE,args:[e.id,l.m.slugify(e.name)]}},childComponent:m.H,extraChildComponentProps:{yearGroups:e.yearGroups,questionsAppLink:{application:x.O.INTERACTIVES,action:S.e.Interactives.PREVIEW_QUESTIONS},imageCdnUrl:e.config.imageCdnUrl,isPlugin:e.isPlugin},analyticsData:{widgetId:"interactives"}}):n.createElement(p.kM,{name:U("otherInteractives",{count:J.length}),contents:E.z.Interactives,collection:J,prefetched:!0,getChildAppLink:function(e){return{application:x.O.INTERACTIVES,action:S.e.Interactives.VIEW_INTERACTIVE,args:[e.id,l.m.slugify(e.name)]}},childComponent:f.K,extraChildComponentProps:{video:re,questionsAppLink:{application:x.O.INTERACTIVES,action:S.e.Interactives.PREVIEW_QUESTIONS},imageCdnUrl:e.config.imageCdnUrl},analyticsData:{widgetId:"interactives"}})),n.createElement(w.Z,{currentVideo:e.interactive,yearGroups:e.yearGroups,setFavourite:K,canFavourite:H,currentUser:e.currentUser,audiences:e.audiences,relatedVideos:e.relatedVideos,getVideoAppLink:function(t,r){return P.W.getAppLink(t,Object.assign(Object.assign({},r),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv,isPlugin:e.isPlugin})))}},26492:(e,t,r)=>{r.d(t,{T:()=>u});var n=r(32735),a=r(23481),i=r(65858),l=r(83914),c=r(4594),o=r(35223),s="shared.playPage";function u(e){var t=a.T.encloseNamespace(s),r=function(e){switch(e){case c.E.Video:return"video";case c.E.Clip:return"clip";case c.E.Interactive:return"interactive";default:return""}}(e.typeId);return n.createElement("div",{className:"alert bg-light-blue p-3 rounded-3 d-flex justify-content-between align-items-center"},n.createElement(l.x,{svgName:o.vn.Archive,size:l.S.Standard,className:"me-2 svg-container"}),n.createElement("div",{className:"w-100"},n.createElement("p",{className:"fw-semibold mb-0"},t("archivedInfoTitle",{type:r})),(!e.hasStudentExperience||r===i.py.Video)&&n.createElement("p",{className:"mb-1"},t("archivedInfo",{type:"".concat(r,"s")}))))}},47938:(e,t,r)=>{r.d(t,{W:()=>d});var n=r(32735),a=r(36848),i=r(83914),l=r(83345),c=r(5345),o=r(26361),s=r(14070),u=r(97291),m="shared.playPage";function d(e){var t,r;if(!(null===(r=null===(t=e.restrictions)||void 0===t?void 0:t.value)||void 0===r?void 0:r.length)||!e.yearGroups||!e.canManageVideoAccess)return n.createElement(n.Fragment,null);if(o.l.getWeightedRestriction(e.restrictions.value).type!==c.c.Custom)return n.createElement(n.Fragment,null);var d=o.l.mapRestrictionToClass(e.restrictions),v="".concat(d," fw-semibold p-2 rounded mb-3 d-flex justify-content-between align-items-center");return n.createElement("div",{className:v},n.createElement("div",{className:"d-flex align-items-center"},n.createElement(i.x,{svgName:o.l.mapRestrictionToSvg(e.restrictions),size:i.S.Large}),n.createElement("span",{className:"ps-1"},o.l.mapRestrictionToText(e.restrictions,e.yearGroups))),n.createElement(a.F,{appLink:{application:u.O.DEFAULT,action:s.e.Default.APPROVE_VIDEO,params:{objectId:e.objectId,objectTypeId:e.objectTypeId}},className:"btn btn-outline-dark"},n.createElement(l.x,{namespace:m,phrase:"approve"})))}},78166:(e,t,r)=>{r.d(t,{Z:()=>b});var n=r(32735),a=r(71020),i=r(83345),l=r(74696),c=r(13231),o=r(51365),s=r(22902),u=r(59598),m=r(31908),d=r(10671),v=r(10741),p=r(22490),f=r(82431),g="shared.relatedVideos";function b(e){var t,r,b=(0,d._)({location:d.i.VideoItem}),h=(0,s.T)().hasPermissions;if(!(null===(t=e.currentUser)||void 0===t?void 0:t.isAuthenticated))return n.createElement(n.Fragment,null);if(e.relatedVideos.hasError)return n.createElement(n.Fragment,null);if(e.relatedVideos.hasCompleted&&!(null===(r=e.relatedVideos.videos)||void 0===r?void 0:r.length))return n.createElement(n.Fragment,null);if(!e.relatedVideos.isFetching&&!e.relatedVideos.hasCompleted)return n.createElement(n.Fragment,null);var y=!m.M.isInteractive(e.currentVideo);return n.createElement("section",{id:u.K.RelatedVideos,className:"play-page-section",ref:function(t){var r,n;t&&(null===(r=e.headingRef)||void 0===r?void 0:r.current)&&(null===(n=e.relatedVideos.videos)||void 0===n?void 0:n.length)&&e.headingRef.current.set(u.K.RelatedVideos,t)}},n.createElement(o.M.Provider,{value:b},n.createElement("h2",{className:"h4 mb-0"},n.createElement(i.x,{namespace:g,phrase:y?"upNext":"relatedVideos"})),e.relatedVideos.hasCompleted?n.createElement(c.E4,{videos:e.relatedVideos.videos,yearGroups:e.yearGroups,getSubTextAppLink:function(t){return f.j.getSeriesAppLink(t.series,e.moviesAndTv?{mtv:!0}:null)},getVideoAppLink:e.getVideoAppLink,hasPermissions:h,setFavourite:e.setFavourite,canFavourite:e.canFavourite,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return v.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:p.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:p.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:p.W.getResourceGuidanceAppLink}):n.createElement(l.S,null),e.relatedVideos.hasMore&&n.createElement(a._,{isFetching:e.relatedVideos.isFetching,fetchNext:e.relatedVideos.fetchNext})))}},44110:(e,t,r)=>{r.d(t,{i:()=>l});var n=r(20354),a=r(89454),i=r(86698),l=function(){var e=(0,i.y)({redirectOnError:!0}),t=e.activePresentation,r=e.getFallbackPresentation,l=t||r();return n.a.useBasicFetch(!!l&&a.O.presentationAudiences(l.id))}},53073:(e,t,r)=>{r.d(t,{f:()=>s});var n=r(20354),a=r(16714),i=r(12754),l=r(31949),c=r(22902),o=r(15311);function s(){var e=(0,c.T)().hasPermissions,t=(0,o.r)().hasProduct,r=n.a.useBasicFetch(l.N.currentUser());return!e(a.C.StudentExperience)&&t(i.x.Primary)&&r.data.isAuthenticated}},97816:(e,t,r)=>{r.d(t,{V:()=>m});var n=r(32735),a=r(20354),i=r(21750),l=r(31949),c=r(1575),o=r(31908);function s(e,t){if(e){if("string"==typeof e)return u(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function m(e){var t,r,m=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},d=a.a.useBasicFetch(l.N.currentUser()),v=n.useRef(new Set),p=function(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))})):[]:[]}(e),f=p.map((function(e){return e.id})),g=(t=n.useState([]),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(t,r)||s(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=g[0],h=g[1];n.useEffect((function(){if((null==f?void 0:f.length)&&d.hasCompleted){var e=[];f.forEach((function(t){v.current.has(t)||(e.push(t),v.current.add(t))})),e.length&&h((function(t){var r,n=[].concat(function(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||s(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.")}()}(t),[c.R.videoMixinAssocs(e,m.flightNamespace)]);return(null===(r=d.data)||void 0===r?void 0:r.isAuthenticated)&&n.push(i.x.hasCurriculumLinks(e,null,m.flightNamespace)),n}))}}),[null==f?void 0:f.length,d.hasCompleted]),a.a.useBasicFetchAll(b)}},68050:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(95685),a=r.n(n),i=r(32735),l=r(46304),c=r(74512);const o=i.forwardRef((({bsPrefix:e,className:t,as:r="div",...n},i)=>{const o=(0,l.vE)(e,"row"),s=(0,l.pi)(),u=(0,l.zG)(),m=`${o}-cols`,d=[];return s.forEach((e=>{const t=n[e];let r;delete n[e],null!=t&&"object"==typeof t?({cols:r}=t):r=t;const a=e!==u?`-${e}`:"";null!=r&&d.push(`${m}${a}-${r}`)})),(0,c.jsx)(r,{ref:i,...n,className:a()(t,o,...d)})}));o.displayName="Row";const s=o}}]);
|
|
2
|
+
//# sourceMappingURL=5936-e839cb8193-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/5936-e839cb8193-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/infinite-scroll-footer/infinite-scroll-footer.scss","file:///app/packages/libs/shared/src/components/infinite-scroll-footer/InfiniteScrollFooter.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/components/video-owner-text/video-owner-text.scss","file:///app/packages/libs/shared/src/components/video-owner-text/VideoOwnerText.tsx","file:///app/packages/libs/shared/src/components/widgets/items/interactive-widget-item/InteractiveWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/interactive-widget-item/interactive-widget-item.scss","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/interfaces/PlayPageAnchor.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/interactives/components/play-interactive/PlayInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/preview-interactive/InteractiveAlertBanner.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/preview-interactive/PreviewInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/hooks/interactiveHooks.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/ArchivedBanner.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/RestrictionBanner.tsx","file:///app/packages/projects/lite/src/shared/components/related-videos/RelatedVideos.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useShouldPreviewInteractive.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["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 { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 56;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 3 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const secondLast = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} />;\n const rest = breadcrumbs.slice(1, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"VwD1b\",\"spinner\":\"eJ85e\"};","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './infinite-scroll-footer.scss';\n\ninterface InfiniteScrollFooterProps {\n isFetching: boolean;\n fetchNext?: (nextCursor: string) => void;\n nextCursor?: string;\n fetchOnScroll?: boolean;\n}\n\nInfiniteScrollFooter.defaultProps = {\n fetchOnScroll: false\n};\n\nexport function InfiniteScrollFooter(props: InfiniteScrollFooterProps): React.ReactElement {\n const [ ref, inView ] = useInView();\n\n React.useEffect(() => {\n if (!props.fetchOnScroll)\n return;\n\n if (!inView || props.isFetching)\n return;\n\n props.fetchNext?.(props.nextCursor);\n }, [ inView, props.isFetching ]);\n\n return (\n <div className={`p-3 text-center ${styles.container}`} ref={ref}>\n {props.isFetching\n ? <Spinner as='span' animation='border' role='status' className={styles.spinner} />\n : (\n <SvgContainer\n svgName={cvSvgLibrary.ChevronDown}\n className='svg-container cursor-pointer'\n size={SvgContainerSize.Large}\n onClick={() => props.fetchNext?.(props.nextCursor)}\n />\n )\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveWidgetItemV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-n1'>\n <AppLink\n appLink={questionsAppLink}\n className='cursor-pointer'\n ariaLabel={`${getPhrase('previewQuestions', { count: questionsNumber, smartCount: questionsNumber })} ${getPhrase('ariaPreview', { name: interactive.name })}`}\n >\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n </div>\n );\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kd18L\",\"cvIcon\":\"smUBc\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { ClickViewPlayLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './video-owner-text.scss';\n\ninterface VideoOwnerTextProps {\n owner: User;\n isClickViewCurated: boolean;\n imageCdnUrl: string;\n}\n\nexport function VideoOwnerText(props: VideoOwnerTextProps): JSX.Element {\n if (!props.owner && !props.isClickViewCurated)\n return <></>;\n\n if (props.isClickViewCurated) {\n return (\n <div className='clamp-1 d-flex align-items-center'>\n <div className={`${styles.avatarContainer} me-1 border rounded-circle position-relative`}>\n <SvgContainer2 className={`me-1 ${styles.cvIcon}`}>\n <ClickViewPlayLogo />\n </SvgContainer2>\n </div>\n ClickView\n </div>\n );\n }\n\n const name = UserHelper.getCommunityName(props.owner);\n\n if (!name)\n return <></>;\n\n return (\n <div className='d-flex align-items-center'>\n <div className={`${styles.avatarContainer} me-1`}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.owner.name, props.owner.surname)}\n imageUrl={props.owner.avatar?.url}\n />\n </div>\n <div className='clamp-1'>\n {name}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoOwnerText } from 'libs/shared/components/video-owner-text/VideoOwnerText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, InteractiveMetadata, Video } from 'libs/shared/interfaces';\n\nimport styles from './interactive-widget-item.scss';\n\nconst namespace = 'shared.interactiveWidgetItem';\n\nexport interface InteractiveWidgetItemProps extends FixedWidgetItemProps<InteractiveMetadata> {\n video: Video | Clip;\n questionsAppLink: Core.AppLink;\n imageCdnUrl: string;\n}\n\nexport const InteractiveWidgetItem = React.memo(function(props: InteractiveWidgetItemProps): JSX.Element {\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n return (\n <div className={`flex-shrink-0 px-1 ${styles.item}`}>\n <div className='row m-0 border rounded p-2 h-100'>\n <div className='col-6 p-0'>\n <VideoThumbnail\n video={props.data}\n appLink={props.getAppLink(props.data)}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n preload\n analyticsOptions={{ location: LocationContext.SlidingListItem }}\n />\n </div>\n\n <div className='col-6 p-0'>\n <div className='ps-2'>\n <AppLink appLink={props.getAppLink(props.data)}>\n <h3 className='h6 mb-1'><span className='clamp-2'>{props.data.name}</span></h3>\n </AppLink>\n\n <VideoOwnerText\n owner={props.data.owner}\n isClickViewCurated={props.data._isClickViewCurated?.value}\n imageCdnUrl={props.imageCdnUrl}\n />\n\n <AppLink className='info-link' appLink={questionsAppLink}>\n <Text namespace={namespace} phrase='previewQuestions' />\n </AppLink>\n </div>\n </div>\n </div>\n </div>\n );\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"rXatl\"};","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}\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};\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.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","export enum PlayPageAnchor {\n Resources = 'resources',\n Interactives = 'interactives',\n Video = 'video',\n Clips = 'clips',\n CurriculumLinks = 'curriculum-links',\n VideoDetails = 'video-details',\n RelatedVideos = 'related-videos',\n ClippedFrom='clipped-from'\n}","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\nimport { createHtmlPortalNode, OutPortal } from 'react-reverse-portal';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, InteractiveMetadata, PlayerViewKey, PresentationAudience, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { LitePlayerView } from 'shared/views/lite-player/LitePlayerView';\n\ninterface PlayInteractiveProps {\n interactive: InteractiveMetadata;\n yearGroups: YearGroup[];\n currentUser: CurrentUser;\n config: Config;\n audiences: PresentationAudience[];\n queryParams: PlayViewQueryParams;\n viewKey: PlayerViewKey;\n startTime?: number;\n endTime?: number;\n\n // Share view only\n shareLink?: UnionShareObject;\n sharerInstanceRegion?: string;\n checkMarkStatus?: CheckMarkStatus;\n relatedVideos: RelatedVideosHash;\n isPlugin: boolean;\n}\n\nexport function PlayInteractive(props: PlayInteractiveProps): JSX.Element {\n const locationContext = props.shareLink ?\n LocationContext.PlaySharedInteractive :\n LocationContext.PlayInteractive;\n\n const [ showHeading, setShowHeading ] = React.useState(true);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.interactive);\n\n const summaryPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext);\n const { hasPermissions } = usePermissions();\n\n function onShowSummary(showing: boolean): void {\n setShowHeading(!showing);\n }\n\n return (\n <div className='px-3'>\n {isArchived && <ArchivedBanner typeId={props.interactive.typeId} hasStudentExperience />}\n\n <div className='mb-3'>\n <LitePlayerView\n config={props.config}\n video={props.interactive}\n currentUser={props.currentUser}\n shareLink={props.shareLink}\n viewKey={props.viewKey}\n startTime={props.startTime}\n onShowSummary={onShowSummary}\n summaryPortalNode={summaryPortalNode}\n />\n </div>\n {/* This wrapping div is here because react seems to not want to play nice\n with adding or removing a node just ahead of an OutPortal */}\n <div>\n {showHeading &&\n <h1 className='h3 d-flex'>\n {props.interactive.name}\n <RestrictionPadlock\n tooltipPlacement='right'\n className='ps-1'\n video={props.interactive}\n yearGroups={props.yearGroups}\n />\n </h1>\n }\n </div>\n <OutPortal node={summaryPortalNode}></OutPortal>\n\n {!hasPermissions(PermissionName.StudentExperience) && (\n <RelatedVideos\n currentVideo={props.interactive}\n yearGroups={props.yearGroups}\n currentUser={props.currentUser}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n relatedVideos={props.relatedVideos}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareLink?.id,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'interactives.previewInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveAlertBannerProps {\n isPreviewPreventScrubbingEnabled: boolean;\n isPreviewingPreventScrubbing: boolean;\n toggleStudentMode: () => void;\n isArchived: boolean;\n}\n\nexport function InteractiveAlertBanner(props: InteractiveAlertBannerProps): JSX.Element {\n return (\n <div className='alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center' role='alert'>\n {!props.isArchived ? <Text phrase='alert' /> : (\n <div className='d-flex align-items-center'>\n <SvgContainer\n svgName={cvSvgLibrary.Archive}\n size={SvgContainerSize.Standard}\n className='me-2 svg-container'\n />\n \n <div className='w-100'>\n <p className='fw-semibold mb-0'>{getPhrase('archivedInfoTitle')}</p>\n <p className='mb-1'>{getPhrase('archivedInfo')}</p>\n </div>\n </div>\n )}\n {props.isPreviewPreventScrubbingEnabled && (\n <Tooltip\n title={getPhrase('previewPreventScrubbingExplain')}\n trigger='hover'\n spanHack\n >\n <div className='d-flex mt-1 mt-lg-0'>\n <div className='me-2'><Text phrase='previewPreventScrubbing'/></div>\n <ToggleSwitch on={props.isPreviewingPreventScrubbing} onClick={props.toggleStudentMode} />\n </div>\n </Tooltip>\n )}\n </div>\n );\n}","import * as React from 'react';\nimport { OutPortal } from 'react-reverse-portal';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from 'libs/shared/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { InteractiveWidgetItem, InteractiveWidgetItemProps } from 'libs/shared/components/widgets/items/interactive-widget-item/InteractiveWidgetItem';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Clip, Config, CurrentUser, Interactive, InteractiveMetadata, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { InteractiveAlertBanner } from 'apps/interactives/components/preview-interactive/InteractiveAlertBanner';\nimport { usePreviewPreventInteractive } from 'apps/interactives/hooks/interactiveHooks';\n\nconst namespace = 'interactives.previewInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSourceVideo(interactive: InteractiveMetadata): Clip | Video {\n return interactive._parentClip || interactive._parentVideo;\n}\n\ninterface PreviewInteractiveProps {\n interactive: InteractiveMetadata;\n yearGroups: YearGroup[];\n config: Config;\n currentUser: CurrentUser;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n isPreviewPreventScrubbingEnabled: boolean;\n relatedVideos: RelatedVideosHash;\n canManageVideoAccess: boolean;\n isPlugin: boolean;\n breadcrumbs?: Breadcrumb[];\n\n // Share view only\n shareId?: string;\n}\n\nexport function PreviewInteractive(props: PreviewInteractiveProps): JSX.Element {\n const locationContext = props.shareId ? LocationContext.PreviewSharedInteractive : LocationContext.PreviewInteractive;\n\n const playerContext = usePlayerContext();\n\n const [ isPreviewingPreventScrubbing, setIsPreviewingPreventScrubbing ] = React.useState(false);\n\n const { canConsume } = VideoHelper.getCanBeConsumed(props.interactive);\n\n const videoActions = useVideoActions({\n location: VideoActionsLocation.PlayPage,\n shareId: props.shareId\n });\n\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext);\n const { hasPlayPageV2 } = useSettings(null);\n\n usePreviewPreventInteractive(isPreviewingPreventScrubbing, togglePreviewPreventScrubbing);\n\n function togglePreviewPreventScrubbing() {\n playerContext.playerRef?.current?.togglePreviewPreventScrubbing?.();\n }\n\n function toggleStudentMode() {\n setIsPreviewingPreventScrubbing(!isPreviewingPreventScrubbing);\n }\n\n const sourceVideo = getSourceVideo(props.interactive);\n\n let otherInteractives: InteractiveMetadata[];\n let backToName: string;\n let backAppLink: Core.AppLink;\n\n if (VideoHelper.isClip(sourceVideo)) {\n otherInteractives = sourceVideo.interactives?.data?.filter(i => {\n return i.id.toString() !== props.interactive.id.toString();\n });\n backToName = sourceVideo.name;\n backAppLink = {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ sourceVideo.id, TextHelper.slugify(sourceVideo.name) ]\n };\n } else {\n otherInteractives = sourceVideo.interactives?.data?.filter(i => {\n return i.id.toString() !== props.interactive.id.toString();\n });\n backToName = sourceVideo.name;\n backAppLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ sourceVideo.id, TextHelper.slugify(sourceVideo.name) ]\n };\n }\n\n const isDraft = props.interactive.status === CurationStatus.Draft;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-4'>\n {props.breadcrumbs?.length &&\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n }\n\n <RestrictionBanner\n restrictions={props.interactive._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.interactive.id}\n objectTypeId={MasterType.Interactive}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n <InteractiveAlertBanner\n isPreviewPreventScrubbingEnabled={props.isPreviewPreventScrubbingEnabled}\n isPreviewingPreventScrubbing={isPreviewingPreventScrubbing}\n toggleStudentMode={toggleStudentMode}\n isArchived={VideoHelper.isVideoTypeArchived(props.interactive)}\n />\n\n <div className='mb-3'>\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.interactive.id}\n objectId={props.interactive.id}\n objectTypeId={props.interactive.typeId}\n shareId={props.shareId}\n startTime={props.queryParams.t ?? props.queryParams.startTime}\n mode='default'\n location='play-page'\n />\n )}\n </div>\n <div className='d-flex justify-content-between align-items-center'>\n <div className='inline-block w-100'>\n <div className='ms-2 float-end'>\n <ActionsComponent\n actions={videoActions.getVideoActions(props.interactive)}\n actionsDropdownClassName='btn btn-outline-dark'\n fetchMore={() => videoActions.fetchMoreActions(props.interactive)}\n />\n </div>\n\n <h1 className='h3 mb-2'>\n {isDraft && (\n <div className={`badge draft-badge me-2 align-bottom flex-shrink-0 h-auto lh-base`}>\n <Text phrase='draft' />\n </div>\n )}\n {props.interactive.name}\n <RestrictionPadlock\n tooltipPlacement='right'\n className='ps-1'\n video={props.interactive}\n yearGroups={props.yearGroups}\n />\n </h1>\n {VideoHelper.canViewOriginalVideo(props.interactive) &&\n <div className='mb-1 me-3 clamp-1'>\n <Text phrase='viewOriginal' /> <AppLink appLink={backAppLink} className='text-info'>{backToName}</AppLink>\n </div>\n }\n </div>\n </div>\n\n {props.interactive.description &&\n <p>{props.interactive.description}</p>\n }\n\n <div className='mb-3'>\n <OutPortal node={playerContext.questionListPortalNode}></OutPortal>\n </div>\n\n {!!otherInteractives?.length && (\n <div className='pb-3'>\n {!hasPlayPageV2 ? (\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('otherInteractives', { count: otherInteractives.length })}\n contents={WidgetContents.Interactives}\n collection={otherInteractives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n childComponent={InteractiveWidgetItem}\n extraChildComponentProps={{\n video: sourceVideo,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.config.imageCdnUrl\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n ) : (\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={getPhrase('otherInteractives', { count: otherInteractives.length })}\n contents={WidgetContents.Interactives}\n collection={otherInteractives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.config.imageCdnUrl,\n isPlugin: props.isPlugin\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n )}\n </div>\n )}\n\n <RelatedVideos\n currentVideo={props.interactive}\n yearGroups={props.yearGroups}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n currentUser={props.currentUser}\n audiences={props.audiences}\n relatedVideos={props.relatedVideos}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nexport function usePreviewPreventInteractive(\n previewPreventInteractive: boolean,\n togglePreviewPreventInteractive: () => void\n): void {\n React.useEffect(() => {\n togglePreviewPreventInteractive();\n }, [previewPreventInteractive]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType } from 'libs/analytics/interfaces';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.playPage';\n\ninterface ArchivedBannerProps {\n typeId: MasterType;\n hasStudentExperience: boolean;\n}\n\nfunction mapTypeId(typeId: MasterType): string {\n switch (typeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Clip:\n return 'clip';\n case MasterType.Interactive:\n return 'interactive';\n default:\n return '';\n }\n}\n\nexport function ArchivedBanner(props: ArchivedBannerProps): JSX.Element {\n const getPhrase = LanguageService.encloseNamespace(namespace);\n const type = mapTypeId(props.typeId);\n\n return (\n <div className='alert bg-light-blue p-3 rounded-3 d-flex justify-content-between align-items-center'>\n <SvgContainer\n svgName={cvSvgLibrary.Archive}\n size={SvgContainerSize.Standard}\n className='me-2 svg-container'\n />\n \n <div className='w-100'>\n <p className='fw-semibold mb-0'>{getPhrase('archivedInfoTitle', { type })}</p>\n {(!props.hasStudentExperience || type === EntityType.Video) && (\n <p className='mb-1'>{getPhrase('archivedInfo', { type: `${type}s` })}</p>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { RestrictionType } from 'libs/shared/enums/RestrictionType';\nimport { Restrictions, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.playPage';\n\ninterface RestrictionBannerProps {\n restrictions: Restrictions;\n yearGroups: YearGroup[];\n objectId: string;\n objectTypeId: MasterType;\n canManageVideoAccess: boolean;\n}\n\nexport function RestrictionBanner(props: RestrictionBannerProps): JSX.Element {\n if (!props.restrictions?.value?.length || !props.yearGroups || !props.canManageVideoAccess)\n return <></>;\n\n const restriction = RestrictionHelper.getWeightedRestriction(props.restrictions.value);\n\n if (restriction.type !== RestrictionType.Custom)\n return <></>;\n\n const baseClassName = RestrictionHelper.mapRestrictionToClass(props.restrictions);\n const className = `${baseClassName} fw-semibold p-2 rounded mb-3 d-flex justify-content-between align-items-center`;\n\n return (\n <div className={className}>\n <div className='d-flex align-items-center'>\n <SvgContainer\n svgName={RestrictionHelper.mapRestrictionToSvg(props.restrictions)}\n size={SvgContainerSize.Large}\n />\n <span className='ps-1'>\n {RestrictionHelper.mapRestrictionToText(props.restrictions, props.yearGroups)}\n </span>\n </div>\n \n <AppLink\n appLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.APPROVE_VIDEO,\n params: {\n objectId: props.objectId,\n objectTypeId: props.objectTypeId\n }\n }}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='approve' />\n </AppLink>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, CurrentUser, FavouriteFunc, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.relatedVideos';\n\ninterface RelatedVideosProps {\n currentVideo: VideoTypes;\n yearGroups: YearGroup[];\n relatedVideos: RelatedVideosHash;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n currentUser: CurrentUser;\n audiences: PresentationAudience[];\n getVideoAppLink: (video: VideoTypes, opts: GetVideoAppLinkOptions) => Core.AppLink;\n moviesAndTv: boolean;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function RelatedVideos(props: RelatedVideosProps): JSX.Element {\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const { hasPermissions } = usePermissions();\n\n if (!props.currentUser?.isAuthenticated) // Don't render if user is unauthenticated\n return <></>;\n\n if (props.relatedVideos.hasError) // Don't render if request has errored\n return <></>;\n\n if (props.relatedVideos.hasCompleted && !props.relatedVideos.videos?.length) // Don't render if response is empty\n return <></>;\n\n if (!props.relatedVideos.isFetching && !props.relatedVideos.hasCompleted) // Don't render if request is never made\n return <></>;\n\n // We don't support autoplaying from interactives. This means the related videos heading won't say \"Up next\"\n const canAutoplay = !VideoHelper.isInteractive(props.currentVideo);\n\n return (\n <section\n id={PlayPageAnchor.RelatedVideos}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current\n && !!props.relatedVideos.videos?.length)\n && props.headingRef.current.set(PlayPageAnchor.RelatedVideos, el);\n }}\n >\n <VideoActionsContext.Provider value={videoActions}>\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase={canAutoplay ? 'upNext' : 'relatedVideos'} />\n </h2>\n {props.relatedVideos.hasCompleted ? (\n <VideoList\n videos={props.relatedVideos.videos}\n yearGroups={props.yearGroups}\n getSubTextAppLink={video => {\n return SeriesAppLinkHelper.getSeriesAppLink(video.series, props.moviesAndTv ? { mtv: true } : null);\n }}\n getVideoAppLink={props.getVideoAppLink}\n hasPermissions={hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n ) : <PartialVideoList />\n }\n {props.relatedVideos.hasMore && (\n <InfiniteScrollFooter\n isFetching={props.relatedVideos.isFetching}\n fetchNext={props.relatedVideos.fetchNext}\n />\n )}\n </VideoActionsContext.Provider>\n </section>\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/flight';\n\nimport { 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 { CurrentUser } from 'libs/shared/interfaces';\n\nexport function useShouldPreviewInteractive() {\n const { hasPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n return !hasPermissions(PermissionName.StudentExperience) &&\n hasProduct(ProductId.Primary) &&\n currentUser.data.isAuthenticated;\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Clip, ClipCollection, CurrentUser, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const hydratedVideos = React.useRef<Set<string>>(new Set<string>());\n\n const videos = getValidObjects(objects);\n\n const videoIds = videos.map(v => v.id);\n\n const [ request, setRequest ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!videoIds?.length || !currentUser.hasCompleted)\n return;\n\n const unhydratedVideos: string[] = [];\n\n videoIds.forEach(id => {\n if (!hydratedVideos.current.has(id)) {\n unhydratedVideos.push(id);\n hydratedVideos.current.add(id);\n }\n });\n \n if (!unhydratedVideos.length)\n return;\n\n setRequest(r => {\n const newRequests = [\n ...r,\n VideoRequests.videoMixinAssocs(unhydratedVideos, options.flightNamespace)\n ];\n\n if (currentUser.data?.isAuthenticated)\n newRequests.push(ClassificationRequests.hasCurriculumLinks(unhydratedVideos, null, options.flightNamespace));\n\n return newRequests;\n });\n }, [ videoIds?.length, currentUser.hasCompleted ]);\n\n Flight.useBasicFetchAll(request);\n}","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","InfiniteScrollFooter","inView","fetchOnScroll","isFetching","fetchNext","nextCursor","Spinner","as","animation","role","SvgContainer","defaultProps","namespace","InteractiveWidgetItemV2","interactive","data","thumbnailSize","preloadImage","questionsAppLink","args","id","questionsNumber","_timepoints","value","type","textPosition","video","getAppLink","imageOptions","preload","analyticsData","analyticsOptions","setFavourite","canFavourite","hideDuration","imageCdnUrl","isPlugin","showOwner","ariaLabel","count","smartCount","phrase","options","PartialVideoList","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","VideoOwnerText","owner","isClickViewCurated","SvgContainer2","UserHelper","Avatar","initials","surname","imageUrl","avatar","url","InteractiveWidgetItem","VideoThumbnail","ThumbnailTextPosition","location","AppLink","_isClickViewCurated","Text","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","PlayPageAnchor","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","opts","Math","max","floor","random","PlayInteractive","locationContext","shareLink","showHeading","setShowHeading","isArchived","summaryPortalNode","u","hasPermissions","typeId","hasStudentExperience","config","currentUser","viewKey","startTime","onShowSummary","showing","tooltipPlacement","yearGroups","node","currentVideo","relatedVideos","audiences","getVideoAppLink","v","context","queryParams","contextId","playNext","shareId","moviesAndTv","mtv","LanguageService","InteractiveAlertBanner","isPreviewPreventScrubbingEnabled","Tooltip","title","trigger","spanHack","ToggleSwitch","on","isPreviewingPreventScrubbing","toggleStudentMode","PreviewInteractive","previewPreventInteractive","togglePreviewPreventInteractive","playerContext","setIsPreviewingPreventScrubbing","canConsume","VideoHelper","videoActions","useVideoActions","useLiteFavourites","hasPlayPageV2","useSettings","playerRef","togglePreviewPreventScrubbing","otherInteractives","backToName","backAppLink","sourceVideo","_parentClip","_parentVideo","interactives","filter","toString","application","action","TextHelper","isDraft","CurationStatus","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","canManageVideoAccess","GlobalPlayerConsumer","t","mode","Actions","actions","getVideoActions","actionsDropdownClassName","fetchMore","fetchMoreActions","RestrictionPadlock","description","questionListPortalNode","contents","WidgetContents","collection","prefetched","getChildAppLink","childComponent","extraChildComponentProps","widgetId","RelatedVideos","VideoAppLinkHelper","ArchivedBanner","mapTypeId","baseClassName","params","isAuthenticated","hasError","hasCompleted","videos","canAutoplay","el","headingRef","set","getSubTextAppLink","series","presentationAudiences","getPreviewQuestionsAppLink","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","hasMore","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","useShouldPreviewInteractive","hasProduct","useVideoMixin","objects","hydratedVideos","Set","o","getValidObjects","videoIds","request","setRequest","unhydratedVideos","has","push","add","r","newRequests","flightNamespace","bsPrefix","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","displayName"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 624-
|
|
2
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[624],{80624:(t,e,r)=>{r.r(e),r.d(e,{PlaySharedVideoViewContainer:()=>u});var n=r(32735),o=r(37802);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(){a=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",l=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,a=Object.create(i.prototype),c=new N(n||[]);return o(a,"_invoke",{value:O(t,r,c)}),a}function p(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var y="suspendedStart",v="suspendedYield",d="executing",g="completed",m={};function w(){}function b(){}function L(){}var x={};h(x,u,(function(){return this}));var E=Object.getPrototypeOf,_=E&&E(E(F([])));_&&_!==r&&n.call(_,u)&&(x=_);var S=L.prototype=w.prototype=Object.create(x);function k(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function P(t,e){function r(o,a,c,u){var l=p(t[o],t,a);if("throw"!==l.type){var f=l.arg,h=f.value;return h&&"object"==i(h)&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,c,u)}),(function(t){r("throw",t,c,u)})):e.resolve(h).then((function(t){f.value=t,c(f)}),(function(t){return r("throw",t,c,u)}))}u(l.arg)}var a;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return a=a?a.then(o,o):o()}})}function O(e,r,n){var o=y;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===g){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=j(c,n);if(u){if(u===m)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var l=p(e,r,n);if("normal"===l.type){if(o=n.done?g:v,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=g,n.method="throw",n.arg=l.arg)}}}function j(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,j(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=p(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,m;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,m):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function V(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function G(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function N(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(V,this),this.reset(!0)}function F(e){if(e||""===e){var r=e[u];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return a.next=a}}throw new TypeError(i(e)+" is not iterable")}return b.prototype=L,o(S,"constructor",{value:L,configurable:!0}),o(L,"constructor",{value:b,configurable:!0}),b.displayName=h(L,f,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,L):(t.__proto__=L,h(t,f,"GeneratorFunction")),t.prototype=Object.create(S),t},e.awrap=function(t){return{__await:t}},k(P.prototype),h(P.prototype,l,(function(){return this})),e.AsyncIterator=P,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new P(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},k(S),h(S,f,"Generator"),h(S,u,(function(){return this})),h(S,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=F,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(G),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return c.type="throw",c.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),m},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),G(r),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;G(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:F(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),m}},e}var c=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((n=n.apply(t,e||[])).next())}))};function u(t){var e=this,i=(0,o.r)(null),u=i.hasPlayPageV2,l=i.isLoadingSettings,f=n.useMemo((function(){if(!l)return n.lazy((function(){return c(e,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u?Promise.all([r.e(455),r.e(754),r.e(8176),r.e(6367),r.e(3767),r.e(4591),r.e(6572),r.e(4718),r.e(3231),r.e(671),r.e(1518),r.e(6450),r.e(322),r.e(
|
|
3
|
-
//# sourceMappingURL=624-
|
|
1
|
+
/*! For license information please see 624-09b51a9d32-lite.chunk.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[624],{80624:(t,e,r)=>{r.r(e),r.d(e,{PlaySharedVideoViewContainer:()=>u});var n=r(32735),o=r(37802);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(){a=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",l=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,a=Object.create(i.prototype),c=new N(n||[]);return o(a,"_invoke",{value:O(t,r,c)}),a}function p(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var y="suspendedStart",v="suspendedYield",d="executing",g="completed",m={};function w(){}function b(){}function L(){}var x={};h(x,u,(function(){return this}));var E=Object.getPrototypeOf,_=E&&E(E(F([])));_&&_!==r&&n.call(_,u)&&(x=_);var S=L.prototype=w.prototype=Object.create(x);function k(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function P(t,e){function r(o,a,c,u){var l=p(t[o],t,a);if("throw"!==l.type){var f=l.arg,h=f.value;return h&&"object"==i(h)&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,c,u)}),(function(t){r("throw",t,c,u)})):e.resolve(h).then((function(t){f.value=t,c(f)}),(function(t){return r("throw",t,c,u)}))}u(l.arg)}var a;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return a=a?a.then(o,o):o()}})}function O(e,r,n){var o=y;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===g){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=j(c,n);if(u){if(u===m)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var l=p(e,r,n);if("normal"===l.type){if(o=n.done?g:v,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=g,n.method="throw",n.arg=l.arg)}}}function j(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,j(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=p(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,m;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,m):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function V(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function G(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function N(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(V,this),this.reset(!0)}function F(e){if(e||""===e){var r=e[u];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return a.next=a}}throw new TypeError(i(e)+" is not iterable")}return b.prototype=L,o(S,"constructor",{value:L,configurable:!0}),o(L,"constructor",{value:b,configurable:!0}),b.displayName=h(L,f,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,L):(t.__proto__=L,h(t,f,"GeneratorFunction")),t.prototype=Object.create(S),t},e.awrap=function(t){return{__await:t}},k(P.prototype),h(P.prototype,l,(function(){return this})),e.AsyncIterator=P,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new P(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},k(S),h(S,f,"Generator"),h(S,u,(function(){return this})),h(S,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=F,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(G),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return c.type="throw",c.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),m},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),G(r),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;G(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:F(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),m}},e}var c=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((n=n.apply(t,e||[])).next())}))};function u(t){var e=this,i=(0,o.r)(null),u=i.hasPlayPageV2,l=i.isLoadingSettings,f=n.useMemo((function(){if(!l)return n.lazy((function(){return c(e,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u?Promise.all([r.e(455),r.e(754),r.e(8176),r.e(6367),r.e(3767),r.e(4591),r.e(6572),r.e(4718),r.e(3231),r.e(671),r.e(1518),r.e(6450),r.e(322),r.e(2142),r.e(1169),r.e(1019)]).then(r.bind(r,43156)):Promise.all([r.e(455),r.e(754),r.e(8176),r.e(6367),r.e(4591),r.e(6572),r.e(4718),r.e(3231),r.e(671),r.e(1518),r.e(322),r.e(184),r.e(9139),r.e(5466)]).then(r.bind(r,93978));case 2:return e=t.sent,t.abrupt("return",{default:"PlaySharedVideoViewV2"in e?e.PlaySharedVideoViewV2:e.PlaySharedVideoView});case 4:case"end":return t.stop()}}),t)})))}))}),[l]);return l?n.createElement(n.Fragment,null):n.createElement(n.Suspense,{fallback:n.createElement(n.Fragment,null)},n.createElement(f,Object.assign({},t)))}}}]);
|
|
3
|
+
//# sourceMappingURL=624-09b51a9d32-lite.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/624-
|
|
1
|
+
{"version":3,"file":"scripts/624-09b51a9d32-lite.chunk.js","mappings":";6iOAMM,SAAUA,EAA6BC,GAAyB,WACpE,GAA6C,OAAY,MAAjDC,EAAa,EAAbA,cAAeC,EAAiB,EAAjBA,kBAEjBC,EAAO,WAAc,WACzB,IAAID,EAGJ,OAAO,QAAW,kBAAW,gHACZ,OADY,SACLD,EAAgB,iMAAuC,4KAAgC,OAAjG,OAANG,EAAS,EAAH,uBACJ,CACNC,QAAS,0BAA2BD,EAClCA,EAAOE,sBACPF,EAAOG,sBACV,0CACF,GACH,GAAG,CAACL,IAEJ,OAAIA,EACK,iCAGP,gBAAC,WAAc,CAACM,SAAU,kCACxB,gBAACL,EAAI,iBAAKH,IAGhB","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-video/PlaySharedVideoViewContainer.tsx"],"sourcesContent":["import React from 'react';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoViewContainer(props: ShareLinkViewProps): JSX.Element {\n const { hasPlayPageV2, isLoadingSettings } = useSettings(null);\n\n const View = React.useMemo(() => {\n if (isLoadingSettings)\n return;\n\n return React.lazy(async () => {\n const module = await (hasPlayPageV2 ? import('./v2/PlaySharedVideoViewV2') : import('./PlaySharedVideoView'));\n return ({\n default: 'PlaySharedVideoViewV2' in module ?\n module.PlaySharedVideoViewV2 :\n module.PlaySharedVideoView\n });\n });\n }, [isLoadingSettings]);\n\n if (isLoadingSettings)\n return <></>;\n\n return (\n <React.Suspense fallback={<></>}>\n <View {...props} />\n </React.Suspense>\n );\n}"],"names":["PlaySharedVideoViewContainer","props","hasPlayPageV2","isLoadingSettings","View","module","default","PlaySharedVideoViewV2","PlaySharedVideoView","fallback"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6450],{16450:(t,e,n)=>{n.d(e,{e:()=>R,Q:()=>x});var i=n(32735),r=n(91967),a=n(82182),o=n(75896),l=n(1048),s=n(49985),c=n(88513),u=n(29420),d=n(43872),f=n(16930),m=n(31069),g=n(10841),h=n(81514),p=n(65294),y=n(10038),v=n(5859),b=n(49542),E=function(t,e,n){return function(){t.container.current&&(t.container.current.style.transition=""),e({type:g.n.Resize,payload:{elementRefs:t,mediaQuery:n}})}},P=function(t){return function(){t.current&&(t.current.style.transition="transform .4s ease-in-out")}},O=function(t,e,n,i,r){return function(a){var o=a.clientX,l=i;l||(l=Object.assign(Object.assign({},e),{initialMouseX:o}),r(l),t.current.style.transition=""),n({type:g.n.Drag,payload:{widgetSnapshot:l,currentMouseX:o}})}},S=function(t,e){return function(){t.current.style.transition="transform .4s ease-in-out",e(null)}},N=n(14244);const j={itemSpacing:"fDc_6",header:"WMgSZ",mobileScroll:"aLSzv",leftGradient:"YheD1",leftGradientNoPadding:"Vl2_g",leftButton:"ISepF",leftButtonNoPadding:"N4rAS",rightGradient:"i9XEE",rightGradientNoPadding:"APhNv",rightButton:"OxM84",rightButtonNoPadding:"nmSQo"};function L(t){return function(t){if(Array.isArray(t))return C(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||A(t)||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 B(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,r,a,o,l=[],s=!0,c=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(i=a.call(n)).done)&&(l.push(i.value),l.length!==e);s=!0);}catch(t){c=!0,r=t}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return l}}(t,e)||A(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(t,e){if(t){if("string"==typeof t)return C(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(t,e):void 0}}function C(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function R(t){var e=t.childComponent,n=t.staticChildren,v=t.getWidgetItemAnalyticsData,A=void 0===v?function(){}:v,C=B(i.useReducer(N.E,N.C),2),R=C[0],w=C[1],k=B(i.useState(null),2),D=k[0],I=k[1],M={container:i.useRef(null),firstElement:i.useRef(null),lastElement:i.useRef(null)},G=(0,h.V)(),W=a.V.isTabletOrMobile(),Q=(0,u.T)({type:"dynamic",state:R,containerRef:M.container,mediaQuery:G}),X=Q.dynamicAttributes,F=Q.focusNext,T=Q.focusPrev,_=Q.onFocusWidget,V=Q.onBlurWidget;(0,y.H)(E(M,w,G),P(M.container),[G]);var z=(0,p.Y)({prevent:!t.lazyLoad}),U=z.ref,Y=z.inView,$=t.collection;if(!t.collection&&r.q.isFunction(t.fetch)){var q=t.fetch(Y);$=q.data}i.useEffect((function(){$&&!l.t.isEmpty($)&&w({type:g.n.Init,payload:{elementRefs:M,mediaQuery:G}})}),[$]);var H=i.useMemo((function(){var r,a;if($){var l=null!==(r=null==n?void 0:n.filter((function(t){return"start"===t.position})))&&void 0!==r?r:[],s=null!==(a=null==n?void 0:n.filter((function(t){return"end"===t.position})))&&void 0!==a?a:[],c=$.map((function(n,r){var a;n===o.m.first($)&&(null==l?void 0:l.length)&&(a=M.firstElement),n!==o.m.last($)||(null==s?void 0:s.length)||(a=M.lastElement);var c=r+1===$.length;return i.createElement("li",Object.assign({id:n.id,key:n.id,ref:a,onFocus:function(){return _(r)},onBlur:function(){return V()},className:"".concat(j.itemSpacing," ").concat(t.childClassName||""," ").concat(c&&W?"pe-4":"")},X[n.id]),i.createElement(e,Object.assign({getChildAppLink:t.getChildAppLink,data:n,getSubtitle:t.getSubtitle,analyticsData:Object.assign(Object.assign({itemIndex:r},t.analyticsData),A(n)),analyticsOptions:Object.assign(Object.assign({},null==t?void 0:t.analyticsOptions),b.d.getSliderItemAnalyticsOptions())},t.childComponentProps)))}));return l.length&&(c=[].concat(L(l.map((function(e,n){var r=e.component;return i.createElement("li",{key:"first-widget-component:".concat(n),ref:0===n?M.firstElement:null,className:"".concat(j.itemSpacing," ").concat(t.childClassName||"")},i.createElement(r,null))}))),L(c))),s.length&&(c=[].concat(L(c),L(s.map((function(e,n){var r=e.component;return i.createElement("li",{key:"end-widget-component:".concat(n),ref:n===s.length-1?M.lastElement:null,className:"".concat(j.itemSpacing," ").concat(t.childClassName||"")},i.createElement(r,null))}))))),i.createElement(i.Fragment,null,c)}}),[$,X,R.offset,G].concat(L(t.widgetDataDeps||[])));if($&&!$.length&&!(null==n?void 0:n.length))return i.createElement(i.Fragment,null);if(!$||l.t.isEmpty($))return i.createElement("div",{ref:U},i.createElement(x,{partialLoadingComponent:t.partialLoadingComponent,partialLoadingOptions:t.partialLoadingOptions}));var Z=function(e){return Object.assign(Object.assign({},t.analyticsData),{name:t.heading,direction:e===g.n.Next?"right":"left"})},J=W||t.hideButtons;return i.createElement("div",{className:"".concat(t.noNegativePadding?"":"mx-n4")},i.createElement("div",{className:"px-4 ".concat(j.header)},i.createElement(c.B,{name:t.heading,description:t.description,appLink:t.headingAppLink,showSeeMoreLink:!!t.headingAppLink})),i.createElement("div",{className:"position-relative"},i.createElement("div",{className:"".concat(t.noNegativePadding?"":"px-4"," py-3 my-n3 position-relative ").concat(W?j.mobileScroll:"overflow-hidden-x")},i.createElement("div",{className:"position-relative ".concat(t.hideButtons?"overflow-hidden-x":"")},!J&&i.createElement(f.W,{direction:f.f.Left,onClick:function(){T(),w({type:g.n.Previous}),s.k.logUserAction(Z(g.n.Previous),b.d.getSliderAnalyticsOptions())},leftButtonClassName:"".concat(j.leftButton," ").concat(t.noNegativePadding?j.leftButtonNoPadding:""),leftGradientClassName:"".concat(j.leftGradient," ").concat(t.noNegativePadding?j.leftGradientNoPadding:""),hide:R.hideLeftButton,useGradientBackdrop:!0}),i.createElement(d.V,{position:R.offset,positionType:m.C.Pixels,onDrag:O(M.container,R,w,D,I),onDragEnd:S(M.container,I),ref:M.container},H),!J&&i.createElement(f.W,{direction:f.f.Right,onClick:function(){F(),w({type:g.n.Next}),s.k.logUserAction(Z(g.n.Next),b.d.getSliderAnalyticsOptions())},hide:R.hideRightButton,rightButtonClassName:"".concat(j.rightButton," ").concat(t.noNegativePadding?j.rightButtonNoPadding:""),rightGradientClassName:"".concat(j.rightGradient," ").concat(t.noNegativePadding?j.rightGradientNoPadding:""),useGradientBackdrop:!0})))))}R.defaultProps={heading:"",description:"",childComponentProps:{}};var x=function(t){var e=t.partialLoadingComponent,n=t.partialLoadingOptions;return i.createElement("div",{className:"d-flex flex-nowrap overflow-hidden"},v.u.getPartialLoadingItems(n).map((function(t,n){return i.createElement(e,{key:n})})))}},14244:(t,e,n)=>{n.d(e,{C:()=>o,E:()=>f});var i=n(86764),r=n(10841);function a(t){return t===i.r.XS?200:t===i.r.SM||t===i.r.MD?350:500}var o={offset:0,containerLeftPosition:null,containerRightPosition:null,firstElementPosition:null,lastElementPosition:null,hideLeftButton:!0,hideRightButton:!0,maxSlideDistance:0,leftOffsetLimit:null},l=function(t){var e=t.elementRefs,n=e.container,i=e.lastElement;if(!(null==n?void 0:n.current)||!(null==i?void 0:i.current))return o;var r=n.current.getBoundingClientRect(),l=r.left,s=r.right,c=l,u=i.current.getBoundingClientRect().right,d=s-u;return Object.assign(Object.assign({},o),{containerLeftPosition:l,containerRightPosition:s,firstElementPosition:c,lastElementPosition:u,hideRightButton:u<s,leftOffsetLimit:d,maxSlideDistance:a(t.mediaQuery)})},s=function(t){var e=l(Object.assign(Object.assign({},t),t.elementRefs));return Object.assign(Object.assign({},e),{maxSlideDistance:a(t.mediaQuery)})},c=function(t){var e=t.firstElementPosition,n=t.lastElementPosition,i=t.maxSlideDistance,r=t.offset,a=t.containerRightPosition,o=n-a>=i?i:n-a;return{firstElementPosition:e-o,lastElementPosition:n-o,offset:r-o,hideRightButton:n-o===a,hideLeftButton:!1}},u=function(t){var e=t.containerLeftPosition,n=t.firstElementPosition,i=t.lastElementPosition,r=t.maxSlideDistance,a=t.offset,o=n+r<=e,l=o?r:Math.abs(a);return{firstElementPosition:n+l,lastElementPosition:i+l,offset:a+l,hideLeftButton:!o||n+l===e,hideRightButton:!1}},d=function(t,e){var n=e.widgetSnapshot,i=e.currentMouseX;if(n.hideLeftButton&&n.hideRightButton)return{};var r=n.initialMouseX-i,a=n.offset-r,o=n.firstElementPosition-r,l=n.lastElementPosition-r,s=!1,c=!1;return o>t.containerLeftPosition&&(a=0,o=t.containerLeftPosition,l=t.lastElementPosition,s=!0),l<=t.containerRightPosition&&(a=t.leftOffsetLimit,o=t.containerLeftPosition-Math.abs(t.leftOffsetLimit),l=n.containerRightPosition,c=!0),{offset:a,firstElementPosition:o,lastElementPosition:l,hideLeftButton:s,hideRightButton:c}};function f(t,e){switch(e.type){case r.n.Init:return Object.assign(Object.assign({},t),l(e.payload));case r.n.Resize:return Object.assign(Object.assign({},t),s(e.payload));case r.n.Next:return Object.assign(Object.assign({},t),c(t));case r.n.Previous:return Object.assign(Object.assign({},t),u(t));case r.n.Drag:return Object.assign(Object.assign({},t),d(t,e.payload));default:return t}}},5859:(t,e,n)=>{function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}n.d(e,{u:()=>a});var r={numItems:5,minWidth:50,maxWidth:100},a={getPartialLoadingItems:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},r),e);return(t=Array(n.numItems),function(t){if(Array.isArray(t))return i(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return i(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}(t)||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.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}}}]);
|
|
2
|
+
//# sourceMappingURL=6450-f16821bf09-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/6450-f16821bf09-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetEventHandlers.ts","file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/dynamic-widget.scss","file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/DynamicWidget.tsx","file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetReducer.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts"],"sourcesContent":["import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nimport { DynamicWidgetState } from './DynamicWidgetReducer';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\n/**\n * Resize events\n */\nexport const getResizeHandler = (\n elementRefs: SlidingListRefs,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n mediaQuery: MediaQueryStrings\n) => () => {\n if (elementRefs.container.current)\n elementRefs.container.current.style.transition = '';\n\n dispatch({\n type: WidgetInteraction.Resize,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n};\n\nexport const getResizeEndHandler = (containerRef: React.MutableRefObject<HTMLUListElement>) => () => {\n if (containerRef.current)\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n};\n\nexport const getDragHandler = (\n containerRef: React.MutableRefObject<HTMLUListElement>,\n widgetState: DynamicWidgetState,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n widgetSnapshot: WidgetSnapshot,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => (event: React.DragEvent<HTMLUListElement>): void => {\n const mouseX = event.clientX;\n\n let snapshot = widgetSnapshot;\n\n if (!snapshot) {\n snapshot = { ...widgetState, initialMouseX: mouseX };\n setWidgetSnapshot(snapshot);\n containerRef.current.style.transition = '';\n }\n\n dispatch({\n type: WidgetInteraction.Drag,\n payload: {\n widgetSnapshot: snapshot,\n currentMouseX: mouseX\n }\n });\n};\n\nexport const getDragEndHandler = (\n containerRef: React.MutableRefObject<HTMLUListElement>,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => () => {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setWidgetSnapshot(null);\n};","// extracted by mini-css-extract-plugin\nexport default {\"itemSpacing\":\"fDc_6\",\"header\":\"WMgSZ\",\"mobileScroll\":\"aLSzv\",\"leftGradient\":\"YheD1\",\"leftGradientNoPadding\":\"Vl2_g\",\"leftButton\":\"ISepF\",\"leftButtonNoPadding\":\"N4rAS\",\"rightGradient\":\"i9XEE\",\"rightGradientNoPadding\":\"APhNv\",\"rightButton\":\"OxM84\",\"rightButtonNoPadding\":\"nmSQo\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { useWidgetKeyboard } from 'libs/shared/components/widgets/hooks/useWidgetKeyboard';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { useGetMediaQueryString } from 'libs/shared/hooks/UseGetMediaQueryString';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\nimport { PartialLoadingHelper, PartialLoadingOptions } from 'libs/shared/utils/PartialLoadingHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { getDragEndHandler, getDragHandler, getResizeEndHandler, getResizeHandler } from './DynamicWidgetEventHandlers';\nimport { DynamicWidgetReducer, DynamicWidgetState, initialSliderState } from './DynamicWidgetReducer';\n\nimport styles from './dynamic-widget.scss';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\ninterface StaticChild {\n position: 'start' | 'end';\n component: React.ElementType;\n}\n\ninterface DynamicWidgetProps {\n childComponent: React.ElementType;\n childComponentProps?: any;\n partialLoadingComponent: React.ElementType;\n partialLoadingOptions?: PartialLoadingOptions;\n\n widgetDataDeps?: (any)[];\n getChildAppLink?: (data: any) => Core.AppLink;\n\n staticChildren?: StaticChild[];\n collection?: BaseObject[];\n fetch?: (...args: any[]) => any;\n lazyLoad?: boolean;\n\n heading?: string;\n headingAppLink?: Core.AppLink;\n description?: string;\n getSubtitle?: (data: any) => string\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n hideButtons?: boolean;\n childClassName?: string;\n // set to true if the widget get cut off by the container\n noNegativePadding?: boolean;\n}\n\nDynamicWidget.defaultProps = {\n heading: '',\n description: '',\n childComponentProps: {}\n};\n\nexport function DynamicWidget(props: DynamicWidgetProps): JSX.Element {\n const { childComponent: WidgetItemComponent, staticChildren, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ state, dispatch ] = React.useReducer(DynamicWidgetReducer, initialSliderState);\n\n // A snapshot of the widget state is captured on the very first `Drag` event as a point of reference\n const [ widgetSnapshot, setWidgetSnapshot ] = React.useState<WidgetSnapshot>(null);\n\n const elementRefs: SlidingListRefs = {\n container: React.useRef(null),\n firstElement: React.useRef(null),\n lastElement: React.useRef(null)\n };\n\n const mediaQuery = useGetMediaQueryString();\n const isTouchScreen = UserAgentHelper.isTabletOrMobile();\n \n const { dynamicAttributes, focusNext, focusPrev, onFocusWidget, onBlurWidget } = useWidgetKeyboard({ type: 'dynamic', state, containerRef: elementRefs.container, mediaQuery });\n\n useResizeListener(\n getResizeHandler(elementRefs, dispatch, mediaQuery),\n getResizeEndHandler(elementRefs.container),\n [mediaQuery]\n );\n\n const { ref, inView } = useLazyLoad({ prevent: !props.lazyLoad });\n\n let widgetData = props.collection;\n\n if (!props.collection && FunctionHelper.isFunction(props.fetch)) {\n const request = props.fetch(inView);\n widgetData = request.data;\n }\n\n /**\n * Once the widget data has been set, we can initialize the reducer. This is because\n * the reducer depends on the refs being set, but they don't get set until the markup has been loaded.\n */\n React.useEffect(() => {\n if (!widgetData || ObjectHelper.isEmpty(widgetData))\n return;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n }, [widgetData]);\n\n function getWidgetItems(): JSX.Element {\n if (!widgetData)\n return;\n\n const firstChildren = staticChildren?.filter(child => child.position === 'start') ?? [];\n const lastChildren = staticChildren?.filter(child => child.position === 'end') ?? [];\n\n let items = widgetData.map((widgetItem, index) => {\n let itemRef: React.MutableRefObject<HTMLLIElement>;\n\n if (widgetItem === ArrayHelper.first(widgetData) && firstChildren?.length)\n itemRef = elementRefs.firstElement;\n\n if (widgetItem === ArrayHelper.last(widgetData) && !lastChildren?.length)\n itemRef = elementRefs.lastElement;\n\n const isLast = index + 1 === widgetData.length;\n\n return (\n <li\n id={widgetItem.id}\n key={widgetItem.id}\n ref={itemRef}\n onFocus={() => onFocusWidget(index)}\n onBlur={() => onBlurWidget()}\n className={`${styles.itemSpacing} ${props.childClassName || ''} ${(isLast && isTouchScreen) ? 'pe-4' : ''}`}\n {...dynamicAttributes[widgetItem.id]}\n >\n <WidgetItemComponent\n getChildAppLink={props.getChildAppLink}\n data={widgetItem}\n getSubtitle={props.getSubtitle}\n analyticsData={{\n itemIndex: index,\n ...props.analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props?.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n {...props.childComponentProps}\n />\n </li>\n );\n });\n\n if (firstChildren.length) {\n items = [\n ...firstChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <li\n key={`first-widget-component:${i}`}\n ref={i === 0 ? elementRefs.firstElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </li>\n );\n }),\n ...items\n ];\n }\n\n if (lastChildren.length) {\n items = [\n ...items,\n ...lastChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <li\n key={`end-widget-component:${i}`}\n ref={i === lastChildren.length - 1 ? elementRefs.lastElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </li>\n );\n })\n ];\n }\n\n return <>{items}</>;\n }\n const widgetItems = React.useMemo(getWidgetItems, [\n widgetData, dynamicAttributes, state.offset, mediaQuery, ...props.widgetDataDeps || []\n ]);\n\n if (widgetData && !widgetData.length && !staticChildren?.length)\n return <></>;\n\n if (!widgetData || ObjectHelper.isEmpty(widgetData)) {\n return (\n <div ref={ref}>\n <PartialDynamicWidget\n partialLoadingComponent={props.partialLoadingComponent}\n partialLoadingOptions={props.partialLoadingOptions}\n />\n </div>\n );\n }\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n ...props.analyticsData,\n name: props.heading,\n direction: type === WidgetInteraction.Next ? 'right' : 'left'\n });\n\n const hideButtons = isTouchScreen || props.hideButtons;\n\n return (\n <div className={`${props.noNegativePadding ? '' : 'mx-n4'}`}>\n <div className={`px-4 ${styles.header}`}>\n <WidgetHeader\n name={props.heading}\n description={props.description}\n appLink={props.headingAppLink}\n showSeeMoreLink={!!props.headingAppLink}\n />\n </div>\n\n <div className='position-relative'>\n <div className={`${props.noNegativePadding ? '' : 'px-4' } py-3 my-n3 position-relative ${isTouchScreen ? styles.mobileScroll : 'overflow-hidden-x'}`}>\n <div className={`position-relative ${props.hideButtons ? 'overflow-hidden-x' : ''}`}>\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n focusPrev();\n\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n leftButtonClassName={`${styles.leftButton} ${props.noNegativePadding ? styles.leftButtonNoPadding : ''}`}\n leftGradientClassName={`${styles.leftGradient} ${props.noNegativePadding ? styles.leftGradientNoPadding : ''}`}\n hide={state.hideLeftButton}\n useGradientBackdrop\n />\n )}\n\n <SlidingListContainer\n position={state.offset}\n positionType={CssMeasurement.Pixels}\n onDrag={getDragHandler(elementRefs.container, state, dispatch, widgetSnapshot, setWidgetSnapshot)}\n onDragEnd={getDragEndHandler(elementRefs.container, setWidgetSnapshot)}\n ref={elementRefs.container}\n >\n {widgetItems}\n </SlidingListContainer>\n\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n focusNext();\n\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n hide={state.hideRightButton}\n rightButtonClassName={`${styles.rightButton} ${props.noNegativePadding ? styles.rightButtonNoPadding : ''}`}\n rightGradientClassName={`${styles.rightGradient} ${props.noNegativePadding ? styles.rightGradientNoPadding : ''}`}\n useGradientBackdrop\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\ntype PartialDynamicWidgetProps = Pick<DynamicWidgetProps, 'partialLoadingComponent'> & {\n partialLoadingOptions?: PartialLoadingOptions;\n}\n\nexport const PartialDynamicWidget = (props: PartialDynamicWidgetProps) => {\n const { partialLoadingComponent: Component, partialLoadingOptions } = props;\n\n return (\n <div className='d-flex flex-nowrap overflow-hidden'>\n {PartialLoadingHelper.getPartialLoadingItems(partialLoadingOptions).map((item, idx) => <Component key={idx} />)}\n </div>\n );\n};","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nexport interface DynamicWidgetState {\n /**\n * X-position argument for `translate3d()` to determine where the slider is positioned.\n */\n offset: number;\n\n /**\n * Left position of the slider container.\n * Set on `Init`, and updated on `Resize`.\n * Used for calculations on `Previous`, or for dragging to the right.\n */\n containerLeftPosition: number;\n\n /**\n * Right position of the slider container.\n * Set on Init, and updated on Resize.\n * Used for calculations on `Next`, or for dragging to the left.\n */\n containerRightPosition: number;\n\n /**\n * The position of the left edge of the very first element in the slider list.\n * Initially this will always be equal to `containerLeftPosition`.\n */\n firstElementPosition: number;\n\n /**\n * The position of the right edge of the very last element in the slider list.\n */\n lastElementPosition: number;\n\n /**\n * True when `firstElementPosition === containerLeftPosition`.\n */\n hideLeftButton: boolean;\n\n /**\n * True when `lastElementPositon === containerRightPosition`.\n */\n hideRightButton: boolean;\n\n /**\n * When clicking left or right, this number is the max distance in pixels that the slider.\n * will move.\n * Default 300.\n * Can only be set once on `Init` action.\n */\n maxSlideDistance: number;\n\n /**\n * This is calculated on `Init`, and is the lowest number the `offset` state can ever be.\n * This is needed for the `Drag` event, as the `Drag` event can only calculate whole numbers.\n * 99% of the time, the leftOffsetLimit is a very specific decimal number, so we calculate it\n * on `Init` and reference it on `Drag` events when necessary.\n */\n leftOffsetLimit: number;\n}\n\nfunction getMaxSlideDistance(mediaQuery: MediaQueryStrings): number {\n if (mediaQuery === MediaQueryStrings.XS)\n return 200;\n\n if (mediaQuery === MediaQueryStrings.SM || mediaQuery === MediaQueryStrings.MD)\n return 350;\n\n return 500;\n}\n\n/**\n * `null` values are initialized in the `Init` action. This is dispatched\n * later, because it uses JQuery elements that aren't immediately available\n * when `useReducer` is called.\n */\nexport const initialSliderState: DynamicWidgetState = {\n offset: 0,\n containerLeftPosition: null,\n containerRightPosition: null,\n firstElementPosition: null,\n lastElementPosition: null,\n hideLeftButton: true,\n hideRightButton: true,\n maxSlideDistance: 0,\n leftOffsetLimit: null\n};\n\ninterface InitPayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onInit = (payload: InitPayload): DynamicWidgetState => {\n const { container, lastElement } = payload.elementRefs;\n\n if (!container?.current || !lastElement?.current)\n return initialSliderState;\n\n const containerRect = container.current.getBoundingClientRect();\n const containerLeftPosition = containerRect.left;\n const containerRightPosition = containerRect.right;\n\n const firstElementPosition = containerLeftPosition;\n const lastElementPosition = lastElement.current.getBoundingClientRect().right;\n const leftOffsetLimit = containerRightPosition - lastElementPosition;\n\n return {\n ...initialSliderState,\n containerLeftPosition,\n containerRightPosition,\n firstElementPosition,\n lastElementPosition,\n hideRightButton: lastElementPosition < containerRightPosition,\n leftOffsetLimit,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\ninterface ResizePayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onResize = (payload: ResizePayload): DynamicWidgetState => {\n const initialState = onInit({\n ...payload,\n ...payload.elementRefs\n });\n\n return {\n ...initialState,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\nconst onNext = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { firstElementPosition, lastElementPosition, maxSlideDistance, offset, containerRightPosition } = prevState;\n\n /**\n * The distance in pixels that the slider will move along the x-axis.\n * This will be the `maxSlideDistance` constant value, or if that value is too large we calculate\n * the remaining overflowing space and only slide by that amount.\n */\n const slideDistance = lastElementPosition - containerRightPosition >= maxSlideDistance\n ? maxSlideDistance\n : lastElementPosition - containerRightPosition;\n\n return {\n firstElementPosition: firstElementPosition - slideDistance,\n lastElementPosition: lastElementPosition - slideDistance,\n offset: offset - slideDistance,\n hideRightButton: lastElementPosition - slideDistance === containerRightPosition,\n hideLeftButton: false\n };\n};\n\nconst onPrevious = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { containerLeftPosition, firstElementPosition, lastElementPosition, maxSlideDistance, offset } = prevState;\n\n const fullSlide = firstElementPosition + maxSlideDistance <= containerLeftPosition;\n const slideDistance = fullSlide ? maxSlideDistance : Math.abs(offset);\n\n return {\n firstElementPosition: firstElementPosition + slideDistance,\n lastElementPosition: lastElementPosition + slideDistance,\n offset: offset + slideDistance,\n hideLeftButton: !fullSlide || firstElementPosition + slideDistance === containerLeftPosition,\n hideRightButton: false\n };\n};\n\nconst onDrag = (prevState: DynamicWidgetState, payload: any): Partial<DynamicWidgetState> => {\n const { widgetSnapshot, currentMouseX } = payload;\n\n // Disable dragging if the slider isn't long enough\n if (widgetSnapshot.hideLeftButton && widgetSnapshot.hideRightButton)\n return {};\n\n // The distance from the initial `MouseDown` event x-coordinate, to the present x-coordinate\n const dragDistance = widgetSnapshot.initialMouseX - currentMouseX;\n\n let offset = widgetSnapshot.offset - dragDistance;\n let firstElementPosition = widgetSnapshot.firstElementPosition - dragDistance;\n let lastElementPosition = widgetSnapshot.lastElementPosition - dragDistance;\n let hideLeftButton = false;\n let hideRightButton = false;\n\n if (firstElementPosition > prevState.containerLeftPosition) {\n offset = 0;\n firstElementPosition = prevState.containerLeftPosition;\n lastElementPosition = prevState.lastElementPosition;\n hideLeftButton = true;\n }\n\n if (lastElementPosition <= prevState.containerRightPosition) {\n offset = prevState.leftOffsetLimit;\n firstElementPosition = prevState.containerLeftPosition - Math.abs(prevState.leftOffsetLimit);\n lastElementPosition = widgetSnapshot.containerRightPosition;\n hideRightButton = true;\n }\n\n return {\n offset,\n firstElementPosition,\n lastElementPosition,\n hideLeftButton,\n hideRightButton\n };\n};\n\nexport function DynamicWidgetReducer(\n prevState: DynamicWidgetState,\n action: ReducerActions<WidgetInteraction>\n): DynamicWidgetState {\n switch (action.type) {\n case WidgetInteraction.Init:\n return {\n ...prevState,\n ...onInit(action.payload)\n };\n\n case WidgetInteraction.Resize:\n return {\n ...prevState,\n ...onResize(action.payload)\n };\n\n case WidgetInteraction.Next:\n return {\n ...prevState,\n ...onNext(prevState)\n };\n\n case WidgetInteraction.Previous:\n return {\n ...prevState,\n ...onPrevious(prevState)\n };\n\n case WidgetInteraction.Drag:\n return {\n ...prevState,\n ...onDrag(prevState, action.payload)\n };\n\n default:\n return prevState;\n }\n}","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};"],"names":["getResizeHandler","elementRefs","dispatch","mediaQuery","container","current","style","transition","type","WidgetInteraction","payload","getResizeEndHandler","containerRef","getDragHandler","widgetState","widgetSnapshot","setWidgetSnapshot","event","mouseX","clientX","snapshot","initialMouseX","currentMouseX","getDragEndHandler","DynamicWidget","props","WidgetItemComponent","childComponent","staticChildren","getWidgetItemAnalyticsData","DynamicWidgetReducer","state","firstElement","lastElement","isTouchScreen","UserAgentHelper","useWidgetKeyboard","dynamicAttributes","focusNext","focusPrev","onFocusWidget","onBlurWidget","prevent","lazyLoad","ref","inView","widgetData","collection","FunctionHelper","fetch","request","data","ObjectHelper","widgetItems","firstChildren","filter","child","position","lastChildren","items","map","widgetItem","index","itemRef","ArrayHelper","length","isLast","id","key","onFocus","onBlur","className","childClassName","getChildAppLink","getSubtitle","analyticsData","itemIndex","analyticsOptions","WidgetHelper","childComponentProps","i","Component","component","offset","widgetDataDeps","PartialDynamicWidget","partialLoadingComponent","partialLoadingOptions","getSliderAnalyticsData","name","heading","direction","hideButtons","noNegativePadding","WidgetHeader","description","appLink","headingAppLink","showSeeMoreLink","WidgetButton","W","onClick","AnalyticsHelper","leftButtonClassName","leftGradientClassName","hide","hideLeftButton","useGradientBackdrop","SlidingListContainer","positionType","CssMeasurement","C","onDrag","onDragEnd","hideRightButton","rightButtonClassName","rightGradientClassName","defaultProps","PartialLoadingHelper","item","idx","getMaxSlideDistance","initialSliderState","containerLeftPosition","containerRightPosition","firstElementPosition","lastElementPosition","maxSlideDistance","leftOffsetLimit","onInit","containerRect","getBoundingClientRect","left","right","onResize","initialState","onNext","prevState","slideDistance","onPrevious","fullSlide","Math","abs","dragDistance","action","DEFAULT_PARTIAL_LOADING_OPTIONS","numItems","minWidth","maxWidth","getPartialLoadingItems","options","opts","Array","width","max","floor","random"],"sourceRoot":""}
|