@clickview/lite 0.48.0-rc.7 → 0.48.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{1285-c322e093f9-lite.chunk.js → 1285-c3795fed18-lite.chunk.js} +2 -2
  3. package/dist/scripts/1285-c3795fed18-lite.chunk.js.map +1 -0
  4. package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
  5. package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
  7. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
  9. package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
  11. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
  12. package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
  13. package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
  14. package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
  15. package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
  16. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
  17. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
  18. package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
  19. package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
  21. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
  23. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
  24. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
  25. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
  26. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
  27. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
  29. package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
  30. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
  31. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
  32. package/dist/scripts/{3012-b5208d6981-lite.chunk.js → 3012-fd3eb34a14-lite.chunk.js} +2 -2
  33. package/dist/scripts/3012-fd3eb34a14-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
  35. package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
  37. package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
  38. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
  39. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
  41. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
  43. package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
  45. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
  47. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
  49. package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
  51. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
  52. package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
  53. package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
  55. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
  57. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
  59. package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
  60. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
  61. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
  63. package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
  64. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-6e5494bf09-lite.chunk.js} +3 -3
  65. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-6e5494bf09-lite.chunk.js.map} +1 -1
  66. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
  67. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
  69. package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
  70. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
  71. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
  73. package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
  74. package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
  75. package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
  76. package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
  77. package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
  78. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
  79. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
  80. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
  81. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
  82. package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
  83. package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
  84. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
  85. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
  86. package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
  87. package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
  88. package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
  89. package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
  90. package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
  91. package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
  92. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
  93. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
  94. package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
  95. package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
  96. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
  97. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
  98. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
  99. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
  100. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
  101. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
  102. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
  103. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
  104. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
  105. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
  106. package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
  107. package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
  108. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
  109. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
  110. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
  111. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
  112. package/dist/scripts/bundle-11bfce2e8c.min.js +3 -0
  113. package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-11bfce2e8c.min.js.map} +1 -1
  114. package/package.json +1 -1
  115. package/dist/scripts/1285-c322e093f9-lite.chunk.js.map +0 -1
  116. package/dist/scripts/3012-b5208d6981-lite.chunk.js.map +0 -1
  117. package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
  118. package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
  119. package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
  120. package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
  121. package/dist/scripts/bundle-8f540a1154.min.js +0 -3
  122. /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
  123. /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
  124. /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
  125. /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
  126. /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
  127. /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
  128. /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-6e5494bf09-lite.chunk.js.LICENSE.txt} +0 -0
  129. /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
  130. /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
  131. /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
  132. /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
  133. /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
  134. /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
  135. /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-11bfce2e8c.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3012],{28469:(e,a,t)=>{t.d(a,{P:()=>s});var r=t(32735),n=t(23481).T.encloseNamespace("rostering.alert");function s(e){var a="classroom"===e.type?n("classroom"):n("hasRostering");return r.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},a," ")}},299:(e,a,t)=>{t.d(a,{X:()=>l});var r=t(32735),n=t(69217),s=t(94631),l=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a.idField,l=void 0===t?"id":t,o=a.persistNamespace,c=a.initialState?a.initialState:new Map,i=r.useRef(c),m=(0,n.N)(),d=(0,s.D)(e),u=(0,s.D)(o);function p(){i.current.clear(),m()}function g(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),i.current.get(e)}function h(){return!!(null==e?void 0:e.length)&&e.every(g)}function E(e){e.forEach((function(e){i.current.set(e,!0)})),m()}return r.useEffect((function(){a.initialState||o&&u===o||(null==d?void 0:d.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&p()}),[d,u,e,a.initialState]),r.useEffect((function(){var e;(null===(e=a.preselectedIds)||void 0===e?void 0:e.length)&&E(a.preselectedIds)}),[]),{onToggleBulk:function(){var a=!h();e.forEach((function(e){a?i.current.set(e[l].toString(),!0):i.current.delete(e[l].toString())})),m()},onToggleItem:function(e){var a=!i.current.get(e.toString());a?i.current.set(e.toString(),a):i.current.delete(e.toString()),m()},getSelected:function(){return Array.from(i.current.keys())},isChecked:g,bulkChecked:h(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){i.current.delete(e[l].toString())})),m())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return g(e)}))},setSelected:E,getSelectedCount:function(){return i.current.size},reset:p,getMap:function(){return i.current}}}},94631:(e,a,t)=>{t.d(a,{D:()=>n});var r=t(32735);function n(e){var a=r.useRef();return r.useEffect((function(){a.current=e})),a.current}},71056:(e,a,t)=>{t.r(a),t.d(a,{ClassroomTeachersView:()=>ae});var r=t(32735),n=t(70680),s=t(23481),l=t(20354),o=t(28469),c=t(39151),i=t(31949),m=t(79612),d=t(23232),u=t(83345),p=t(35223),g=t(99742),h=t(14070),E=t(97291),f="classrooms.manageClassroomTeachersEmptyState";function v(){return r.createElement(u.D.Provider,{value:f},r.createElement(d.u,null,r.createElement(d.u.Image,{src:g.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(d.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(d.u.Info,{className:"mb-2"},r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},s.T.getPhrase(f,"rosteringCta"))))}function y(e){return r.createElement(u.D.Provider,{value:f},r.createElement(d.u,null,r.createElement(d.u.Image,{src:g.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(d.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(d.u.Info,null,r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement(d.u.Cta,{text:s.T.getPhrase(f,"addTeachers"),icon:p.vn.Plus,appLink:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]}})))}var C=t(81886),S=t(49985),O=t(65858),k=t(11607),b=t(89965),T=t(10874),w=t(83914),N=t(76177),A=t(86764),x=t(299),R=t(3747),I=t(83657),U=t(20789),F=t(16714),L=t(86613),P=t(22902),D=t(64818);const M={avatarContainer:"kTynd",name:"UWi4G"};var _="classrooms.manageClassroomTeacherItem",H=s.T.encloseNamespace(_),B=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[a],params:{teacherIds:[e]}}},V=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.ASSIGN_AS_OWNER,args:[a,e]}},W=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REVOKE_OWNERSHIP,args:[a,e]}};function Z(e){var a,t=(0,P.T)().hasPermissions,n=D.l.getUserRole(e.teacher)===L.i.Admin,s=e.currentUser.id===e.teacher.id||!!t(F.C.ManageAllClassrooms)||!n&&e.isOwner(e.currentUser.id),l=!s||e.readOnly;return r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},e.isOwner(e.currentUser.id)&&r.createElement(b.X,{id:e.teacher.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),r.createElement("div",{className:"".concat(M.avatarContainer," me-2")},r.createElement(U.q,{imageCdnUrl:e.config.imageCdnUrl,initials:D.l.getInitials(e.teacher.name,e.teacher.surname),imageUrl:null===(a=e.teacher.avatar)||void 0===a?void 0:a.url})),r.createElement("p",{className:"".concat(M.name," me-2 text-truncate mb-0 text-nowrap")},D.l.getFullName(e.teacher)),!!n&&r.createElement("div",{className:"classroom-pill text-white bg-navy"},r.createElement(u.x,{namespace:_,phrase:"admin"})),!n&&e.isOwner(e.teacher.id)&&r.createElement("div",{className:"classroom-pill text-white bg-indigo"},r.createElement(u.x,{namespace:_,phrase:"owner"})),r.createElement(I.e,{actions:function(){if(!e.isOwner(e.currentUser.id))return[];var a=[],t="text-secondary disabled cursor-default",r=e.currentUser.id===e.teacher.id;return r||(e.isOwner(e.teacher.id)?a.push({order:0,label:H("revokeOwnership"),appLink:W(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Demote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRevokeOwnershipFromAdmin")}):a.push({order:0,label:H("assignAsOwner"),appLink:V(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Promote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotAssignAdminAsOwner")})),a.push({order:10,label:H(r?"leaveClassroom":"removeTeacher"),appLink:B(e.teacher.id,e.classroom.id),analyticsData:{id:e.classroom.id,userId:e.teacher.id},analyticsOptions:{actionType:O.Vw.Dissociate,entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"text-danger",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRemoveAdmin")}),a}(),className:"ms-auto",actionsDropdownClassName:"btn btn-link"}))}var X="classrooms.manageClassroomTeachers";function j(e){var a,t=(0,x.X)(e.teachers),n=t.getSelected().length,l=(0,R.a)(A.r.XLDown);return(null===(a=e.teachers)||void 0===a?void 0:a.length)?r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center py-2 ".concat(l?"ps-2":"ps-4")},e.isOwner(e.currentUser.id)&&r.createElement(r.Fragment,null,r.createElement(b.X,{id:"manage-classroom-teachers-bulk",onChange:t.onToggleBulk,checked:t.bulkChecked,className:"me-2",indeterminate:t.hasSomeSelections(),disabled:e.readOnly}),r.createElement(k.L,{className:!n||e.readOnly?"me-auto text-light cursor-default":"me-auto",onClick:function(){if(n&&e.isOwner(e.currentUser.id)&&!e.readOnly){var a=t.getSelected();S.k.logUserAction({id:e.classroom.id,teacherCount:a.length},{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Dissociate,location:O.LZ.ManageClassroomTeachers}),C.Q.C$.trigger({application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[e.classroom.id],params:{teacherIds:a}})}}},r.createElement(w.x,{svgName:p.vn.Delete,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):s.T.getPhrase(X,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(N.u,{spanHack:!0,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""},r.createElement(T.h,{disabled:e.readOnly,svgName:p.vn.Plus,className:"btn btn-outline-dark ms-auto",appLink:e.readOnly?null:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]},analyticsData:{id:e.classroom.id},analyticsOptions:{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Associate,location:O.LZ.ManageClassroomTeachers}},r.createElement(u.x,{namespace:X,phrase:"addTeacher"}))))),r.createElement("ul",{className:"striped-list list-unstyled"},e.teachers.map((function(a){return r.createElement("li",{key:a.id},r.createElement(Z,{classroom:e.classroom,teacher:a,config:e.config,checked:t.isChecked(a.id),onToggleCheckbox:function(){return t.onToggleItem(a.id)},currentUser:e.currentUser,isOwner:e.isOwner,readOnly:e.readOnly,readonlyTooltip:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""}))})))):r.createElement(y,{classroom:e.classroom})}var G=t(49935),Q=t(5062);const q="svGp0";var K=r.memo((function(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat("FQwVf")}),r.createElement("div",{className:"pb-3"},r.createElement(G.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(Q.Z,null)),r.createElement("div",{className:"d-flex align-items-center py-2"},r.createElement("div",{className:"ms-2 me-4 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-auto partial-loading-background ".concat("rKbj_")}),r.createElement("div",{className:"partial-loading-background ".concat("qigWD")})),r.createElement("ul",{className:"striped-list list-unstyled"},Array(3).fill(null).map((function(e,a){return r.createElement("li",{key:a},r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},r.createElement("div",{className:"me-2 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-2 partial-loading-background ".concat("mYQWy")}),r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat("SiD8n")})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat("sAUZY")})))}))))})),Y=t(88630),z=t(46009),$=t(31491),J=t(5289),ee=s.T.encloseNamespace("classrooms.classroomTeachers");function ae(e){var a,t,s,d,u=l.a.useBasicFetch(i.N.currentUser()),p=l.a.useBasicFetch(u.data&&Y.F.getClassroom(e.id,u.data.id)),g=l.a.useBasicFetch(Y.F.getClassroomOwners(e.id)),h=l.a.useBasicFetch((null===(a=u.data)||void 0===a?void 0:a.customerId)&&Y.F.getClassroomInvitees(e.id,u.data.customerId)),E=l.a.useBasicFetch(c.L.config()),f=(0,n.I0)(),C=(0,z.p)(e.id).isOwner,S=null===(s=null===(t=p.data)||void 0===t?void 0:t._integrations)||void 0===s?void 0:s.rostered;function O(e){return e===u.data.id?C:g.data.some((function(a){return a.id.toString()===e.toString()}))}return(0,m.M)({title:ee("pageTitle",{classroomName:null===(d=p.data)||void 0===d?void 0:d.name})}),(0,$._)(p),p.data&&h.hasCompleted&&g.hasCompleted&&E.data?r.createElement(J.R,{classroom:p.data,currentUser:u.data,onTogglePin:function(e,a,t){if(!S){var r=e?Y.F.pinClassroom:Y.F.unpinClassroom;l.a.fetch(f,r(p.data,a,t))}},activeTab:"teachers",isRostered:S},function(){var e;return S?r.createElement(r.Fragment,null,r.createElement(o.P,{type:"classroom"}),r.createElement(v,null)):(null===(e=h.data)||void 0===e?void 0:e.length)?r.createElement(j,{config:E.data,classroom:p.data,teachers:h.data,currentUser:u.data,isOwner:O,readOnly:S}):r.createElement(y,{classroom:p.data})}()):r.createElement(K,null)}}}]);
