@clickview/lite 0.50.1-rc.0 → 0.50.1-rc.1

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 (151) hide show
  1. package/dist/bundles.json +2 -2
  2. package/dist/css/{1313-lite-b05099b818.chunk.css → 1313-lite-6b1a20b3fe.chunk.css} +1 -1
  3. package/dist/css/{1402-lite-9489903efd.chunk.css → 1402-lite-8a07733b96.chunk.css} +1 -1
  4. package/dist/css/{3588-lite-f083d46330.chunk.css → 1407-lite-be6668ef3a.chunk.css} +1 -1
  5. package/dist/css/{5725-lite-789978250c.chunk.css → 1539-lite-a5772fefdb.chunk.css} +1 -1
  6. package/dist/css/{5769-lite-16efb24b77.chunk.css → 1567-lite-2ab4d6f863.chunk.css} +1 -1
  7. package/dist/css/{1602-lite-90df7cca5c.chunk.css → 1602-lite-8fb6cea449.chunk.css} +1 -1
  8. package/dist/css/{9818-lite-dca6b9e86d.chunk.css → 1850-lite-e9e8c03964.chunk.css} +1 -1
  9. package/dist/css/{2446-lite-6b11bdfdc1.chunk.css → 2446-lite-dfc41ecbea.chunk.css} +1 -1
  10. package/dist/css/{9211-lite-f00eb0266e.chunk.css → 2507-lite-9516182bdb.chunk.css} +1 -1
  11. package/dist/css/{2724-lite-24da60896e.chunk.css → 2724-lite-669b5b8120.chunk.css} +1 -1
  12. package/dist/css/{3070-lite-c0909f46f3.chunk.css → 3070-lite-6af4bd0c76.chunk.css} +1 -1
  13. package/dist/css/{3397-lite-dfab7385b6.chunk.css → 3397-lite-5b25e3a686.chunk.css} +1 -1
  14. package/dist/css/{3403-lite-4b92798a0c.chunk.css → 3403-lite-89bcc16133.chunk.css} +1 -1
  15. package/dist/css/{458-lite-c8a3139b8b.chunk.css → 3515-lite-66473d08ed.chunk.css} +1 -1
  16. package/dist/css/{1407-lite-f083d46330.chunk.css → 3588-lite-be6668ef3a.chunk.css} +1 -1
  17. package/dist/css/{3895-lite-b05099b818.chunk.css → 3895-lite-6b1a20b3fe.chunk.css} +1 -1
  18. package/dist/css/{4151-lite-fcc0fc8753.chunk.css → 4151-lite-9cbe9bba57.chunk.css} +1 -1
  19. package/dist/css/{3515-lite-c8a3139b8b.chunk.css → 458-lite-66473d08ed.chunk.css} +1 -1
  20. package/dist/css/{5114-lite-38330c6187.chunk.css → 5114-lite-06a1ac179b.chunk.css} +1 -1
  21. package/dist/css/{5242-lite-58cdcd1ec4.chunk.css → 5242-lite-3e960b685e.chunk.css} +1 -1
  22. package/dist/css/{5364-lite-93bfe767eb.chunk.css → 5364-lite-e8c416fe79.chunk.css} +1 -1
  23. package/dist/css/{1539-lite-789978250c.chunk.css → 5725-lite-a5772fefdb.chunk.css} +1 -1
  24. package/dist/css/{6759-lite-16efb24b77.chunk.css → 5769-lite-2ab4d6f863.chunk.css} +1 -1
  25. package/dist/css/{5803-lite-d1315afce2.chunk.css → 5803-lite-625e484692.chunk.css} +1 -1
  26. package/dist/css/{5810-lite-ba174cfe3d.chunk.css → 5810-lite-1224500e4d.chunk.css} +1 -1
  27. package/dist/css/{6181-lite-7558375a74.chunk.css → 6181-lite-ca9f6aeba1.chunk.css} +1 -1
  28. package/dist/css/{6189-lite-4c33c1b5c4.chunk.css → 6189-lite-20e4d47423.chunk.css} +1 -1
  29. package/dist/css/{6309-lite-a23dc59ecd.chunk.css → 6309-lite-bd0968a2c8.chunk.css} +1 -1
  30. package/dist/css/{6531-lite-9431296610.chunk.css → 6531-lite-1f6f3c392c.chunk.css} +1 -1
  31. package/dist/css/{1567-lite-16efb24b77.chunk.css → 6759-lite-2ab4d6f863.chunk.css} +1 -1
  32. package/dist/css/{6803-lite-16efb24b77.chunk.css → 6803-lite-2ab4d6f863.chunk.css} +1 -1
  33. package/dist/css/{6850-lite-769c93cb9e.chunk.css → 6850-lite-c1a8731a93.chunk.css} +1 -1
  34. package/dist/css/{7533-lite-d0ae59ec54.chunk.css → 7533-lite-206fce5dbd.chunk.css} +1 -1
  35. package/dist/css/{7777-lite-8067dea624.chunk.css → 7777-lite-48d916f95c.chunk.css} +1 -1
  36. package/dist/css/{8218-lite-fe8c54917b.chunk.css → 8218-lite-f54139cf27.chunk.css} +1 -1
  37. package/dist/css/{8316-lite-9083a6565c.chunk.css → 8316-lite-6036f465f0.chunk.css} +1 -1
  38. package/dist/css/{8354-lite-bc431d9d01.chunk.css → 8354-lite-8228cb401d.chunk.css} +1 -1
  39. package/dist/css/{8987-lite-95b3d79328.chunk.css → 8987-lite-6cd15b48d2.chunk.css} +1 -1
  40. package/dist/css/{9068-lite-c0341005e4.chunk.css → 9068-lite-c3a9ace963.chunk.css} +1 -1
  41. package/dist/css/{2507-lite-f00eb0266e.chunk.css → 9211-lite-9516182bdb.chunk.css} +1 -1
  42. package/dist/css/{9329-lite-a259b19412.chunk.css → 9329-lite-5f15379e31.chunk.css} +1 -1
  43. package/dist/css/{9417-lite-9083a6565c.chunk.css → 9417-lite-6036f465f0.chunk.css} +1 -1
  44. package/dist/css/{1850-lite-dca6b9e86d.chunk.css → 9818-lite-e9e8c03964.chunk.css} +1 -1
  45. package/dist/css/{lite-app-28b7b96628.css → lite-app-212404ee3a.css} +1 -1
  46. package/dist/scripts/{1313-455608bc46-lite.chunk.js → 1313-5a7170fb69-lite.chunk.js} +1 -1
  47. package/dist/scripts/{1313-455608bc46-lite.chunk.js.map → 1313-5a7170fb69-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{1402-d40dc88741-lite.chunk.js → 1402-39cb29d725-lite.chunk.js} +1 -1
  49. package/dist/scripts/{1402-d40dc88741-lite.chunk.js.map → 1402-39cb29d725-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/{1407-3592ec24f2-lite.chunk.js → 1407-3bab3f00f6-lite.chunk.js} +1 -1
  51. package/dist/scripts/{1407-3592ec24f2-lite.chunk.js.map → 1407-3bab3f00f6-lite.chunk.js.map} +1 -1
  52. package/dist/scripts/{1567-edcff759b1-lite.chunk.js → 1567-b3141bc14f-lite.chunk.js} +1 -1
  53. package/dist/scripts/{1567-edcff759b1-lite.chunk.js.map → 1567-b3141bc14f-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{1602-173a4f272a-lite.chunk.js → 1602-dfe6928d65-lite.chunk.js} +1 -1
  55. package/dist/scripts/{1602-173a4f272a-lite.chunk.js.map → 1602-dfe6928d65-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/{2446-acc94130ed-lite.chunk.js → 2446-eaa1d2ee7d-lite.chunk.js} +2 -2
  57. package/dist/scripts/{2446-acc94130ed-lite.chunk.js.map → 2446-eaa1d2ee7d-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/{2507-bb4e17b1b3-lite.chunk.js → 2507-fc744cab62-lite.chunk.js} +1 -1
  59. package/dist/scripts/{2507-bb4e17b1b3-lite.chunk.js.map → 2507-fc744cab62-lite.chunk.js.map} +1 -1
  60. package/dist/scripts/{2724-ee3a51e0c9-lite.chunk.js → 2724-060fdde41c-lite.chunk.js} +1 -1
  61. package/dist/scripts/{2724-ee3a51e0c9-lite.chunk.js.map → 2724-060fdde41c-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/{3070-fb8eb47716-lite.chunk.js → 3070-b148205227-lite.chunk.js} +1 -1
  63. package/dist/scripts/{3070-fb8eb47716-lite.chunk.js.map → 3070-b148205227-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{3397-bb32e2287f-lite.chunk.js → 3397-cd6acb96c4-lite.chunk.js} +1 -1
  65. package/dist/scripts/{3397-bb32e2287f-lite.chunk.js.map → 3397-cd6acb96c4-lite.chunk.js.map} +1 -1
  66. package/dist/scripts/{3403-12c460d3f6-lite.chunk.js → 3403-d42b7125ae-lite.chunk.js} +1 -1
  67. package/dist/scripts/{3403-12c460d3f6-lite.chunk.js.map → 3403-d42b7125ae-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/{3515-4de2fd7070-lite.chunk.js → 3515-0d5feefbe3-lite.chunk.js} +1 -1
  69. package/dist/scripts/{3515-4de2fd7070-lite.chunk.js.map → 3515-0d5feefbe3-lite.chunk.js.map} +1 -1
  70. package/dist/scripts/{3588-62e61bc526-lite.chunk.js → 3588-1c1c264291-lite.chunk.js} +2 -2
  71. package/dist/scripts/{3588-62e61bc526-lite.chunk.js.map → 3588-1c1c264291-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/{3895-a54621a8c4-lite.chunk.js → 3895-cbeb003a0a-lite.chunk.js} +1 -1
  73. package/dist/scripts/{3895-a54621a8c4-lite.chunk.js.map → 3895-cbeb003a0a-lite.chunk.js.map} +1 -1
  74. package/dist/scripts/{4151-ad0c6f107f-lite.chunk.js → 4151-bb1e8aafcb-lite.chunk.js} +1 -1
  75. package/dist/scripts/{4151-ad0c6f107f-lite.chunk.js.map → 4151-bb1e8aafcb-lite.chunk.js.map} +1 -1
  76. package/dist/scripts/{458-35c635a2ce-lite.chunk.js → 458-e3aaac093b-lite.chunk.js} +1 -1
  77. package/dist/scripts/{458-35c635a2ce-lite.chunk.js.map → 458-e3aaac093b-lite.chunk.js.map} +1 -1
  78. package/dist/scripts/{5114-fcfd260e0b-lite.chunk.js → 5114-15c4180b16-lite.chunk.js} +1 -1
  79. package/dist/scripts/{5114-fcfd260e0b-lite.chunk.js.map → 5114-15c4180b16-lite.chunk.js.map} +1 -1
  80. package/dist/scripts/{5242-2d752ff85e-lite.chunk.js → 5242-e2f40bdd0e-lite.chunk.js} +1 -1
  81. package/dist/scripts/{5242-2d752ff85e-lite.chunk.js.map → 5242-e2f40bdd0e-lite.chunk.js.map} +1 -1
  82. package/dist/scripts/{5364-b081f5e1ca-lite.chunk.js → 5364-fe4a00711f-lite.chunk.js} +1 -1
  83. package/dist/scripts/{5364-b081f5e1ca-lite.chunk.js.map → 5364-fe4a00711f-lite.chunk.js.map} +1 -1
  84. package/dist/scripts/{5725-6792ca3e92-lite.chunk.js → 5725-1592727a8f-lite.chunk.js} +1 -1
  85. package/dist/scripts/{5725-6792ca3e92-lite.chunk.js.map → 5725-1592727a8f-lite.chunk.js.map} +1 -1
  86. package/dist/scripts/{5769-34ad224f5f-lite.chunk.js → 5769-e9f596e2b2-lite.chunk.js} +1 -1
  87. package/dist/scripts/{5769-34ad224f5f-lite.chunk.js.map → 5769-e9f596e2b2-lite.chunk.js.map} +1 -1
  88. package/dist/scripts/{5803-0005a9eb66-lite.chunk.js → 5803-7db6af5411-lite.chunk.js} +1 -1
  89. package/dist/scripts/{5803-0005a9eb66-lite.chunk.js.map → 5803-7db6af5411-lite.chunk.js.map} +1 -1
  90. package/dist/scripts/{5810-a652483b8e-lite.chunk.js → 5810-c81d69aea8-lite.chunk.js} +2 -2
  91. package/dist/scripts/{5810-a652483b8e-lite.chunk.js.map → 5810-c81d69aea8-lite.chunk.js.map} +1 -1
  92. package/dist/scripts/{6102-f1851eca08-lite.chunk.js → 6102-38e3abf2fa-lite.chunk.js} +3 -3
  93. package/dist/scripts/{6102-f1851eca08-lite.chunk.js.map → 6102-38e3abf2fa-lite.chunk.js.map} +1 -1
  94. package/dist/scripts/{6181-7a4fc8e1e1-lite.chunk.js → 6181-55d2689d74-lite.chunk.js} +1 -1
  95. package/dist/scripts/{6181-7a4fc8e1e1-lite.chunk.js.map → 6181-55d2689d74-lite.chunk.js.map} +1 -1
  96. package/dist/scripts/{6189-ce9f0eeb31-lite.chunk.js → 6189-b45080fab7-lite.chunk.js} +1 -1
  97. package/dist/scripts/{6189-ce9f0eeb31-lite.chunk.js.map → 6189-b45080fab7-lite.chunk.js.map} +1 -1
  98. package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js → 6309-36ea0c9f2c-lite.chunk.js} +2 -2
  99. package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js.map → 6309-36ea0c9f2c-lite.chunk.js.map} +1 -1
  100. package/dist/scripts/{6415-9d8b88c713-lite.chunk.js → 6415-5ac1a71471-lite.chunk.js} +1 -1
  101. package/dist/scripts/{6415-9d8b88c713-lite.chunk.js.map → 6415-5ac1a71471-lite.chunk.js.map} +1 -1
  102. package/dist/scripts/{6531-597262a181-lite.chunk.js → 6531-1325be9fb1-lite.chunk.js} +1 -1
  103. package/dist/scripts/{6531-597262a181-lite.chunk.js.map → 6531-1325be9fb1-lite.chunk.js.map} +1 -1
  104. package/dist/scripts/{6759-3f36472a49-lite.chunk.js → 6759-a7e1119553-lite.chunk.js} +1 -1
  105. package/dist/scripts/{6759-3f36472a49-lite.chunk.js.map → 6759-a7e1119553-lite.chunk.js.map} +1 -1
  106. package/dist/scripts/{6803-2275c83d96-lite.chunk.js → 6803-222bfeea55-lite.chunk.js} +1 -1
  107. package/dist/scripts/{6803-2275c83d96-lite.chunk.js.map → 6803-222bfeea55-lite.chunk.js.map} +1 -1
  108. package/dist/scripts/6850-16bec85d3c-lite.chunk.js +3 -0
  109. package/dist/scripts/6850-16bec85d3c-lite.chunk.js.map +1 -0
  110. package/dist/scripts/{6948-84a5f8d76f-lite.chunk.js → 6948-23ec6a6370-lite.chunk.js} +2 -2
  111. package/dist/scripts/6948-23ec6a6370-lite.chunk.js.map +1 -0
  112. package/dist/scripts/{7533-e079b2af18-lite.chunk.js → 7533-9edee544c6-lite.chunk.js} +1 -1
  113. package/dist/scripts/{7533-e079b2af18-lite.chunk.js.map → 7533-9edee544c6-lite.chunk.js.map} +1 -1
  114. package/dist/scripts/{7777-f0937ef1f5-lite.chunk.js → 7777-1c3490134e-lite.chunk.js} +1 -1
  115. package/dist/scripts/{7777-f0937ef1f5-lite.chunk.js.map → 7777-1c3490134e-lite.chunk.js.map} +1 -1
  116. package/dist/scripts/{8218-f3b81c7287-lite.chunk.js → 8218-088530bdf7-lite.chunk.js} +1 -1
  117. package/dist/scripts/{8218-f3b81c7287-lite.chunk.js.map → 8218-088530bdf7-lite.chunk.js.map} +1 -1
  118. package/dist/scripts/8316-ba6bae1f29-lite.chunk.js +2 -0
  119. package/dist/scripts/8316-ba6bae1f29-lite.chunk.js.map +1 -0
  120. package/dist/scripts/{8354-e30261b594-lite.chunk.js → 8354-d07c3bef5a-lite.chunk.js} +1 -1
  121. package/dist/scripts/{8354-e30261b594-lite.chunk.js.map → 8354-d07c3bef5a-lite.chunk.js.map} +1 -1
  122. package/dist/scripts/{8987-32190552fa-lite.chunk.js → 8987-c0c2790aab-lite.chunk.js} +1 -1
  123. package/dist/scripts/{8987-32190552fa-lite.chunk.js.map → 8987-c0c2790aab-lite.chunk.js.map} +1 -1
  124. package/dist/scripts/{9068-562c30f718-lite.chunk.js → 9068-554aa0d22b-lite.chunk.js} +1 -1
  125. package/dist/scripts/{9068-562c30f718-lite.chunk.js.map → 9068-554aa0d22b-lite.chunk.js.map} +1 -1
  126. package/dist/scripts/{9211-d4c7016679-lite.chunk.js → 9211-0381d3e715-lite.chunk.js} +1 -1
  127. package/dist/scripts/{9211-d4c7016679-lite.chunk.js.map → 9211-0381d3e715-lite.chunk.js.map} +1 -1
  128. package/dist/scripts/{9329-5cf6baab9d-lite.chunk.js → 9329-798d826fc4-lite.chunk.js} +1 -1
  129. package/dist/scripts/{9329-5cf6baab9d-lite.chunk.js.map → 9329-798d826fc4-lite.chunk.js.map} +1 -1
  130. package/dist/scripts/9417-aa8d198d40-lite.chunk.js +2 -0
  131. package/dist/scripts/9417-aa8d198d40-lite.chunk.js.map +1 -0
  132. package/dist/scripts/{9818-f63bdbbac4-lite.chunk.js → 9818-a2fa140139-lite.chunk.js} +1 -1
  133. package/dist/scripts/{9818-f63bdbbac4-lite.chunk.js.map → 9818-a2fa140139-lite.chunk.js.map} +1 -1
  134. package/dist/scripts/bundle-bb2e18c8ca.min.js +3 -0
  135. package/dist/scripts/{bundle-d20cb66d1a.min.js.map → bundle-bb2e18c8ca.min.js.map} +1 -1
  136. package/package.json +1 -1
  137. package/dist/scripts/6850-8770bfeefb-lite.chunk.js +0 -3
  138. package/dist/scripts/6850-8770bfeefb-lite.chunk.js.map +0 -1
  139. package/dist/scripts/6948-84a5f8d76f-lite.chunk.js.map +0 -1
  140. package/dist/scripts/8316-dad1824a5f-lite.chunk.js +0 -2
  141. package/dist/scripts/8316-dad1824a5f-lite.chunk.js.map +0 -1
  142. package/dist/scripts/9417-70c6489c67-lite.chunk.js +0 -2
  143. package/dist/scripts/9417-70c6489c67-lite.chunk.js.map +0 -1
  144. package/dist/scripts/bundle-d20cb66d1a.min.js +0 -3
  145. /package/dist/scripts/{2446-acc94130ed-lite.chunk.js.LICENSE.txt → 2446-eaa1d2ee7d-lite.chunk.js.LICENSE.txt} +0 -0
  146. /package/dist/scripts/{3588-62e61bc526-lite.chunk.js.LICENSE.txt → 3588-1c1c264291-lite.chunk.js.LICENSE.txt} +0 -0
  147. /package/dist/scripts/{5810-a652483b8e-lite.chunk.js.LICENSE.txt → 5810-c81d69aea8-lite.chunk.js.LICENSE.txt} +0 -0
  148. /package/dist/scripts/{6102-f1851eca08-lite.chunk.js.LICENSE.txt → 6102-38e3abf2fa-lite.chunk.js.LICENSE.txt} +0 -0
  149. /package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js.LICENSE.txt → 6309-36ea0c9f2c-lite.chunk.js.LICENSE.txt} +0 -0
  150. /package/dist/scripts/{6850-8770bfeefb-lite.chunk.js.LICENSE.txt → 6850-16bec85d3c-lite.chunk.js.LICENSE.txt} +0 -0
  151. /package/dist/scripts/{bundle-d20cb66d1a.min.js.LICENSE.txt → bundle-bb2e18c8ca.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/9211-d4c7016679-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>(featureAccess.canViewClips && 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","canViewClips","canViewInteractives","data","_parentVideo","childClips","strippedClip","customerId","shouldFetchTheme","glance","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","app","hasCompleted","items","tocId","defaultProps"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/9211-0381d3e715-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>(featureAccess.canViewClips && 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","canViewClips","canViewInteractives","data","_parentVideo","childClips","strippedClip","customerId","shouldFetchTheme","glance","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","app","hasCompleted","items","tocId","defaultProps"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9329],{38365:(e,t,n)=>{n.d(t,{n:()=>C,W:()=>N});var a=n(32735),r=n(80247),i=n(80130),o=n(92802),l=n(91967),c=n(1048),s=n(36848),m=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function u(e){var t=e.label,n=e.checkboxLabelClassName,r=e.checkboxLabelFontWeight,o=e.className,l=m(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return a.createElement(i.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check ".concat(o||"")},a.createElement(C,Object.assign({className:"form-check-input"},l)),a.createElement(i.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===r?"fw-normal":""," \n ").concat(n),htmlFor:l.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&a.createElement(a.Fragment,null,a.createElement("span",null," "),a.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=n(83914),p=n(83345),f=n(73814),v=n(35223);function b(e){var t=(0,o.u6)().values[e.fieldName];return"string"!=typeof t?a.createElement(a.Fragment,null):a.createElement("div",{className:"float-end text-secondary fw-normal"},t.length,"/",e.limit," characters")}const g={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var y=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},E="shared.formField";function C(e){var t,n,i=e.children,s=e.showLoadingSpinner,m=y(e,["children","showLoadingSpinner"]),u=(t=a.useState(e.type),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=u[0],f=u[1],b=l.q.isFunction(i)?function(e){return i(e)}:a.Children.count(i)?i:null;if("password"!==m.type)return s?a.createElement("div",{className:"position-relative"},a.createElement(o.gN,Object.assign({},c.t.omit(m,["formSize"])),b),a.createElement("div",{className:g.spinner},a.createElement(r.Z,{animation:"border",size:"sm"}))):a.createElement(o.gN,Object.assign({},c.t.omit(m,["formSize"])),b);var E="position-relative ".concat(g.passwordContainer);return m.className&&(E+=" ".concat(m.className)),m.disabled&&(E+=" ".concat(g.passwordContainerDisabled)),a.createElement("div",{className:E},a.createElement(o.gN,Object.assign({},c.t.omit(m,["formSize","type","className"]),{type:p,className:"".concat(g.passwordInput," border-0 w-100 h-100 outline-none rounded")}),b),"password"===m.type&&a.createElement(d.x,{svgName:"password"===p?v.vn.VisibleOn:v.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(g.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function N(e){var t=e.label,n=e.className,r=e.showCharacterCounter,l=e.showRequiredStar,s=e.infoTooltip,m=e.infoTooltipPlacement,h=e.infoText,N=e.formSize,S=e.showOptionalLabel,w=y(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel"]),k=(0,o.u6)(),O=k.errors,x=k.touched,I=function(){};if("checkbox"===w.type){var R=c.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(R.onChange=I),a.createElement(u,Object.assign({},R))}var T=Object.assign(Object.assign({},w),{className:f.w.getCustomFormControlClassName(O,x,w.name,N,n,"string"==typeof e.as?e.as:null)});return e.disabled&&(T.onChange=I),a.createElement(i.Z.Group,{className:"form-group"},!!t&&a.createElement(i.Z.Label,{htmlFor:w.id,className:"d-flex align-items-center"},t,l&&a.createElement("span",{className:"text-danger"},"*"),s&&a.createElement(d.x,{className:"svg-container text-secondary ".concat(g.infoTooltip),svgName:v.vn.Info,title:s,tooltipPlacement:m,tooltipSpanHack:!0}),S&&a.createElement("span",{className:"text-secondary"}," ",a.createElement(p.x,{namespace:E,phrase:"optional"})),!!r&&!!w.maxLength&&a.createElement("div",{className:"ms-auto"},a.createElement(b,{fieldName:w.name,limit:w.maxLength}))),a.createElement(C,Object.assign({},T)),!!h&&a.createElement(i.Z.Text,{className:"text-secondary"},h),a.createElement(o.Bc,{name:w.name},(function(e){return a.createElement(i.Z.Control.Feedback,{type:"invalid"},e)})))}C.defaultProps={autoComplete:"off"},N.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,n)=>{n.d(t,{b:()=>m,n:()=>s});var a=n(32735),r=n(92802),i=n(91967),o=n(1048);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var c=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function s(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,s=e.initialValues,m=e.onSubmit,u=c(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=o.t.deepClone(e);return function e(n){Object.keys(t).forEach((function(a){t.hasOwnProperty(a)&&(o.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])}))}(t),t}(s)):s,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},u,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,i=a.resetForm,o=a.setFieldError,c=n&&e.validationSchema?e.validationSchema.cast(t):t;m(c,(function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n.reset&&i(),n.errors)for(var a=0,c=Object.entries(n.errors);a<c.length;a++){var s=(e=c[a],t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(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.")}()),m=s[0],u=s[1];o(m,u)}r(!1)}))},initialStatus:p}),i.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function m(){return(0,r.u6)()}s.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},73814:(e,t,n)=>{n.d(t,{w:()=>r});var a=n(92802),r={getCustomFormControlClassName:function(e,t,n,r,i,o){var l="";return l=function(e,t){var n="";return n="select"===e?"form-select":"form-control","sm"===t&&(n+=" ".concat(n,"-sm")),"lg"===t&&(n+=" ".concat(n,"-lg")),n}(o,r),(0,a.u9)(t,n)&&(0,a.u9)(e,n)&&(l+=" is-invalid"),i&&(l+=" ".concat(i)),l}}},9064:(e,t,n)=>{function a(e){var t,n,a,r,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return null;var o=Object.assign(Object.assign({},i),{id:e.id,interactiveId:e.interactiveId,name:e.name,status:e.status,originType:e.originType});return(null===(t=null==e?void 0:e._parentClip)||void 0===t?void 0:t.id)&&(o.clip={id:null===(n=null==e?void 0:e._parentClip)||void 0===n?void 0:n.id}),(null===(a=null==e?void 0:e._parentVideo)||void 0===a?void 0:a.id)&&(o.video={id:null===(r=null==e?void 0:e._parentVideo)||void 0===r?void 0:r.id}),o}n.d(t,{T:()=>a})},25050:(e,t,n)=>{n.r(t),n.d(t,{EditInteractiveDetailsView:()=>$});var a=n(32735),r=n(70680),i=n(23481),o=n(81886),l=n(20354),c=n(28400),s=n(49985),m=n(65858),u=n(80130),d=n(68050),p=n(69111),f=n(92802),v=n(5173),b=n(38365),g=n(82644),h=n(13876),y=n(34509),E=n(89965),C=n(27022);const N={dropdownMenu:"eDHti"};function S(e){function t(t){return e.selectedContentRegions.some((function(e){return e.id.toString()===t.id.toString()}))}var n,r=e.options.find((function(e){return e.systemName===C.t.GLOBAL})),i=t(r),o=e.options.filter((function(e){return e.systemName!==C.t.GLOBAL}));return a.createElement(y.Z,null,a.createElement(y.Z.Toggle,{id:e.id,variant:"outline-dark"},(null===(n=e.selectedContentRegions)||void 0===n?void 0:n.length)?e.selectedContentRegions.length>1?"".concat(e.selectedContentRegions.length," content regions"):e.selectedContentRegions[0].name:"None"),a.createElement(y.Z.Menu,{className:"".concat(N.dropdownMenu," px-2")},a.createElement(E.X,{key:r.id,label:r.name,name:r.id,id:r.id,onChange:function(){return function(t,n){n?e.onUpdateContentRegions([]):e.onUpdateContentRegions([t])}(r,i)},checked:i,className:"my-1"}),a.createElement(y.Z.Divider,null),o.map((function(n){return a.createElement(E.X,{key:n.id,label:n.name,name:n.id,id:n.id,onChange:function(){return a=n,void(t(n)?e.onUpdateContentRegions(e.selectedContentRegions.filter((function(e){return e.id.toString()!==a.id.toString()}))):e.onUpdateContentRegions(e.selectedContentRegions.concat(a)));var a},checked:t(n),className:"my-1 ".concat(i?"disabled":""),disabled:i})}))))}var w=n(83345),k=n(89118),O=n(54610),x=n(68626),I="interactives.editInteractiveDetails",R=i.T.encloseNamespace(I);function T(e){var t,n=e.interactiveMetadata,r=e.onClickCancel,i=e.imageCdnUrl,o=(0,g.b)();return a.createElement(f.l0,null,a.createElement("div",{className:"row form-group"},a.createElement("div",{className:"col-5"},a.createElement(k.u,{video:n,type:"cosmetic",imageOptions:{size:O.h2.Small},textPosition:x.z.Independent,imageCdnUrl:i,preload:!0})),a.createElement("div",{className:"col-7"},a.createElement("h2",{className:"h6"},o.values.name))),a.createElement(b.W,{label:R("nameLabel"),type:"text",name:"name",id:"name",placeholder:R("namePlaceholder"),autoFocus:!0,value:o.values.name}),a.createElement(b.W,{label:R("descriptionLabel"),component:"textarea",name:"description",id:"description",placeholder:R("descriptionPlaceholder"),value:o.values.description}),!!(null===(t=e.contentRegions)||void 0===t?void 0:t.length)&&a.createElement("div",{className:"pb-2"},a.createElement(b.W,{label:R("contentRegions"),name:"contentRegions",id:"contentRegions",value:o.values.contentRegions},(function(){return a.createElement("div",{className:"w-50"},a.createElement(S,{id:e.interactiveMetadata.id,options:e.contentRegions,selectedContentRegions:o.values.contentRegions,onUpdateContentRegions:function(e){return o.setFieldValue("contentRegions",e)}}))})),a.createElement(u.Z.Control.Feedback,{className:"d-block mt-n2",type:"invalid"},o.errors.contentRegions)),a.createElement(u.Z.Label,null,a.createElement(w.x,{namespace:I,phrase:"interactiveFeatures"})),a.createElement(d.Z,null,a.createElement(p.Z,null,a.createElement(u.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check"},a.createElement(b.n,{className:"form-check-input",label:R("preventScrubbingLabel"),name:"preventScrubbing",id:"preventScrubbing",type:"checkbox",checked:o.values.preventScrubbing}),a.createElement(u.Z.Label,{className:"form-check-label",htmlFor:"preventScrubbing"},a.createElement(w.x,{namespace:I,phrase:"preventScrubbingLabel"})," "),a.createElement("div",{className:"text-secondary"},a.createElement(w.x,{namespace:I,phrase:"preventScrubbingExplain"}))))),a.createElement(p.Z,null,a.createElement(u.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check"},a.createElement(b.n,{className:"form-check-input",label:R("immediateFeedbackLabel"),name:"immediateFeedback",id:"immediateFeedback",type:"checkbox",checked:o.values.immediateFeedback}),a.createElement(u.Z.Label,{className:"form-check-label",htmlFor:"immediateFeedback"},a.createElement(w.x,{namespace:I,phrase:"immediateFeedbackLabel"})," "),a.createElement("div",{className:"text-secondary"},a.createElement(w.x,{namespace:I,phrase:"immediateFeedbackExplain"})))))),a.createElement(h.u,null,a.createElement(h.u.Cancel,{onClick:r}),a.createElement(h.u.Submit,{variant:"dark",text:e.publish?R("publish"):R("save")})))}function j(e){var t,n,r,i,o=e.interactive,l=e.interactiveMetadata,c=e.onSubmit,s=e.onClickCancel,m=e.publish,u=e.imageCdnUrl,d={name:l.name||"",description:l.description,immediateFeedback:o.immediateFeedback,preventScrubbing:o.preventScrubbing};return(null===(t=e.contentRegions)||void 0===t?void 0:t.length)&&(d.contentRegions=Array.isArray(l.contentRegions)?l.contentRegions:l.contentRegions.data),a.createElement(g.n,{initialValues:d,validationSchema:(r=!!(null===(n=e.contentRegions)||void 0===n?void 0:n.length),i={name:v.Z_().trim().max(255,(function(){return R("titleTooLong")})).required((function(){return R("titleRequired")})).default(""),description:v.Z_().max(16e3,(function(){return R("descriptionTooLong")})).default("")},r&&(i.contentRegions=v.IX().min(1,"Resources must have a content region").default([])),v.Ry().shape(i)),allowInitialSubmit:!0,onSubmit:c},a.createElement(T,{interactiveMetadata:l,onClickCancel:s,publish:m,imageCdnUrl:u,contentRegions:e.contentRegions}))}var F=n(9111),L=n(5960),P=n(16714),V=n(39151),A=n(20768),Z=n(69883),U=n(22902),M=n(31908),z=n(14070),_=n(97291),D=n(9064),G=i.T.encloseNamespace("interactives.editInteractiveDetailsView");function $(e){var t,n=e.interactiveMetadataId,i=e.publish,u=e.closePopup,d=(0,r.I0)(),p=(0,Z.Z)(),f=(0,U.T)().hasPermissions,v=l.a.useBasicFetch(A.b.interactiveMetadata(n)),b=l.a.useBasicFetch(v.data?A.b.interactive(v.data.interactiveId):null),g=l.a.useBasicFetch(V.L.config());function h(){p.error(G("error")),u()}function y(){var e=(0,D.T)(v.data);s.k.logUserAction(e,{actionType:i?m.Vw.Publish:m.Vw.Edit,entity:m.py.Interactive,location:m.LZ.EditInteractiveDetails,workflowPhase:m.eu.Discard,descriptor:i?m.Iq.Publish:void 0}),u()}var E=!!v.data&&!!b.data&&!!g.data;return a.createElement(F.G,{title:G(i?"publishHeader":"editHeader"),closePopup:y,showLoadingSpinner:!E},a.createElement(j,{interactive:b.data,interactiveMetadata:v.data,onClickCancel:y,onSubmit:function(t){var a={id:b.data.id,name:t.name,duration:M.M.getDuration(v.data),immediateFeedback:!!t.immediateFeedback,preventScrubbing:!!t.preventScrubbing},r={name:t.name,description:t.description,status:i?L.X.Published:v.data.status},g=0,y=function(){g<1?g++:function(t){u(),p.success(G("success",{name:t,escapeText:!0}));var a=(0,D.T)(v.data);s.k.logUserAction(a,{actionType:i?m.Vw.Publish:m.Vw.Edit,entity:m.py.Interactive,location:m.LZ.EditInteractiveDetails,workflowPhase:i?m.eu.Complete:m.eu.Save,descriptor:i?m.Iq.Publish:void 0}),i&&(f(P.C.StudentExperience)?o.Q.C$.trigger({application:_.O.INTERACTIVES,action:z.e.Interactives.VIEW_INTERACTIVE,args:[e.interactiveMetadataId,c.m.slugify(v.data.name)]}):o.Q.C$.trigger({application:_.O.INTERACTIVES,action:z.e.Interactives.CONTRIBUTE_INTERACTIVE,args:[n]}))}(t.name)};l.a.fetch(d,A.b.updateInteractive(b.data.id,a,y,h)),l.a.fetch(d,A.b.updateInteractiveMetadata(v.data.id,r,y,h))},publish:i,imageCdnUrl:null===(t=g.data)||void 0===t?void 0:t.imageCdnUrl}))}},68050:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(95685),r=n.n(a),i=n(32735),o=n(46304),l=n(74512);const c=i.forwardRef((({bsPrefix:e,className:t,as:n="div",...a},i)=>{const c=(0,o.vE)(e,"row"),s=(0,o.pi)(),m=(0,o.zG)(),u=`${c}-cols`,d=[];return s.forEach((e=>{const t=a[e];let n;delete a[e],null!=t&&"object"==typeof t?({cols:n}=t):n=t;const r=e!==m?`-${e}`:"";null!=n&&d.push(`${u}${r}-${n}`)})),(0,l.jsx)(n,{ref:i,...a,className:r()(t,c,...d)})}));c.displayName="Row";const s=c}}]);
2
- //# sourceMappingURL=9329-5cf6baab9d-lite.chunk.js.map
2
+ //# sourceMappingURL=9329-798d826fc4-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/9329-5cf6baab9d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/interactives/utils/getInteractiveAnalyticsData.ts","file:///app/packages/libs/shared/src/components/select-content-region/select-content-region.scss","file:///app/packages/libs/shared/src/components/select-content-region/SelectContentRegion.tsx","file:///app/packages/libs/shared/src/apps/interactives/components/edit-interactive-details/EditInteractiveDetails.tsx","file:///app/packages/projects/lite/src/apps/interactives/views/edit-interactive-details/EditInteractiveDetailsView.tsx","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsDataPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport function getInteractiveAnalyticsData(\n interactiveMetadata: InteractiveMetadata,\n extraAnalyticsData: HashObject = {}\n): AnalyticsDataPayload {\n if (!interactiveMetadata)\n return null;\n\n const data: AnalyticsDataPayload = {\n ...extraAnalyticsData,\n id: interactiveMetadata.id,\n interactiveId: interactiveMetadata.interactiveId,\n name: interactiveMetadata.name,\n status: interactiveMetadata.status,\n originType: interactiveMetadata.originType\n };\n\n if (interactiveMetadata?._parentClip?.id)\n data.clip = { id: interactiveMetadata?._parentClip?.id };\n \n if (interactiveMetadata?._parentVideo?.id)\n data.video = { id: interactiveMetadata?._parentVideo?.id };\n \n return data;\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownMenu\":\"eDHti\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { ContentRegionObject } from 'libs/shared/interfaces';\n\nimport styles from './select-content-region.scss';\n\ninterface SelectContentRegionProps {\n id: string;\n options: ContentRegionObject[];\n selectedContentRegions: ContentRegionObject[];\n onUpdateContentRegions: (contentRegions: ContentRegionObject[]) => void;\n}\n\nexport function SelectContentRegion(props: SelectContentRegionProps): JSX.Element {\n function onToggleContentRegion(option: ContentRegionObject, isCurrentlyChecked: boolean): void {\n if (isCurrentlyChecked) {\n props.onUpdateContentRegions(props.selectedContentRegions.filter(c => c.id.toString() !== option.id.toString()));\n return;\n }\n\n props.onUpdateContentRegions(props.selectedContentRegions.concat(option));\n }\n\n function onToggleGlobalContentRegion(globalContentRegion: ContentRegionObject, isCurrentlyChecked: boolean) {\n if (isCurrentlyChecked) {\n props.onUpdateContentRegions([]);\n return;\n }\n\n props.onUpdateContentRegions([globalContentRegion]);\n }\n\n function getLabel(): string {\n if (props.selectedContentRegions?.length) {\n if (props.selectedContentRegions.length > 1)\n return `${props.selectedContentRegions.length} content regions`;\n \n return props.selectedContentRegions[0].name;\n }\n \n return 'None';\n }\n\n function isChecked(contentRegion: ContentRegionObject): boolean {\n return props.selectedContentRegions.some(cr => {\n return cr.id.toString() === contentRegion.id.toString();\n });\n }\n\n const globalContentRegion = props.options.find(c => c.systemName === ContentRegion.GLOBAL);\n const isGlobalChecked = isChecked(globalContentRegion);\n\n const nonGlobalContentRegions = props.options.filter(c => c.systemName !== ContentRegion.GLOBAL);\n\n return (\n <Dropdown>\n <Dropdown.Toggle\n id={props.id}\n variant='outline-dark'\n >\n {getLabel()}\n </Dropdown.Toggle>\n\n <Dropdown.Menu className={`${styles.dropdownMenu} px-2`}>\n <Checkbox\n key={globalContentRegion.id}\n label={globalContentRegion.name}\n name={globalContentRegion.id}\n id={globalContentRegion.id}\n onChange={() => onToggleGlobalContentRegion(globalContentRegion, isGlobalChecked)}\n checked={isGlobalChecked}\n className='my-1'\n />\n\n <Dropdown.Divider />\n\n {nonGlobalContentRegions.map((contentRegion: ContentRegionObject) => {\n return (\n <Checkbox\n key={contentRegion.id}\n label={contentRegion.name}\n name={contentRegion.id}\n id={contentRegion.id}\n onChange={() => onToggleContentRegion(contentRegion, isChecked(contentRegion))}\n checked={isChecked(contentRegion)}\n className={`my-1 ${isGlobalChecked ? 'disabled' : ''}`}\n disabled={isGlobalChecked}\n />\n );\n })}\n </Dropdown.Menu>\n </Dropdown>\n );\n}","import React from 'react';\nimport { Col, Form, Row } from 'react-bootstrap';\nimport { Form as FormikForm } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FieldWrapper, FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { SelectContentRegion } from 'libs/shared/components/select-content-region/SelectContentRegion';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { ContentRegionObject, EditDetailsRequest, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.editInteractiveDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getValidationSchema(requireContentRegion: boolean) {\n const schema: Yup.ObjectSchemaDefinition<EditDetailsRequest> = {\n name: Yup.string()\n .trim()\n .max(255, () => getPhrase('titleTooLong'))\n .required(() => getPhrase('titleRequired'))\n .default(''),\n\n description: Yup.string()\n .max(16000, () => getPhrase('descriptionTooLong'))\n .default('')\n };\n\n if (requireContentRegion) {\n schema.contentRegions = Yup.array<ContentRegionObject>()\n .min(1, 'Resources must have a content region')\n .default([]);\n }\n\n return Yup.object().shape<EditDetailsRequest>(schema);\n}\n\ninterface EditInteractiveDetailsFormProps {\n interactiveMetadata: InteractiveMetadata;\n onClickCancel: () => void;\n publish: boolean;\n imageCdnUrl: string;\n\n // This should only be used by Curator\n contentRegions?: ContentRegionObject[];\n}\n\nfunction EditInteractiveDetailsForm(props: EditInteractiveDetailsFormProps): React.ReactElement {\n const { interactiveMetadata, onClickCancel, imageCdnUrl } = props;\n\n const formikProps = useFormikContextWrapper<EditDetailsRequest>();\n\n return (\n <FormikForm>\n <div className='row form-group'>\n <div className='col-5'>\n <VideoThumbnail\n video={interactiveMetadata}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n imageCdnUrl={imageCdnUrl}\n preload\n />\n </div>\n <div className='col-7'>\n <h2 className='h6'>{formikProps.values.name}</h2>\n </div>\n </div>\n <FormField\n label={getPhrase('nameLabel')}\n type='text'\n name='name'\n id='name'\n placeholder={getPhrase('namePlaceholder')}\n autoFocus\n value={formikProps.values.name}\n />\n <FormField\n label={getPhrase('descriptionLabel')}\n component='textarea'\n name='description'\n id='description'\n placeholder={getPhrase('descriptionPlaceholder')}\n value={formikProps.values.description}\n />\n\n {/* content regions */}\n {!!props.contentRegions?.length && (\n <div className='pb-2'>\n <FormField\n label={getPhrase('contentRegions')}\n name='contentRegions'\n id='contentRegions'\n value={formikProps.values.contentRegions}\n >\n {() => (\n <div className='w-50'>\n <SelectContentRegion\n id={props.interactiveMetadata.id}\n options={props.contentRegions}\n selectedContentRegions={formikProps.values.contentRegions}\n onUpdateContentRegions={contentRegions => formikProps.setFieldValue('contentRegions', contentRegions)}\n />\n </div>\n )}\n </FormField>\n <Form.Control.Feedback className='d-block mt-n2' type='invalid'>\n {formikProps.errors.contentRegions as string}\n </Form.Control.Feedback>\n </div>\n )}\n\n {/* interactive features */}\n <Form.Label>\n <Text namespace={namespace} phrase={'interactiveFeatures'} />\n </Form.Label>\n <Row>\n <Col>\n <Form.Group className='form-group'>\n <div className='form-check'>\n <FieldWrapper\n className='form-check-input'\n label={getPhrase('preventScrubbingLabel')}\n name='preventScrubbing'\n id='preventScrubbing'\n type='checkbox'\n checked={formikProps.values.preventScrubbing}\n />\n <Form.Label className='form-check-label' htmlFor='preventScrubbing'>\n <Text namespace={namespace} phrase={'preventScrubbingLabel'} />\n &nbsp;\n </Form.Label>\n <div className='text-secondary'>\n <Text namespace={namespace} phrase={'preventScrubbingExplain'} />\n </div>\n </div>\n </Form.Group>\n </Col>\n <Col>\n <Form.Group className='form-group'>\n <div className='form-check'>\n <FieldWrapper\n className='form-check-input'\n label={getPhrase('immediateFeedbackLabel')}\n name='immediateFeedback'\n id='immediateFeedback'\n type='checkbox'\n checked={formikProps.values.immediateFeedback}\n />\n <Form.Label className='form-check-label' htmlFor='immediateFeedback'>\n <Text namespace={namespace} phrase={'immediateFeedbackLabel'} />\n &nbsp;\n </Form.Label>\n <div className='text-secondary'>\n <Text namespace={namespace} phrase={'immediateFeedbackExplain'} />\n </div>\n </div>\n </Form.Group>\n </Col>\n </Row>\n <PopupButtons>\n <PopupButtons.Cancel onClick={onClickCancel} />\n <PopupButtons.Submit variant='dark' text={props.publish ? getPhrase('publish') : getPhrase('save')} />\n </PopupButtons>\n </FormikForm>\n );\n}\n\ninterface EditInteractiveDetailsProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n onSubmit: (data: EditDetailsRequest) => void;\n onClickCancel: () => void;\n publish: boolean;\n imageCdnUrl: string;\n\n // This should only be used by Curator\n contentRegions?: ContentRegionObject[];\n}\n\nexport function EditInteractiveDetails(props: EditInteractiveDetailsProps): React.ReactElement {\n const {\n interactive,\n interactiveMetadata,\n onSubmit,\n onClickCancel,\n publish,\n imageCdnUrl\n } = props;\n\n const initialValues: EditDetailsRequest = {\n name: interactiveMetadata.name || '',\n description: interactiveMetadata.description,\n immediateFeedback: interactive.immediateFeedback,\n preventScrubbing: interactive.preventScrubbing\n };\n\n if (props.contentRegions?.length) {\n initialValues.contentRegions = Array.isArray(interactiveMetadata.contentRegions)\n ? interactiveMetadata.contentRegions\n : interactiveMetadata.contentRegions.data;\n }\n\n return (\n <FormWrapper<EditDetailsRequest>\n initialValues={initialValues}\n validationSchema={getValidationSchema(!!props.contentRegions?.length)}\n allowInitialSubmit\n onSubmit={onSubmit}\n >\n <EditInteractiveDetailsForm\n interactiveMetadata={interactiveMetadata}\n onClickCancel={onClickCancel}\n publish={publish}\n imageCdnUrl={imageCdnUrl}\n contentRegions={props.contentRegions}\n />\n </FormWrapper>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PublishDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EditInteractiveDetails } from 'libs/shared/apps/interactives/components/edit-interactive-details/EditInteractiveDetails';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, EditDetailsRequest, EditInteractiveMetadataRequest, EditInteractiveRequest, Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nconst namespace = 'interactives.editInteractiveDetailsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditInteractiveDetailsProps extends PopupViewProps {\n interactiveMetadataId: string;\n publish: boolean;\n}\n\nexport function EditInteractiveDetailsView(props: EditInteractiveDetailsProps): React.ReactElement {\n const { interactiveMetadataId, publish, closePopup } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const { hasPermissions } = usePermissions();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(interactiveMetadataId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function onError(): void {\n alerts.error(getPhrase('error'));\n closePopup();\n }\n\n function onSuccess(name: string): void {\n closePopup();\n alerts.success(getPhrase('success', { name, escapeText: true }));\n\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: publish ? UserAction.Publish : UserAction.Edit,\n entity: EntityType.Interactive,\n location: LocationContext.EditInteractiveDetails,\n workflowPhase: publish ? WorkflowPhase.Complete : WorkflowPhase.Save,\n descriptor: publish ? PublishDescriptor.Publish : undefined\n });\n\n if (!publish) return;\n\n if (hasPermissions(PermissionName.StudentExperience)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ props.interactiveMetadataId, TextHelper.slugify(interactiveMetadata.data.name) ]\n });\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.CONTRIBUTE_INTERACTIVE,\n args: [interactiveMetadataId]\n });\n }\n\n function onCancel(): void {\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: publish ? UserAction.Publish : UserAction.Edit,\n entity: EntityType.Interactive,\n location: LocationContext.EditInteractiveDetails,\n workflowPhase: WorkflowPhase.Discard,\n descriptor: publish ? PublishDescriptor.Publish : undefined\n });\n closePopup();\n }\n\n function onSubmit(data: EditDetailsRequest): void {\n const interactiveData: EditInteractiveRequest = {\n id: interactive.data.id,\n name: data.name,\n duration: VideoHelper.getDuration(interactiveMetadata.data),\n immediateFeedback: !!data.immediateFeedback,\n preventScrubbing: !!data.preventScrubbing\n };\n\n const interactiveMetadataData: EditInteractiveMetadataRequest = {\n name: data.name,\n description: data.description,\n status: publish ? CurationStatus.Published : interactiveMetadata.data.status\n };\n\n let count = 0;\n const success = () => {\n if (count < 1) {\n count++;\n return;\n }\n\n onSuccess(data.name);\n };\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.updateInteractive(\n interactive.data.id,\n interactiveData,\n success,\n onError\n )\n );\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.updateInteractiveMetadata(\n interactiveMetadata.data.id,\n interactiveMetadataData,\n success,\n onError\n )\n );\n }\n\n const dataLoaded = !!interactiveMetadata.data && !!interactive.data && !!config.data;\n\n return (\n <Popup\n title={publish ? getPhrase('publishHeader') : getPhrase('editHeader')}\n closePopup={onCancel}\n showLoadingSpinner={!dataLoaded}\n >\n <EditInteractiveDetails\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n onClickCancel={onCancel}\n onSubmit={onSubmit}\n publish={publish}\n imageCdnUrl={config.data?.imageCdnUrl}\n />\n </Popup>\n );\n}\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":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getInteractiveAnalyticsData","interactiveMetadata","extraAnalyticsData","data","interactiveId","status","originType","_parentClip","clip","_parentVideo","video","SelectContentRegion","isChecked","contentRegion","selectedContentRegions","some","cr","toString","globalContentRegion","find","c","systemName","ContentRegion","isGlobalChecked","nonGlobalContentRegions","filter","Dropdown","variant","Checkbox","isCurrentlyChecked","onUpdateContentRegions","onToggleGlobalContentRegion","checked","map","option","concat","getPhrase","LanguageService","EditInteractiveDetailsForm","onClickCancel","imageCdnUrl","VideoThumbnail","imageOptions","textPosition","ThumbnailTextPosition","preload","placeholder","autoFocus","component","description","contentRegions","setFieldValue","Row","Col","preventScrubbing","immediateFeedback","PopupButtons","text","publish","EditInteractiveDetails","requireContentRegion","schema","interactive","Array","isArray","trim","max","required","min","shape","EditInteractiveDetailsView","interactiveMetadataId","closePopup","dispatch","alerts","hasPermissions","usePermissions","InteractiveRequests","config","ConfigRequests","onError","error","onCancel","analyticsData","AnalyticsHelper","actionType","entity","location","workflowPhase","descriptor","Publish","undefined","dataLoaded","Popup","interactiveData","duration","VideoHelper","interactiveMetadataData","CurationStatus","count","success","escapeText","PermissionName","application","action","args","TextHelper","onSuccess","bsPrefix","Component","ref","decoratedBsPrefix","breakpoints","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","push","displayName"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/9329-798d826fc4-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/interactives/utils/getInteractiveAnalyticsData.ts","file:///app/packages/libs/shared/src/components/select-content-region/select-content-region.scss","file:///app/packages/libs/shared/src/components/select-content-region/SelectContentRegion.tsx","file:///app/packages/libs/shared/src/apps/interactives/components/edit-interactive-details/EditInteractiveDetails.tsx","file:///app/packages/projects/lite/src/apps/interactives/views/edit-interactive-details/EditInteractiveDetailsView.tsx","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsDataPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport function getInteractiveAnalyticsData(\n interactiveMetadata: InteractiveMetadata,\n extraAnalyticsData: HashObject = {}\n): AnalyticsDataPayload {\n if (!interactiveMetadata)\n return null;\n\n const data: AnalyticsDataPayload = {\n ...extraAnalyticsData,\n id: interactiveMetadata.id,\n interactiveId: interactiveMetadata.interactiveId,\n name: interactiveMetadata.name,\n status: interactiveMetadata.status,\n originType: interactiveMetadata.originType\n };\n\n if (interactiveMetadata?._parentClip?.id)\n data.clip = { id: interactiveMetadata?._parentClip?.id };\n \n if (interactiveMetadata?._parentVideo?.id)\n data.video = { id: interactiveMetadata?._parentVideo?.id };\n \n return data;\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownMenu\":\"eDHti\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { ContentRegionObject } from 'libs/shared/interfaces';\n\nimport styles from './select-content-region.scss';\n\ninterface SelectContentRegionProps {\n id: string;\n options: ContentRegionObject[];\n selectedContentRegions: ContentRegionObject[];\n onUpdateContentRegions: (contentRegions: ContentRegionObject[]) => void;\n}\n\nexport function SelectContentRegion(props: SelectContentRegionProps): JSX.Element {\n function onToggleContentRegion(option: ContentRegionObject, isCurrentlyChecked: boolean): void {\n if (isCurrentlyChecked) {\n props.onUpdateContentRegions(props.selectedContentRegions.filter(c => c.id.toString() !== option.id.toString()));\n return;\n }\n\n props.onUpdateContentRegions(props.selectedContentRegions.concat(option));\n }\n\n function onToggleGlobalContentRegion(globalContentRegion: ContentRegionObject, isCurrentlyChecked: boolean) {\n if (isCurrentlyChecked) {\n props.onUpdateContentRegions([]);\n return;\n }\n\n props.onUpdateContentRegions([globalContentRegion]);\n }\n\n function getLabel(): string {\n if (props.selectedContentRegions?.length) {\n if (props.selectedContentRegions.length > 1)\n return `${props.selectedContentRegions.length} content regions`;\n \n return props.selectedContentRegions[0].name;\n }\n \n return 'None';\n }\n\n function isChecked(contentRegion: ContentRegionObject): boolean {\n return props.selectedContentRegions.some(cr => {\n return cr.id.toString() === contentRegion.id.toString();\n });\n }\n\n const globalContentRegion = props.options.find(c => c.systemName === ContentRegion.GLOBAL);\n const isGlobalChecked = isChecked(globalContentRegion);\n\n const nonGlobalContentRegions = props.options.filter(c => c.systemName !== ContentRegion.GLOBAL);\n\n return (\n <Dropdown>\n <Dropdown.Toggle\n id={props.id}\n variant='outline-dark'\n >\n {getLabel()}\n </Dropdown.Toggle>\n\n <Dropdown.Menu className={`${styles.dropdownMenu} px-2`}>\n <Checkbox\n key={globalContentRegion.id}\n label={globalContentRegion.name}\n name={globalContentRegion.id}\n id={globalContentRegion.id}\n onChange={() => onToggleGlobalContentRegion(globalContentRegion, isGlobalChecked)}\n checked={isGlobalChecked}\n className='my-1'\n />\n\n <Dropdown.Divider />\n\n {nonGlobalContentRegions.map((contentRegion: ContentRegionObject) => {\n return (\n <Checkbox\n key={contentRegion.id}\n label={contentRegion.name}\n name={contentRegion.id}\n id={contentRegion.id}\n onChange={() => onToggleContentRegion(contentRegion, isChecked(contentRegion))}\n checked={isChecked(contentRegion)}\n className={`my-1 ${isGlobalChecked ? 'disabled' : ''}`}\n disabled={isGlobalChecked}\n />\n );\n })}\n </Dropdown.Menu>\n </Dropdown>\n );\n}","import React from 'react';\nimport { Col, Form, Row } from 'react-bootstrap';\nimport { Form as FormikForm } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FieldWrapper, FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { SelectContentRegion } from 'libs/shared/components/select-content-region/SelectContentRegion';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { ContentRegionObject, EditDetailsRequest, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.editInteractiveDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getValidationSchema(requireContentRegion: boolean) {\n const schema: Yup.ObjectSchemaDefinition<EditDetailsRequest> = {\n name: Yup.string()\n .trim()\n .max(255, () => getPhrase('titleTooLong'))\n .required(() => getPhrase('titleRequired'))\n .default(''),\n\n description: Yup.string()\n .max(16000, () => getPhrase('descriptionTooLong'))\n .default('')\n };\n\n if (requireContentRegion) {\n schema.contentRegions = Yup.array<ContentRegionObject>()\n .min(1, 'Resources must have a content region')\n .default([]);\n }\n\n return Yup.object().shape<EditDetailsRequest>(schema);\n}\n\ninterface EditInteractiveDetailsFormProps {\n interactiveMetadata: InteractiveMetadata;\n onClickCancel: () => void;\n publish: boolean;\n imageCdnUrl: string;\n\n // This should only be used by Curator\n contentRegions?: ContentRegionObject[];\n}\n\nfunction EditInteractiveDetailsForm(props: EditInteractiveDetailsFormProps): React.ReactElement {\n const { interactiveMetadata, onClickCancel, imageCdnUrl } = props;\n\n const formikProps = useFormikContextWrapper<EditDetailsRequest>();\n\n return (\n <FormikForm>\n <div className='row form-group'>\n <div className='col-5'>\n <VideoThumbnail\n video={interactiveMetadata}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n imageCdnUrl={imageCdnUrl}\n preload\n />\n </div>\n <div className='col-7'>\n <h2 className='h6'>{formikProps.values.name}</h2>\n </div>\n </div>\n <FormField\n label={getPhrase('nameLabel')}\n type='text'\n name='name'\n id='name'\n placeholder={getPhrase('namePlaceholder')}\n autoFocus\n value={formikProps.values.name}\n />\n <FormField\n label={getPhrase('descriptionLabel')}\n component='textarea'\n name='description'\n id='description'\n placeholder={getPhrase('descriptionPlaceholder')}\n value={formikProps.values.description}\n />\n\n {/* content regions */}\n {!!props.contentRegions?.length && (\n <div className='pb-2'>\n <FormField\n label={getPhrase('contentRegions')}\n name='contentRegions'\n id='contentRegions'\n value={formikProps.values.contentRegions}\n >\n {() => (\n <div className='w-50'>\n <SelectContentRegion\n id={props.interactiveMetadata.id}\n options={props.contentRegions}\n selectedContentRegions={formikProps.values.contentRegions}\n onUpdateContentRegions={contentRegions => formikProps.setFieldValue('contentRegions', contentRegions)}\n />\n </div>\n )}\n </FormField>\n <Form.Control.Feedback className='d-block mt-n2' type='invalid'>\n {formikProps.errors.contentRegions as string}\n </Form.Control.Feedback>\n </div>\n )}\n\n {/* interactive features */}\n <Form.Label>\n <Text namespace={namespace} phrase={'interactiveFeatures'} />\n </Form.Label>\n <Row>\n <Col>\n <Form.Group className='form-group'>\n <div className='form-check'>\n <FieldWrapper\n className='form-check-input'\n label={getPhrase('preventScrubbingLabel')}\n name='preventScrubbing'\n id='preventScrubbing'\n type='checkbox'\n checked={formikProps.values.preventScrubbing}\n />\n <Form.Label className='form-check-label' htmlFor='preventScrubbing'>\n <Text namespace={namespace} phrase={'preventScrubbingLabel'} />\n &nbsp;\n </Form.Label>\n <div className='text-secondary'>\n <Text namespace={namespace} phrase={'preventScrubbingExplain'} />\n </div>\n </div>\n </Form.Group>\n </Col>\n <Col>\n <Form.Group className='form-group'>\n <div className='form-check'>\n <FieldWrapper\n className='form-check-input'\n label={getPhrase('immediateFeedbackLabel')}\n name='immediateFeedback'\n id='immediateFeedback'\n type='checkbox'\n checked={formikProps.values.immediateFeedback}\n />\n <Form.Label className='form-check-label' htmlFor='immediateFeedback'>\n <Text namespace={namespace} phrase={'immediateFeedbackLabel'} />\n &nbsp;\n </Form.Label>\n <div className='text-secondary'>\n <Text namespace={namespace} phrase={'immediateFeedbackExplain'} />\n </div>\n </div>\n </Form.Group>\n </Col>\n </Row>\n <PopupButtons>\n <PopupButtons.Cancel onClick={onClickCancel} />\n <PopupButtons.Submit variant='dark' text={props.publish ? getPhrase('publish') : getPhrase('save')} />\n </PopupButtons>\n </FormikForm>\n );\n}\n\ninterface EditInteractiveDetailsProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n onSubmit: (data: EditDetailsRequest) => void;\n onClickCancel: () => void;\n publish: boolean;\n imageCdnUrl: string;\n\n // This should only be used by Curator\n contentRegions?: ContentRegionObject[];\n}\n\nexport function EditInteractiveDetails(props: EditInteractiveDetailsProps): React.ReactElement {\n const {\n interactive,\n interactiveMetadata,\n onSubmit,\n onClickCancel,\n publish,\n imageCdnUrl\n } = props;\n\n const initialValues: EditDetailsRequest = {\n name: interactiveMetadata.name || '',\n description: interactiveMetadata.description,\n immediateFeedback: interactive.immediateFeedback,\n preventScrubbing: interactive.preventScrubbing\n };\n\n if (props.contentRegions?.length) {\n initialValues.contentRegions = Array.isArray(interactiveMetadata.contentRegions)\n ? interactiveMetadata.contentRegions\n : interactiveMetadata.contentRegions.data;\n }\n\n return (\n <FormWrapper<EditDetailsRequest>\n initialValues={initialValues}\n validationSchema={getValidationSchema(!!props.contentRegions?.length)}\n allowInitialSubmit\n onSubmit={onSubmit}\n >\n <EditInteractiveDetailsForm\n interactiveMetadata={interactiveMetadata}\n onClickCancel={onClickCancel}\n publish={publish}\n imageCdnUrl={imageCdnUrl}\n contentRegions={props.contentRegions}\n />\n </FormWrapper>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PublishDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EditInteractiveDetails } from 'libs/shared/apps/interactives/components/edit-interactive-details/EditInteractiveDetails';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, EditDetailsRequest, EditInteractiveMetadataRequest, EditInteractiveRequest, Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nconst namespace = 'interactives.editInteractiveDetailsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditInteractiveDetailsProps extends PopupViewProps {\n interactiveMetadataId: string;\n publish: boolean;\n}\n\nexport function EditInteractiveDetailsView(props: EditInteractiveDetailsProps): React.ReactElement {\n const { interactiveMetadataId, publish, closePopup } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const { hasPermissions } = usePermissions();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(interactiveMetadataId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function onError(): void {\n alerts.error(getPhrase('error'));\n closePopup();\n }\n\n function onSuccess(name: string): void {\n closePopup();\n alerts.success(getPhrase('success', { name, escapeText: true }));\n\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: publish ? UserAction.Publish : UserAction.Edit,\n entity: EntityType.Interactive,\n location: LocationContext.EditInteractiveDetails,\n workflowPhase: publish ? WorkflowPhase.Complete : WorkflowPhase.Save,\n descriptor: publish ? PublishDescriptor.Publish : undefined\n });\n\n if (!publish) return;\n\n if (hasPermissions(PermissionName.StudentExperience)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ props.interactiveMetadataId, TextHelper.slugify(interactiveMetadata.data.name) ]\n });\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.CONTRIBUTE_INTERACTIVE,\n args: [interactiveMetadataId]\n });\n }\n\n function onCancel(): void {\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: publish ? UserAction.Publish : UserAction.Edit,\n entity: EntityType.Interactive,\n location: LocationContext.EditInteractiveDetails,\n workflowPhase: WorkflowPhase.Discard,\n descriptor: publish ? PublishDescriptor.Publish : undefined\n });\n closePopup();\n }\n\n function onSubmit(data: EditDetailsRequest): void {\n const interactiveData: EditInteractiveRequest = {\n id: interactive.data.id,\n name: data.name,\n duration: VideoHelper.getDuration(interactiveMetadata.data),\n immediateFeedback: !!data.immediateFeedback,\n preventScrubbing: !!data.preventScrubbing\n };\n\n const interactiveMetadataData: EditInteractiveMetadataRequest = {\n name: data.name,\n description: data.description,\n status: publish ? CurationStatus.Published : interactiveMetadata.data.status\n };\n\n let count = 0;\n const success = () => {\n if (count < 1) {\n count++;\n return;\n }\n\n onSuccess(data.name);\n };\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.updateInteractive(\n interactive.data.id,\n interactiveData,\n success,\n onError\n )\n );\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.updateInteractiveMetadata(\n interactiveMetadata.data.id,\n interactiveMetadataData,\n success,\n onError\n )\n );\n }\n\n const dataLoaded = !!interactiveMetadata.data && !!interactive.data && !!config.data;\n\n return (\n <Popup\n title={publish ? getPhrase('publishHeader') : getPhrase('editHeader')}\n closePopup={onCancel}\n showLoadingSpinner={!dataLoaded}\n >\n <EditInteractiveDetails\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n onClickCancel={onCancel}\n onSubmit={onSubmit}\n publish={publish}\n imageCdnUrl={config.data?.imageCdnUrl}\n />\n </Popup>\n );\n}\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":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getInteractiveAnalyticsData","interactiveMetadata","extraAnalyticsData","data","interactiveId","status","originType","_parentClip","clip","_parentVideo","video","SelectContentRegion","isChecked","contentRegion","selectedContentRegions","some","cr","toString","globalContentRegion","find","c","systemName","ContentRegion","isGlobalChecked","nonGlobalContentRegions","filter","Dropdown","variant","Checkbox","isCurrentlyChecked","onUpdateContentRegions","onToggleGlobalContentRegion","checked","map","option","concat","getPhrase","LanguageService","EditInteractiveDetailsForm","onClickCancel","imageCdnUrl","VideoThumbnail","imageOptions","textPosition","ThumbnailTextPosition","preload","placeholder","autoFocus","component","description","contentRegions","setFieldValue","Row","Col","preventScrubbing","immediateFeedback","PopupButtons","text","publish","EditInteractiveDetails","requireContentRegion","schema","interactive","Array","isArray","trim","max","required","min","shape","EditInteractiveDetailsView","interactiveMetadataId","closePopup","dispatch","alerts","hasPermissions","usePermissions","InteractiveRequests","config","ConfigRequests","onError","error","onCancel","analyticsData","AnalyticsHelper","actionType","entity","location","workflowPhase","descriptor","Publish","undefined","dataLoaded","Popup","interactiveData","duration","VideoHelper","interactiveMetadataData","CurationStatus","count","success","escapeText","PermissionName","application","action","args","TextHelper","onSuccess","bsPrefix","Component","ref","decoratedBsPrefix","breakpoints","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","push","displayName"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9417],{94644:(e,a,i)=>{i.d(a,{r:()=>l});var t=i(50242),n=i(81886),r=i(67058),s=i(14553),c=i(49267),o=i(49075),d={notFound:r.d,forbidden:{rating:s.q,yearLevel:s.q,region:c.a,privacy:s.q},badRequest:o._};function l(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},d),a);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==t.o.NotFound?r!==t.o.Forbidden?i.badRequest||n.Q.Ry.throw(new s.badRequest):i.forbidden||n.Q.Ry.throw(new s.forbidden.privacy):i.notFound||n.Q.Ry.throw(new s.notFound))}}},91286:(e,a,i)=>{i.d(a,{v:()=>s});var t=i(32735),n=i(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,a,i){var s=Array.isArray(e)?e:[e];(0,t.useEffect)((function(){s.forEach((function(e){(0,n.r)(e.statusCode,a,i)}))}),[r(s),a,i])}},44110:(e,a,i)=>{i.d(a,{i:()=>s});var t=i(20354),n=i(89454),r=i(86698),s=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,i=e.getFallbackPresentation,s=a||i();return t.a.useBasicFetch(!!s&&n.O.presentationAudiences(s.id))}},36073:(e,a,i)=>{i.r(a),i.d(a,{PlayClipViewV2:()=>q});var t=i(32735),n=i(50242),r=i(23481),s=i(20354),c=i(65858),o=i(78417),d=i(16714),l=i(67058),u=i(33803),p=i(43012),v=i(39151),m=i(1666),g=i(20768),y=i(31949),f=i(1575),h=i(26304),I=i(91286),P=i(22902),C=i(15311),A=i(79612),E=i(76753),V=i(51855),b=i(7179),F=i(49948),O=i(36873),R=i(27638),L=i(44110),G=i(35014),x=i(97816),k=i(81812),S=i(14085),T=r.T.encloseNamespace("shared.playClipV2"),w={notFound:l.d,forbidden:{privacy:u.G}};function q(e){var a,i,r,l,u,q=e.queryParams,N=q.context,U=q.contextId,_=q.mtv,M=(0,C.r)().hasProduct,j=(0,R.u)(c.LZ.PlayClip),B=j.setFavourite,D=j.canFavourite,H=(0,P.T)().hasPermissions,W=(0,V.G)().isPlugin,Q=s.a.useBasicFetch(y.N.currentUser()),K=s.a.useBasicFetch(v.L.config()),Y=s.a.useBasicFetch(p.e.clip(e.id)),Z=s.a.useBasicFetch(g.b.videoInteractives(e.id)),J=s.a.useBasicFetch(!!(null===(a=Y.data)||void 0===a?void 0:a._parentVideo)&&f.R.video(Y.data._parentVideo.id));(0,x.V)([J.data]);var z=s.a.useBasicFetch(!!(null===(i=Y.data)||void 0===i?void 0:i._parentVideo)&&p.e.videoClips(Y.data._parentVideo.id)),X=s.a.useBasicFetch(Y.statusCode===n.o.Forbidden&&p.e.clip(e.id,o.r.StripMetadata)),$=(0,O.k)({video:J.data,context:N,contextId:U,moviesAndTv:_,currentUser:Q.data}),ee=(0,L.i)(),ae=s.a.useBasicFetch((null===(r=Q.data)||void 0===r?void 0:r.isAuthenticated)&&m.h.yearGroups(Q.data.customerId)),ie=(0,k.a)(),te=(0,F.l)(e.id,!0),ne=(0,G.I)();return(0,A.M)(E.CG.getClipMetadata({content:Y.data,phraseContext:{phraseHandler:T,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,I.v)(Y,w,{forbidden:!0}),(0,x.V)(null!==(l=$.videos)&&void 0!==l?l:[]),(0,h.b)(X),(0,b.P)({id:e.id,app:"clips"}),Y.data&&Q.hasCompleted&&K.hasCompleted&&te.hasCompleted?t.createElement(S.S,{clip:Y.data,clips:z.data,interactives:Z.data,originalVideo:J.data,currentUser:Q.data,yearGroups:ae.data,relatedVideos:"playlist"===N?$:Object.assign(Object.assign({},$),{videos:[]}),canFavourite:D,setFavourite:B,hasProduct:M,queryParams:e.queryParams,audiences:ee.data,imageCdnUrl:K.data.imageCdnUrl,canManageVideoAccess:H(d.C.ManageVideoAccess),pointsOfInterest:te.items,featureAccess:ne,tableOfContentsId:null===(u=e.queryParams)||void 0===u?void 0:u.tocId,shouldShowSideTableOfContents:ie,isPlugin:W}):t.createElement(t.Fragment,null)}q.defaultProps={queryParams:{}}},14085:(e,a,i)=>{i.d(a,{S:()=>H});var t=i(32735),n=i(28400),r=i(5640),s=i(12059),c=i(51184),o=i(64921),d=i(95812),l=i(53709),u=i(71063),p=i(10439),v=i(35429),m=i(4594),g=i(16714),y=i(12754),f=i(22902),h=i(65332),I=i(76196),P=i(59598),C=i(31908),A=i(26492),E=i(9465),V=i(91479),b=i(47938),F=i(81024),O=i(78166),R=i(99742),L=i(14070),G=i(97291),x=i(22490),k=i(63010),S=i(14476),T=i(53256),w=i(83345),q=i(13231),N=i(51365),U=i(10671),_=i(10741),M="shared.playClipV2";function j(e){var a=(0,f.T)().hasPermissions,i=(0,U._)({location:U.i.VideoItem});return t.createElement("section",{className:"play-page-section",id:P.K.ClippedFrom,ref:function(a){var i;a&&(null===(i=e.headingRef)||void 0===i?void 0:i.current)&&e.headingRef.current.set(P.K.ClippedFrom,a)}},t.createElement("h2",{className:"h4 mb-0"},t.createElement(w.x,{namespace:M,phrase:"clippedFrom"})),t.createElement(N.M.Provider,{value:i},t.createElement(q.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:a,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return _.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink})))}const B={main:"iQ0Ie",expandedToc:"sIoV8"};var D=function(e,a,i){return function(t){return i?{application:G.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[t.id],params:{videoId:e,shareId:a}}:{application:G.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function H(e){var a,i,w,q,N,U,_,M,H,W=(0,v.g)(),Q=(0,f.T)().hasPermissions,K=C.M.getCanBeConsumed(e.clip).canConsume,Y=(0,k.Q)(e.tableOfContentsId),Z=Y.tableOfContentsActiveId,J=Y.setTableOfContentsActiveId,z=Y.controlledId,X=Y.setControlledId,$=Y.tableOfContentsExpanded,ee=Y.onToggleTableOfContents,ae=(0,c.Wp)(e.clip)&&e.featureAccess.canViewGlance,ie=(0,S.i)(ae),te=ie.headingRef,ne=ie.headingElements,re=ne.map((function(a){var i;return{id:a.id,name:T.d.getSectionHeading(a.id,{clips:e.clips,interactives:e.interactives,resources:null===(i=e.clip.resources)||void 0===i?void 0:i.data,isPlayClipPage:!0})}}));(0,h.D)({setActiveId:J,headingElements:ne,controlledId:z,setControlledId:X}),(0,I.P)(ne,e.tableOfContentsId);var se=C.M.isVideoTypeArchived(e.clip),ce=Q(g.C.StudentExperience),oe=t.useRef(!1);function de(){var e,a,i,t;oe.current=!(null===(a=null===(e=null==W?void 0:W.playerRef)||void 0===e?void 0:e.current)||void 0===a?void 0:a.isPaused()),null===(t=null===(i=null==W?void 0:W.playerRef)||void 0===i?void 0:i.current)||void 0===t||t.pause()}function le(){var e,a;oe.current&&(null===(a=null===(e=null==W?void 0:W.playerRef)||void 0===e?void 0:e.current)||void 0===a||a.play())}function ue(){var a,i;return!(!e.originalVideo||!(null===(a=e.clip._canBeConsumed)||void 0===a?void 0:a.value)||!(null===(i=e.currentUser)||void 0===i?void 0:i.isAuthenticated)||!e.hasProduct(y.x.Primary)||ce)}var pe="picture-in-picture"===W.mode||e.featureAccess.canViewPublicLayout,ve=null!==(i=null===(a=e.clips)||void 0===a?void 0:a.filter((function(a){return a.id.toString()!==e.clip.id.toString()})))&&void 0!==i?i:[];return t.createElement("div",{className:"px-4 play-page-sections-container"},t.createElement("main",{className:"".concat(B.main," ").concat(e.shouldShowSideTableOfContents&&$?B.expandedToc:e.shouldShowSideTableOfContents&&!$?"pe-4":void 0)},t.createElement(b.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:m.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),se&&t.createElement(A.T,{typeId:e.clip.typeId,hasStudentExperience:ce}),t.createElement("section",{id:P.K.Video,className:"mb-2 ".concat(u.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==te?void 0:te.current)&&te.current.set(P.K.Video,e)}},K&&t.createElement(p.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(w=e.queryParams)||void 0===w?void 0:w.context,contextId:null===(q=e.queryParams)||void 0===q?void 0:q.contextId,moviesAndTv:null===(N=e.queryParams)||void 0===N?void 0:N.mtv,playNext:null===(U=e.queryParams)||void 0===U?void 0:U.playNext,startTime:null!==(M=null===(_=e.queryParams)||void 0===_?void 0:_.t)&&void 0!==M?M:null===(H=e.queryParams)||void 0===H?void 0:H.startTime,mode:"default",location:"play-page"}),t.createElement("div",{className:pe?"":"d-none"},t.createElement(F.S,{video:e.clip,type:"pip"}))),t.createElement(V.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:ue()?{application:G.O.VIDEOS,action:L.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,n.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),ae?t.createElement(o.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var a;return null===(a=W.playerRef.current)||void 0===a?void 0:a.currentTime(e)},getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ae}):t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),t.createElement(l.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:D(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:R.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:te}),t.createElement(d.J,{video:e.clip,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:te,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),t.createElement(r.O,{clips:ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,headingRef:te,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},isPlugin:e.isPlugin}),ae&&t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),!!ue()&&t.createElement(j,{originalVideo:e.originalVideo,setFavourite:e.setFavourite,canFavourite:e.canFavourite,yearGroups:e.yearGroups,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:te,isPlugin:e.isPlugin,getClassroomGuideAppLink:x.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:x.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:x.W.getResourceGuidanceAppLink}),t.createElement(O.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{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})),t.createElement(E.h,{isExpanded:$,setIsExpanded:ee,items:re,activeId:Z,setControlledId:X,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},showInSide:e.shouldShowSideTableOfContents}))}}}]);
2
+ //# sourceMappingURL=9417-aa8d198d40-lite.chunk.js.map