@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.
Files changed (188) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{6094-lite-bcd14ea6d2.chunk.css → 1019-lite-bbcf2bff27.chunk.css} +3 -2
  3. package/dist/css/{1329-lite-be86e46c78.chunk.css → 1329-lite-458183b24f.chunk.css} +2 -2
  4. package/dist/css/{1838-lite-e6a28b84ed.chunk.css → 1838-lite-981a5e0783.chunk.css} +1 -1
  5. package/dist/css/{1760-lite-bcd14ea6d2.chunk.css → 2548-lite-bbcf2bff27.chunk.css} +3 -2
  6. package/dist/css/{3969-lite-29e14c7861.chunk.css → 3969-lite-ed58852d97.chunk.css} +2 -2
  7. package/dist/css/{422-lite-dace5f41de.chunk.css → 422-lite-b8c1fd1dee.chunk.css} +1 -1
  8. package/dist/css/{4502-lite-92be6697e7.chunk.css → 4502-lite-eaf1a1113c.chunk.css} +1 -1
  9. package/dist/css/{5220-lite-9832e2c2fb.chunk.css → 5220-lite-8a8d5d035f.chunk.css} +1 -1
  10. package/dist/css/{537-lite-56a3fc7e48.chunk.css → 537-lite-4de4c47713.chunk.css} +1 -1
  11. package/dist/css/{6489-lite-9045df4bb9.chunk.css → 6489-lite-e271aaed2d.chunk.css} +1 -1
  12. package/dist/css/{6544-lite-d46c2d634c.chunk.css → 6544-lite-319ed51ccc.chunk.css} +1 -1
  13. package/dist/css/{5549-lite-97ed26d0aa.chunk.css → 6596-lite-bb28584922.chunk.css} +2 -1
  14. package/dist/css/{841-lite-27b6485cd1.chunk.css → 841-lite-46ef623835.chunk.css} +1 -1
  15. package/dist/css/{8522-lite-2f2797038e.chunk.css → 8522-lite-f100606ec5.chunk.css} +1 -1
  16. package/dist/css/{8801-lite-c88eb54bee.chunk.css → 8801-lite-d34200ab29.chunk.css} +2 -2
  17. package/dist/css/{3640-lite-97ed26d0aa.chunk.css → 9010-lite-bb28584922.chunk.css} +2 -1
  18. package/dist/languages/en.json +1 -1
  19. package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js → 1019-8f977b5095-lite.chunk.js} +2 -2
  20. package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js.map → 1019-8f977b5095-lite.chunk.js.map} +1 -1
  21. package/dist/scripts/1080-509aa6e738-lite.chunk.js +2 -0
  22. package/dist/scripts/1080-509aa6e738-lite.chunk.js.map +1 -0
  23. package/dist/scripts/1169-e64f0dbd67-lite.chunk.js +2 -0
  24. package/dist/scripts/1169-e64f0dbd67-lite.chunk.js.map +1 -0
  25. package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js +3 -0
  26. package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{1379-976d20185f-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
  28. package/dist/scripts/{1379-976d20185f-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/1518-4f76dbeee8-lite.chunk.js +2 -0
  30. package/dist/scripts/1518-4f76dbeee8-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js → 1838-95081e8dea-lite.chunk.js} +1 -1
  32. package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js.map → 1838-95081e8dea-lite.chunk.js.map} +1 -1
  33. package/dist/scripts/184-6ce393c251-lite.chunk.js +2 -0
  34. package/dist/scripts/184-6ce393c251-lite.chunk.js.map +1 -0
  35. package/dist/scripts/{2004-3005565af0-lite.chunk.js → 2004-e20d72976c-lite.chunk.js} +3 -3
  36. package/dist/scripts/{2004-3005565af0-lite.chunk.js.map → 2004-e20d72976c-lite.chunk.js.map} +1 -1
  37. package/dist/scripts/{2094-58390aa60a-lite.chunk.js → 2094-a16bbca3a3-lite.chunk.js} +2 -2
  38. package/dist/scripts/2094-a16bbca3a3-lite.chunk.js.map +1 -0
  39. package/dist/scripts/2142-c46ca4050f-lite.chunk.js +2 -0
  40. package/dist/scripts/2142-c46ca4050f-lite.chunk.js.map +1 -0
  41. package/dist/scripts/2199-be40da7440-lite.chunk.js +2 -0
  42. package/dist/scripts/2199-be40da7440-lite.chunk.js.map +1 -0
  43. package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js +2 -0
  44. package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js.map +1 -0
  45. package/dist/scripts/3969-6d7c342d0c-lite.chunk.js +2 -0
  46. package/dist/scripts/3969-6d7c342d0c-lite.chunk.js.map +1 -0
  47. package/dist/scripts/3999-317a4538c6-lite.chunk.js +3 -0
  48. package/dist/scripts/3999-317a4538c6-lite.chunk.js.map +1 -0
  49. package/dist/scripts/{422-ee640f76c5-lite.chunk.js → 422-a63a7eb901-lite.chunk.js} +1 -1
  50. package/dist/scripts/{422-ee640f76c5-lite.chunk.js.map → 422-a63a7eb901-lite.chunk.js.map} +1 -1
  51. package/dist/scripts/{4502-af4903784e-lite.chunk.js → 4502-a7d60fa257-lite.chunk.js} +1 -1
  52. package/dist/scripts/{4502-af4903784e-lite.chunk.js.map → 4502-a7d60fa257-lite.chunk.js.map} +1 -1
  53. package/dist/scripts/{4554-c0d7490a46-lite.chunk.js → 4554-b9aa07891f-lite.chunk.js} +2 -2
  54. package/dist/scripts/4554-b9aa07891f-lite.chunk.js.map +1 -0
  55. package/dist/scripts/{4591-379f0fe588-lite.chunk.js → 4591-21c0094f28-lite.chunk.js} +2 -2
  56. package/dist/scripts/{4591-379f0fe588-lite.chunk.js.map → 4591-21c0094f28-lite.chunk.js.map} +1 -1
  57. package/dist/scripts/{4683-ce52da47d8-lite.chunk.js → 4683-d3afe2dfa8-lite.chunk.js} +2 -2
  58. package/dist/scripts/4683-d3afe2dfa8-lite.chunk.js.map +1 -0
  59. package/dist/scripts/5220-291b2243ad-lite.chunk.js +3 -0
  60. package/dist/scripts/5220-291b2243ad-lite.chunk.js.map +1 -0
  61. package/dist/scripts/537-6efb9bc099-lite.chunk.js +3 -0
  62. package/dist/scripts/537-6efb9bc099-lite.chunk.js.map +1 -0
  63. package/dist/scripts/5660-6711768c20-lite.chunk.js +2 -0
  64. package/dist/scripts/5660-6711768c20-lite.chunk.js.map +1 -0
  65. package/dist/scripts/5936-e839cb8193-lite.chunk.js +2 -0
  66. package/dist/scripts/5936-e839cb8193-lite.chunk.js.map +1 -0
  67. package/dist/scripts/{624-bf0ff6257f-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
  68. package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
  69. package/dist/scripts/6450-f16821bf09-lite.chunk.js +2 -0
  70. package/dist/scripts/6450-f16821bf09-lite.chunk.js.map +1 -0
  71. package/dist/scripts/6489-c242844567-lite.chunk.js +3 -0
  72. package/dist/scripts/6489-c242844567-lite.chunk.js.map +1 -0
  73. package/dist/scripts/6544-07898e3fa3-lite.chunk.js +2 -0
  74. package/dist/scripts/6544-07898e3fa3-lite.chunk.js.map +1 -0
  75. package/dist/scripts/6596-848fbf79bb-lite.chunk.js +2 -0
  76. package/dist/scripts/6596-848fbf79bb-lite.chunk.js.map +1 -0
  77. package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js → 6741-fe09fea334-lite.chunk.js} +3 -3
  78. package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.map → 6741-fe09fea334-lite.chunk.js.map} +1 -1
  79. package/dist/scripts/6752-0d139a6c9a-lite.chunk.js +2 -0
  80. package/dist/scripts/6752-0d139a6c9a-lite.chunk.js.map +1 -0
  81. package/dist/scripts/696-fa78eb455f-lite.chunk.js +2 -0
  82. package/dist/scripts/696-fa78eb455f-lite.chunk.js.map +1 -0
  83. package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js → 7234-d15fe07f0e-lite.chunk.js} +2 -2
  84. package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js.map → 7234-d15fe07f0e-lite.chunk.js.map} +1 -1
  85. package/dist/scripts/729-594be12089-lite.chunk.js +2 -0
  86. package/dist/scripts/729-594be12089-lite.chunk.js.map +1 -0
  87. package/dist/scripts/{7293-3e6ad36a7a-lite.chunk.js → 7293-35871fc150-lite.chunk.js} +2 -2
  88. package/dist/scripts/7293-35871fc150-lite.chunk.js.map +1 -0
  89. package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js → 8192-eb7054ccc6-lite.chunk.js} +2 -2
  90. package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js.map → 8192-eb7054ccc6-lite.chunk.js.map} +1 -1
  91. package/dist/scripts/841-11af1334bf-lite.chunk.js +3 -0
  92. package/dist/scripts/841-11af1334bf-lite.chunk.js.map +1 -0
  93. package/dist/scripts/{8522-b4b217640c-lite.chunk.js → 8522-8e9c576bf6-lite.chunk.js} +1 -1
  94. package/dist/scripts/{8522-b4b217640c-lite.chunk.js.map → 8522-8e9c576bf6-lite.chunk.js.map} +1 -1
  95. package/dist/scripts/8801-3a7652eb35-lite.chunk.js +2 -0
  96. package/dist/scripts/8801-3a7652eb35-lite.chunk.js.map +1 -0
  97. package/dist/scripts/9010-ef7ea501ee-lite.chunk.js +2 -0
  98. package/dist/scripts/9010-ef7ea501ee-lite.chunk.js.map +1 -0
  99. package/dist/scripts/9139-22fb64f542-lite.chunk.js +2 -0
  100. package/dist/scripts/9139-22fb64f542-lite.chunk.js.map +1 -0
  101. package/dist/scripts/9173-e45847aa35-lite.chunk.js +2 -0
  102. package/dist/scripts/9173-e45847aa35-lite.chunk.js.map +1 -0
  103. package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
  104. package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
  105. package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js → 9478-13da35c4ee-lite.chunk.js} +3 -3
  106. package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.map → 9478-13da35c4ee-lite.chunk.js.map} +1 -1
  107. package/dist/scripts/{953-bf3d621a33-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
  108. package/dist/scripts/{953-bf3d621a33-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
  109. package/dist/scripts/{9899-68b030d4e2-lite.chunk.js → 9899-fa58471776-lite.chunk.js} +2 -2
  110. package/dist/scripts/{9899-68b030d4e2-lite.chunk.js.map → 9899-fa58471776-lite.chunk.js.map} +1 -1
  111. package/dist/scripts/bundle-7f9a9b650d.min.js +3 -0
  112. package/dist/scripts/bundle-7f9a9b650d.min.js.map +1 -0
  113. package/package.json +1 -1
  114. package/dist/scripts/1080-4173ce26bd-lite.chunk.js +0 -2
  115. package/dist/scripts/1080-4173ce26bd-lite.chunk.js.map +0 -1
  116. package/dist/scripts/1169-d090f0a147-lite.chunk.js +0 -2
  117. package/dist/scripts/1169-d090f0a147-lite.chunk.js.map +0 -1
  118. package/dist/scripts/1329-d48379c043-lite.chunk.js +0 -3
  119. package/dist/scripts/1329-d48379c043-lite.chunk.js.map +0 -1
  120. package/dist/scripts/1518-9756fde01e-lite.chunk.js +0 -2
  121. package/dist/scripts/1518-9756fde01e-lite.chunk.js.map +0 -1
  122. package/dist/scripts/184-ee581fa2e0-lite.chunk.js +0 -2
  123. package/dist/scripts/184-ee581fa2e0-lite.chunk.js.map +0 -1
  124. package/dist/scripts/2094-58390aa60a-lite.chunk.js.map +0 -1
  125. package/dist/scripts/2199-476ac5922f-lite.chunk.js +0 -2
  126. package/dist/scripts/2199-476ac5922f-lite.chunk.js.map +0 -1
  127. package/dist/scripts/3640-1ac0a110f4-lite.chunk.js +0 -2
  128. package/dist/scripts/3640-1ac0a110f4-lite.chunk.js.map +0 -1
  129. package/dist/scripts/3969-c0160d0139-lite.chunk.js +0 -2
  130. package/dist/scripts/3969-c0160d0139-lite.chunk.js.map +0 -1
  131. package/dist/scripts/4063-786732e7b0-lite.chunk.js +0 -2
  132. package/dist/scripts/4063-786732e7b0-lite.chunk.js.map +0 -1
  133. package/dist/scripts/4273-de24896b28-lite.chunk.js +0 -3
  134. package/dist/scripts/4273-de24896b28-lite.chunk.js.map +0 -1
  135. package/dist/scripts/4554-c0d7490a46-lite.chunk.js.map +0 -1
  136. package/dist/scripts/4683-ce52da47d8-lite.chunk.js.map +0 -1
  137. package/dist/scripts/4850-5ddd277550-lite.chunk.js +0 -2
  138. package/dist/scripts/4850-5ddd277550-lite.chunk.js.map +0 -1
  139. package/dist/scripts/5220-85898810a6-lite.chunk.js +0 -3
  140. package/dist/scripts/5220-85898810a6-lite.chunk.js.map +0 -1
  141. package/dist/scripts/537-de7445d41a-lite.chunk.js +0 -3
  142. package/dist/scripts/537-de7445d41a-lite.chunk.js.map +0 -1
  143. package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js +0 -2
  144. package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js.map +0 -1
  145. package/dist/scripts/5660-a356acdbca-lite.chunk.js +0 -2
  146. package/dist/scripts/5660-a356acdbca-lite.chunk.js.map +0 -1
  147. package/dist/scripts/5936-92d9cea005-lite.chunk.js +0 -2
  148. package/dist/scripts/5936-92d9cea005-lite.chunk.js.map +0 -1
  149. package/dist/scripts/6094-8546003d79-lite.chunk.js +0 -2
  150. package/dist/scripts/6094-8546003d79-lite.chunk.js.map +0 -1
  151. package/dist/scripts/6450-601f889072-lite.chunk.js +0 -2
  152. package/dist/scripts/6450-601f889072-lite.chunk.js.map +0 -1
  153. package/dist/scripts/6489-532a022587-lite.chunk.js +0 -3
  154. package/dist/scripts/6489-532a022587-lite.chunk.js.map +0 -1
  155. package/dist/scripts/6544-ae27efabab-lite.chunk.js +0 -2
  156. package/dist/scripts/6544-ae27efabab-lite.chunk.js.map +0 -1
  157. package/dist/scripts/6752-5dddab5e0b-lite.chunk.js +0 -2
  158. package/dist/scripts/6752-5dddab5e0b-lite.chunk.js.map +0 -1
  159. package/dist/scripts/6852-9dfd47d085-lite.chunk.js +0 -2
  160. package/dist/scripts/6852-9dfd47d085-lite.chunk.js.map +0 -1
  161. package/dist/scripts/7293-3e6ad36a7a-lite.chunk.js.map +0 -1
  162. package/dist/scripts/841-73ef4ba5ec-lite.chunk.js +0 -3
  163. package/dist/scripts/841-73ef4ba5ec-lite.chunk.js.map +0 -1
  164. package/dist/scripts/8801-222a1b2e99-lite.chunk.js +0 -2
  165. package/dist/scripts/8801-222a1b2e99-lite.chunk.js.map +0 -1
  166. package/dist/scripts/9139-49023800c6-lite.chunk.js +0 -2
  167. package/dist/scripts/9139-49023800c6-lite.chunk.js.map +0 -1
  168. package/dist/scripts/9173-f9708ec0de-lite.chunk.js +0 -2
  169. package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +0 -1
  170. package/dist/scripts/bundle-e72459b30e.min.js +0 -3
  171. package/dist/scripts/bundle-e72459b30e.min.js.map +0 -1
  172. /package/dist/css/{4273-lite-a3c7435ba4.chunk.css → 3999-lite-a3c7435ba4.chunk.css} +0 -0
  173. /package/dist/css/{4063-lite-f72fc7b813.chunk.css → 4860-lite-f72fc7b813.chunk.css} +0 -0
  174. /package/dist/css/{4850-lite-f72fc7b813.chunk.css → 729-lite-f72fc7b813.chunk.css} +0 -0
  175. /package/dist/scripts/{1329-d48379c043-lite.chunk.js.LICENSE.txt → 1329-bdbbf6c7fd-lite.chunk.js.LICENSE.txt} +0 -0
  176. /package/dist/scripts/{1379-976d20185f-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
  177. /package/dist/scripts/{2004-3005565af0-lite.chunk.js.LICENSE.txt → 2004-e20d72976c-lite.chunk.js.LICENSE.txt} +0 -0
  178. /package/dist/scripts/{4273-de24896b28-lite.chunk.js.LICENSE.txt → 3999-317a4538c6-lite.chunk.js.LICENSE.txt} +0 -0
  179. /package/dist/scripts/{5220-85898810a6-lite.chunk.js.LICENSE.txt → 5220-291b2243ad-lite.chunk.js.LICENSE.txt} +0 -0
  180. /package/dist/scripts/{537-de7445d41a-lite.chunk.js.LICENSE.txt → 537-6efb9bc099-lite.chunk.js.LICENSE.txt} +0 -0
  181. /package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
  182. /package/dist/scripts/{6489-532a022587-lite.chunk.js.LICENSE.txt → 6489-c242844567-lite.chunk.js.LICENSE.txt} +0 -0
  183. /package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.LICENSE.txt → 6741-fe09fea334-lite.chunk.js.LICENSE.txt} +0 -0
  184. /package/dist/scripts/{841-73ef4ba5ec-lite.chunk.js.LICENSE.txt → 841-11af1334bf-lite.chunk.js.LICENSE.txt} +0 -0
  185. /package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
  186. /package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt → 9478-13da35c4ee-lite.chunk.js.LICENSE.txt} +0 -0
  187. /package/dist/scripts/{953-bf3d621a33-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
  188. /package/dist/scripts/{bundle-e72459b30e.min.js.LICENSE.txt → bundle-7f9a9b650d.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5549-e0ed88aaa1-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/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/PlayClipViewV2.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/play-clip-v2.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/PlayClipV2.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 { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","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 { 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 { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\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';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayClipViewContainer';\n\nimport { PlayClipV2 } from './components/play-clip/PlayClipV2';\n\nconst namespace = 'shared.playClipV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipViewV2(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 { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\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[]>(InteractiveRequests.videoInteractives(props.id));\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 && 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 shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\n\n const breadcrumbs = useBreadcrumbs({ name: clip.data?.name });\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 <PlayClipV2\n clip={clip.data}\n clips={childClips.data}\n interactives={interactives.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 featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClipV2';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n getInteractiveGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getResourceGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getClassroomGuideAppLink: (id: string, type: MasterType) => Core.AppLink;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\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={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"iQ0Ie\",\"expandedToc\":\"sIoV8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PlayPageClips } from 'libs/shared/components/play-page-v2/clips-widget/PlayPageClips';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page-v2/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { PlayPageInteractives } from 'libs/shared/components/play-page-v2/interactives-widget/PlayPageInteractives';\nimport { PlayPageResources } from 'libs/shared/components/play-page-v2/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, FavouriteFunc, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, 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 { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\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 { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { usePlayPageTableOfContent } from 'shared/views/play/v2/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/v2/hooks/useSectionHeadings';\nimport { PlayPageUtils } from 'shared/views/play/v2/PlayPageUtilV2';\nimport { ClippedFrom } from 'shared/views/play-clip/v2/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip-v2.scss';\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\n\ninterface PlayClipV2Props {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\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 tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n isPlugin: boolean;\n breadcrumbs?: Breadcrumb[];\n}\n\nexport function PlayClipV2(props: PlayClipV2Props): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, 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 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 canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\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 otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n function getMainClassName() {\n if (props.shouldShowSideTableOfContents && tableOfContentsExpanded) {\n return styles.expandedToc;\n }\n if (props.shouldShowSideTableOfContents && !tableOfContentsExpanded)\n return 'pe-4';\n }\n\n return (\n <div className='px-4 play-page-sections-container'>\n <main className={`${styles.main} ${getMainClassName()}`}>\n {!!props.breadcrumbs?.length &&\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n }\n\n\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\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\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 {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\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 canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n isPlugin={props.isPlugin}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n isPlugin={props.isPlugin}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n yearGroups={props.yearGroups}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n )}\n\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\n </main>\n\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n />\n \n </div>\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","useBreadcrumbs","current","match","breadcrumbs","useBuilder","active","DEFAULT_PARTIAL_LOADING_OPTIONS","numItems","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","width","Math","max","floor","random","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","getPhrase","clipErrors","PlayClipViewV2","props","queryParams","context","contextId","mtv","hasProduct","u","setFavourite","canFavourite","hasPermissions","isPlugin","currentUser","config","clip","interactives","video","data","_parentVideo","childClips","strippedClip","relatedVideos","moviesAndTv","audiences","yearGroups","isAuthenticated","customerId","shouldShowSideTableOfContents","pointsOfInterest","featureAccess","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","clips","originalVideo","imageCdnUrl","canManageVideoAccess","items","tableOfContentsId","tocId","defaultProps","namespace","ClippedFrom","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","set","Text","phrase","VideoActionsContext","value","VideoList","getVideoAppLink","v","VideoAppLinkHelper","playNext","shareId","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","PlayClipV2","playerContext","canConsume","VideoHelper","usePlayPageTableOfContent","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","canViewGlance","useSectionHeadings","headingElements","ele","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","hasStudentExperience","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","mode","canViewPublicLayout","otherClips","filter","c","toString","length","Breadcrumbs","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","key","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","VideoAtAGlanceV2","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","canViewResources","canViewResourceItems","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","canViewInteractives","PlayPageClips","canViewClips","RelatedVideos","currentVideo","TableOfContents","isExpanded","setIsExpanded","activeId","showInSide"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5660],{94644:(e,t,a)=>{a.d(t,{r:()=>d});var i=a(50242),n=a(81886),r=a(67058),o=a(14553),c=a(49267),s=a(49075),l={notFound:r.d,forbidden:{rating:o.q,yearLevel:o.q,region:c.a,privacy:o.q},badRequest:s._};function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},l),t);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==i.o.NotFound?r!==i.o.Forbidden?a.badRequest||n.Q.Ry.throw(new o.badRequest):a.forbidden||n.Q.Ry.throw(new o.forbidden.privacy):a.notFound||n.Q.Ry.throw(new o.notFound))}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var i=a(32735),n=a(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,a){var o=Array.isArray(e)?e:[e];(0,i.useEffect)((function(){o.forEach((function(e){(0,n.r)(e.statusCode,t,a)}))}),[r(o),t,a])}},56871:(e,t,a)=>{a.d(t,{N:()=>D});var i=a(32735),n=a(23481),r=a(28400),o=a(65858),c=a(83345),s=a(19670),l=a(80385),d=a(73804),u=a(92805),p=a(13231),v=a(11518),m=a(15446),g=a(47862),f=a(26733),y=a(10439),h=a(35429),I=a(51365),C=a(4594),P=a(16714),E=a(12754),A=a(58704),b=a(22902),V=a(76196),k=a(59598),w=a(31908),O=a(26492),T=a(91479),F=a(99092),L=a(47938),R=a(81024),x=a(78166),S=a(99742),N=a(14070),q=a(97291),G=a(10671),U=a(10741),_=a(22490);function j(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,i=Array(t);a<t;a++)i[a]=e[a];return i}var M=function(e,t,a){return function(i){return a?{application:q.O.VIDEOS,action:N.e.Videos.PREVIEW_PDF,args:[i.id],params:{videoId:e,shareId:t}}:{application:q.O.SIGN_UP,action:N.e.SignUp.SIGN_UP}}},B="shared.playClip",W=n.T.encloseNamespace(B);function D(e){var t,a,n,D,H,Q,z,K,Y,Z,X,$,J=(0,h.g)(),ee=(0,b.T)().hasPermissions,te=w.M.getCanBeConsumed(e.clip).canConsume,ae=(0,G._)({location:G.i.VideoItem}),ie=i.useRef(null),ne=i.useRef(null);(0,V.P)([ie.current,ne.current],e.tableOfContentsId);var re,oe,ce=w.M.isVideoTypeArchived(e.clip),se=ee(P.C.StudentExperience),le=i.useRef(!1),de=(0,l.Wp)(e.clip,e.glanceTheme)&&e.featureAccess.canViewGlance,ue=(re=i.useState({view:"loading",referrer:null}),oe=2,function(e){if(Array.isArray(e))return e}(re)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var i,n,r,o,c=[],s=!0,l=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;s=!1}else for(;!(s=(i=r.call(a)).done)&&(c.push(i.value),c.length!==t);s=!0);}catch(e){l=!0,n=e}finally{try{if(!s&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(l)throw n}}return c}}(re,oe)||function(e,t){if(e){if("string"==typeof e)return j(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?j(e,t):void 0}}(re,oe)||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.")}()),pe=ue[0],ve=ue[1];function me(){var t;return!(null===(t=e.currentUser)||void 0===t?void 0:t.isAuthenticated)||!e.hasProduct(E.x.Primary)||!!se}i.useEffect((function(){e.glanceLoaded&&ve({view:e.glanceTheme?"v@g":"details",referrer:null})}),[e.glanceLoaded,e.glanceTheme]);var ge=e.originalVideo&&!me()&&!!(null===(t=e.clip._canBeConsumed)||void 0===t?void 0:t.value),fe="picture-in-picture"===J.mode||e.featureAccess.canViewPublicLayout,ye=(0,F.jh)(e.clip,se),he=null!==(n=null===(a=e.clips)||void 0===a?void 0:a.filter((function(t){return t.id.toString()!==e.clip.id.toString()})))&&void 0!==n?n:[];return i.createElement("div",{className:"px-4"},i.createElement(L.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:C.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),ce&&i.createElement(O.T,{typeId:e.clip.typeId,hasStudentExperience:se}),i.createElement("section",{className:"mb-2"},te&&i.createElement(y.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(D=e.queryParams)||void 0===D?void 0:D.context,contextId:null===(H=e.queryParams)||void 0===H?void 0:H.contextId,moviesAndTv:null===(Q=e.queryParams)||void 0===Q?void 0:Q.mtv,playNext:null===(z=e.queryParams)||void 0===z?void 0:z.playNext,startTime:null!==(Y=null===(K=e.queryParams)||void 0===K?void 0:K.t)&&void 0!==Y?Y:null===(Z=e.queryParams)||void 0===Z?void 0:Z.startTime,mode:"default",location:"play-page"}),i.createElement("div",{className:fe?"":"d-none"},i.createElement(R.S,{video:e.clip,type:"pip"}))),i.createElement(T.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:ge?{application:q.O.VIDEOS,action:N.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,r.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),i.createElement("section",{className:"".concat("v@g"===pe.view?"d-block":"d-none")},i.createElement(s.o,{theme:e.glanceTheme,video:e.clip,pointsOfInterest:e.pointsOfInterest,onClickShowDescription:function(){return ve({view:"details",referrer:"v@g"})},setStartTime:function(e){var t;return null===(t=J.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:function(e){return{application:q.O.SEARCH,action:N.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout})),i.createElement("section",{className:"".concat("details"===pe.view?"d-block":"d-none")},i.createElement(d.X,{video:e.clip,onLaunchImmersiveReader:function(){var e,t,a,i;le.current=!(null===(t=null===(e=null==J?void 0:J.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(i=null===(a=null==J?void 0:J.playerRef)||void 0===a?void 0:a.current)||void 0===i||i.pause()},onExitImmersiveReader:function(){var e,t;le.current&&(null===(t=null===(e=null==J?void 0:J.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())},onClickClose:de&&function(){return ve({view:"v@g",referrer:"details"})},getTagAppLink:function(e){return{application:q.O.SEARCH,action:N.e.Search.HOME,params:{tagOrClassification:e.name}}},hideTags:de,suppressInteractivity:e.featureAccess.canViewPublicLayout})),i.createElement("section",{className:"".concat("loading"===pe.view?"d-block":"d-none")},i.createElement(u.H,null)),!!(null==ye?void 0:ye.length)&&i.createElement("section",{className:"pb-3",id:k.K.Resources,ref:ie},i.createElement(v.kM,{name:W("resources",{count:ye.length}),contents:A.z.PlayPageResources,collection:ye,prefetched:!0,childComponent:f.R,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:S.W.Fallbacks.RESOURCE_THUMBNAIL,actionBehaviour:e.featureAccess.canViewResourceItems?"normal":"public",location:"play-page",titlePosition:"above",hideTypeBadge:!0},getChildAppLink:M(null===(X=e.clip)||void 0===X?void 0:X.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsOptions:e.featureAccess.canViewResourceItems?{}:{workflowPhase:o.eu.Start,descriptor:o.Yu.SignUp},analyticsData:{widgetId:"resources"}})),!(!(null==he?void 0:he.length)||me())&&i.createElement("div",{className:"pb-3"},i.createElement(v.kM,{name:W("otherClips",{count:he.length}),contents:A.z.Clips,collection:he,prefetched:!0,getChildAppLink:function(e){return{application:q.O.CLIPS,action:N.e.Clips.PLAY_CLIP,args:[e.id,r.m.slugify(e.name)]}},childComponent:m.C,extraChildComponentProps:{video:e.originalVideo,imageCdnUrl:e.imageCdnUrl},analyticsData:{widgetId:"clips"}})),!(!(null===($=e.interactives)||void 0===$?void 0:$.length)||me())&&i.createElement("div",{className:"pb-3",id:k.K.Interactives,ref:ne},i.createElement(v.kM,{name:W("interactives",{count:e.interactives.length}),contents:A.z.Interactives,collection:e.interactives,prefetched:!0,getChildAppLink:function(e){return{application:q.O.INTERACTIVES,action:N.e.Interactives.VIEW_INTERACTIVE,args:[e.id,r.m.slugify(e.name)]}},childComponent:g.K,extraChildComponentProps:{video:e.clip,questionsAppLink:{application:q.O.INTERACTIVES,action:N.e.Interactives.PREVIEW_QUESTIONS},imageCdnUrl:e.imageCdnUrl},analyticsData:{widgetId:"interactives"}})),!!ge&&i.createElement("section",{className:"pb-2 pt-1"},i.createElement("h2",{className:"h4 mb-0"},i.createElement(c.x,{namespace:B,phrase:"clippedFrom"})),i.createElement(I.M.Provider,{value:ae},i.createElement(p.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,a){return _.W.getAppLink(t,Object.assign(Object.assign({},a),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:ee,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return U.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:_.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:_.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:_.W.getResourceGuidanceAppLink}))),i.createElement("section",null,i.createElement(x.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(t,a){return _.W.getAppLink(t,Object.assign(Object.assign({},a),{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})))}},44110:(e,t,a)=>{a.d(t,{i:()=>o});var i=a(20354),n=a(89454),r=a(86698),o=function(){var e=(0,r.y)({redirectOnError:!0}),t=e.activePresentation,a=e.getFallbackPresentation,o=t||a();return i.a.useBasicFetch(!!o&&n.O.presentationAudiences(o.id))}},27478:(e,t,a)=>{a.r(t),a.d(t,{PlayClipView:()=>q});var i=a(32735),n=a(50242),r=a(23481),o=a(20354),c=a(65858),s=a(78417),l=a(16714),d=a(67058),u=a(33803),p=a(43012),v=a(39151),m=a(1666),g=a(20768),f=a(28907),y=a(31949),h=a(1575),I=a(26304),C=a(91286),P=a(22902),E=a(15311),A=a(79612),b=a(76753),V=a(56871),k=a(51855),w=a(7179),O=a(49948),T=a(36873),F=a(27638),L=a(44110),R=a(35014),x=a(97816),S=r.T.encloseNamespace("shared.playClip"),N={notFound:d.d,forbidden:{privacy:u.G}};function q(e){var t,a,r,d,u,q,G,U=e.queryParams,_=U.context,j=U.contextId,M=U.mtv,B=(0,E.r)().hasProduct,W=(0,F.u)(c.LZ.PlayClip),D=W.setFavourite,H=W.canFavourite,Q=(0,k.G)().isPlugin,z=(0,P.T)().hasPermissions,K=(0,R.I)(),Y=o.a.useBasicFetch(y.N.currentUser()),Z=o.a.useBasicFetch(v.L.config()),X=o.a.useBasicFetch(p.e.clip(e.id)),$=o.a.useBasicFetch(K.canViewInteractives&&g.b.videoInteractives(e.id)),J=o.a.useBasicFetch(!!(null===(t=X.data)||void 0===t?void 0:t._parentVideo)&&h.R.video(X.data._parentVideo.id));(0,x.V)([J.data]);var ee=o.a.useBasicFetch(!!(null===(a=X.data)||void 0===a?void 0:a._parentVideo)&&K.canViewClips&&p.e.videoClips(X.data._parentVideo.id)),te=o.a.useBasicFetch(X.statusCode===n.o.Forbidden&&p.e.clip(e.id,s.r.StripMetadata)),ae=(0,T.k)({video:J.data,context:_,contextId:j,moviesAndTv:M,currentUser:Y.data}),ie=(0,L.i)(),ne=o.a.useBasicFetch((null===(r=Y.data)||void 0===r?void 0:r.isAuthenticated)&&m.h.yearGroups(Y.data.customerId)),re=z(l.C.ViewVideoGlance)&&(null===(u=null===(d=X.data)||void 0===d?void 0:d.glance)||void 0===u?void 0:u.theme),oe=o.a.useBasicFetch(re&&f.r.themeImages(X.data.glance.theme,X.data.glance.type)),ce=(0,O.l)(e.id,!0);return(0,A.M)(b.CG.getClipMetadata({content:X.data,phraseContext:{phraseHandler:S,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,C.v)(X,N,{forbidden:!0}),(0,x.V)(null!==(q=ae.videos)&&void 0!==q?q:[]),(0,I.b)(te),(0,w.P)({id:e.id,app:"clips"}),X.data&&Y.hasCompleted&&Z.hasCompleted&&ce.hasCompleted?i.createElement(V.N,{clip:X.data,interactives:$.data,clips:ee.data,originalVideo:J.data,currentUser:Y.data,yearGroups:ne.data,relatedVideos:"playlist"===_?ae:Object.assign(Object.assign({},ae),{videos:[]}),canFavourite:H,setFavourite:D,hasProduct:B,queryParams:e.queryParams,audiences:ie.data,imageCdnUrl:Z.data.imageCdnUrl,canManageVideoAccess:z(l.C.ManageVideoAccess),pointsOfInterest:ce.items,glanceTheme:oe.data,glanceLoaded:!re||oe.hasCompleted,featureAccess:K,tableOfContentsId:null===(G=e.queryParams)||void 0===G?void 0:G.tocId,isPlugin:Q}):i.createElement(i.Fragment,null)}q.defaultProps={queryParams:{}}}}]);
2
- //# sourceMappingURL=5660-a356acdbca-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5660-a356acdbca-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 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":""}
@@ -1,2 +0,0 @@
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:"&nbsp"}}))}))))}))},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-1"},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(17082),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(17082),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-92d9cea005-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5936-92d9cea005-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: '&nbsp' }} />\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-1'>\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\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' />&nbsp;<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,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6094],{94644:(e,t,a)=>{a.d(t,{r:()=>c});var r=a(50242),n=a(81886),i=a(67058),o=a(14553),s=a(49267),d=a(49075),u={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:s.a,privacy:o.q},badRequest:d._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},u),t);i&&n.Q.Ry.isStatusCodeError(i)&&(i!==r.o.NotFound?i!==r.o.Forbidden?a.badRequest||n.Q.Ry.throw(new o.badRequest):a.forbidden||n.Q.Ry.throw(new o.forbidden.privacy):a.notFound||n.Q.Ry.throw(new o.notFound))}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var r=a(32735),n=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,a){var o=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){o.forEach((function(e){(0,n.r)(e.statusCode,t,a)}))}),[i(o),t,a])}},63719:(e,t,a)=>{a.d(t,{h:()=>s});var r=a(32735),n=a(77316);function i(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function s(e){var t,a,s=(t=r.useMemo((function(){return n.p.getBuilder()}),[]),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,o,s=[],d=!0,u=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;d=!1}else for(;!(d=(r=i.call(a)).done)&&(s.push(r.value),s.length!==t);d=!0);}catch(e){u=!0,n=e}finally{try{if(!d&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(u)throw n}}return s}}(t,a)||i(t,a)||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.")}()),d=s[0],u=(0,s[1])(d);return u&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(u),[Object.assign(Object.assign({},e),{active:!0})]):u}},75085:(e,t,a)=>{a.r(t),a.d(t,{PlayViewV2:()=>H});var r=a(32735),n=a(50242),i=a(81886),o=a(23481),s=a(20354),d=a(28400),u=a(65858),c=a(78417),l=a(16714),f=a(67058),v=a(61990),y=a(33803),h=a(89454),p=a(43012),m=a(39151),b=a(1666),g=a(20768),C=a(98064),F=a(31949),w=a(1575),A=a(63719),I=a(26304),P=a(91286),O=a(22902),S=a(79612),B=a(76753),R=a(14070),j=a(97291),q=a(51855),x=a(82817),E=a(7179),V=a(49948),k=a(36873),L=a(27638),M=a(86698),T=a(35014),U=a(97816),_=a(33192),G=a(81812),N=a(61169),Q=o.T.encloseNamespace("shared.play"),D={notFound:v.l,forbidden:{privacy:y.G}};function H(e){var t,a,o,v,y=e.queryParams,H=y.context,Y=y.contextId,Z=y.playNext,$=y.mtv,z=(0,L.u)(u.LZ.PlayPage),J=z.setFavourite,K=z.canFavourite,W=(0,O.T)().hasPermissions,X=(0,q.G)().isPlugin,ee=(0,M.y)().activePresentation,te=(0,T.I)(),ae=s.a.useBasicFetch(C.D.streamableLearning()),re=s.a.useBasicFetch(F.N.currentUser()),ne=s.a.useBasicFetch(w.R.video(e.id)),ie=s.a.useBasicFetch(p.e.videoClips(e.id)),oe=s.a.useBasicFetch(g.b.videoInteractives(e.id)),se=s.a.useBasicFetch(m.L.config()),de=s.a.useBasicFetch((null===(t=re.data)||void 0===t?void 0:t.isAuthenticated)&&b.h.yearGroups(re.data.customerId)),ue=s.a.useBasicFetch(ee&&h.O.audiencesByPresentationId(ee.id)),ce=(0,G.a)(),le=s.a.useBasicFetch(ne.statusCode===n.o.Forbidden&&w.R.video(e.id,c.r.StripMetadata)),fe=(0,x.M)(e.id,!0),ve=(0,k.k)({video:ne.data,context:H,contextId:Y,moviesAndTv:$,currentUser:re.data}),ye=(0,V.l)(e.id,!0),he=s.a.useBasicFetch(w.R.regionAlternatives(e.id)),pe=(0,A.h)({name:null===(a=ne.data)||void 0===a?void 0:a.name});return(0,S.M)(B.CG.getVideoMetadata({content:ne.data,regionAlternatives:he.data,phraseContext:{phraseHandler:Q,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:_.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:_.f.allowIndexing(),hrefLang:_.f.getContentHrefLang(he.data,(function(e,t){return{application:j.O.VIDEOS,action:R.e.Videos.PLAY_VIDEO,args:[e,d.m.slugify(t)]}}))})),(0,P.v)(ne,D,{forbidden:!0}),(0,U.V)(null!==(o=ve.videos)&&void 0!==o?o:[]),(0,E.P)({id:e.id,app:"videos"}),(0,I.b)(le),r.useEffect((function(){var e;ne.data&&ae.data&&(null===(e=ne.data.libraries)||void 0===e?void 0:e.data.find((function(e){return e.id===ae.data.objectId})))&&i.Q.Ry.throw(new f.d)}),[ne.hasCompleted,ae.hasCompleted]),ne.data&&re.hasCompleted&&se.hasCompleted&&ye.hasCompleted?r.createElement(N.R,{video:ne.data,clips:ie.data,interactives:oe.data,yearGroups:de.data,curriculums:fe,relatedVideos:ve,setFavourite:J,canFavourite:K,imageCdnUrl:se.data.imageCdnUrl,currentUser:re.data,pointsOfInterest:ye.items,playNext:Z,featureAccess:te,audiences:ue.data,params:e.queryParams,canManageVideoAccess:W(l.C.ManageVideoAccess),shouldShowSideTableOfContents:ce,tableOfContentsId:null===(v=e.queryParams)||void 0===v?void 0:v.tocId,isPlugin:X,breadcrumbs:pe}):r.createElement(r.Fragment,null)}H.defaultProps={queryParams:{}}}}]);
2
- //# sourceMappingURL=6094-8546003d79-lite.chunk.js.map