@clickview/lite 0.48.0-rc.7 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
  3. package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
  4. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
  7. package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
  9. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
  11. package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
  12. package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
  13. package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
  14. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
  15. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
  16. package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
  17. package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
  18. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
  19. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
  21. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
  23. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
  24. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
  25. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
  26. package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
  27. package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
  29. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
  30. package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
  31. package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
  32. package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
  33. package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
  35. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
  37. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
  38. package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
  39. package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
  41. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
  43. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
  45. package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
  47. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
  49. package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
  51. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
  52. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
  53. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
  55. package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
  57. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
  59. package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-751dbbbf33-lite.chunk.js} +3 -3
  61. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-751dbbbf33-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
  63. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
  65. package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
  66. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
  67. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
  69. package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
  70. package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
  71. package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
  73. package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
  74. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
  75. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
  76. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
  77. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
  78. package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
  79. package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
  80. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
  81. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
  82. package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
  83. package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
  84. package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
  85. package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
  86. package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
  87. package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
  88. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
  89. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
  90. package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
  91. package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
  92. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
  93. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
  94. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
  95. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
  96. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
  97. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
  98. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
  99. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
  100. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
  101. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
  102. package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
  103. package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
  104. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
  105. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
  106. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
  107. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
  108. package/dist/scripts/{bundle-8f540a1154.min.js → bundle-c158cdd3a9.min.js} +3 -3
  109. package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-c158cdd3a9.min.js.map} +1 -1
  110. package/package.json +1 -1
  111. package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
  113. package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
  114. package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
  115. /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
  116. /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
  117. /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
  118. /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
  119. /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
  120. /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
  121. /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-751dbbbf33-lite.chunk.js.LICENSE.txt} +0 -0
  122. /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
  123. /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
  124. /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
  125. /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
  126. /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
  127. /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
  128. /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-c158cdd3a9.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3042],{91053:(e,t,n)=>{n.d(t,{B:()=>c});var r=n(32735),a=2;function c(e){var t;return(null===(t=e.availableCurriculums)||void 0===t?void 0:t.length)<a||!e.selectedCurriculum?r.createElement(r.Fragment,null):r.createElement("select",{className:"mb-3 form-select ".concat(e.className),onChange:function(t){return e.onChangeCurriculum(t.target.value)},value:e.selectedCurriculum.id},e.availableCurriculums.map((function(e){return r.createElement("option",{key:e.id,id:e.id,value:e.id},e.name)})))}},45261:(e,t,n)=>{n.d(t,{h:()=>S});var r,a=n(32735),c=n(44599),i=n(83345);!function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(r||(r={}));var l=n(23481),o=n(23232),u="shared.curriculumLinks",s=l.T.encloseNamespace(u);function m(e){return a.createElement(o.u,{className:"pt-3"},a.createElement(o.u.Image,{src:e.emptyStateUrl,altText:s("emptyInfo"),size:"small"}),a.createElement(o.u.Heading,null,a.createElement(i.x,{namespace:u,phrase:"emptyHeading"})),a.createElement(o.u.Info,null,a.createElement(i.x,{namespace:u,phrase:"emptyInfo"})))}var d=n(22161);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function v(e,t,n){var r;return r=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t),(t="symbol"==p(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){return 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 r,a,c,i,l=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=c.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n=Object.prototype.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)?y(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var h=/(.*)\s\((.*)?\)/i,g="shared.curriculumLinks",b="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block";function E(e){function t(){var t=b+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var n=a.useRef();return a.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),a.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},a.createElement(i.x,{namespace:g,phrase:"noCode"}))),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},e.leaf.name)),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function C(e){var t,n,c,i={},l=!1;function o(e){var t="mb-2";return e.name||l?t:t+" ms-4 "+d.Z.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[r.Area].map((function(e){return e.name})).join(" - ");i[t]?e[r.Leaf].forEach((function(e){i[t].push(e),e.name&&(l=!0)})):i[t]=e[r.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(b," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[r.Audience].name,n=e.linkSet[r.Subject].name,(c=t.match(h))?"".concat(c[1]," • ").concat(c[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(d.Z.curriculumSubject)},Object.keys(i).map((function(t,n){return a.createElement("div",{key:n,className:d.Z.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},i[t].map((function(t){return a.createElement("li",{key:t.id,className:o(t)},a.createElement(E,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:l}))}))))}))))}function S(e){var t,n,l=f(a.useState(0),2),o=l[0],u=l[1],s=f(a.useState(!1),2),p=s[0],y=s[1],h=f(a.useState(!1),2),b=h[0],E=h[1],S=f(a.useState([]),2),k=S[0],A=S[1];function I(e){u((function(t){return t>=e?t:e}))}a.useEffect((function(){var t;e.checkAllCurriculums&&!(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)&&(E(!0),e.checkAllCurriculums().then((function(e){e.length&&y(!0),A(e)})).finally((function(){return E(!1)})))}),[null===(t=e.curriculumLinks)||void 0===t?void 0:t.length]);var w={};return e.curriculumLinks.forEach((function(e){var t=null,n=null,a=[],c=[];e.forEach((function(e){switch(e.type){case r.Subject:t=e;break;case r.Audience:n=e;break;case r.Area:a.push(e);break;case r.Leaf:c.push(e)}}));var i="".concat(t.id,":").concat(n.id);w[i]?w[i].areasAndLeaves.push(v(v({},r.Area,a),r.Leaf,c)):w[i]=v(v(v({},r.Subject,t),r.Audience,n),"areasAndLeaves",[v(v({},r.Area,a),r.Leaf,c)])})),b?a.createElement(c.Z,null):(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)||!e.emptyStateUrl||p||b?p?a.createElement("div",null,a.createElement("div",{className:"mb-3"},a.createElement(i.x,{namespace:g,phrase:"currentEmpty"})),a.createElement("div",{className:"mb-3"},a.createElement(i.x,{namespace:g,phrase:"currentEmptyInfo"})),k.map((function(t){return a.createElement("div",{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(d.Z.tag," me-2"),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},a.createElement("div",{className:"bg-white ".concat(d.Z.cover," rounded-circle")},a.createElement("img",{src:t.cover.url,alt:t.name,className:"rounded-circle"})),t.name)}))):a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(w).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:d.Z.curriculumSet},a.createElement(C,{linkSet:w[e],trySetMaxCodeWidth:I,codeWidth:o}))}))):a.createElement(m,{emptyStateUrl:e.emptyStateUrl})}},44599:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(32735);var a=function(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),r.createElement("div",null,r.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),r.createElement("div",{className:"mb-2 d-flex"},r.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),r.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function c(){return r.createElement("div",null,r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",null,r.createElement(a,null)))}},3042:(e,t,n)=>{n.d(t,{j:()=>ie});var r=n(32735),a=n(23481),c=n(28400),i=n(65858),l=n(42029),o=n(83345),u=n(49439);const s={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var d="shared.copyrightDisclaimer",p=150;function v(e){var t,n,a,c=(n=(0,u.L)({}),a=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,c,i,l=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=c.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(n,a)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n=Object.prototype.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)?m(e,t):void 0}}(n,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=c[0],v=c[1];return r.createElement("div",{ref:i,className:e.className},r.createElement("p",{className:"".concat(s.copyrightDisclaimer," mb-1")},r.createElement(o.x,{namespace:d,phrase:"copyrightDisclaimer"})),r.createElement(l.Z,{target:i.current,show:v,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=i.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<p?e.overflowPlacement:e.placement},r.createElement("div",{className:"".concat(s.overlayContainer," mw-100 bg-white border rounded-3 p-2")},r.createElement("p",null,r.createElement(o.x,{namespace:d,phrase:"warning"})),r.createElement("p",{className:"fw-semibold mb-0"},r.createElement(o.x,{namespace:d,phrase:"sharing"})))))}var f=n(42648),y=n(75896),h=n(69883),g=n(44599),b=n(91053),E=n(45261),C=n(22161);function S(e,t){return 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 r,a,c,i,l=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=c.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n=Object.prototype.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)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var A="shared.curriculumLinks",I=a.T.encloseNamespace(A);function w(e){var t=e.curriculums,n=t.hasLoaded,a=t.activeCurriculum,c=t.availableCurriculums,i=t.curriculumLinks,l=t.updateCurriculum,u=S(r.useState(!n),2),s=u[0],m=u[1],d=S(r.useState(),2),p=d[0],v=d[1],k=(0,h.Z)();function w(e){var t,n,r=c.find((function(t){return t.id.toString()===e}));(null==r?void 0:r.id)&&(null===(t=null==p?void 0:p.id)||void 0===t?void 0:t.toString())!==(null===(n=null==r?void 0:r.id)||void 0===n?void 0:n.toString())&&(v(r),m(!0),l(r,null,(function(){v(p),m(!1),k.error(I("updateFailed"))})))}r.useEffect((function(){n&&(p||v(null!=a?a:y.m.first(c)),m(!1))}),[null==a?void 0:a.id,n]);var N="function"==typeof e.onClickClose;return r.createElement("div",{className:"rounded border mb-3 position-relative"},r.createElement(f.$B,{autoHeight:!0,autoHeightMax:e.height},r.createElement("div",{className:"p-3"},r.createElement("h2",{className:"h6 me-2 h-100"},r.createElement(o.x,{namespace:A,phrase:"heading"})),r.createElement(b.B,{availableCurriculums:c,onChangeCurriculum:w,selectedCurriculum:p,className:C.Z.dropdown}),s?r.createElement(g.Z,null):r.createElement(E.h,{curriculumLinks:i,emptyStateUrl:e.emptyStateUrl,checkAllCurriculums:e.checkAllCurriculums,onChangeCurriculum:w}))),N&&r.createElement("button",{type:"button",className:"btn-close ".concat(C.Z.closeButton),"aria-label":"Close",onClick:e.onClickClose}))}var N=n(19670),L=n(32614),x=n(11518),T=n(15446),j=n(47862),O=n(9098),U=n(71063),R=n(10439),P=n(35429),M=n(4594),V=n(16714),W=n(58704),_=n(22902),G=n(9907),Z=n(59598),D=n(13375),B=n(31908),F=n(26492),H=n(57654),z=n(47938),K=n(81024),Y=n(78166),$=n(99719),q=n(42571),X=n(99742),J=n(14070),Q=n(97291),ee=n(90102),te=n(22490),ne=n(99092);function re(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ae="shared.playPage",ce=a.T.encloseNamespace(ae);function ie(e){var t,n,a,l,u,s,m,d,p,f=(0,P.g)(),y=(0,_.T)().hasPermissions,h=B.M.getCanBeConsumed(e.video).canConsume,g=e.featureAccess.canWatchPublicly(e.video.id),b=e.imageCdnUrl,E=B.M.isVideoTypeArchived(e.video),C=y(V.C.StudentExperience),S=r.useRef(null),k=r.useRef(null);(0,G.P)([S.current,k.current],e.tableOfContentsId);var A,I,ie=r.useRef(!1),le=(0,L.Wp)(e.video,e.glanceTheme)&&e.featureAccess.canViewGlance,oe=(A=r.useState({view:"loading",referrer:null}),I=2,function(e){if(Array.isArray(e))return e}(A)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,c,i,l=[],o=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=c.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(A,I)||function(e,t){if(e){if("string"==typeof e)return re(e,t);var n=Object.prototype.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)?re(e,t):void 0}}(A,I)||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.")}()),ue=oe[0],se=oe[1];r.useEffect((function(){e.glanceLoaded&&se({view:e.glanceTheme?"v@g":"details",referrer:null})}),[e.glanceLoaded,e.glanceTheme]);var me=(0,ne.lU)(),de=(0,ne.jh)(e.video,C),pe="picture-in-picture"===f.mode||!g&&e.featureAccess.canViewPublicLayout,ve=!(!e.featureAccess.canViewCurriculumLinks||!e.curriculums.customerHasCurriculumLinks);return r.createElement(o.D.Provider,{value:ae},r.createElement(z.W,{restrictions:e.video._restrictions,yearGroups:e.yearGroups,objectId:e.video.id,objectTypeId:M.E.Video,canManageVideoAccess:e.canManageVideoAccess}),E&&r.createElement(F.T,{typeId:e.video.typeId,hasStudentExperience:C}),r.createElement("section",{className:"mb-2 ".concat(U.M.GLOBAL_PLAYER_SELECTOR)},(h||g)&&r.createElement(R.r,{key:e.video.id,objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:null===(t=e.params)||void 0===t?void 0:t.context,contextId:null===(n=e.params)||void 0===n?void 0:n.contextId,playNext:null===(a=e.params)||void 0===a?void 0:a.playNext,moviesAndTv:null===(l=e.params)||void 0===l?void 0:l.mtv,startTime:null!==(s=null===(u=e.params)||void 0===u?void 0:u.t)&&void 0!==s?s:null===(m=e.params)||void 0===m?void 0:m.startTime,endTime:null===(d=e.params)||void 0===d?void 0:d.endTime,mode:"default",location:"play-page"}),r.createElement("div",{className:pe?"":"d-none"},r.createElement(K.S,{video:e.video,appLink:{application:Q.O.SIGN_UP,action:J.e.SignUp.SIGN_UP},type:"picture-in-picture"===f.mode?"pip":"public"}))),r.createElement(H.v,{media:e.video,yearGroups:e.yearGroups,audiences:e.audiences,getSeriesAppLink:function(t){return me.getSeriesAppLink(t,e.params.mtv)},featureAccess:e.featureAccess,shareId:e.shareId}),r.createElement("section",{className:"".concat("v@g"===ue.view?"d-block":"d-none")},r.createElement(N.o,{theme:e.glanceTheme,video:e.video,pointsOfInterest:e.pointsOfInterest,onClickShowDescription:function(){return se({view:"details",referrer:"v@g"})},onClickShowCurriculumLinks:ve&&function(){return se({view:"curriculumLinks",referrer:"v@g"})},setStartTime:function(e){var t;return null===(t=f.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:me.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout})),r.createElement("section",{className:"".concat("details"===ue.view?"d-block":"d-none")},r.createElement($.X,{video:e.video,onLaunchImmersiveReader:function(){var e,t,n,r;ie.current=!(null===(t=null===(e=null==f?void 0:f.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(r=null===(n=null==f?void 0:f.playerRef)||void 0===n?void 0:n.current)||void 0===r||r.pause()},onExitImmersiveReader:function(){var e,t;ie.current&&(null===(t=null===(e=null==f?void 0:f.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())},hideTags:le,onClickClose:le&&function(){return se({view:"v@g",referrer:"details"})},onClickShowCurriculumLinks:ve&&function(){return se({view:"curriculumLinks",referrer:"details"})},getTagAppLink:me.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout})),"curriculumLinks"===ue.view&&r.createElement("section",null,r.createElement(w,{height:ee.x,curriculums:e.curriculums,onClickClose:function(){return se({view:ue.referrer,referrer:"curriculumLinks"})},emptyStateUrl:X.W.EmptyStates.CURRICULUM_LINKS,checkAllCurriculums:e.checkAllCurriculum})),r.createElement("section",{className:"".concat("loading"===ue.view?"d-block":"d-none")},r.createElement(q.H,null)),B.M.isBroadcast(e.video)&&r.createElement(v,{placement:"bottom-end",className:"d-flex justify-content-end mt-n2"}),!!(null==de?void 0:de.length)&&r.createElement("section",{className:"pb-3",id:Z.K.Resources,ref:S},r.createElement(x.kM,{name:ce("resources",{count:de.length}),contents:W.z.PlayPageResources,collection:de,prefetched:!0,childComponent:O.R,extraChildComponentProps:{imageCdnUrl:b,imageErrorFallbackUrl:X.W.Fallbacks.RESOURCE_THUMBNAIL,actionBehaviour:e.featureAccess.canViewResourceItems?"normal":"public",location:"play-page",titlePosition:"above",hideTypeBadge:!0},getChildAppLink:me.getResourceAppLink(null===(p=e.video)||void 0===p?void 0:p.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsOptions:e.featureAccess.canViewResourceItems?{}:{workflowPhase:i.eu.Start,descriptor:i.Yu.SignUp},analyticsData:{widgetId:"resources"}})),e.featureAccess.canViewInteractives&&!D.U.isEmpty(e.video.interactives)&&r.createElement("section",{className:"pb-3",id:Z.K.Interactives,ref:k},r.createElement(x.kM,{name:ce("interactives",{count:D.U.length(e.video.interactives)}),contents:W.z.Interactives,collection:e.video.interactives.data,prefetched:!0,getChildAppLink:function(e){return{application:Q.O.INTERACTIVES,action:J.e.Interactives.VIEW_INTERACTIVE,args:[e.id,c.m.slugify(e.name)]}},childComponent:j.K,extraChildComponentProps:{video:e.video,questionsAppLink:{application:Q.O.INTERACTIVES,action:J.e.Interactives.PREVIEW_QUESTIONS},imageCdnUrl:e.imageCdnUrl},analyticsData:{widgetId:"interactives"}})),e.featureAccess.canViewClips&&!D.U.isEmpty(e.video.clips)&&r.createElement("section",{className:"pb-3"},r.createElement(x.kM,{name:ce("clips",{count:D.U.length(e.video.clips)}),contents:W.z.Clips,collection:e.video.clips.data,prefetched:!0,getChildAppLink:function(e){return{application:Q.O.CLIPS,action:J.e.Clips.PLAY_CLIP,args:[e.id,c.m.slugify(e.name)]}},childComponent:T.C,extraChildComponentProps:{video:e.video,imageCdnUrl:e.imageCdnUrl},analyticsData:{widgetId:"clips"}})),r.createElement("section",null,r.createElement(Y.Z,{currentVideo:e.video,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,currentUser:e.currentUser,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,n){return te.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv}))},audiences:e.audiences,moviesAndTv:e.params.mtv})))}},22161:(e,t,n)=>{n.d(t,{Z:()=>r});const r={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD"}}}]);