2
- //# sourceMappingURL=3012-b5208d6981-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3012],{28469:(e,a,t)=>{t.d(a,{P:()=>s});var r=t(32735),n=t(23481).T.encloseNamespace("rostering.alert");function s(e){var a="classroom"===e.type?n("classroom"):n("hasRostering");return r.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},a," ")}},299:(e,a,t)=>{t.d(a,{X:()=>l});var r=t(32735),n=t(69217),s=t(94631),l=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a.idField,l=void 0===t?"id":t,o=a.persistNamespace,c=a.initialState?a.initialState:new Map,i=r.useRef(c),d=(0,n.N)(),m=(0,s.D)(e),u=(0,s.D)(o);function g(){i.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),i.current.get(e)}function h(){return!!(null==e?void 0:e.length)&&e.every(p)}function E(e){e.forEach((function(e){i.current.set(e,!0)})),d()}return r.useEffect((function(){a.initialState||o&&u===o||(null==m?void 0:m.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&g()}),[m,u,e,a.initialState]),r.useEffect((function(){var e;(null===(e=a.preselectedIds)||void 0===e?void 0:e.length)&&E(a.preselectedIds)}),[]),{onToggleBulk:function(){var a=!h();e.forEach((function(e){a?i.current.set(e[l].toString(),!0):i.current.delete(e[l].toString())})),d()},onToggleItem:function(e){var a=!i.current.get(e.toString());a?i.current.set(e.toString(),a):i.current.delete(e.toString()),d()},getSelected:function(){return Array.from(i.current.keys())},isChecked:p,bulkChecked:h(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){i.current.delete(e[l].toString())})),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return p(e)}))},setSelected:E,getSelectedCount:function(){return i.current.size},reset:g,getMap:function(){return i.current}}}},94631:(e,a,t)=>{t.d(a,{D:()=>n});var r=t(32735);function n(e){var a=r.useRef();return r.useEffect((function(){a.current=e})),a.current}},71056:(e,a,t)=>{t.r(a),t.d(a,{ClassroomTeachersView:()=>ae});var r=t(32735),n=t(70680),s=t(23481),l=t(20354),o=t(28469),c=t(39151),i=t(31949),d=t(79612),m=t(23232),u=t(83345),g=t(35223),p=t(99742),h=t(14070),E=t(97291),f="classrooms.manageClassroomTeachersEmptyState";function v(){return r.createElement(u.D.Provider,{value:f},r.createElement(m.u,null,r.createElement(m.u.Image,{src:p.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(m.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(m.u.Info,{className:"mb-2"},r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},s.T.getPhrase(f,"rosteringCta"))))}function y(e){return r.createElement(u.D.Provider,{value:f},r.createElement(m.u,null,r.createElement(m.u.Image,{src:p.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(m.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(m.u.Info,null,r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement(m.u.Cta,{text:s.T.getPhrase(f,"addTeachers"),icon:g.vn.Plus,appLink:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]}})))}var C=t(81886),S=t(49985),O=t(65858),k=t(11607),b=t(89965),w=t(10874),T=t(83914),N=t(76177),A=t(86764),x=t(299),R=t(3747),I=t(83657),U=t(20789),F=t(16714),L=t(86613),P=t(22902),D=t(64818);const M={avatarContainer:"kTynd",name:"UWi4G"};var _="classrooms.manageClassroomTeacherItem",H=s.T.encloseNamespace(_),B=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[a],params:{teacherIds:[e]}}},V=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.ASSIGN_AS_OWNER,args:[a,e]}},W=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REVOKE_OWNERSHIP,args:[a,e]}};function Z(e){var a,t=(0,P.T)().hasPermissions,n=D.l.getUserRole(e.teacher)===L.i.Admin,s=e.currentUser.id===e.teacher.id||!!t(F.C.ManageAllClassrooms)||!n&&e.isOwner(e.currentUser.id),l=!s||e.readOnly;return r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},e.isOwner(e.currentUser.id)&&r.createElement(b.X,{id:e.teacher.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),r.createElement("div",{className:"".concat(M.avatarContainer," me-2")},r.createElement(U.q,{imageCdnUrl:e.config.imageCdnUrl,initials:D.l.getInitials(e.teacher.name,e.teacher.surname),imageUrl:null===(a=e.teacher.avatar)||void 0===a?void 0:a.url})),r.createElement("p",{className:"".concat(M.name," me-2 text-truncate mb-0 text-nowrap")},D.l.getFullName(e.teacher)),!!n&&r.createElement("div",{className:"classroom-pill text-white bg-navy"},r.createElement(u.x,{namespace:_,phrase:"admin"})),!n&&e.isOwner(e.teacher.id)&&r.createElement("div",{className:"classroom-pill text-white bg-indigo"},r.createElement(u.x,{namespace:_,phrase:"owner"})),r.createElement(I.e,{actions:function(){if(!e.isOwner(e.currentUser.id))return[];var a=[],t="text-secondary disabled cursor-default",r=e.currentUser.id===e.teacher.id;return r||(e.isOwner(e.teacher.id)?a.push({order:0,label:H("revokeOwnership"),appLink:W(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Demote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRevokeOwnershipFromAdmin")}):a.push({order:0,label:H("assignAsOwner"),appLink:V(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Promote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotAssignAdminAsOwner")})),a.push({order:10,label:H(r?"leaveClassroom":"removeTeacher"),appLink:B(e.teacher.id,e.classroom.id),analyticsData:{id:e.classroom.id,userId:e.teacher.id},analyticsOptions:{actionType:O.Vw.Dissociate,entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"text-danger",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRemoveAdmin")}),a}(),className:"ms-auto",actionsDropdownClassName:"btn btn-link"}))}var X="classrooms.manageClassroomTeachers";function j(e){var a,t=(0,x.X)(e.teachers),n=t.getSelected().length,l=(0,R.a)(A.r.XLDown);return(null===(a=e.teachers)||void 0===a?void 0:a.length)?r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center py-2 ".concat(l?"ps-2":"ps-4")},e.isOwner(e.currentUser.id)&&r.createElement(r.Fragment,null,r.createElement(b.X,{id:"manage-classroom-teachers-bulk",onChange:t.onToggleBulk,checked:t.bulkChecked,className:"me-2",indeterminate:t.hasSomeSelections(),disabled:e.readOnly}),r.createElement(k.L,{className:!n||e.readOnly?"me-auto text-light cursor-default":"me-auto",onClick:function(){if(n&&e.isOwner(e.currentUser.id)&&!e.readOnly){var a=t.getSelected();S.k.logUserAction({id:e.classroom.id,teacherCount:a.length},{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Dissociate,location:O.LZ.ManageClassroomTeachers}),C.Q.C$.trigger({application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[e.classroom.id],params:{teacherIds:a}})}}},r.createElement(T.x,{svgName:g.vn.Delete,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):s.T.getPhrase(X,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(N.u,{spanHack:!0,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""},r.createElement(w.h,{disabled:e.readOnly,svgName:g.vn.Plus,className:"btn btn-outline-dark ms-auto",appLink:e.readOnly?null:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]},analyticsData:{id:e.classroom.id},analyticsOptions:{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Associate,location:O.LZ.ManageClassroomTeachers}},r.createElement(u.x,{namespace:X,phrase:"addTeacher"}))))),r.createElement("ul",{className:"striped-list list-unstyled"},e.teachers.map((function(a){return r.createElement("li",{key:a.id},r.createElement(Z,{classroom:e.classroom,teacher:a,config:e.config,checked:t.isChecked(a.id),onToggleCheckbox:function(){return t.onToggleItem(a.id)},currentUser:e.currentUser,isOwner:e.isOwner,readOnly:e.readOnly,readonlyTooltip:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""}))})))):r.createElement(y,{classroom:e.classroom})}var G=t(49935),Q=t(5062);const q="svGp0";var K=r.memo((function(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat("FQwVf")}),r.createElement("div",{className:"pb-3"},r.createElement(G.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(Q.Z,null)),r.createElement("div",{className:"d-flex align-items-center py-2"},r.createElement("div",{className:"ms-2 me-4 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-auto partial-loading-background ".concat("rKbj_")}),r.createElement("div",{className:"partial-loading-background ".concat("qigWD")})),r.createElement("ul",{className:"striped-list list-unstyled"},Array(3).fill(null).map((function(e,a){return r.createElement("li",{key:a},r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},r.createElement("div",{className:"me-2 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-2 partial-loading-background ".concat("mYQWy")}),r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat("SiD8n")})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat("sAUZY")})))}))))})),Y=t(88630),z=t(46009),$=t(31491),J=t(5289),ee=s.T.encloseNamespace("classrooms.classroomTeachers");function ae(e){var a,t,s,m,u=l.a.useBasicFetch(i.N.currentUser()),g=l.a.useBasicFetch(u.data&&Y.F.getClassroom(e.id,u.data.id)),p=l.a.useBasicFetch(Y.F.getClassroomOwners(e.id)),h=l.a.useBasicFetch((null===(a=u.data)||void 0===a?void 0:a.customerId)&&Y.F.getClassroomInvitees(e.id,u.data.customerId)),E=l.a.useBasicFetch(c.L.config()),f=(0,n.I0)(),C=(0,z.p)(e.id).isOwner,S=null===(s=null===(t=g.data)||void 0===t?void 0:t._integrations)||void 0===s?void 0:s.rostered;function O(e){return e===u.data.id?C:p.data.some((function(a){return a.id.toString()===e.toString()}))}return(0,d.M)({title:ee("pageTitle",{classroomName:null===(m=g.data)||void 0===m?void 0:m.name})}),(0,$._)(g),g.data&&h.hasCompleted&&p.hasCompleted&&E.data?r.createElement(J.R,{classroom:g.data,currentUser:u.data,onTogglePin:function(e,a,t){if(!S){var r=e?Y.F.pinClassroom:Y.F.unpinClassroom;l.a.fetch(f,r(g.data,a,t))}},activeTab:"teachers",isRostered:S},function(){var e,a;return S?r.createElement(r.Fragment,null,r.createElement(o.P,{type:"classroom"}),(null===(e=h.data)||void 0===e?void 0:e.length)?r.createElement(j,{classroom:g.data,teachers:h.data,config:E.data,currentUser:u.data,isOwner:O,readOnly:!0}):r.createElement(v,null)):(null===(a=h.data)||void 0===a?void 0:a.length)?r.createElement(j,{config:E.data,classroom:g.data,teachers:h.data,currentUser:u.data,isOwner:O,readOnly:S}):r.createElement(y,{classroom:g.data})}()):r.createElement(K,null)}}}]);
2
+ //# sourceMappingURL=3012-fd3eb34a14-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/3012-fd3eb34a14-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/manage-classroom-teacher-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/partial-manage-classroom-teachers.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-teachers/ClassroomTeachersView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text}&nbsp;\n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\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 { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.manageClassroomTeachersEmptyState';\n\ninterface ManageClassroomTeachersEmptyStateProps {\n classroom: Classroom;\n}\n\nexport function RosteredClassroomTeachersEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n {/* todo add kb link */}\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomTeachersEmptyState(props: ManageClassroomTeachersEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n \n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addTeachers')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kTynd\",\"name\":\"UWi4G\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './manage-classroom-teacher-item.scss';\n\nconst namespace = 'classrooms.manageClassroomTeacherItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getRemoveTeachersAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [teacherId]\n }\n});\n\nconst getAssignAsOwnerAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ASSIGN_AS_OWNER,\n args: [ classroomId, teacherId ]\n});\n\nconst getRevokeOwnershipAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REVOKE_OWNERSHIP,\n args: [ classroomId, teacherId ]\n});\n\ninterface ManageClassroomTeacherItemProps {\n classroom: Classroom;\n teacher: User;\n config: Config;\n onToggleCheckbox: () => void;\n checked: boolean;\n isOwner: (userId: string) => boolean;\n currentUser: CurrentUser;\n readOnly?: boolean;\n readonlyTooltip?: string;\n}\n\nexport function ManageClassroomTeacherItem(props: ManageClassroomTeacherItemProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const teacherIsAdmin = UserHelper.getUserRole(props.teacher) === UserRole.Admin;\n\n function getCanManageTeacher(): boolean {\n // Current user can perform any action on themselves\n if (props.currentUser.id === props.teacher.id)\n return true;\n\n // This permission allows total control over a classroom\n if (hasPermissions(PermissionName.ManageAllClassrooms))\n return true;\n\n // Regular teachers or owners cannot perform actions on admins in the classroom\n if (teacherIsAdmin)\n return false;\n\n return props.isOwner(props.currentUser.id);\n }\n\n const canManageTeacher = getCanManageTeacher();\n\n const actionDisabled = !canManageTeacher || props.readOnly;\n\n function getActions(): ActionOptions[] {\n // Non-owners cannot perform any actions on other classroom teachers\n if (!props.isOwner(props.currentUser.id))\n return [];\n\n const actions: ActionOptions[] = [];\n\n const disabledClassName = 'text-secondary disabled cursor-default';\n\n // Actions are different if the user item is for the current user\n const isManagingCurrentUser = props.currentUser.id === props.teacher.id;\n\n if (!isManagingCurrentUser) {\n if (props.isOwner(props.teacher.id)) {\n actions.push({\n order: 0,\n label: getPhrase('revokeOwnership'),\n appLink: getRevokeOwnershipAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Demote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRevokeOwnershipFromAdmin') : ''\n });\n } else {\n actions.push({\n order: 0,\n label: getPhrase('assignAsOwner'),\n appLink: getAssignAsOwnerAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Promote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotAssignAdminAsOwner') : ''\n });\n }\n }\n\n actions.push({\n order: 10,\n label: isManagingCurrentUser ? getPhrase('leaveClassroom') : getPhrase('removeTeacher'),\n appLink: getRemoveTeachersAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.classroom.id,\n userId: props.teacher.id\n },\n analyticsOptions: {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : 'text-danger',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRemoveAdmin') : ''\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n {props.isOwner(props.currentUser.id) && (\n <Checkbox\n id={props.teacher.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n )}\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.teacher.name, props.teacher.surname)}\n imageUrl={props.teacher.avatar?.url}\n />\n </div>\n\n <p className={`${styles.name} me-2 text-truncate mb-0 text-nowrap`}>{UserHelper.getFullName(props.teacher)}</p>\n\n {!!teacherIsAdmin && (\n <div className={`classroom-pill text-white bg-navy`}>\n <Text namespace={namespace} phrase='admin' />\n </div>\n )}\n\n {(!teacherIsAdmin && props.isOwner(props.teacher.id)) && (\n <div className={`classroom-pill text-white bg-indigo`}>\n <Text namespace={namespace} phrase='owner' />\n </div>\n )}\n\n <MoreActions\n actions={getActions()}\n className='ms-auto'\n actionsDropdownClassName='btn btn-link'\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ManageClassroomTeacherItem } from 'apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem';\n\nimport { ManageClassroomTeachersEmptyState } from './empty-state/ManageClassroomTeachersEmptyState';\n\nconst namespace = 'classrooms.manageClassroomTeachers';\n\ninterface ManageClassroomTeachersProps {\n classroom: Classroom;\n isOwner: (teacherId: string) => boolean;\n currentUser: CurrentUser;\n teachers: User[];\n config: Config;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomTeachers(props: ManageClassroomTeachersProps): JSX.Element {\n const CheckboxHelper = useBulkCheckboxManager(props.teachers);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n function onClickBulkRemoveTeachers(): void {\n if (!selectionCount || !props.isOwner(props.currentUser.id) || props.readOnly)\n return;\n\n const teacherIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n teacherCount: teacherIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomTeachers\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [props.classroom.id],\n params: {\n teacherIds\n }\n });\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.teachers?.length)\n return <ManageClassroomTeachersEmptyState classroom={props.classroom} />;\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n {props.isOwner(props.currentUser.id) && (\n <>\n <Checkbox\n id='manage-classroom-teachers-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <DivButton\n className={!selectionCount || props.readOnly ? 'me-auto text-light cursor-default' : 'me-auto'}\n onClick={onClickBulkRemoveTeachers}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n disabled={props.readOnly}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark ms-auto'\n appLink={props.readOnly\n ? null\n : {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n analyticsData={{ id: props.classroom.id }}\n analyticsOptions={{\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomTeachers\n }}\n >\n <Text namespace={namespace} phrase='addTeacher' />\n </IconButton>\n </Tooltip>\n </>\n )}\n </div>\n\n <ul className='striped-list list-unstyled'>\n {props.teachers.map(teacher => (\n <li key={teacher.id}>\n <ManageClassroomTeacherItem\n classroom={props.classroom}\n teacher={teacher}\n config={props.config}\n checked={CheckboxHelper.isChecked(teacher.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(teacher.id)}\n currentUser={props.currentUser}\n isOwner={props.isOwner}\n readOnly={props.readOnly}\n readonlyTooltip={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"FQwVf\",\"avatar\":\"mYQWy\",\"checkbox\":\"svGp0\",\"actionIcon\":\"rKbj_\",\"addTeachers\":\"qigWD\",\"teacherName\":\"SiD8n\",\"moreActions\":\"sAUZY\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-teachers.scss';\n\nexport const PartialManageClassroomTeachers = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`ms-2 me-4 partial-loading-background ${styles.checkbox}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new teachers button */}\n <div className={`partial-loading-background ${styles.addTeachers}`} />\n </div>\n\n {/* Teachers list */}\n <ul className='striped-list list-unstyled'>\n {Array(3).fill(null).map((teacher, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Teacher name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.teacherName}`} />\n </div>\n\n {/* More actions */}\n <div className={`ms-auto partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ManageClassroomTeachersEmptyState, RosteredClassroomTeachersEmptyState } from 'apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState';\nimport { ManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers';\nimport { PartialManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomTeachers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomTeachersViewProps {\n id: string;\n}\n\nexport function ClassroomTeachersView(props: ClassroomTeachersViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const owners = Flight.useBasicFetch<User[]>(ClassroomRequests.getClassroomOwners(props.id));\n const invitees = Flight.useBasicFetch<User[]>(\n currentUser.data?.customerId && ClassroomRequests.getClassroomInvitees(props.id, currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dispatch = useDispatch();\n const { isOwner: currentUserIsOwner } = useCheckClassroomPermissions(props.id);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n \n function isOwner(teacherId: string): boolean {\n if (teacherId === currentUser.data.id)\n return currentUserIsOwner;\n\n return owners.data.some(owner => owner.id.toString() === teacherId.toString());\n }\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n if (!classroom.data || !invitees.hasCompleted || !owners.hasCompleted || !config.data)\n return <PartialManageClassroomTeachers />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='teachers'\n isRostered={isRostered}\n >\n {(() => {\n if (isRostered) {\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!invitees.data?.length ? (\n <RosteredClassroomTeachersEmptyState />\n ) : (\n <ManageClassroomTeachers\n classroom={classroom.data}\n teachers={invitees.data}\n config={config.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly\n />\n )}\n </>\n );\n }\n\n if (invitees.data?.length) {\n return (\n <ManageClassroomTeachers\n config={config.data}\n classroom={classroom.data}\n teachers={invitees.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly={isRostered}\n />\n );\n }\n\n return <ManageClassroomTeachersEmptyState classroom={classroom.data}/>;\n })()}\n\n </ClassroomLayout>\n );\n}\n"],"names":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","usePrevious","value","ref","namespace","RosteredClassroomTeachersEmptyState","EmptyState","src","ImageUrls","Text","phrase","href","target","LanguageService","ManageClassroomTeachersEmptyState","icon","appLink","application","action","args","classroom","getRemoveTeachersAppLink","teacherId","classroomId","params","teacherIds","getAssignAsOwnerAppLink","getRevokeOwnershipAppLink","ManageClassroomTeacherItem","hasPermissions","usePermissions","teacherIsAdmin","UserHelper","teacher","UserRole","canManageTeacher","currentUser","PermissionName","isOwner","actionDisabled","readOnly","Checkbox","checked","onChange","onToggleCheckbox","disabled","Avatar","imageCdnUrl","config","initials","name","surname","imageUrl","avatar","url","actions","disabledClassName","isManagingCurrentUser","push","order","label","analyticsData","analyticsOptions","actionType","entity","descriptor","workflowPhase","location","tooltip","readonlyTooltip","userId","getActions","actionsDropdownClassName","ManageClassroomTeachers","CheckboxHelper","teachers","selectionCount","edgeToEdge","indeterminate","DivButton","onClick","AnalyticsHelper","teacherCount","SvgContainer","svgName","title","tooltipPlacement","tooltipSpanHack","Tooltip","spanHack","IconButton","key","PartialManageClassroomTeachers","numItems","PartialPillTabSelector","fill","ClassroomTeachersView","UserRequests","data","ClassroomRequests","owners","invitees","customerId","ConfigRequests","dispatch","currentUserIsOwner","isRostered","_integrations","rostered","some","owner","useSetPageMetadata","classroomName","useHandleClassroomErrors","hasCompleted","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","request","activeTab"],"sourceRoot":""}
@@ -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