2
- //# sourceMappingURL=3042-6650521d8b-lite.chunk.js.map
2
+ //# sourceMappingURL=3042-7c1b5e4ff7-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/3042-6650521d8b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumDropdown.tsx","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksWithScrollbar.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/PlayPage.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss"],"sourcesContent":["import React from 'react';\n\nimport { Presentation } from 'libs/shared/interfaces';\n\nconst MIN_CURRICULUMS = 2;\n\ninterface CurriculumDropdownProps {\n availableCurriculums: Presentation[];\n onChangeCurriculum: (id: string) => void;\n selectedCurriculum?: Presentation;\n className?: string;\n}\n\nexport function CurriculumDropdown(props: CurriculumDropdownProps): JSX.Element {\n // No need to show a dropdown if they don't have enough curriculums\n if (props.availableCurriculums?.length < MIN_CURRICULUMS || !props.selectedCurriculum)\n return <></>;\n\n return (\n <select\n className={`mb-3 form-select ${props.className}`}\n onChange={e => props.onChangeCurriculum(e.target.value)}\n value={props.selectedCurriculum.id}\n >\n {props.availableCurriculums.map(curriculum => {\n return (\n <option\n key={curriculum.id}\n id={curriculum.id}\n value={curriculum.id}\n >\n {curriculum.name}\n </option>\n );\n })}\n </select>\n );\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Presentation } from 'libs/shared/interfaces';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks: Curriculum[][];\n emptyStateUrl?: string;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n onChangeCurriculum?: (id: string) => void;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n const [ showOtherCurriculums, setShowOtherCurriculums ] = React.useState(false);\n const [ loadingOther, setLoadingOther ] = React.useState(false);\n const [ curriculumTags, setCurriculumTags ] = React.useState([]);\n\n React.useEffect(() => {\n if (props.checkAllCurriculums && !props.curriculumLinks?.length) {\n setLoadingOther(true);\n // only fetch other curriculums when this curriculum is displayed\n props.checkAllCurriculums().then(data => {\n if (data.length) {\n setShowOtherCurriculums(true);\n }\n\n setCurriculumTags(data);\n }).finally(() => setLoadingOther(false));\n }\n }, [props.curriculumLinks?.length]);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets: { [subjectAndAudienceIdKey: string]: CurriculumStructure } = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n\n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n\n const key = `${subject.id}:${audience.id}`;\n\n if (curriculumLinkSets[key]) {\n curriculumLinkSets[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n\n return;\n }\n\n curriculumLinkSets[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n if (loadingOther) {\n return <PartialCurriculumLinks />;\n }\n\n if (!props.curriculumLinks?.length) {\n // only if all other curriculums don't have links we render the empty state\n if (props.emptyStateUrl && !showOtherCurriculums && !loadingOther)\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n if (showOtherCurriculums) {\n return (\n <div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmpty' />\n </div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmptyInfo' />\n </div>\n {curriculumTags.map(t => (\n <div\n key={t.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} me-2`}\n onClick={() => props.onChangeCurriculum(t.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle`}>\n <img src={t.cover.url} alt={t.name} className='rounded-circle'/>\n </div>\n {t.name}\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurriculumData, Presentation } from 'libs/shared/interfaces';\n\nimport { PartialCurriculumLinks } from './partial-loading/PartialCurriculumLinks';\nimport { CurriculumDropdown } from './CurriculumDropdown';\nimport { CurriculumLinks } from './CurriculumLinks';\n\nimport styles from './curriculum-links.scss';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksWithScrollbarProps {\n curriculums: CurriculumData;\n emptyStateUrl: string;\n height?: number;\n onClickClose?: () => void;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n}\n\nexport function CurriculumLinksWithScrollbar(props: CurriculumLinksWithScrollbarProps): JSX.Element {\n const {\n hasLoaded,\n activeCurriculum: currentCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum\n } = props.curriculums;\n\n const [ showPartialLoading, setShowPartialLoading ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(currentCurriculum ?? ArrayHelper.first(availableCurriculums));\n \n setShowPartialLoading(false);\n }, [ currentCurriculum?.id, hasLoaded ]);\n\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowPartialLoading(true);\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowPartialLoading(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, null, onError);\n }\n\n const canClose = typeof props.onClickClose === 'function';\n\n return (\n <div className='rounded border mb-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n <h2 className='h6 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n\n <CurriculumDropdown\n availableCurriculums={availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={selectedCurriculum}\n className={styles.dropdown}\n />\n\n {showPartialLoading\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={props.emptyStateUrl}\n checkAllCurriculums={props.checkAllCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n />\n )}\n </div>\n </Scrollbars>\n\n {canClose && (\n <button\n type='button'\n className={`btn-close ${styles.closeButton}`}\n aria-label='Close'\n onClick={props.onClickClose}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SignUpDescriptors, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { CurriculumLinksWithScrollbar } from 'libs/shared/components/curriculum-links/CurriculumLinksWithScrollbar';\nimport { LanguageNamespaceContext } 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 { 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 { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, CurriculumData, FavouriteFunc, Interactive, PointOfInterest, Presentation, PresentationAudience, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { CollectionHelper } from 'libs/shared/utils/CollectionHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/PlayPageTitleAndActions';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { VideoDetailsWithScrollbar } from 'shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'shared/components/video-details/VideoDetailsPartial';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { MINIMUM_GLANCE_HEIGHT } from 'shared/constants/MinimumGlanceHeight';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getAppLinks, getResources } from './PlayPageUtils';\n\nconst namespace = 'shared.playPage';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype DetailsViewType = {\n view: 'v@g' | 'details' | 'curriculumLinks' | 'loading';\n referrer: 'v@g' | 'details' | 'curriculumLinks';\n};\n\ninterface PlayPageProps {\n video: Video;\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n glanceTheme?: Theme;\n glanceLoaded: boolean;\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n checkAllCurriculum?: () => Promise<Presentation[]>\n}\n\nexport function PlayPage(props: PlayPageProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n const canViewPublicly = props.featureAccess.canWatchPublicly(props.video.id);\n\n const { imageCdnUrl } = props;\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\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 /**\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.video, 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 const appLinkFns = getAppLinks();\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 const resourcesWidget = getResources(props.video, hasStudentExperience);\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || (!canViewPublicly && props.featureAccess.canViewPublicLayout);\n\n const hasCurriculumLinks = !!(props.featureAccess.canViewCurriculumLinks &&\n props.curriculums.customerHasCurriculumLinks);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n\n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n \n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience}/>}\n \n <section className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}>\n {(canConsume || canViewPublicly) &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n }\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.video}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n getSeriesAppLink={series => appLinkFns.getSeriesAppLink(series, props.params.mtv)}\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.video}\n pointsOfInterest={props.pointsOfInterest}\n onClickShowDescription={() => setDetailsView({ view: 'details', referrer: 'v@g' })}\n onClickShowCurriculumLinks={hasCurriculumLinks && (() => setDetailsView({ view: 'curriculumLinks', referrer: 'v@g' }))}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n\n <section className={`${detailsView.view === 'details' ? 'd-block' : 'd-none'}`}>\n <VideoDetailsWithScrollbar\n video={props.video}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n hideTags={hasGlance}\n onClickClose={hasGlance && (() => setDetailsView({ view: 'v@g', referrer: 'details' }))}\n onClickShowCurriculumLinks={hasCurriculumLinks && (() => setDetailsView({ view: 'curriculumLinks', referrer: 'details' }))}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n\n {detailsView.view === 'curriculumLinks' && (\n <section >\n <CurriculumLinksWithScrollbar\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n onClickClose={(() => setDetailsView({ view: detailsView.referrer, referrer: 'curriculumLinks' }))}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n checkAllCurriculums={props.checkAllCurriculum}\n />\n </section>\n )}\n\n <section className={`${detailsView.view === 'loading' ? 'd-block' : 'd-none'}`}>\n <VideoDetailsPartial />\n </section>\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-end' className='d-flex justify-content-end mt-n2' />}\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,\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={appLinkFns.getResourceAppLink(\n props.video?.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 {props.featureAccess.canViewInteractives && !CollectionHelper.isEmpty(props.video.interactives) && (\n <section className='pb-3' id={PlayPageAnchor.Interactives} ref={interactivesRef}>\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('interactives', { count: CollectionHelper.length(props.video.interactives) })}\n contents={WidgetContents.Interactives}\n collection={props.video.interactives.data}\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.video,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.imageCdnUrl\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n </section>\n )}\n\n {props.featureAccess.canViewClips && !CollectionHelper.isEmpty(props.video.clips) && (\n <section className='pb-3'>\n <FixedWidget<ClipWidgetItemProps>\n name={getPhrase('clips', { count: CollectionHelper.length(props.video.clips) })}\n contents={WidgetContents.Clips}\n collection={props.video.clips.data}\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.video, imageCdnUrl: props.imageCdnUrl }}\n analyticsData={{ widgetId: 'clips' }}\n />\n </section>\n )}\n\n <section>\n <RelatedVideos\n currentVideo={props.video}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv\n })}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n />\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\"};"],"names":["MIN_CURRICULUMS","CurriculumDropdown","props","availableCurriculums","length","selectedCurriculum","className","onChange","e","onChangeCurriculum","target","value","id","map","curriculum","key","name","CurriculumType","namespace","getPhrase","LanguageService","CurriculumLinksEmptyState","EmptyState","src","emptyStateUrl","altText","size","Text","phrase","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","Area","ca","join","Leaf","push","Audience","Subject","match","Object","keys","i","CurriculumLinks","setCodeWidth","showOtherCurriculums","setShowOtherCurriculums","loadingOther","setLoadingOther","curriculumTags","setCurriculumTags","currentVal","checkAllCurriculums","curriculumLinks","then","data","curriculumLinkSets","subject","audience","areas","leaves","curriculumObj","type","PartialCurriculumLinks","t","onClick","toString","cover","url","alt","linkSetKey","PartialCurriculumLinkSection","CONTAINER_HEIGHT","CopyrightDisclaimer","isHovering","Overlay","show","placement","overflowPlacement","document","documentElement","clientHeight","bottom","CurriculumLinksWithScrollbar","curriculums","hasLoaded","currentCurriculum","activeCurriculum","updateCurriculum","showPartialLoading","setShowPartialLoading","setSelectedCurriculum","alerts","curriculumId","newCurriculum","find","c","error","ArrayHelper","canClose","onClickClose","autoHeight","autoHeightMax","height","PlayPage","playerContext","hasPermissions","usePermissions","canConsume","VideoHelper","video","canViewPublicly","featureAccess","canWatchPublicly","imageCdnUrl","isArchived","hasStudentExperience","PermissionName","resourcesRef","interactivesRef","useTableOfContentsScroll","tableOfContentsId","shouldPlayOnExitImmersiveReader","hasGlance","glanceTheme","canViewGlance","view","referrer","detailsView","setDetailsView","glanceLoaded","appLinkFns","resourcesWidget","showPlayerPlaceholder","mode","canViewPublicLayout","hasCurriculumLinks","canViewCurriculumLinks","customerHasCurriculumLinks","RestrictionBanner","restrictions","_restrictions","yearGroups","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","shareId","context","params","contextId","playNext","moviesAndTv","mtv","startTime","endTime","location","PlayerPlaceholder","appLink","application","action","PlayPageTitleAndActions","media","audiences","getSeriesAppLink","series","VideoAtAGlance","theme","pointsOfInterest","onClickShowDescription","onClickShowCurriculumLinks","setStartTime","time","playerRef","currentTime","getTagAppLink","suppressInteractivity","VideoDetails","onLaunchImmersiveReader","isPaused","pause","onExitImmersiveReader","play","hideTags","ImageUrls","checkAllCurriculum","VideoDetailsPartial","PlayPageAnchor","count","contents","WidgetContents","collection","prefetched","childComponent","ResourceWidgetItem","R","extraChildComponentProps","imageErrorFallbackUrl","actionBehaviour","canViewResourceItems","titlePosition","hideTypeBadge","getChildAppLink","getResourceAppLink","analyticsOptions","workflowPhase","descriptor","SignUp","analyticsData","widgetId","canViewInteractives","CollectionHelper","interactives","interactive","args","TextHelper","InteractiveWidgetItem","questionsAppLink","canViewClips","clips","clip","ClipWidgetItem","C","RelatedVideos","currentVideo","relatedVideos","currentUser","setFavourite","canFavourite","getVideoAppLink","v","opts","VideoAppLinkHelper"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/3042-7c1b5e4ff7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumDropdown.tsx","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksWithScrollbar.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/PlayPage.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss"],"sourcesContent":["import React from 'react';\n\nimport { Presentation } from 'libs/shared/interfaces';\n\nconst MIN_CURRICULUMS = 2;\n\ninterface CurriculumDropdownProps {\n availableCurriculums: Presentation[];\n onChangeCurriculum: (id: string) => void;\n selectedCurriculum?: Presentation;\n className?: string;\n}\n\nexport function CurriculumDropdown(props: CurriculumDropdownProps): JSX.Element {\n // No need to show a dropdown if they don't have enough curriculums\n if (props.availableCurriculums?.length < MIN_CURRICULUMS || !props.selectedCurriculum)\n return <></>;\n\n return (\n <select\n className={`mb-3 form-select ${props.className}`}\n onChange={e => props.onChangeCurriculum(e.target.value)}\n value={props.selectedCurriculum.id}\n >\n {props.availableCurriculums.map(curriculum => {\n return (\n <option\n key={curriculum.id}\n id={curriculum.id}\n value={curriculum.id}\n >\n {curriculum.name}\n </option>\n );\n })}\n </select>\n );\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Presentation } from 'libs/shared/interfaces';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks: Curriculum[][];\n emptyStateUrl?: string;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n onChangeCurriculum?: (id: string) => void;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n const [ showOtherCurriculums, setShowOtherCurriculums ] = React.useState(false);\n const [ loadingOther, setLoadingOther ] = React.useState(false);\n const [ curriculumTags, setCurriculumTags ] = React.useState([]);\n\n React.useEffect(() => {\n if (props.checkAllCurriculums && !props.curriculumLinks?.length) {\n setLoadingOther(true);\n // only fetch other curriculums when this curriculum is displayed\n props.checkAllCurriculums().then(data => {\n if (data.length) {\n setShowOtherCurriculums(true);\n }\n\n setCurriculumTags(data);\n }).finally(() => setLoadingOther(false));\n }\n }, [props.curriculumLinks?.length]);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets: { [subjectAndAudienceIdKey: string]: CurriculumStructure } = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n\n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n\n const key = `${subject.id}:${audience.id}`;\n\n if (curriculumLinkSets[key]) {\n curriculumLinkSets[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n\n return;\n }\n\n curriculumLinkSets[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n if (loadingOther) {\n return <PartialCurriculumLinks />;\n }\n\n if (!props.curriculumLinks?.length) {\n // only if all other curriculums don't have links we render the empty state\n if (props.emptyStateUrl && !showOtherCurriculums && !loadingOther)\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n if (showOtherCurriculums) {\n return (\n <div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmpty' />\n </div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmptyInfo' />\n </div>\n {curriculumTags.map(t => (\n <div\n key={t.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} me-2`}\n onClick={() => props.onChangeCurriculum(t.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle`}>\n <img src={t.cover.url} alt={t.name} className='rounded-circle'/>\n </div>\n {t.name}\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurriculumData, Presentation } from 'libs/shared/interfaces';\n\nimport { PartialCurriculumLinks } from './partial-loading/PartialCurriculumLinks';\nimport { CurriculumDropdown } from './CurriculumDropdown';\nimport { CurriculumLinks } from './CurriculumLinks';\n\nimport styles from './curriculum-links.scss';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksWithScrollbarProps {\n curriculums: CurriculumData;\n emptyStateUrl: string;\n height?: number;\n onClickClose?: () => void;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n}\n\nexport function CurriculumLinksWithScrollbar(props: CurriculumLinksWithScrollbarProps): JSX.Element {\n const {\n hasLoaded,\n activeCurriculum: currentCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum\n } = props.curriculums;\n\n const [ showPartialLoading, setShowPartialLoading ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(currentCurriculum ?? ArrayHelper.first(availableCurriculums));\n \n setShowPartialLoading(false);\n }, [ currentCurriculum?.id, hasLoaded ]);\n\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowPartialLoading(true);\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowPartialLoading(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, null, onError);\n }\n\n const canClose = typeof props.onClickClose === 'function';\n\n return (\n <div className='rounded border mb-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n <h2 className='h6 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n\n <CurriculumDropdown\n availableCurriculums={availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={selectedCurriculum}\n className={styles.dropdown}\n />\n\n {showPartialLoading\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={props.emptyStateUrl}\n checkAllCurriculums={props.checkAllCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n />\n )}\n </div>\n </Scrollbars>\n\n {canClose && (\n <button\n type='button'\n className={`btn-close ${styles.closeButton}`}\n aria-label='Close'\n onClick={props.onClickClose}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SignUpDescriptors, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { CurriculumLinksWithScrollbar } from 'libs/shared/components/curriculum-links/CurriculumLinksWithScrollbar';\nimport { LanguageNamespaceContext } 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 { 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 { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, CurriculumData, FavouriteFunc, Interactive, PointOfInterest, Presentation, PresentationAudience, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { CollectionHelper } from 'libs/shared/utils/CollectionHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/PlayPageTitleAndActions';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { VideoDetailsWithScrollbar } from 'shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'shared/components/video-details/VideoDetailsPartial';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { MINIMUM_GLANCE_HEIGHT } from 'shared/constants/MinimumGlanceHeight';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getAppLinks, getResources } from './PlayPageUtils';\n\nconst namespace = 'shared.playPage';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype DetailsViewType = {\n view: 'v@g' | 'details' | 'curriculumLinks' | 'loading';\n referrer: 'v@g' | 'details' | 'curriculumLinks';\n};\n\ninterface PlayPageProps {\n video: Video;\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n glanceTheme?: Theme;\n glanceLoaded: boolean;\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n checkAllCurriculum?: () => Promise<Presentation[]>\n}\n\nexport function PlayPage(props: PlayPageProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n const canViewPublicly = props.featureAccess.canWatchPublicly(props.video.id);\n\n const { imageCdnUrl } = props;\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\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 /**\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.video, 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 const appLinkFns = getAppLinks();\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 const resourcesWidget = getResources(props.video, hasStudentExperience);\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || (!canViewPublicly && props.featureAccess.canViewPublicLayout);\n\n const hasCurriculumLinks = !!(props.featureAccess.canViewCurriculumLinks &&\n props.curriculums.customerHasCurriculumLinks);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n\n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n \n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience}/>}\n \n <section className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}>\n {(canConsume || canViewPublicly) &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n }\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.video}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n getSeriesAppLink={series => appLinkFns.getSeriesAppLink(series, props.params.mtv)}\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.video}\n pointsOfInterest={props.pointsOfInterest}\n onClickShowDescription={() => setDetailsView({ view: 'details', referrer: 'v@g' })}\n onClickShowCurriculumLinks={hasCurriculumLinks && (() => setDetailsView({ view: 'curriculumLinks', referrer: 'v@g' }))}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n\n <section className={`${detailsView.view === 'details' ? 'd-block' : 'd-none'}`}>\n <VideoDetailsWithScrollbar\n video={props.video}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n hideTags={hasGlance}\n onClickClose={hasGlance && (() => setDetailsView({ view: 'v@g', referrer: 'details' }))}\n onClickShowCurriculumLinks={hasCurriculumLinks && (() => setDetailsView({ view: 'curriculumLinks', referrer: 'details' }))}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n\n {detailsView.view === 'curriculumLinks' && (\n <section >\n <CurriculumLinksWithScrollbar\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n onClickClose={(() => setDetailsView({ view: detailsView.referrer, referrer: 'curriculumLinks' }))}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n checkAllCurriculums={props.checkAllCurriculum}\n />\n </section>\n )}\n\n <section className={`${detailsView.view === 'loading' ? 'd-block' : 'd-none'}`}>\n <VideoDetailsPartial />\n </section>\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-end' className='d-flex justify-content-end mt-n2' />}\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,\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={appLinkFns.getResourceAppLink(\n props.video?.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 {props.featureAccess.canViewInteractives && !CollectionHelper.isEmpty(props.video.interactives) && (\n <section className='pb-3' id={PlayPageAnchor.Interactives} ref={interactivesRef}>\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('interactives', { count: CollectionHelper.length(props.video.interactives) })}\n contents={WidgetContents.Interactives}\n collection={props.video.interactives.data}\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.video,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.imageCdnUrl\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n </section>\n )}\n\n {props.featureAccess.canViewClips && !CollectionHelper.isEmpty(props.video.clips) && (\n <section className='pb-3'>\n <FixedWidget<ClipWidgetItemProps>\n name={getPhrase('clips', { count: CollectionHelper.length(props.video.clips) })}\n contents={WidgetContents.Clips}\n collection={props.video.clips.data}\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.video, imageCdnUrl: props.imageCdnUrl }}\n analyticsData={{ widgetId: 'clips' }}\n />\n </section>\n )}\n\n <section>\n <RelatedVideos\n currentVideo={props.video}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv\n })}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n />\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\"};"],"names":["MIN_CURRICULUMS","CurriculumDropdown","props","availableCurriculums","length","selectedCurriculum","className","onChange","e","onChangeCurriculum","target","value","id","map","curriculum","key","name","CurriculumType","namespace","getPhrase","LanguageService","CurriculumLinksEmptyState","EmptyState","src","emptyStateUrl","altText","size","Text","phrase","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","Area","ca","join","Leaf","push","Audience","Subject","match","Object","keys","i","CurriculumLinks","setCodeWidth","showOtherCurriculums","setShowOtherCurriculums","loadingOther","setLoadingOther","curriculumTags","setCurriculumTags","currentVal","checkAllCurriculums","curriculumLinks","then","data","curriculumLinkSets","subject","audience","areas","leaves","curriculumObj","type","PartialCurriculumLinks","t","onClick","toString","cover","url","alt","linkSetKey","PartialCurriculumLinkSection","CONTAINER_HEIGHT","CopyrightDisclaimer","isHovering","Overlay","show","placement","overflowPlacement","document","documentElement","clientHeight","bottom","CurriculumLinksWithScrollbar","curriculums","hasLoaded","currentCurriculum","activeCurriculum","updateCurriculum","showPartialLoading","setShowPartialLoading","setSelectedCurriculum","alerts","curriculumId","newCurriculum","find","c","error","ArrayHelper","canClose","onClickClose","autoHeight","autoHeightMax","height","PlayPage","playerContext","hasPermissions","usePermissions","canConsume","VideoHelper","video","canViewPublicly","featureAccess","canWatchPublicly","imageCdnUrl","isArchived","hasStudentExperience","PermissionName","resourcesRef","interactivesRef","useTableOfContentsScroll","tableOfContentsId","shouldPlayOnExitImmersiveReader","hasGlance","glanceTheme","canViewGlance","view","referrer","detailsView","setDetailsView","glanceLoaded","appLinkFns","resourcesWidget","showPlayerPlaceholder","mode","canViewPublicLayout","hasCurriculumLinks","canViewCurriculumLinks","customerHasCurriculumLinks","RestrictionBanner","restrictions","_restrictions","yearGroups","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","shareId","context","params","contextId","playNext","moviesAndTv","mtv","startTime","endTime","location","PlayerPlaceholder","appLink","application","action","PlayPageTitleAndActions","media","audiences","getSeriesAppLink","series","VideoAtAGlance","theme","pointsOfInterest","onClickShowDescription","onClickShowCurriculumLinks","setStartTime","time","playerRef","currentTime","getTagAppLink","suppressInteractivity","VideoDetails","onLaunchImmersiveReader","isPaused","pause","onExitImmersiveReader","play","hideTags","ImageUrls","checkAllCurriculum","VideoDetailsPartial","PlayPageAnchor","count","contents","WidgetContents","collection","prefetched","childComponent","ResourceWidgetItem","R","extraChildComponentProps","imageErrorFallbackUrl","actionBehaviour","canViewResourceItems","titlePosition","hideTypeBadge","getChildAppLink","getResourceAppLink","analyticsOptions","workflowPhase","descriptor","SignUp","analyticsData","widgetId","canViewInteractives","CollectionHelper","interactives","interactive","args","TextHelper","InteractiveWidgetItem","questionsAppLink","canViewClips","clips","clip","ClipWidgetItem","C","RelatedVideos","currentVideo","relatedVideos","currentUser","setFavourite","canFavourite","getVideoAppLink","v","opts","VideoAppLinkHelper"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3158],{41021:(e,t,a)=>{a.r(t),a.d(t,{PlaySharedClipView:()=>T});var i=a(32735),n=a(20354),r=a(65858),c=a(16714),o=a(43012),l=a(39151),s=a(1666),d=a(28907),u=a(31949),p=a(1575),v=a(27995),m=a(22902),g=a(15311),h=a(79612),y=a(76753),f=a(56871),I=a(7179),C=a(49948),E=a(36873),P=a(27638),A=a(44110),b=a(35014),V=a(97816);function T(e){var t,a,T,k,O,w,x,S,N=(0,g.r)().hasProduct,L=(0,P.u)(r.LZ.VideoThumbnail),F=L.setFavourite,R=L.canFavourite,U=(0,m.T)().hasPermissions,q=n.a.useBasicFetch(u.N.currentUser()),j=n.a.useBasicFetch(l.L.config()),_=n.a.useBasicFetch(o.e.sharedClip(e.objectId,e.shareId)),M=n.a.useBasicFetch(!!(null===(t=_.data)||void 0===t?void 0:t._parentVideo)&&p.R.video(_.data._parentVideo.id)),G=(0,E.k)({video:M.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:q.data}),B=(0,A.i)(),D=n.a.useBasicFetch((null===(a=q.data)||void 0===a?void 0:a.isAuthenticated)&&s.h.yearGroups(q.data.customerId)),W=(0,C.l)(e.objectId),H=n.a.useBasicFetch((null===(k=null===(T=_.data)||void 0===T?void 0:T.glance)||void 0===k?void 0:k.theme)?d.r.themeImages(_.data.glance.theme,_.data.glance.type):null),z=U(c.C.ViewVideoGlance)&&(null===(w=null===(O=_.data)||void 0===O?void 0:O.glance)||void 0===w?void 0:w.theme),K=(0,b.I)();return(0,h.M)(y.CG.getClipMetadata({content:_.data})),(0,V.V)(null!==(x=G.videos)&&void 0!==x?x:[]),(0,v.b)(_),(0,I.P)({id:e.objectId,app:"clips",shareId:e.shareId}),_.data&&q.hasCompleted&&j.hasCompleted&&W.hasCompleted?i.createElement(f.N,{shareId:e.shareId,clip:_.data,originalVideo:M.data,currentUser:q.data,yearGroups:D.data,relatedVideos:G,canFavourite:R,setFavourite:F,hasProduct:N,queryParams:e.queryParams,audiences:B.data,imageCdnUrl:j.data.imageCdnUrl,canManageVideoAccess:U(c.C.ManageVideoAccess),glanceTheme:H.data,glanceLoaded:!z||H.hasCompleted,pointsOfInterest:null==W?void 0:W.items,featureAccess:K,tableOfContentsId:null===(S=e.queryParams)||void 0===S?void 0:S.scrollTo}):i.createElement(i.Fragment,null)}},56871:(e,t,a)=>{a.d(t,{N:()=>W});var i=a(32735),n=a(23481),r=a(28400),c=a(65858),o=a(83345),l=a(19670),s=a(32614),d=a(13231),u=a(11518),p=a(15446),v=a(47862),m=a(9098),g=a(10439),h=a(35429),y=a(51365),f=a(4594),I=a(16714),C=a(12754),E=a(58704),P=a(22902),A=a(9907),b=a(59598),V=a(31908),T=a(26492),k=a(57654),O=a(99092),w=a(47938),x=a(81024),S=a(78166),N=a(99719),L=a(42571),F=a(99742),R=a(14070),U=a(97291),q=a(10671),j=a(10741),_=a(22490);function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}var G=function(e,t,a){return function(i){return a?{application:U.O.VIDEOS,action:R.e.Videos.PREVIEW_PDF,args:[i.id],params:{videoId:e,shareId:t}}:{application:U.O.SIGN_UP,action:R.e.SignUp.SIGN_UP}}},B="shared.playClip",D=n.T.encloseNamespace(B);function W(e){var t,a,n,W,H,z,K,Q,Y,Z,X,$,J,ee,te,ae=(0,h.g)(),ie=(0,P.T)().hasPermissions,ne=V.M.getCanBeConsumed(e.clip).canConsume,re=(0,q._)({location:q.i.VideoItem}),ce=i.useRef(null),oe=i.useRef(null);(0,A.P)([ce.current,oe.current],e.tableOfContentsId);var le,se,de=V.M.isVideoTypeArchived(e.clip),ue=ie(I.C.StudentExperience),pe=i.useRef(!1),ve=(0,s.Wp)(e.clip,e.glanceTheme)&&e.featureAccess.canViewGlance,me=(le=i.useState({view:"loading",referrer:null}),se=2,function(e){if(Array.isArray(e))return e}(le)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var i,n,r,c,o=[],l=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(i=r.call(a)).done)&&(o.push(i.value),o.length!==t);l=!0);}catch(e){s=!0,n=e}finally{try{if(!l&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(s)throw n}}return o}}(le,se)||function(e,t){if(e){if("string"==typeof e)return M(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?M(e,t):void 0}}(le,se)||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.")}()),ge=me[0],he=me[1];function ye(){var t;return!(null===(t=e.currentUser)||void 0===t?void 0:t.isAuthenticated)||!e.hasProduct(C.x.Primary)||!!ue}i.useEffect((function(){e.glanceLoaded&&he({view:e.glanceTheme?"v@g":"details",referrer:null})}),[e.glanceLoaded,e.glanceTheme]);var fe=e.originalVideo&&!ye()&&!!(null===(t=e.clip._canBeConsumed)||void 0===t?void 0:t.value),Ie="picture-in-picture"===ae.mode||e.featureAccess.canViewPublicLayout,Ce=(0,O.jh)(e.clip,ue),Ee=null!==(H=null===(W=null===(n=null===(a=e.originalVideo)||void 0===a?void 0:a.clips)||void 0===n?void 0:n.data)||void 0===W?void 0:W.filter((function(t){return t.id.toString()!==e.clip.id.toString()})))&&void 0!==H?H:[];return i.createElement("div",{className:"px-4"},i.createElement(w.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:f.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),de&&i.createElement(T.T,{typeId:e.clip.typeId,hasStudentExperience:ue}),i.createElement("section",{className:"mb-2"},ne&&i.createElement(g.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(z=e.queryParams)||void 0===z?void 0:z.context,contextId:null===(K=e.queryParams)||void 0===K?void 0:K.contextId,moviesAndTv:null===(Q=e.queryParams)||void 0===Q?void 0:Q.mtv,playNext:null===(Y=e.queryParams)||void 0===Y?void 0:Y.playNext,startTime:null!==(X=null===(Z=e.queryParams)||void 0===Z?void 0:Z.t)&&void 0!==X?X:null===($=e.queryParams)||void 0===$?void 0:$.startTime,mode:"default",location:"play-page"}),i.createElement("div",{className:Ie?"":"d-none"},i.createElement(x.S,{video:e.clip,type:"pip"}))),i.createElement(k.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:fe?{application:U.O.VIDEOS,action:R.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,r.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),i.createElement("section",{className:"".concat("v@g"===ge.view?"d-block":"d-none")},i.createElement(l.o,{theme:e.glanceTheme,video:e.clip,pointsOfInterest:e.pointsOfInterest,onClickShowDescription:function(){return he({view:"details",referrer:"v@g"})},setStartTime:function(e){var t;return null===(t=ae.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:function(e){return{application:U.O.SEARCH,action:R.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout})),i.createElement("section",{className:"".concat("details"===ge.view?"d-block":"d-none")},i.createElement(N.X,{video:e.clip,onLaunchImmersiveReader:function(){var e,t,a,i;pe.current=!(null===(t=null===(e=null==ae?void 0:ae.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(i=null===(a=null==ae?void 0:ae.playerRef)||void 0===a?void 0:a.current)||void 0===i||i.pause()},onExitImmersiveReader:function(){var e,t;pe.current&&(null===(t=null===(e=null==ae?void 0:ae.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())},onClickClose:ve&&function(){return he({view:"v@g",referrer:"details"})},getTagAppLink:function(e){return{application:U.O.SEARCH,action:R.e.Search.HOME,params:{tagOrClassification:e.name}}},hideTags:ve,suppressInteractivity:e.featureAccess.canViewPublicLayout})),i.createElement("section",{className:"".concat("loading"===ge.view?"d-block":"d-none")},i.createElement(L.H,null)),!!(null==Ce?void 0:Ce.length)&&i.createElement("section",{className:"pb-3",id:b.K.Resources,ref:ce},i.createElement(u.kM,{name:D("resources",{count:Ce.length}),contents:E.z.PlayPageResources,collection:Ce,prefetched:!0,childComponent:m.R,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:F.W.Fallbacks.RESOURCE_THUMBNAIL,actionBehaviour:e.featureAccess.canViewResourceItems?"normal":"public",location:"play-page",titlePosition:"above",hideTypeBadge:!0},getChildAppLink:G(null===(J=e.clip)||void 0===J?void 0:J.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsOptions:e.featureAccess.canViewResourceItems?{}:{workflowPhase:c.eu.Start,descriptor:c.Yu.SignUp},analyticsData:{widgetId:"resources"}})),!(!(null==Ee?void 0:Ee.length)||ye())&&i.createElement("div",{className:"pb-3"},i.createElement(u.kM,{name:D("otherClips",{count:Ee.length}),contents:E.z.Clips,collection:Ee,prefetched:!0,getChildAppLink:function(e){return{application:U.O.CLIPS,action:R.e.Clips.PLAY_CLIP,args:[e.id,r.m.slugify(e.name)]}},childComponent:p.C,extraChildComponentProps:{video:e.originalVideo,imageCdnUrl:e.imageCdnUrl},analyticsData:{widgetId:"clips"}})),!(!(null===(te=null===(ee=e.clip.interactives)||void 0===ee?void 0:ee.data)||void 0===te?void 0:te.length)||ye())&&i.createElement("div",{className:"pb-3",id:b.K.Interactives,ref:oe},i.createElement(u.kM,{name:D("interactives",{count:e.clip.interactives.data.length}),contents:E.z.Interactives,collection:e.clip.interactives.data,prefetched:!0,getChildAppLink:function(e){return{application:U.O.INTERACTIVES,action:R.e.Interactives.VIEW_INTERACTIVE,args:[e.id,r.m.slugify(e.name)]}},childComponent:v.K,extraChildComponentProps:{video:e.clip,questionsAppLink:{application:U.O.INTERACTIVES,action:R.e.Interactives.PREVIEW_QUESTIONS},imageCdnUrl:e.imageCdnUrl},analyticsData:{widgetId:"interactives"}})),!!fe&&i.createElement("section",{className:"pb-2 pt-1"},i.createElement("h2",{className:"h4 mb-0"},i.createElement(o.x,{namespace:B,phrase:"clippedFrom"})),i.createElement(y.M.Provider,{value:re},i.createElement(d.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,a){return _.W.getAppLink(t,Object.assign(Object.assign({},a),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:ie,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return j.j.getPreviewQuestionsAppLink(e)}}))),i.createElement("section",null,i.createElement(S.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(t,a){return _.W.getAppLink(t,Object.assign(Object.assign({},a),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv})))}},44110:(e,t,a)=>{a.d(t,{i:()=>c});var i=a(20354),n=a(89454),r=a(86698),c=function(){var e=(0,r.y)({redirectOnError:!0}),t=e.activePresentation,a=e.getFallbackPresentation,c=t||a();return i.a.useBasicFetch(!!c&&n.O.presentationAudiences(c.id))}}}]);
2
- //# sourceMappingURL=3158-31baada6cc-lite.chunk.js.map
2
+ //# sourceMappingURL=3158-2147de456d-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/3158-31baada6cc-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-clip/PlaySharedClipView.tsx","file:///app/packages/projects/lite/src/shared/components/play-clip/PlayClip.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\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 { 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 { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { PlayClip } from 'shared/components/play-clip/PlayClip';\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 { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedClipView(props: ShareLinkViewProps): React.ReactElement {\n const { hasProduct } = useProducts();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.sharedClip(props.objectId, props.shareId));\n const video = Flight.useBasicFetch<Video>(!!clip.data?._parentVideo &&\n VideoRequests.video(clip.data._parentVideo.id));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.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 const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n const glanceTheme = Flight.useBasicFetch<Theme>(clip.data?.glance?.theme\n ? ThemeRequests.themeImages(clip.data.glance.theme, clip.data.glance.type) : null);\n\n const shouldFetchTheme = hasPermissions(PermissionName.ViewVideoGlance) &&\n clip.data?.glance?.theme;\n\n const featureAccess = useVideoFeatureAccess();\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({ content: clip.data }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(clip);\n useDeepLinks({ id: props.objectId, app: 'clips', shareId: props.shareId });\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 shareId={props.shareId}\n clip={clip.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n relatedVideos={relatedVideos}\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 glanceTheme={glanceTheme.data}\n glanceLoaded={!shouldFetchTheme || glanceTheme.hasCompleted}\n pointsOfInterest={pointsOfInterest?.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.scrollTo}\n />\n );\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 { 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, 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/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 { VideoDetailsWithScrollbar } from 'shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'shared/components/video-details/VideoDetailsPartial';\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 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}\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.originalVideo?.clips?.data?.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.clip.interactives?.data?.length && !limitAccess()) && (\n <div className='pb-3' id={PlayPageAnchor.Interactives} ref={interactivesRef}>\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('interactives', { count: props.clip.interactives.data.length })}\n contents={WidgetContents.Interactives}\n collection={props.clip.interactives.data}\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 />\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 />\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};"],"names":["PlaySharedClipView","props","hasProduct","u","setFavourite","canFavourite","hasPermissions","currentUser","config","clip","objectId","shareId","video","data","_parentVideo","id","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","audiences","yearGroups","isAuthenticated","customerId","pointsOfInterest","glanceTheme","glance","theme","type","shouldFetchTheme","featureAccess","content","videos","app","hasCompleted","originalVideo","imageCdnUrl","canManageVideoAccess","glanceLoaded","items","tableOfContentsId","scrollTo","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","namespace","getPhrase","PlayClip","playerContext","canConsume","videoActions","location","resourcesRef","interactivesRef","current","isArchived","hasStudentExperience","shouldPlayOnExitImmersiveReader","hasGlance","canViewGlance","view","referrer","detailsView","setDetailsView","limitAccess","canAccessOriginal","_canBeConsumed","value","showPlayerPlaceholder","mode","canViewPublicLayout","resourcesWidget","otherClips","clips","filter","c","toString","className","restrictions","_restrictions","objectTypeId","typeId","key","playNext","startTime","t","media","originalVideoAppLink","name","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","imageErrorFallbackUrl","actionBehaviour","canViewResourceItems","titlePosition","hideTypeBadge","getChildAppLink","analyticsOptions","workflowPhase","descriptor","SignUp","analyticsData","widgetId","C","interactives","interactive","questionsAppLink","phrase","getVideoAppLink","v","opts","presentationAudiences","getPreviewQuestionsAppLink","currentVideo","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/3158-2147de456d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-clip/PlaySharedClipView.tsx","file:///app/packages/projects/lite/src/shared/components/play-clip/PlayClip.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\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 { 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 { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { PlayClip } from 'shared/components/play-clip/PlayClip';\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 { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedClipView(props: ShareLinkViewProps): React.ReactElement {\n const { hasProduct } = useProducts();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.sharedClip(props.objectId, props.shareId));\n const video = Flight.useBasicFetch<Video>(!!clip.data?._parentVideo &&\n VideoRequests.video(clip.data._parentVideo.id));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.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 const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n const glanceTheme = Flight.useBasicFetch<Theme>(clip.data?.glance?.theme\n ? ThemeRequests.themeImages(clip.data.glance.theme, clip.data.glance.type) : null);\n\n const shouldFetchTheme = hasPermissions(PermissionName.ViewVideoGlance) &&\n clip.data?.glance?.theme;\n\n const featureAccess = useVideoFeatureAccess();\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({ content: clip.data }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(clip);\n useDeepLinks({ id: props.objectId, app: 'clips', shareId: props.shareId });\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 shareId={props.shareId}\n clip={clip.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n relatedVideos={relatedVideos}\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 glanceTheme={glanceTheme.data}\n glanceLoaded={!shouldFetchTheme || glanceTheme.hasCompleted}\n pointsOfInterest={pointsOfInterest?.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.scrollTo}\n />\n );\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 { 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, 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/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 { VideoDetailsWithScrollbar } from 'shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'shared/components/video-details/VideoDetailsPartial';\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 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}\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.originalVideo?.clips?.data?.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.clip.interactives?.data?.length && !limitAccess()) && (\n <div className='pb-3' id={PlayPageAnchor.Interactives} ref={interactivesRef}>\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('interactives', { count: props.clip.interactives.data.length })}\n contents={WidgetContents.Interactives}\n collection={props.clip.interactives.data}\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 />\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 />\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};"],"names":["PlaySharedClipView","props","hasProduct","u","setFavourite","canFavourite","hasPermissions","currentUser","config","clip","objectId","shareId","video","data","_parentVideo","id","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","audiences","yearGroups","isAuthenticated","customerId","pointsOfInterest","glanceTheme","glance","theme","type","shouldFetchTheme","featureAccess","content","videos","app","hasCompleted","originalVideo","imageCdnUrl","canManageVideoAccess","glanceLoaded","items","tableOfContentsId","scrollTo","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","namespace","getPhrase","PlayClip","playerContext","canConsume","videoActions","location","resourcesRef","interactivesRef","current","isArchived","hasStudentExperience","shouldPlayOnExitImmersiveReader","hasGlance","canViewGlance","view","referrer","detailsView","setDetailsView","limitAccess","canAccessOriginal","_canBeConsumed","value","showPlayerPlaceholder","mode","canViewPublicLayout","resourcesWidget","otherClips","clips","filter","c","toString","className","restrictions","_restrictions","objectTypeId","typeId","key","playNext","startTime","t","media","originalVideoAppLink","name","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","imageErrorFallbackUrl","actionBehaviour","canViewResourceItems","titlePosition","hideTypeBadge","getChildAppLink","analyticsOptions","workflowPhase","descriptor","SignUp","analyticsData","widgetId","C","interactives","interactive","questionsAppLink","phrase","getVideoAppLink","v","opts","presentationAudiences","getPreviewQuestionsAppLink","currentVideo","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3296],{63649:(e,a,t)=>{t.d(a,{X:()=>i});var c=t(32735);const n={video:"ekpg6",notice:"lQs4F",heading:"Gt6uV",interaction:"LEfYX",button:"caHP7",edit:"de4DP",questions:"XelbS"};function i(e){var a=e.isEdit;return c.createElement("div",{className:"px-3 w-100 ".concat(a?n.edit:"")},a?c.createElement("div",{className:"d-flex justify-content-between align-items-center mb-3"},c.createElement("div",{className:"partial-loading-background ".concat(n.heading)}),c.createElement("div",null,c.createElement("div",{className:"partial-loading-background d-inline-block ".concat(n.button)}),c.createElement("div",{className:"partial-loading-background d-inline-block ms-2 ".concat(n.button)}))):c.createElement("div",{className:"partial-loading-background ".concat(n.notice)}),c.createElement("div",{className:"partial-loading-background mb-3 ".concat(n.video)},c.createElement("div",{className:"partial-loading-background ".concat(n.questions)})),c.createElement("div",{className:"partial-loading-background mb-3 ".concat(n.heading)}),c.createElement("div",null,Array(5).fill(null).map((function(e,a){return c.createElement("div",{key:a,className:"partial-loading-background my-2 ".concat(n.interaction)})}))))}},38280:(e,a,t)=>{t.r(a),t.d(a,{SharedInteractiveView:()=>j});var c=t(32735),n=t(20354),i=t(30439),r=t(4594),d=t(60051),s=t(16714),o=t(39151),l=t(1666),u=t(20768),m=t(47812),v=t(31949),b=t(27995),h=t(91286),g=t(22902),p=t(79612),k=t(76753),E=t(7179),y=t(36873),I=t(44110),f=t(53073),P=t(97816),w=t(63649),N=t(84062),q=t(25758),F=t(57426),C=t(16857),V={notFound:F.k,forbidden:{privacy:C.m}};function j(e){var a,t,F,j=(0,g.T)().hasPermissions,x=n.a.useBasicFetch(o.L.config()),B=n.a.useBasicFetch(v.N.currentUser()),M=n.a.useBasicFetch(u.b.sharedInteractiveMetadata(e.objectId,e.shareId)),S=n.a.useBasicFetch(i.o.getShareObject(e.shareId)),A=S.data&&(S.data.objectTypeId===r.E.Interactive?m.k.createViewKey(e.shareId,d.f.Share):m.k.createViewKey(e.objectId,d.f.MasterObject,e.shareId)),G=n.a.useBasicFetch(A),T=(0,I.i)(),U=n.a.useBasicFetch((null===(a=B.data)||void 0===a?void 0:a.isAuthenticated)&&l.h.yearGroups(B.data.customerId)),X=(0,f.f)(),_=n.a.useBasicFetch(X&&M.data&&u.b.interactive(M.data.interactiveId)),K=(0,y.k)({video:M.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:B.data});(0,h.v)(M,V),(0,b.b)(M,{private:C.m}),(0,E.P)({id:e.objectId,app:"interactives",shareId:e.shareId}),(0,P.V)(null!==(t=K.videos)&&void 0!==t?t:[]),(0,p.M)(k.CG.getInteractiveMetadata({content:M.data}));var L=M.data&&x.hasCompleted&&B.hasCompleted&&(!X||_.hasCompleted)&&S.hasCompleted&&G.hasCompleted;return X?L?c.createElement(q.x,{config:x.data,currentUser:B.data,queryParams:e.queryParams,interactive:M.data,isPreviewPreventScrubbingEnabled:_.data.preventScrubbing,yearGroups:U.data,audiences:T.data,relatedVideos:K,canManageVideoAccess:j(s.C.ManageVideoAccess)}):c.createElement(w.X,{isEdit:!1}):L?c.createElement(N.M,{interactive:M.data,currentUser:B.data,config:x.data,audiences:T.data,yearGroups:U.data,queryParams:e.queryParams,viewKey:G.data,relatedVideos:K,shareLink:S.data,startTime:null===(F=e.queryParams)||void 0===F?void 0:F.t}):c.createElement(c.Fragment,null)}}}]);
2
- //# sourceMappingURL=3296-6d80e4dd56-lite.chunk.js.map
2
+ //# sourceMappingURL=3296-f3732c93d9-lite.chunk.js.map