@clickview/exchange 0.57.0 → 0.58.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{CczLEc2p.chunk.css → BBuiH5XR.chunk.css} +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{B1IKzVyn.chunk.js → 59HBVVj3.chunk.js} +2 -2
  5. package/dist/scripts/{B1IKzVyn.chunk.js.map → 59HBVVj3.chunk.js.map} +1 -1
  6. package/dist/scripts/{DmL0FSJr.chunk.js → 77QNnWjW.chunk.js} +2 -2
  7. package/dist/scripts/{DmL0FSJr.chunk.js.map → 77QNnWjW.chunk.js.map} +1 -1
  8. package/dist/scripts/{dlcOoTX2.chunk.js → 97GoF_Eh.chunk.js} +2 -2
  9. package/dist/scripts/{dlcOoTX2.chunk.js.map → 97GoF_Eh.chunk.js.map} +1 -1
  10. package/dist/scripts/{DkVa76dg.chunk.js → A03ti58C.chunk.js} +2 -2
  11. package/dist/scripts/{DkVa76dg.chunk.js.map → A03ti58C.chunk.js.map} +1 -1
  12. package/dist/scripts/{DEFuGMsd.chunk.js → B0qPCCXt.chunk.js} +2 -2
  13. package/dist/scripts/{DEFuGMsd.chunk.js.map → B0qPCCXt.chunk.js.map} +1 -1
  14. package/dist/scripts/{CYuWFG4C.chunk.js → B3P1JDvZ.chunk.js} +2 -2
  15. package/dist/scripts/{CYuWFG4C.chunk.js.map → B3P1JDvZ.chunk.js.map} +1 -1
  16. package/dist/scripts/{BKID_sLP.chunk.js → B3hUKuRr.chunk.js} +2 -2
  17. package/dist/scripts/{BKID_sLP.chunk.js.map → B3hUKuRr.chunk.js.map} +1 -1
  18. package/dist/scripts/{CrYQzjgZ.chunk.js → B7sQixjZ.chunk.js} +2 -2
  19. package/dist/scripts/{CrYQzjgZ.chunk.js.map → B7sQixjZ.chunk.js.map} +1 -1
  20. package/dist/scripts/{CQnwddP2.chunk.js → B9q9og3n.chunk.js} +2 -2
  21. package/dist/scripts/{CQnwddP2.chunk.js.map → B9q9og3n.chunk.js.map} +1 -1
  22. package/dist/scripts/{Doc0JWTn.chunk.js → BD8uJxiB.chunk.js} +2 -2
  23. package/dist/scripts/{Doc0JWTn.chunk.js.map → BD8uJxiB.chunk.js.map} +1 -1
  24. package/dist/scripts/{C8Ld-38h.chunk.js → BJaYD8dc.chunk.js} +2 -2
  25. package/dist/scripts/{C8Ld-38h.chunk.js.map → BJaYD8dc.chunk.js.map} +1 -1
  26. package/dist/scripts/{DfLXqnWC.chunk.js → BMTawQoz.chunk.js} +2 -2
  27. package/dist/scripts/{DfLXqnWC.chunk.js.map → BMTawQoz.chunk.js.map} +1 -1
  28. package/dist/scripts/{BWu0k43d.chunk.js → BP-61ONz.chunk.js} +2 -2
  29. package/dist/scripts/{BWu0k43d.chunk.js.map → BP-61ONz.chunk.js.map} +1 -1
  30. package/dist/scripts/{COMMZ5NT.chunk.js → BQiCELUH.chunk.js} +2 -2
  31. package/dist/scripts/{COMMZ5NT.chunk.js.map → BQiCELUH.chunk.js.map} +1 -1
  32. package/dist/scripts/{Dj2iNM2-.chunk.js → BQz8nP4M.chunk.js} +2 -2
  33. package/dist/scripts/{Dj2iNM2-.chunk.js.map → BQz8nP4M.chunk.js.map} +1 -1
  34. package/dist/scripts/{p9Hw1u0F.chunk.js → BSZHRB-3.chunk.js} +2 -2
  35. package/dist/scripts/{p9Hw1u0F.chunk.js.map → BSZHRB-3.chunk.js.map} +1 -1
  36. package/dist/scripts/{Ci21j_NU.chunk.js → BTJwiZTv.chunk.js} +2 -2
  37. package/dist/scripts/{Ci21j_NU.chunk.js.map → BTJwiZTv.chunk.js.map} +1 -1
  38. package/dist/scripts/{CqWuZzIu.chunk.js → BVbJxgV8.chunk.js} +2 -2
  39. package/dist/scripts/{CqWuZzIu.chunk.js.map → BVbJxgV8.chunk.js.map} +1 -1
  40. package/dist/scripts/{aImHyMo0.chunk.js → BX8fMfGC.chunk.js} +2 -2
  41. package/dist/scripts/{aImHyMo0.chunk.js.map → BX8fMfGC.chunk.js.map} +1 -1
  42. package/dist/scripts/{D91xJv6J.chunk.js → BaNAbBYa.chunk.js} +2 -2
  43. package/dist/scripts/{D91xJv6J.chunk.js.map → BaNAbBYa.chunk.js.map} +1 -1
  44. package/dist/scripts/{BImNArot.chunk.js → BazXwFtM.chunk.js} +2 -2
  45. package/dist/scripts/{BImNArot.chunk.js.map → BazXwFtM.chunk.js.map} +1 -1
  46. package/dist/scripts/{e9ZqHdMv.chunk.js → BbGFMokw.chunk.js} +2 -2
  47. package/dist/scripts/{e9ZqHdMv.chunk.js.map → BbGFMokw.chunk.js.map} +1 -1
  48. package/dist/scripts/BfA6QK2M.chunk.js +2 -0
  49. package/dist/scripts/{BnkjQdg-.chunk.js.map → BfA6QK2M.chunk.js.map} +1 -1
  50. package/dist/scripts/{DbB0S2ZQ.chunk.js → BfAoEeOL.chunk.js} +2 -2
  51. package/dist/scripts/{DbB0S2ZQ.chunk.js.map → BfAoEeOL.chunk.js.map} +1 -1
  52. package/dist/scripts/{0Rgjdcqz.chunk.js → BiAKqJdD.chunk.js} +2 -2
  53. package/dist/scripts/{0Rgjdcqz.chunk.js.map → BiAKqJdD.chunk.js.map} +1 -1
  54. package/dist/scripts/{CssHbHjG.chunk.js → BmU_YUbl.chunk.js} +2 -2
  55. package/dist/scripts/{CssHbHjG.chunk.js.map → BmU_YUbl.chunk.js.map} +1 -1
  56. package/dist/scripts/{SmYpiCQA.chunk.js → BuSLCxEs.chunk.js} +2 -2
  57. package/dist/scripts/{SmYpiCQA.chunk.js.map → BuSLCxEs.chunk.js.map} +1 -1
  58. package/dist/scripts/{BZp1TuCa.chunk.js → Bvlv6PGR.chunk.js} +2 -2
  59. package/dist/scripts/{BZp1TuCa.chunk.js.map → Bvlv6PGR.chunk.js.map} +1 -1
  60. package/dist/scripts/{BYXBfLyn.chunk.js → BwS3tIqZ.chunk.js} +2 -2
  61. package/dist/scripts/{BYXBfLyn.chunk.js.map → BwS3tIqZ.chunk.js.map} +1 -1
  62. package/dist/scripts/{S6sUSK4X.chunk.js → ByKnIsJG.chunk.js} +2 -2
  63. package/dist/scripts/{S6sUSK4X.chunk.js.map → ByKnIsJG.chunk.js.map} +1 -1
  64. package/dist/scripts/Bz5fsSmV.chunk.js +15 -0
  65. package/dist/scripts/Bz5fsSmV.chunk.js.map +1 -0
  66. package/dist/scripts/{CXmjzxZL.chunk.js → C06GoFsR.chunk.js} +2 -2
  67. package/dist/scripts/{CXmjzxZL.chunk.js.map → C06GoFsR.chunk.js.map} +1 -1
  68. package/dist/scripts/{CYbmYWz6.chunk.js → C3cp4ax7.chunk.js} +2 -2
  69. package/dist/scripts/{CYbmYWz6.chunk.js.map → C3cp4ax7.chunk.js.map} +1 -1
  70. package/dist/scripts/{BHQ-iEoW.chunk.js → C7giBbHJ.chunk.js} +2 -2
  71. package/dist/scripts/{BHQ-iEoW.chunk.js.map → C7giBbHJ.chunk.js.map} +1 -1
  72. package/dist/scripts/{CWAi8BHf.chunk.js → CEXoa-wM.chunk.js} +2 -2
  73. package/dist/scripts/{CWAi8BHf.chunk.js.map → CEXoa-wM.chunk.js.map} +1 -1
  74. package/dist/scripts/{lO5fmjgI.chunk.js → CKbq02SS.chunk.js} +2 -2
  75. package/dist/scripts/{lO5fmjgI.chunk.js.map → CKbq02SS.chunk.js.map} +1 -1
  76. package/dist/scripts/{CxZxk1HQ.chunk.js → CNVerO1q.chunk.js} +2 -2
  77. package/dist/scripts/{CxZxk1HQ.chunk.js.map → CNVerO1q.chunk.js.map} +1 -1
  78. package/dist/scripts/{5jG1qquw.chunk.js → CNat3TfQ.chunk.js} +2 -2
  79. package/dist/scripts/{5jG1qquw.chunk.js.map → CNat3TfQ.chunk.js.map} +1 -1
  80. package/dist/scripts/{D-lhN8Br.chunk.js → CP5MKWC_.chunk.js} +2 -2
  81. package/dist/scripts/{D-lhN8Br.chunk.js.map → CP5MKWC_.chunk.js.map} +1 -1
  82. package/dist/scripts/{CiOp7PM4.chunk.js → CSvE-r6r.chunk.js} +2 -2
  83. package/dist/scripts/{CiOp7PM4.chunk.js.map → CSvE-r6r.chunk.js.map} +1 -1
  84. package/dist/scripts/{BZhnbXlC.chunk.js → CW4iXW5L.chunk.js} +2 -2
  85. package/dist/scripts/{BZhnbXlC.chunk.js.map → CW4iXW5L.chunk.js.map} +1 -1
  86. package/dist/scripts/{-Xvqr6f_.chunk.js → CWdK_7iP.chunk.js} +2 -2
  87. package/dist/scripts/{-Xvqr6f_.chunk.js.map → CWdK_7iP.chunk.js.map} +1 -1
  88. package/dist/scripts/{jFTHf_UL.chunk.js → CWjXnQlc.chunk.js} +2 -2
  89. package/dist/scripts/{jFTHf_UL.chunk.js.map → CWjXnQlc.chunk.js.map} +1 -1
  90. package/dist/scripts/{BwuTkpPz.chunk.js → CXEroOnb.chunk.js} +2 -2
  91. package/dist/scripts/{BwuTkpPz.chunk.js.map → CXEroOnb.chunk.js.map} +1 -1
  92. package/dist/scripts/{DMu9QirA.chunk.js → C_KOP_pH.chunk.js} +2 -2
  93. package/dist/scripts/{DMu9QirA.chunk.js.map → C_KOP_pH.chunk.js.map} +1 -1
  94. package/dist/scripts/CbqPW1QD.chunk.js +2 -0
  95. package/dist/scripts/{COkVtt29.chunk.js.map → CbqPW1QD.chunk.js.map} +1 -1
  96. package/dist/scripts/{BI2RzMBo.chunk.js → CelK9zYh.chunk.js} +2 -2
  97. package/dist/scripts/{BI2RzMBo.chunk.js.map → CelK9zYh.chunk.js.map} +1 -1
  98. package/dist/scripts/{DsAzRbUN.chunk.js → Cj7-nmDw.chunk.js} +2 -2
  99. package/dist/scripts/{DsAzRbUN.chunk.js.map → Cj7-nmDw.chunk.js.map} +1 -1
  100. package/dist/scripts/{CoZqjJhl.chunk.js → CkXDJSIC.chunk.js} +2 -2
  101. package/dist/scripts/{CoZqjJhl.chunk.js.map → CkXDJSIC.chunk.js.map} +1 -1
  102. package/dist/scripts/CmKuC0AJ.chunk.js +2 -0
  103. package/dist/scripts/CmKuC0AJ.chunk.js.map +1 -0
  104. package/dist/scripts/CmQwEhN8.chunk.js +2 -0
  105. package/dist/scripts/{DX5d-qLN.chunk.js.map → CmQwEhN8.chunk.js.map} +1 -1
  106. package/dist/scripts/{CKE8GGKH.chunk.js → CsI_aEby.chunk.js} +2 -2
  107. package/dist/scripts/{CKE8GGKH.chunk.js.map → CsI_aEby.chunk.js.map} +1 -1
  108. package/dist/scripts/{B9372wBc.chunk.js → CtbOxRCF.chunk.js} +2 -2
  109. package/dist/scripts/{B9372wBc.chunk.js.map → CtbOxRCF.chunk.js.map} +1 -1
  110. package/dist/scripts/{Ux2KpCQK.chunk.js → CxNf401G.chunk.js} +2 -2
  111. package/dist/scripts/{Ux2KpCQK.chunk.js.map → CxNf401G.chunk.js.map} +1 -1
  112. package/dist/scripts/{CeNx5Kzz.chunk.js → Cxg7zIQ7.chunk.js} +2 -2
  113. package/dist/scripts/{CeNx5Kzz.chunk.js.map → Cxg7zIQ7.chunk.js.map} +1 -1
  114. package/dist/scripts/{WuuAAnHZ.chunk.js → CyTjm-iy.chunk.js} +2 -2
  115. package/dist/scripts/{WuuAAnHZ.chunk.js.map → CyTjm-iy.chunk.js.map} +1 -1
  116. package/dist/scripts/{CfiDZ6LP.chunk.js → D-XHMtrK.chunk.js} +2 -2
  117. package/dist/scripts/{CfiDZ6LP.chunk.js.map → D-XHMtrK.chunk.js.map} +1 -1
  118. package/dist/scripts/{Dur2ee5n.chunk.js → D0Kez51H.chunk.js} +2 -2
  119. package/dist/scripts/{Dur2ee5n.chunk.js.map → D0Kez51H.chunk.js.map} +1 -1
  120. package/dist/scripts/{DUWvwOTa.chunk.js → D1O5BdYP.chunk.js} +2 -2
  121. package/dist/scripts/{DUWvwOTa.chunk.js.map → D1O5BdYP.chunk.js.map} +1 -1
  122. package/dist/scripts/{OZVJyZgM.chunk.js → D8QwkaNv.chunk.js} +2 -2
  123. package/dist/scripts/{OZVJyZgM.chunk.js.map → D8QwkaNv.chunk.js.map} +1 -1
  124. package/dist/scripts/{DvbFBcOQ.chunk.js → DDCwFNmm.chunk.js} +2 -2
  125. package/dist/scripts/{DvbFBcOQ.chunk.js.map → DDCwFNmm.chunk.js.map} +1 -1
  126. package/dist/scripts/{Cog61quf.chunk.js → DGdFdv74.chunk.js} +2 -2
  127. package/dist/scripts/{Cog61quf.chunk.js.map → DGdFdv74.chunk.js.map} +1 -1
  128. package/dist/scripts/DHQlkDUq.chunk.js +2 -0
  129. package/dist/scripts/{D0w9N-3T.chunk.js.map → DHQlkDUq.chunk.js.map} +1 -1
  130. package/dist/scripts/{D1o0K4Kj.chunk.js → DIzcUtXf.chunk.js} +2 -2
  131. package/dist/scripts/{D1o0K4Kj.chunk.js.map → DIzcUtXf.chunk.js.map} +1 -1
  132. package/dist/scripts/{BYq9jK40.chunk.js → DLqmmsup.chunk.js} +2 -2
  133. package/dist/scripts/{BYq9jK40.chunk.js.map → DLqmmsup.chunk.js.map} +1 -1
  134. package/dist/scripts/DOH54KcJ.chunk.js +2 -0
  135. package/dist/scripts/DOH54KcJ.chunk.js.map +1 -0
  136. package/dist/scripts/{CMUKx3aO.chunk.js → DQz3vFm9.chunk.js} +2 -2
  137. package/dist/scripts/{CMUKx3aO.chunk.js.map → DQz3vFm9.chunk.js.map} +1 -1
  138. package/dist/scripts/{BHC43d8p.chunk.js → DSuqoCKU.chunk.js} +2 -2
  139. package/dist/scripts/{BHC43d8p.chunk.js.map → DSuqoCKU.chunk.js.map} +1 -1
  140. package/dist/scripts/{Bj4aS_x2.chunk.js → DVgGpvRr.chunk.js} +2 -2
  141. package/dist/scripts/{Bj4aS_x2.chunk.js.map → DVgGpvRr.chunk.js.map} +1 -1
  142. package/dist/scripts/{j26kM5AB.chunk.js → DVqb0KMG.chunk.js} +2 -2
  143. package/dist/scripts/{j26kM5AB.chunk.js.map → DVqb0KMG.chunk.js.map} +1 -1
  144. package/dist/scripts/D_K0UgSq.chunk.js +2 -0
  145. package/dist/scripts/{DWYleim7.chunk.js.map → D_K0UgSq.chunk.js.map} +1 -1
  146. package/dist/scripts/{4r-SFWRv.chunk.js → DbQN84Ka.chunk.js} +2 -2
  147. package/dist/scripts/{4r-SFWRv.chunk.js.map → DbQN84Ka.chunk.js.map} +1 -1
  148. package/dist/scripts/{CqdCH0OC.chunk.js → DgCvHCTv.chunk.js} +2 -2
  149. package/dist/scripts/{CqdCH0OC.chunk.js.map → DgCvHCTv.chunk.js.map} +1 -1
  150. package/dist/scripts/{DZ9Qr412.chunk.js → DhiXbhAO.chunk.js} +2 -2
  151. package/dist/scripts/{DZ9Qr412.chunk.js.map → DhiXbhAO.chunk.js.map} +1 -1
  152. package/dist/scripts/{DbIiwJi6.chunk.js → DvMJBGNc.chunk.js} +2 -2
  153. package/dist/scripts/{DbIiwJi6.chunk.js.map → DvMJBGNc.chunk.js.map} +1 -1
  154. package/dist/scripts/{DQP0C036.chunk.js → DxppYmgw.chunk.js} +2 -2
  155. package/dist/scripts/{DQP0C036.chunk.js.map → DxppYmgw.chunk.js.map} +1 -1
  156. package/dist/scripts/{DlvPyEMc.chunk.js → DzTRfLQn.chunk.js} +2 -2
  157. package/dist/scripts/{DlvPyEMc.chunk.js.map → DzTRfLQn.chunk.js.map} +1 -1
  158. package/dist/scripts/EOyUW0EV.chunk.js +2 -0
  159. package/dist/scripts/{B6wIglzt.chunk.js.map → EOyUW0EV.chunk.js.map} +1 -1
  160. package/dist/scripts/{Dkw1yxVb.chunk.js → Ft5Mau7n.chunk.js} +2 -2
  161. package/dist/scripts/{Dkw1yxVb.chunk.js.map → Ft5Mau7n.chunk.js.map} +1 -1
  162. package/dist/scripts/{EypiXS_y.chunk.js → GIZO-DsR.chunk.js} +2 -2
  163. package/dist/scripts/{EypiXS_y.chunk.js.map → GIZO-DsR.chunk.js.map} +1 -1
  164. package/dist/scripts/{C-LZ1Pnr.chunk.js → PEkZnijT.chunk.js} +2 -2
  165. package/dist/scripts/{C-LZ1Pnr.chunk.js.map → PEkZnijT.chunk.js.map} +1 -1
  166. package/dist/scripts/{FwSaxfbL.chunk.js → YhHoI_hl.chunk.js} +3 -3
  167. package/dist/scripts/{FwSaxfbL.chunk.js.map → YhHoI_hl.chunk.js.map} +1 -1
  168. package/dist/scripts/{app-eQ6keCVj.js → app-DlxnnX-Y.js} +5 -5
  169. package/dist/scripts/{app-eQ6keCVj.js.map → app-DlxnnX-Y.js.map} +1 -1
  170. package/dist/scripts/{CBYrUSmz.chunk.js → eF4foLm3.chunk.js} +2 -2
  171. package/dist/scripts/{CBYrUSmz.chunk.js.map → eF4foLm3.chunk.js.map} +1 -1
  172. package/dist/scripts/{D4uscADt.chunk.js → faET_EvS.chunk.js} +2 -2
  173. package/dist/scripts/{D4uscADt.chunk.js.map → faET_EvS.chunk.js.map} +1 -1
  174. package/dist/scripts/{CtsGHZp3.chunk.js → i36I5rgn.chunk.js} +2 -2
  175. package/dist/scripts/{CtsGHZp3.chunk.js.map → i36I5rgn.chunk.js.map} +1 -1
  176. package/dist/scripts/i6PC1lEa.chunk.js +2 -0
  177. package/dist/scripts/{D8bdW5jN.chunk.js.map → i6PC1lEa.chunk.js.map} +1 -1
  178. package/dist/scripts/{BYTm1HdJ.chunk.js → mMvgsH8u.chunk.js} +2 -2
  179. package/dist/scripts/{BYTm1HdJ.chunk.js.map → mMvgsH8u.chunk.js.map} +1 -1
  180. package/dist/scripts/{1JtZW3TW.chunk.js → nzWgRE-N.chunk.js} +2 -2
  181. package/dist/scripts/{1JtZW3TW.chunk.js.map → nzWgRE-N.chunk.js.map} +1 -1
  182. package/dist/scripts/{DqYjDOWl.chunk.js → uFAznmkx.chunk.js} +2 -2
  183. package/dist/scripts/{DqYjDOWl.chunk.js.map → uFAznmkx.chunk.js.map} +1 -1
  184. package/dist/scripts/{zFY--sWD.chunk.js → wC1U3zaB.chunk.js} +2 -2
  185. package/dist/scripts/{zFY--sWD.chunk.js.map → wC1U3zaB.chunk.js.map} +1 -1
  186. package/package.json +1 -1
  187. package/dist/scripts/B6wIglzt.chunk.js +0 -2
  188. package/dist/scripts/BnkjQdg-.chunk.js +0 -2
  189. package/dist/scripts/ByM31Op_.chunk.js +0 -2
  190. package/dist/scripts/ByM31Op_.chunk.js.map +0 -1
  191. package/dist/scripts/COkVtt29.chunk.js +0 -2
  192. package/dist/scripts/D0w9N-3T.chunk.js +0 -2
  193. package/dist/scripts/D8bdW5jN.chunk.js +0 -2
  194. package/dist/scripts/DWYleim7.chunk.js +0 -2
  195. package/dist/scripts/DX5d-qLN.chunk.js +0 -2
  196. package/dist/scripts/DoJDzZ7U.chunk.js +0 -15
  197. package/dist/scripts/DoJDzZ7U.chunk.js.map +0 -1
  198. package/dist/scripts/k5oLm6N7.chunk.js +0 -2
  199. package/dist/scripts/k5oLm6N7.chunk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{r as d,j as h}from"./app-eQ6keCVj.js";var I=new Map,R=new WeakMap,y=0,L=void 0;function O(e){return e?(R.has(e)||(y+=1,R.set(e,y.toString())),R.get(e)):"0"}function _(e){return Object.keys(e).sort().filter(r=>e[r]!==void 0).map(r=>`${r}_${r==="root"?O(e.root):e[r]}`).toString()}function $(e){const r=_(e);let s=I.get(r);if(!s){const n=new Map;let a;const i=new IntersectionObserver(o=>{o.forEach(t=>{var c;const g=t.isIntersecting&&a.some(u=>t.intersectionRatio>=u);e.trackVisibility&&typeof t.isVisible>"u"&&(t.isVisible=g),(c=n.get(t.target))==null||c.forEach(u=>{u(g,t)})})},e);a=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),s={id:r,observer:i,elements:n},I.set(r,s)}return s}function j(e,r,s={},n=L){if(typeof window.IntersectionObserver>"u"&&n!==void 0){const c=e.getBoundingClientRect();return r(n,{isIntersecting:n,target:e,intersectionRatio:typeof s.threshold=="number"?s.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),()=>{}}const{id:a,observer:i,elements:o}=$(s),t=o.get(e)||[];return o.has(e)||o.set(e,t),t.push(r),i.observe(e),function(){t.splice(t.indexOf(r),1),t.length===0&&(o.delete(e),i.unobserve(e)),o.size===0&&(i.disconnect(),I.delete(a))}}function D({threshold:e,delay:r,trackVisibility:s,rootMargin:n,root:a,triggerOnce:i,skip:o,initialInView:t,fallbackInView:c,onChange:g}={}){var u;const[f,p]=d.useState(null),m=d.useRef(),[A,l]=d.useState({inView:!!t,entry:void 0});m.current=g,d.useEffect(()=>{if(o||!f)return;let b;return b=j(f,(x,E)=>{l({inView:x,entry:E}),m.current&&m.current(x,E),E.isIntersecting&&i&&b&&(b(),b=void 0)},{root:a,rootMargin:n,threshold:e,trackVisibility:s,delay:r},c),()=>{b&&b()}},[Array.isArray(e)?e.toString():e,f,a,n,i,o,s,c,r]);const w=(u=A.entry)==null?void 0:u.target,S=d.useRef();!f&&w&&!i&&!o&&S.current!==w&&(S.current=w,l({inView:!!t,entry:void 0}));const v=[p,A.inView,A.entry];return v.ref=v[0],v.inView=v[1],v.entry=v[2],v}function V(e={}){const{prevent:r,rootMargin:s,triggerOnce:n=!0}=e;let[a,i,o]=D({triggerOnce:n,rootMargin:s});return(r===!0||typeof window.IntersectionObserver>"u")&&(i=!0,a=null),{ref:a,inView:i,initialized:!!o}}const M="_image_pp6me_1",C={image:M},z="500px",B="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",T=d.memo(function(e){const{forceLoad:r,extraClasses:s="",errorFallbackImageSrc:n,preventLoad:a=!1,errorFallbackImageClassName:i,src:o,alt:t,...c}=e,{ref:g,inView:u}=V({rootMargin:z}),[f,p]=d.useState(!1);d.useEffect(()=>{if(!r&&!u||a)return;const l=new Image;return l.onerror=()=>{p(!0),n&&(l.src=n)},l.src=o,()=>l.onerror=null},[u,a]);function m(){return f&&n?n:e.src}if(f&&!n)return h.jsx(h.Fragment,{});if(!g)return h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,alt:t,src:m(),...c});const A={alt:t,...c,...(u||r)&&!a?{src:m()}:{src:B}};return r||(A.ref=g),h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,...A})});export{T as L,D as a,V as u};
2
- //# sourceMappingURL=CBYrUSmz.chunk.js.map
1
+ import{r as d,j as h}from"./app-DlxnnX-Y.js";var I=new Map,R=new WeakMap,y=0,L=void 0;function O(e){return e?(R.has(e)||(y+=1,R.set(e,y.toString())),R.get(e)):"0"}function _(e){return Object.keys(e).sort().filter(r=>e[r]!==void 0).map(r=>`${r}_${r==="root"?O(e.root):e[r]}`).toString()}function $(e){const r=_(e);let s=I.get(r);if(!s){const n=new Map;let a;const i=new IntersectionObserver(o=>{o.forEach(t=>{var c;const g=t.isIntersecting&&a.some(u=>t.intersectionRatio>=u);e.trackVisibility&&typeof t.isVisible>"u"&&(t.isVisible=g),(c=n.get(t.target))==null||c.forEach(u=>{u(g,t)})})},e);a=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),s={id:r,observer:i,elements:n},I.set(r,s)}return s}function j(e,r,s={},n=L){if(typeof window.IntersectionObserver>"u"&&n!==void 0){const c=e.getBoundingClientRect();return r(n,{isIntersecting:n,target:e,intersectionRatio:typeof s.threshold=="number"?s.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),()=>{}}const{id:a,observer:i,elements:o}=$(s),t=o.get(e)||[];return o.has(e)||o.set(e,t),t.push(r),i.observe(e),function(){t.splice(t.indexOf(r),1),t.length===0&&(o.delete(e),i.unobserve(e)),o.size===0&&(i.disconnect(),I.delete(a))}}function D({threshold:e,delay:r,trackVisibility:s,rootMargin:n,root:a,triggerOnce:i,skip:o,initialInView:t,fallbackInView:c,onChange:g}={}){var u;const[f,p]=d.useState(null),m=d.useRef(),[A,l]=d.useState({inView:!!t,entry:void 0});m.current=g,d.useEffect(()=>{if(o||!f)return;let b;return b=j(f,(x,E)=>{l({inView:x,entry:E}),m.current&&m.current(x,E),E.isIntersecting&&i&&b&&(b(),b=void 0)},{root:a,rootMargin:n,threshold:e,trackVisibility:s,delay:r},c),()=>{b&&b()}},[Array.isArray(e)?e.toString():e,f,a,n,i,o,s,c,r]);const w=(u=A.entry)==null?void 0:u.target,S=d.useRef();!f&&w&&!i&&!o&&S.current!==w&&(S.current=w,l({inView:!!t,entry:void 0}));const v=[p,A.inView,A.entry];return v.ref=v[0],v.inView=v[1],v.entry=v[2],v}function V(e={}){const{prevent:r,rootMargin:s,triggerOnce:n=!0}=e;let[a,i,o]=D({triggerOnce:n,rootMargin:s});return(r===!0||typeof window.IntersectionObserver>"u")&&(i=!0,a=null),{ref:a,inView:i,initialized:!!o}}const M="_image_pp6me_1",C={image:M},z="500px",B="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",T=d.memo(function(e){const{forceLoad:r,extraClasses:s="",errorFallbackImageSrc:n,preventLoad:a=!1,errorFallbackImageClassName:i,src:o,alt:t,...c}=e,{ref:g,inView:u}=V({rootMargin:z}),[f,p]=d.useState(!1);d.useEffect(()=>{if(!r&&!u||a)return;const l=new Image;return l.onerror=()=>{p(!0),n&&(l.src=n)},l.src=o,()=>l.onerror=null},[u,a]);function m(){return f&&n?n:e.src}if(f&&!n)return h.jsx(h.Fragment,{});if(!g)return h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,alt:t,src:m(),...c});const A={alt:t,...c,...(u||r)&&!a?{src:m()}:{src:B}};return r||(A.ref=g),h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,...A})});export{T as L,D as a,V as u};
2
+ //# sourceMappingURL=eF4foLm3.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CBYrUSmz.chunk.js","sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});"],"names":["observerMap","RootIds","rootId","unsupportedValue","getRootId","root","optionsToId","options","key","createObserver","id","instance","elements","thresholds","observer","entries","entry","_a","inView","threshold","callback","observe","element","fallbackInView","bounds","callbacks","useInView","delay","trackVisibility","rootMargin","triggerOnce","skip","initialInView","onChange","ref","setRef","React2.useState","React2.useRef","state","setState","React2.useEffect","unobserve","entryTarget","previousEntryTarget","result","useLazyLoad","prevent","PRELOAD_DISTANCE","PLACEHOLDER_SRC","LazyImage","React.memo","props","forceLoad","extraClasses","errorFallbackImageSrc","preventLoad","errorFallbackImageClassName","src","alt","propsWithoutSrc","error","setError","React.useState","React.useEffect","img","getSrc","jsx","Fragment","styles","imgProps"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"eF4foLm3.chunk.js","sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});"],"names":["observerMap","RootIds","rootId","unsupportedValue","getRootId","root","optionsToId","options","key","createObserver","id","instance","elements","thresholds","observer","entries","entry","_a","inView","threshold","callback","observe","element","fallbackInView","bounds","callbacks","useInView","delay","trackVisibility","rootMargin","triggerOnce","skip","initialInView","onChange","ref","setRef","React2.useState","React2.useRef","state","setState","React2.useEffect","unobserve","entryTarget","previousEntryTarget","result","useLazyLoad","prevent","PRELOAD_DISTANCE","PLACEHOLDER_SRC","LazyImage","React.memo","props","forceLoad","extraClasses","errorFallbackImageSrc","preventLoad","errorFallbackImageClassName","src","alt","propsWithoutSrc","error","setError","React.useState","React.useEffect","img","getSrc","jsx","Fragment","styles","imgProps"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{r as i,a0 as j,j as e,L as r,aq as S,G as A,Q as E,F as M,ao as o}from"./app-eQ6keCVj.js";import{M as y}from"./_sYSSSUN.chunk.js";import{P as C,C as F}from"./4r-SFWRv.chunk.js";const R="shared.breadcrumbComponent",B=r.encloseNamespace(R),O=64,f=48,u=i.forwardRef((t,a)=>{const{breadcrumb:{name:s,appLink:n,active:h},withBackIcon:p,linkClassName:g}=t;let c=s,d=null;return c.length>f&&(c=s.slice(0,f)+"...",d=s),e.jsx("li",{className:`breadcrumb-item${h?" active":""}`,title:d,children:h?e.jsx("strong",{children:c}):e.jsxs(S,{appLink:n,ref:a,className:n?g:"",children:[p&&e.jsx(A,{svg:F,size:E.Small}),e.jsx("span",{className:p?"ms-2":"",children:c})]})})}),Q=({breadcrumbs:t,linkClassName:a})=>{const s=j(y.XS),n=(t==null?void 0:t.length)||0,[h,p]=i.useState(!1),[g,c]=i.useState(!1),d=i.useRef(null);i.useEffect(()=>{const m=(t==null?void 0:t.reduce((x,T)=>x+T.name.length,0))??0;n>4&&m>O&&p(!0)},[t==null?void 0:t.length]),i.useLayoutEffect(()=>{var m;g&&((m=d.current)==null||m.focus())},[d.current,g]);function v(){p(!1),c(!0)}if(!n||s&&n<2)return e.jsx(e.Fragment,{});if(s)return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:e.jsx(u,{breadcrumb:t[n-2],withBackIcon:!0,linkClassName:a})})});const N=e.jsx(u,{breadcrumb:t[0],linkClassName:a}),P=n>2?e.jsx(u,{breadcrumb:t[1],linkClassName:a}):e.jsx(e.Fragment,{}),b=n>3?e.jsx(u,{breadcrumb:t[n-2],linkClassName:a}):e.jsx(e.Fragment,{}),L=n>1?e.jsx(u,{breadcrumb:t[n-1],linkClassName:a}):e.jsx(e.Fragment,{}),w=t.slice(2,n-2);return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsxs("ol",{className:"breadcrumb m-0 p-0",children:[N,P,h?e.jsx("li",{className:"breadcrumb-item",children:e.jsx("button",{className:"btn-link",onClick:v,"aria-label":B("expand"),children:"..."})}):w.map((m,x)=>e.jsx(u,{breadcrumb:m,ref:x===0?d:null,linkClassName:a},x)),b,L]})})},V=i.memo(function({numItems:t=3}){return j(y.XS)?e.jsx("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:C.getPartialLoadingItems({numItems:t}).map(({width:s},n)=>e.jsx("li",{className:"breadcrumb-item",children:e.jsx("span",{className:"d-inline-block partial-loading-background",style:{width:s},dangerouslySetInnerHTML:{__html:"&nbsp"}})},n))})})}),l="shared.videoSortSelect",_=M.memoize(()=>({[o.RecentlyAdded]:{name:r.getPhrase(l,"recentlyAdded")},[o.AtoZ]:{name:r.getPhrase(l,"atoz")},[o.ZtoA]:{name:r.getPhrase(l,"ztoa")},[o.Newest]:{name:r.getPhrase(l,"newest")},[o.Oldest]:{name:r.getPhrase(l,"oldest")},[o.Series]:{name:r.getPhrase(l,"series")}}));function k(t){let a=_();return t&&(a={[o.ProductionYear]:{name:r.getPhrase(l,"productionYear")},...a}),a}z.defaultProps={variant:"light"};function z(t){const a=t.sortTypes||k(t.includeProductionYear);return e.jsxs("div",{className:"dropdown",children:[e.jsx("button",{className:`btn btn-${t.variant} ms-2 dropdown-toggle`,type:"button",id:"sort-select","data-bs-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",children:a[t.type].name}),e.jsx("ul",{className:"dropdown-menu dropdown-menu-end","aria-labelledby":"sort-select",children:Object.keys(a).map(s=>{let n="dropdown-item";return s===t.type&&(n+=" active"),e.jsx("li",{children:e.jsx(S,{className:n,appLink:t.getSortAppLink(s),analyticsData:{sort:a[s].name},analyticsOptions:t.analyticsOptions,children:a[s].name})},s)})})]})}export{Q as B,V as P,z as V};
2
- //# sourceMappingURL=D4uscADt.chunk.js.map
1
+ import{r as i,a0 as j,j as e,L as r,aq as S,G as A,Q as E,F as M,ao as o}from"./app-DlxnnX-Y.js";import{M as y}from"./_sYSSSUN.chunk.js";import{P as C,C as F}from"./DbQN84Ka.chunk.js";const R="shared.breadcrumbComponent",B=r.encloseNamespace(R),O=64,f=48,u=i.forwardRef((t,a)=>{const{breadcrumb:{name:s,appLink:n,active:h},withBackIcon:p,linkClassName:g}=t;let c=s,d=null;return c.length>f&&(c=s.slice(0,f)+"...",d=s),e.jsx("li",{className:`breadcrumb-item${h?" active":""}`,title:d,children:h?e.jsx("strong",{children:c}):e.jsxs(S,{appLink:n,ref:a,className:n?g:"",children:[p&&e.jsx(A,{svg:F,size:E.Small}),e.jsx("span",{className:p?"ms-2":"",children:c})]})})}),Q=({breadcrumbs:t,linkClassName:a})=>{const s=j(y.XS),n=(t==null?void 0:t.length)||0,[h,p]=i.useState(!1),[g,c]=i.useState(!1),d=i.useRef(null);i.useEffect(()=>{const m=(t==null?void 0:t.reduce((x,T)=>x+T.name.length,0))??0;n>4&&m>O&&p(!0)},[t==null?void 0:t.length]),i.useLayoutEffect(()=>{var m;g&&((m=d.current)==null||m.focus())},[d.current,g]);function v(){p(!1),c(!0)}if(!n||s&&n<2)return e.jsx(e.Fragment,{});if(s)return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:e.jsx(u,{breadcrumb:t[n-2],withBackIcon:!0,linkClassName:a})})});const N=e.jsx(u,{breadcrumb:t[0],linkClassName:a}),P=n>2?e.jsx(u,{breadcrumb:t[1],linkClassName:a}):e.jsx(e.Fragment,{}),b=n>3?e.jsx(u,{breadcrumb:t[n-2],linkClassName:a}):e.jsx(e.Fragment,{}),L=n>1?e.jsx(u,{breadcrumb:t[n-1],linkClassName:a}):e.jsx(e.Fragment,{}),w=t.slice(2,n-2);return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsxs("ol",{className:"breadcrumb m-0 p-0",children:[N,P,h?e.jsx("li",{className:"breadcrumb-item",children:e.jsx("button",{className:"btn-link",onClick:v,"aria-label":B("expand"),children:"..."})}):w.map((m,x)=>e.jsx(u,{breadcrumb:m,ref:x===0?d:null,linkClassName:a},x)),b,L]})})},V=i.memo(function({numItems:t=3}){return j(y.XS)?e.jsx("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:C.getPartialLoadingItems({numItems:t}).map(({width:s},n)=>e.jsx("li",{className:"breadcrumb-item",children:e.jsx("span",{className:"d-inline-block partial-loading-background",style:{width:s},dangerouslySetInnerHTML:{__html:"&nbsp"}})},n))})})}),l="shared.videoSortSelect",_=M.memoize(()=>({[o.RecentlyAdded]:{name:r.getPhrase(l,"recentlyAdded")},[o.AtoZ]:{name:r.getPhrase(l,"atoz")},[o.ZtoA]:{name:r.getPhrase(l,"ztoa")},[o.Newest]:{name:r.getPhrase(l,"newest")},[o.Oldest]:{name:r.getPhrase(l,"oldest")},[o.Series]:{name:r.getPhrase(l,"series")}}));function k(t){let a=_();return t&&(a={[o.ProductionYear]:{name:r.getPhrase(l,"productionYear")},...a}),a}z.defaultProps={variant:"light"};function z(t){const a=t.sortTypes||k(t.includeProductionYear);return e.jsxs("div",{className:"dropdown",children:[e.jsx("button",{className:`btn btn-${t.variant} ms-2 dropdown-toggle`,type:"button",id:"sort-select","data-bs-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",children:a[t.type].name}),e.jsx("ul",{className:"dropdown-menu dropdown-menu-end","aria-labelledby":"sort-select",children:Object.keys(a).map(s=>{let n="dropdown-item";return s===t.type&&(n+=" active"),e.jsx("li",{children:e.jsx(S,{className:n,appLink:t.getSortAppLink(s),analyticsData:{sort:a[s].name},analyticsOptions:t.analyticsOptions,children:a[s].name})},s)})})]})}export{Q as B,V as P,z as V};
2
+ //# sourceMappingURL=faET_EvS.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"D4uscADt.chunk.js","sources":["../../../../libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","../../../../libs/shared/src/components/video-sort-select/VideoSortSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n linkClassName?: string;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon, linkClassName } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref} className={appLink ? linkClassName : ''}>\n {withBackIcon && <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n linkClassName?: string;\n}\n\nexport const Breadcrumbs = ({ breadcrumbs, linkClassName }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon linkClassName={linkClassName} />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} linkClassName={linkClassName} />;\n const second = length > 2\n ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} linkClassName={linkClassName} />\n : <></>;\n const secondLast = length > 3\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} linkClassName={linkClassName} />\n : <></>;\n const last = length > 1\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} linkClassName={linkClassName} />\n : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n linkClassName={linkClassName}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\n\nconst namespace = 'shared.videoSortSelect';\n\ntype SortTypes = {[sort: string]: { name: string }};\n\nconst getDefaultSortTypes: () => SortTypes = FunctionHelper.memoize(() => {\n return {\n [VideoSortType.RecentlyAdded]: {\n name: LanguageService.getPhrase(namespace, 'recentlyAdded')\n },\n [VideoSortType.AtoZ]: {\n name: LanguageService.getPhrase(namespace, 'atoz')\n },\n [VideoSortType.ZtoA]: {\n name: LanguageService.getPhrase(namespace, 'ztoa')\n },\n [VideoSortType.Newest]: {\n name: LanguageService.getPhrase(namespace, 'newest')\n },\n [VideoSortType.Oldest]: {\n name: LanguageService.getPhrase(namespace, 'oldest')\n },\n [VideoSortType.Series]: {\n name: LanguageService.getPhrase(namespace, 'series')\n }\n };\n});\n\nfunction getSortTypes(productionYear: boolean): SortTypes {\n let defaultSortTypes = getDefaultSortTypes();\n\n if (productionYear) {\n defaultSortTypes = {\n [VideoSortType.ProductionYear]: {\n name: LanguageService.getPhrase(namespace, 'productionYear')\n },\n ...defaultSortTypes\n };\n }\n \n return defaultSortTypes;\n}\n\ninterface VideoSortSelectProps {\n type: VideoSortType;\n getSortAppLink: (sort: string) => Core.AppLink;\n variant?: ButtonProps['variant'];\n sortTypes?: SortTypes;\n analyticsOptions: AnalyticsOptions;\n includeProductionYear?: boolean;\n}\n\nVideoSortSelect.defaultProps = {\n variant: 'light'\n};\n\nexport function VideoSortSelect(props: VideoSortSelectProps): JSX.Element {\n const sortTypes = props.sortTypes || getSortTypes(props.includeProductionYear);\n\n return (\n <div className='dropdown'>\n <button className={`btn btn-${props.variant} ms-2 dropdown-toggle`} type='button' id='sort-select' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>\n {sortTypes[props.type].name}\n </button>\n <ul className='dropdown-menu dropdown-menu-end' aria-labelledby='sort-select'>\n {Object.keys(sortTypes).map(k => {\n let className = 'dropdown-item';\n\n if (k === props.type)\n className += ' active';\n\n return (\n <li key={k}>\n <AppLink\n className={className}\n appLink={props.getSortAppLink(k)}\n analyticsData={{\n sort: sortTypes[k].name\n }}\n analyticsOptions={props.analyticsOptions}\n >\n {sortTypes[k].name}\n </AppLink>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","COLLAPSE_CHARACTER_COUNT","MAX_SEGMENT_LENGTH","BreadcrumbItem","React.forwardRef","props","ref","name","appLink","active","withBackIcon","linkClassName","trimmedName","title","jsx","jsxs","AppLink","SvgContainer","ChevronLeftSvg","SvgContainerSize","Breadcrumbs","breadcrumbs","isMobile","useMediaQuery","MediaQueryStrings","length","collapse","setCollapse","React.useState","shouldFocus","setShouldFocus","expandRef","React.useRef","React.useEffect","characterLength","prev","next","React.useLayoutEffect","_a","onClickExpand","Fragment","first","second","secondLast","last","rest","breadcrumb","idx","PartialBreadcrumbs","React.memo","numItems","PartialLoadingHelper","width","getDefaultSortTypes","FunctionHelper","VideoSortType","getSortTypes","productionYear","defaultSortTypes","VideoSortSelect","sortTypes","k","className"],"mappings":"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"}
1
+ {"version":3,"file":"faET_EvS.chunk.js","sources":["../../../../libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","../../../../libs/shared/src/components/video-sort-select/VideoSortSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n linkClassName?: string;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon, linkClassName } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref} className={appLink ? linkClassName : ''}>\n {withBackIcon && <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n linkClassName?: string;\n}\n\nexport const Breadcrumbs = ({ breadcrumbs, linkClassName }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon linkClassName={linkClassName} />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} linkClassName={linkClassName} />;\n const second = length > 2\n ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} linkClassName={linkClassName} />\n : <></>;\n const secondLast = length > 3\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} linkClassName={linkClassName} />\n : <></>;\n const last = length > 1\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} linkClassName={linkClassName} />\n : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n linkClassName={linkClassName}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\n\nconst namespace = 'shared.videoSortSelect';\n\ntype SortTypes = {[sort: string]: { name: string }};\n\nconst getDefaultSortTypes: () => SortTypes = FunctionHelper.memoize(() => {\n return {\n [VideoSortType.RecentlyAdded]: {\n name: LanguageService.getPhrase(namespace, 'recentlyAdded')\n },\n [VideoSortType.AtoZ]: {\n name: LanguageService.getPhrase(namespace, 'atoz')\n },\n [VideoSortType.ZtoA]: {\n name: LanguageService.getPhrase(namespace, 'ztoa')\n },\n [VideoSortType.Newest]: {\n name: LanguageService.getPhrase(namespace, 'newest')\n },\n [VideoSortType.Oldest]: {\n name: LanguageService.getPhrase(namespace, 'oldest')\n },\n [VideoSortType.Series]: {\n name: LanguageService.getPhrase(namespace, 'series')\n }\n };\n});\n\nfunction getSortTypes(productionYear: boolean): SortTypes {\n let defaultSortTypes = getDefaultSortTypes();\n\n if (productionYear) {\n defaultSortTypes = {\n [VideoSortType.ProductionYear]: {\n name: LanguageService.getPhrase(namespace, 'productionYear')\n },\n ...defaultSortTypes\n };\n }\n \n return defaultSortTypes;\n}\n\ninterface VideoSortSelectProps {\n type: VideoSortType;\n getSortAppLink: (sort: string) => Core.AppLink;\n variant?: ButtonProps['variant'];\n sortTypes?: SortTypes;\n analyticsOptions: AnalyticsOptions;\n includeProductionYear?: boolean;\n}\n\nVideoSortSelect.defaultProps = {\n variant: 'light'\n};\n\nexport function VideoSortSelect(props: VideoSortSelectProps): JSX.Element {\n const sortTypes = props.sortTypes || getSortTypes(props.includeProductionYear);\n\n return (\n <div className='dropdown'>\n <button className={`btn btn-${props.variant} ms-2 dropdown-toggle`} type='button' id='sort-select' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>\n {sortTypes[props.type].name}\n </button>\n <ul className='dropdown-menu dropdown-menu-end' aria-labelledby='sort-select'>\n {Object.keys(sortTypes).map(k => {\n let className = 'dropdown-item';\n\n if (k === props.type)\n className += ' active';\n\n return (\n <li key={k}>\n <AppLink\n className={className}\n appLink={props.getSortAppLink(k)}\n analyticsData={{\n sort: sortTypes[k].name\n }}\n analyticsOptions={props.analyticsOptions}\n >\n {sortTypes[k].name}\n </AppLink>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","COLLAPSE_CHARACTER_COUNT","MAX_SEGMENT_LENGTH","BreadcrumbItem","React.forwardRef","props","ref","name","appLink","active","withBackIcon","linkClassName","trimmedName","title","jsx","jsxs","AppLink","SvgContainer","ChevronLeftSvg","SvgContainerSize","Breadcrumbs","breadcrumbs","isMobile","useMediaQuery","MediaQueryStrings","length","collapse","setCollapse","React.useState","shouldFocus","setShouldFocus","expandRef","React.useRef","React.useEffect","characterLength","prev","next","React.useLayoutEffect","_a","onClickExpand","Fragment","first","second","secondLast","last","rest","breadcrumb","idx","PartialBreadcrumbs","React.memo","numItems","PartialLoadingHelper","width","getDefaultSortTypes","FunctionHelper","VideoSortType","getSortTypes","productionYear","defaultSortTypes","VideoSortSelect","sortTypes","k","className"],"mappings":"wLAaA,MAAMA,EAAY,6BACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAEtDG,EAA2B,GAC3BC,EAAqB,GAcdC,EAAiBC,EAAAA,WAAiB,CAC7CC,EACAC,IACG,CACH,KAAM,CAAE,WAAY,CAAE,KAAAC,EAAM,QAAAC,EAAS,OAAAC,GAAU,aAAAC,EAAc,cAAAC,CAAA,EAAkBN,EAE/E,IAAIO,EAAcL,EACdM,EAAgB,KAEpB,OAAID,EAAY,OAASV,IACvBU,EAAcL,EAAK,MAAM,EAAGL,CAAkB,EAAI,MAGlDW,EAAQN,GAIRO,EAAAA,IAAC,KAAA,CACC,UAAW,kBAAkBL,EAAS,UAAY,EAAE,GACpD,MAAAI,EAEC,SAAAJ,EACGK,MAAC,SAAA,CAAQ,SAAAF,CAAA,CAAY,EACrBG,EAAAA,KAACC,EAAA,CAAQ,QAAAR,EAAkB,IAAAF,EAAU,UAAWE,EAAUG,EAAgB,GACzE,SAAA,CAAAD,SAAiBO,EAAA,CAAa,IAAKC,EAAgB,KAAMC,EAAiB,MAAO,QACjF,OAAA,CAAK,UAAWT,EAAe,OAAS,GAAK,SAAAE,CAAA,CAAY,CAAA,CAAA,CAC5D,CAAA,CAAA,CAIR,CAAC,EAOYQ,EAAc,CAAC,CAAE,YAAAC,EAAa,cAAAV,KAAsC,CAC/E,MAAMW,EAAWC,EAAcC,EAAkB,EAAE,EAE7CC,GAASJ,GAAA,YAAAA,EAAa,SAAU,EAEhC,CAAEK,EAAUC,CAAY,EAAIC,EAAAA,SAAe,EAAK,EAChD,CAAEC,EAAaC,CAAe,EAAIF,EAAAA,SAAe,EAAK,EACtDG,EAAYC,EAAAA,OAA0B,IAAI,EAEhDC,EAAAA,UAAgB,IAAM,CACpB,MAAMC,GAAkBb,GAAA,YAAAA,EAAa,OAAO,CAACc,EAAMC,IAASD,EAAOC,EAAK,KAAK,OAAQ,KAAM,EAEvFX,EAAS,GAAKS,EAAkBjC,GAClC0B,EAAY,EAAI,CACpB,EAAG,CAACN,GAAA,YAAAA,EAAa,MAAM,CAAC,EAKxBgB,EAAAA,gBAAsB,IAAM,OACtBR,KACFS,EAAAP,EAAU,UAAV,MAAAO,EAAmB,QACvB,EAAG,CAAEP,EAAU,QAASF,CAAY,CAAC,EAErC,SAASU,GAAgB,CACvBZ,EAAY,EAAK,EACjBG,EAAe,EAAI,CACrB,CAEA,GAAI,CAACL,GAAWH,GAAYG,EAAS,EACnC,OAAOX,EAAAA,IAAA0B,EAAAA,SAAA,EAAE,EAEX,GAAIlB,EACF,aACG,MAAA,CAAI,aAAW,aACd,SAAAR,EAAAA,IAAC,KAAA,CAAG,UAAU,qBACZ,SAAAA,MAACX,GAAe,WAAYkB,EAAYI,EAAS,CAAC,EAAG,aAAY,GAAC,cAAAd,EAA8B,EAClG,CAAA,CACF,EAGJ,MAAM8B,EAAQ3B,EAAAA,IAACX,EAAA,CAAe,WAAYkB,EAAY,CAAC,EAAG,cAAAV,EAA8B,EAClF+B,EAASjB,EAAS,EACpBX,EAAAA,IAACX,EAAA,CAAe,WAAYkB,EAAY,CAAC,EAAG,cAAAV,CAAA,CAA8B,EAC1EG,EAAAA,IAAA0B,EAAAA,SAAA,CAAA,CAAE,EACAG,EAAalB,EAAS,EACxBX,EAAAA,IAACX,EAAA,CAAe,WAAYkB,EAAYI,EAAS,CAAC,EAAG,cAAAd,CAAA,CAA8B,EACnFG,EAAAA,IAAA0B,EAAAA,SAAA,EAAE,EACAI,EAAOnB,EAAS,EAClBX,EAAAA,IAACX,EAAA,CAAe,WAAYkB,EAAYI,EAAS,CAAC,EAAG,cAAAd,CAAA,CAA8B,EACnFG,EAAAA,IAAA0B,EAAAA,SAAA,EAAE,EACAK,EAAOxB,EAAY,MAAM,EAAGI,EAAS,CAAC,EAE5C,aACG,MAAA,CAAI,aAAW,aACd,SAAAV,EAAAA,KAAC,KAAA,CAAG,UAAU,qBACX,SAAA,CAAA0B,EACAC,EACAhB,EACCZ,EAAAA,IAAC,KAAA,CAAG,UAAU,kBACZ,SAAAA,EAAAA,IAAC,SAAA,CACC,UAAU,WACV,QAASyB,EACT,aAAYxC,EAAU,QAAQ,EAC/B,SAAA,KAAA,CAAA,EAGH,EACA8C,EAAK,IAAI,CAACC,EAAYC,IACpBjC,EAAAA,IAACX,EAAA,CAEC,WAAA2C,EACA,IAAKC,IAAQ,EAAIhB,EAAY,KAC7B,cAAApB,CAAA,EAHKoC,CAAA,CAKR,EAEFJ,EACAC,CAAA,CAAA,CACH,CAAA,CACF,CAEJ,EAEaI,EAAqBC,EAAAA,KAAW,SAAS,CAAE,SAAAC,EAAW,GAA6B,CAG9F,OAFiB3B,EAAcC,EAAkB,EAAE,EAI/CV,MAAC,MAAA,CAAI,UAAU,6BAA6B,MAAO,CAAE,OAAQ,YAAa,MAAO,MAAA,CAAO,CAAG,QAK5F,MAAA,CAAI,aAAW,aACd,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,qBACX,SAAAqC,EAAqB,uBAAuB,CAAE,SAAAD,EAAU,EAAE,IAAI,CAAC,CAAE,MAAAE,GAASL,IACzEjC,EAAAA,IAAC,KAAA,CAAa,UAAU,kBACtB,SAAAA,EAAAA,IAAC,QAAK,UAAU,4CAA4C,MAAO,CAAE,MAAAsC,CAAA,EAAS,wBAAyB,CAAE,OAAQ,OAAA,CAAQ,CAAG,GADrHL,CAET,CACD,EACH,EACF,CAEJ,CAAC,EChKKjD,EAAY,yBAIZuD,EAAuCC,EAAe,QAAQ,KAC3D,CACL,CAACC,EAAc,aAAa,EAAG,CAC7B,KAAMvD,EAAgB,UAAUF,EAAW,eAAe,CAAA,EAE5D,CAACyD,EAAc,IAAI,EAAG,CACpB,KAAMvD,EAAgB,UAAUF,EAAW,MAAM,CAAA,EAEnD,CAACyD,EAAc,IAAI,EAAG,CACpB,KAAMvD,EAAgB,UAAUF,EAAW,MAAM,CAAA,EAEnD,CAACyD,EAAc,MAAM,EAAG,CACtB,KAAMvD,EAAgB,UAAUF,EAAW,QAAQ,CAAA,EAErD,CAACyD,EAAc,MAAM,EAAG,CACtB,KAAMvD,EAAgB,UAAUF,EAAW,QAAQ,CAAA,EAErD,CAACyD,EAAc,MAAM,EAAG,CACtB,KAAMvD,EAAgB,UAAUF,EAAW,QAAQ,CAAA,CACrD,EAEH,EAED,SAAS0D,EAAaC,EAAoC,CACxD,IAAIC,EAAmBL,EAAA,EAEvB,OAAII,IACFC,EAAmB,CACjB,CAACH,EAAc,cAAc,EAAG,CAC9B,KAAMvD,EAAgB,UAAUF,EAAW,gBAAgB,CAAA,EAE7D,GAAG4D,CAAA,GAIAA,CACT,CAWAC,EAAgB,aAAe,CAC7B,QAAS,OACX,EAEO,SAASA,EAAgBtD,EAA0C,CACxE,MAAMuD,EAAYvD,EAAM,WAAamD,EAAanD,EAAM,qBAAqB,EAE7E,OACEU,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAD,EAAAA,IAAC,SAAA,CAAO,UAAW,WAAWT,EAAM,OAAO,wBAAyB,KAAK,SAAS,GAAG,cAAc,iBAAe,WAAW,gBAAc,OAAO,gBAAc,QAC7J,WAAUA,EAAM,IAAI,EAAE,IAAA,CACzB,EACAS,EAAAA,IAAC,KAAA,CAAG,UAAU,kCAAkC,kBAAgB,cAC7D,SAAA,OAAO,KAAK8C,CAAS,EAAE,IAAIC,GAAK,CAC/B,IAAIC,EAAY,gBAEhB,OAAID,IAAMxD,EAAM,OACdyD,GAAa,iBAGZ,KAAA,CACC,SAAAhD,EAAAA,IAACE,EAAA,CACC,UAAA8C,EACA,QAASzD,EAAM,eAAewD,CAAC,EAC/B,cAAe,CACb,KAAMD,EAAUC,CAAC,EAAE,IAAA,EAErB,iBAAkBxD,EAAM,iBAEvB,SAAAuD,EAAUC,CAAC,EAAE,IAAA,CAAA,GATTA,CAWT,CAEJ,CAAC,CAAA,CACH,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{H as v,a3 as p,j as o,P as y,aD as h,A as w,a as f,b as g}from"./app-eQ6keCVj.js";import{S as P}from"./BnkjQdg-.chunk.js";import{V as x}from"./BZp1TuCa.chunk.js";import{u as j}from"./D0w9N-3T.chunk.js";import{C as A,P as C,a as E}from"./FwSaxfbL.chunk.js";import{a as V}from"./1JtZW3TW.chunk.js";import{u as S}from"./DMu9QirA.chunk.js";import"./BlDVEZsX.chunk.js";import"./pkzD5BEm.chunk.js";import"./CrYQzjgZ.chunk.js";import"./jFTHf_UL.chunk.js";import"./D1o0K4Kj.chunk.js";import"./DlvPyEMc.chunk.js";import"./DQP0C036.chunk.js";import"./B1IKzVyn.chunk.js";import"./DsAzRbUN.chunk.js";import"./Dj2iNM2-.chunk.js";import"./BHC43d8p.chunk.js";import"./CeNx5Kzz.chunk.js";import"./e9ZqHdMv.chunk.js";import"./CKE8GGKH.chunk.js";import"./CXmjzxZL.chunk.js";import"./Ci21j_NU.chunk.js";import"./p9Hw1u0F.chunk.js";import"./BWu0k43d.chunk.js";import"./lO5fmjgI.chunk.js";import"./CBYrUSmz.chunk.js";import"./BwuTkpPz.chunk.js";import"./BKID_sLP.chunk.js";import"./B668bf5B.chunk.js";import"./DkVa76dg.chunk.js";import"./0Rgjdcqz.chunk.js";import"./BYXBfLyn.chunk.js";import"./Cog61quf.chunk.js";import"./BYq9jK40.chunk.js";import"./aImHyMo0.chunk.js";var c=(e=>(e.Share="share",e.MasterObject="masterobject",e))(c||{});const b={createViewKey(e,t,i,a,s){const r={mediaId:e.toString(),mediaIdType:t};return i&&(r.shareContextId=i),{url:"/api/player/create-view-key",key:`view:key:${e}:${t}:${i}`,type:v.POST,data:r,cacheDuration:28800,success:a,error:s}}};function de(e){var l;const t=p(x.video(e.videoId)),i=p(h.config()),a=p(b.createViewKey(e.videoId,c.MasterObject)),s=V("preview");j(t.statusCode);const{previewContext:r,clearPreviewContext:d}=S(e.videoId,!0);function u(k){}function n(){e.closePopup(),P.preventScrollTop(),w.trigger((r==null?void 0:r.appLink)??{application:g.EXCHANGE,action:f.Exchange.INDEX}),d()}const m=t.data&&i.hasCompleted&&a.hasCompleted;return o.jsx(y,{title:(l=t.data)==null?void 0:l.name,hideTitle:!0,closePopup:n,showLoadingSpinner:!m,size:"lg",bodyClassName:"p-0 rounded-3 position-relative",children:m&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"overflow-hidden rounded-top-lg",children:o.jsx(A,{viewKey:a.data.viewKey,playerApi:new URL(i.data.playerApiUrl),autoplay:!0,hotkeyElQuerySelector:"body",onReady:u,allowFullscreen:!1})}),o.jsx(C,{video:t.data,title:t.data.name,description:t.data.description,videoActions:s.getVideoActions(t.data)}),o.jsx(E,{closePopup:n})]})})}export{de as ExchangePreviewView};
2
- //# sourceMappingURL=CtsGHZp3.chunk.js.map
1
+ import{H as v,a3 as p,j as o,P as y,aD as h,A as w,a as f,b as g}from"./app-DlxnnX-Y.js";import{S as P}from"./BfA6QK2M.chunk.js";import{V as x}from"./Bvlv6PGR.chunk.js";import{u as j}from"./DHQlkDUq.chunk.js";import{C as A,P as C,a as E}from"./YhHoI_hl.chunk.js";import{a as V}from"./nzWgRE-N.chunk.js";import{u as S}from"./C_KOP_pH.chunk.js";import"./BlDVEZsX.chunk.js";import"./pkzD5BEm.chunk.js";import"./B7sQixjZ.chunk.js";import"./CWjXnQlc.chunk.js";import"./DIzcUtXf.chunk.js";import"./DzTRfLQn.chunk.js";import"./DxppYmgw.chunk.js";import"./59HBVVj3.chunk.js";import"./Cj7-nmDw.chunk.js";import"./BQz8nP4M.chunk.js";import"./DSuqoCKU.chunk.js";import"./Cxg7zIQ7.chunk.js";import"./BbGFMokw.chunk.js";import"./CsI_aEby.chunk.js";import"./C06GoFsR.chunk.js";import"./BTJwiZTv.chunk.js";import"./BSZHRB-3.chunk.js";import"./BP-61ONz.chunk.js";import"./CKbq02SS.chunk.js";import"./eF4foLm3.chunk.js";import"./CXEroOnb.chunk.js";import"./B3hUKuRr.chunk.js";import"./B668bf5B.chunk.js";import"./A03ti58C.chunk.js";import"./BiAKqJdD.chunk.js";import"./BwS3tIqZ.chunk.js";import"./DGdFdv74.chunk.js";import"./DLqmmsup.chunk.js";import"./BX8fMfGC.chunk.js";var c=(e=>(e.Share="share",e.MasterObject="masterobject",e))(c||{});const b={createViewKey(e,t,i,a,s){const r={mediaId:e.toString(),mediaIdType:t};return i&&(r.shareContextId=i),{url:"/api/player/create-view-key",key:`view:key:${e}:${t}:${i}`,type:v.POST,data:r,cacheDuration:28800,success:a,error:s}}};function de(e){var l;const t=p(x.video(e.videoId)),i=p(h.config()),a=p(b.createViewKey(e.videoId,c.MasterObject)),s=V("preview");j(t.statusCode);const{previewContext:r,clearPreviewContext:d}=S(e.videoId,!0);function u(k){}function n(){e.closePopup(),P.preventScrollTop(),w.trigger((r==null?void 0:r.appLink)??{application:g.EXCHANGE,action:f.Exchange.INDEX}),d()}const m=t.data&&i.hasCompleted&&a.hasCompleted;return o.jsx(y,{title:(l=t.data)==null?void 0:l.name,hideTitle:!0,closePopup:n,showLoadingSpinner:!m,size:"lg",bodyClassName:"p-0 rounded-3 position-relative",children:m&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"overflow-hidden rounded-top-lg",children:o.jsx(A,{viewKey:a.data.viewKey,playerApi:new URL(i.data.playerApiUrl),autoplay:!0,hotkeyElQuerySelector:"body",onReady:u,allowFullscreen:!1})}),o.jsx(C,{video:t.data,title:t.data.name,description:t.data.description,videoActions:s.getVideoActions(t.data)}),o.jsx(E,{closePopup:n})]})})}export{de as ExchangePreviewView};
2
+ //# sourceMappingURL=i36I5rgn.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CtsGHZp3.chunk.js","sources":["../../../../libs/shared/src/enums/MediaIdType.ts","../../../../libs/shared/src/flight-requests/PlayerRequests.ts","../../src/apps/exchange/views/exchange-preview/ExchangePreviewView.tsx"],"sourcesContent":["export enum MediaIdType {\n Share = 'share',\n MasterObject = 'masterobject'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerViewKey } from 'libs/shared/interfaces';\n\nexport const PlayerRequests = {\n createViewKey(\n mediaId: string,\n mediaIdType: MediaIdType,\n shareContextId?: string,\n success?: (viewKey: PlayerViewKey) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n const data: HashObject = {\n mediaId: mediaId.toString(),\n mediaIdType\n };\n\n if (shareContextId)\n data.shareContextId = shareContextId;\n\n return {\n url: `/api/player/create-view-key`,\n key: `view:key:${mediaId}:${mediaIdType}:${shareContextId}`,\n type: HttpVerbs.POST,\n data,\n /**\n * A view key is valid for 8 hours, at that point we need refetch the view key\n */\n cacheDuration: 28800,\n success,\n error\n };\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { Config, PlayerViewKey, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport { PlayerOverlayButtons } from 'shared/components/player-overlay-buttons/PlayerOverlayButtons';\nimport { PreviewVideoDetails } from 'shared/components/preview-video-details/PreviewVideoDetails';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\n\ninterface ExchangePreviewViewProps extends PopupViewProps {\n videoId: string;\n currentTime: number;\n}\n\nexport function ExchangePreviewView(props: ExchangePreviewViewProps): JSX.Element {\n // const analyticsTracker = React.useRef<PlayerAnalyticsTracker>(null);\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.videoId, MediaIdType.MasterObject)\n );\n\n const videoActions = useGetExchangeActions('preview');\n useHandleDialogError(video.statusCode);\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.videoId, true);\n\n // TODO: Solve analytics collection\n function onReady(player: PlayerReference): void {\n player;\n // setupAnalytics(player);\n }\n\n // function setupAnalytics(player: PlayerReference): void {\n // analyticsTracker.current = new PlayerAnalyticsTracker({\n // player,\n // video: props.video,\n // analyticsLocation: props.embed ?\n // LocationContext.EmbeddedPlayer :\n // LocationContext.PlayPage,\n // shareId: props.shareLink?.id\n // });\n // }\n\n function onClose(): void {\n props.closePopup();\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext?.appLink ?? {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n });\n clearPreviewContext();\n }\n\n const hasLoaded = (\n video.data &&\n config.hasCompleted &&\n viewKey.hasCompleted\n );\n\n return (\n <Popup\n title={video.data?.name}\n hideTitle\n closePopup={onClose}\n showLoadingSpinner={!hasLoaded}\n size='lg'\n bodyClassName='p-0 rounded-3 position-relative'\n >\n {hasLoaded &&\n <>\n <div className='overflow-hidden rounded-top-lg'>\n <ClickViewPlayer\n viewKey={viewKey.data.viewKey}\n playerApi={new URL(config.data.playerApiUrl)}\n autoplay\n hotkeyElQuerySelector='body'\n onReady={onReady}\n allowFullscreen={false}\n />\n </div>\n <PreviewVideoDetails\n video={video.data}\n title={video.data.name}\n description={video.data.description}\n videoActions={videoActions.getVideoActions(video.data)}\n />\n <PlayerOverlayButtons closePopup={onClose} />\n </>\n }\n </Popup>\n );\n}"],"names":["MediaIdType","PlayerRequests","mediaId","mediaIdType","shareContextId","success","error","data","HttpVerbs","ExchangePreviewView","props","video","Flight.useBasicFetch","VideoRequests","config","ConfigRequests","viewKey","videoActions","useGetExchangeActions","useHandleDialogError","previewContext","clearPreviewContext","usePreviewContext","onReady","player","onClose","ScrollHelper","Core.AppLinkHelper","AppChannels","Actions","hasLoaded","jsx","Popup","_a","jsxs","Fragment","ClickViewPlayer","PreviewVideoDetails","PlayerOverlayButtons"],"mappings":"moCAAO,IAAKA,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,aAAe,eAFLA,IAAAA,GAAA,CAAA,CAAA,ECQL,MAAMC,EAAiB,CAC5B,cACEC,EACAC,EACAC,EACAC,EACAC,EACgB,CAChB,MAAMC,EAAmB,CACvB,QAASL,EAAQ,SAAA,EACjB,YAAAC,CAAA,EAGF,OAAIC,IACFG,EAAK,eAAiBH,GAEjB,CACL,IAAK,8BACL,IAAK,YAAYF,CAAO,IAAIC,CAAW,IAAIC,CAAc,GACzD,KAAMI,EAAU,KAChB,KAAAD,EAIA,cAAe,MACf,QAAAF,EACA,MAAAC,CAAA,CAEJ,CACF,ECPO,SAASG,GAAoBC,EAA8C,OAEhF,MAAMC,EAAQC,EAA4BC,EAAc,MAAMH,EAAM,OAAO,CAAC,EACtEI,EAASF,EAA6BG,EAAe,QAAQ,EAC7DC,EAAUJ,EACdX,EAAe,cAAcS,EAAM,QAASV,EAAY,YAAY,CAAA,EAGhEiB,EAAeC,EAAsB,SAAS,EACpDC,EAAqBR,EAAM,UAAU,EAErC,KAAM,CAAE,eAAAS,EAAgB,oBAAAC,CAAA,EAAwBC,EAAkBZ,EAAM,QAAS,EAAI,EAGrF,SAASa,EAAQC,EAA+B,CAGhD,CAaA,SAASC,GAAgB,CACvBf,EAAM,WAAA,EAENgB,EAAa,iBAAA,EACbC,EAAmB,SAAQP,GAAA,YAAAA,EAAgB,UAAW,CACpD,YAAaQ,EAAY,SACzB,OAAQC,EAAQ,SAAS,KAAA,CAC1B,EACDR,EAAA,CACF,CAEA,MAAMS,EACJnB,EAAM,MACNG,EAAO,cACPE,EAAQ,aAGV,OACEe,EAAAA,IAACC,EAAA,CACC,OAAOC,EAAAtB,EAAM,OAAN,YAAAsB,EAAY,KACnB,UAAS,GACT,WAAYR,EACZ,mBAAoB,CAACK,EACrB,KAAK,KACL,cAAc,kCAEb,YACCI,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAJ,EAAAA,IAAC,MAAA,CAAI,UAAU,iCACb,SAAAA,EAAAA,IAACK,EAAA,CACC,QAASpB,EAAQ,KAAK,QACtB,UAAW,IAAI,IAAIF,EAAO,KAAK,YAAY,EAC3C,SAAQ,GACR,sBAAsB,OACtB,QAAAS,EACA,gBAAiB,EAAA,CAAA,EAErB,EACAQ,EAAAA,IAACM,EAAA,CACC,MAAO1B,EAAM,KACb,MAAOA,EAAM,KAAK,KAClB,YAAaA,EAAM,KAAK,YACxB,aAAcM,EAAa,gBAAgBN,EAAM,IAAI,CAAA,CAAA,EAEvDoB,EAAAA,IAACO,EAAA,CAAqB,WAAYb,CAAA,CAAS,CAAA,CAAA,CAC7C,CAAA,CAAA,CAIR"}
1
+ {"version":3,"file":"i36I5rgn.chunk.js","sources":["../../../../libs/shared/src/enums/MediaIdType.ts","../../../../libs/shared/src/flight-requests/PlayerRequests.ts","../../src/apps/exchange/views/exchange-preview/ExchangePreviewView.tsx"],"sourcesContent":["export enum MediaIdType {\n Share = 'share',\n MasterObject = 'masterobject'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerViewKey } from 'libs/shared/interfaces';\n\nexport const PlayerRequests = {\n createViewKey(\n mediaId: string,\n mediaIdType: MediaIdType,\n shareContextId?: string,\n success?: (viewKey: PlayerViewKey) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n const data: HashObject = {\n mediaId: mediaId.toString(),\n mediaIdType\n };\n\n if (shareContextId)\n data.shareContextId = shareContextId;\n\n return {\n url: `/api/player/create-view-key`,\n key: `view:key:${mediaId}:${mediaIdType}:${shareContextId}`,\n type: HttpVerbs.POST,\n data,\n /**\n * A view key is valid for 8 hours, at that point we need refetch the view key\n */\n cacheDuration: 28800,\n success,\n error\n };\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { Config, PlayerViewKey, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport { PlayerOverlayButtons } from 'shared/components/player-overlay-buttons/PlayerOverlayButtons';\nimport { PreviewVideoDetails } from 'shared/components/preview-video-details/PreviewVideoDetails';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\n\ninterface ExchangePreviewViewProps extends PopupViewProps {\n videoId: string;\n currentTime: number;\n}\n\nexport function ExchangePreviewView(props: ExchangePreviewViewProps): JSX.Element {\n // const analyticsTracker = React.useRef<PlayerAnalyticsTracker>(null);\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.videoId, MediaIdType.MasterObject)\n );\n\n const videoActions = useGetExchangeActions('preview');\n useHandleDialogError(video.statusCode);\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.videoId, true);\n\n // TODO: Solve analytics collection\n function onReady(player: PlayerReference): void {\n player;\n // setupAnalytics(player);\n }\n\n // function setupAnalytics(player: PlayerReference): void {\n // analyticsTracker.current = new PlayerAnalyticsTracker({\n // player,\n // video: props.video,\n // analyticsLocation: props.embed ?\n // LocationContext.EmbeddedPlayer :\n // LocationContext.PlayPage,\n // shareId: props.shareLink?.id\n // });\n // }\n\n function onClose(): void {\n props.closePopup();\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext?.appLink ?? {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n });\n clearPreviewContext();\n }\n\n const hasLoaded = (\n video.data &&\n config.hasCompleted &&\n viewKey.hasCompleted\n );\n\n return (\n <Popup\n title={video.data?.name}\n hideTitle\n closePopup={onClose}\n showLoadingSpinner={!hasLoaded}\n size='lg'\n bodyClassName='p-0 rounded-3 position-relative'\n >\n {hasLoaded &&\n <>\n <div className='overflow-hidden rounded-top-lg'>\n <ClickViewPlayer\n viewKey={viewKey.data.viewKey}\n playerApi={new URL(config.data.playerApiUrl)}\n autoplay\n hotkeyElQuerySelector='body'\n onReady={onReady}\n allowFullscreen={false}\n />\n </div>\n <PreviewVideoDetails\n video={video.data}\n title={video.data.name}\n description={video.data.description}\n videoActions={videoActions.getVideoActions(video.data)}\n />\n <PlayerOverlayButtons closePopup={onClose} />\n </>\n }\n </Popup>\n );\n}"],"names":["MediaIdType","PlayerRequests","mediaId","mediaIdType","shareContextId","success","error","data","HttpVerbs","ExchangePreviewView","props","video","Flight.useBasicFetch","VideoRequests","config","ConfigRequests","viewKey","videoActions","useGetExchangeActions","useHandleDialogError","previewContext","clearPreviewContext","usePreviewContext","onReady","player","onClose","ScrollHelper","Core.AppLinkHelper","AppChannels","Actions","hasLoaded","jsx","Popup","_a","jsxs","Fragment","ClickViewPlayer","PreviewVideoDetails","PlayerOverlayButtons"],"mappings":"moCAAO,IAAKA,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,aAAe,eAFLA,IAAAA,GAAA,CAAA,CAAA,ECQL,MAAMC,EAAiB,CAC5B,cACEC,EACAC,EACAC,EACAC,EACAC,EACgB,CAChB,MAAMC,EAAmB,CACvB,QAASL,EAAQ,SAAA,EACjB,YAAAC,CAAA,EAGF,OAAIC,IACFG,EAAK,eAAiBH,GAEjB,CACL,IAAK,8BACL,IAAK,YAAYF,CAAO,IAAIC,CAAW,IAAIC,CAAc,GACzD,KAAMI,EAAU,KAChB,KAAAD,EAIA,cAAe,MACf,QAAAF,EACA,MAAAC,CAAA,CAEJ,CACF,ECPO,SAASG,GAAoBC,EAA8C,OAEhF,MAAMC,EAAQC,EAA4BC,EAAc,MAAMH,EAAM,OAAO,CAAC,EACtEI,EAASF,EAA6BG,EAAe,QAAQ,EAC7DC,EAAUJ,EACdX,EAAe,cAAcS,EAAM,QAASV,EAAY,YAAY,CAAA,EAGhEiB,EAAeC,EAAsB,SAAS,EACpDC,EAAqBR,EAAM,UAAU,EAErC,KAAM,CAAE,eAAAS,EAAgB,oBAAAC,CAAA,EAAwBC,EAAkBZ,EAAM,QAAS,EAAI,EAGrF,SAASa,EAAQC,EAA+B,CAGhD,CAaA,SAASC,GAAgB,CACvBf,EAAM,WAAA,EAENgB,EAAa,iBAAA,EACbC,EAAmB,SAAQP,GAAA,YAAAA,EAAgB,UAAW,CACpD,YAAaQ,EAAY,SACzB,OAAQC,EAAQ,SAAS,KAAA,CAC1B,EACDR,EAAA,CACF,CAEA,MAAMS,EACJnB,EAAM,MACNG,EAAO,cACPE,EAAQ,aAGV,OACEe,EAAAA,IAACC,EAAA,CACC,OAAOC,EAAAtB,EAAM,OAAN,YAAAsB,EAAY,KACnB,UAAS,GACT,WAAYR,EACZ,mBAAoB,CAACK,EACrB,KAAK,KACL,cAAc,kCAEb,YACCI,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAJ,EAAAA,IAAC,MAAA,CAAI,UAAU,iCACb,SAAAA,EAAAA,IAACK,EAAA,CACC,QAASpB,EAAQ,KAAK,QACtB,UAAW,IAAI,IAAIF,EAAO,KAAK,YAAY,EAC3C,SAAQ,GACR,sBAAsB,OACtB,QAAAS,EACA,gBAAiB,EAAA,CAAA,EAErB,EACAQ,EAAAA,IAACM,EAAA,CACC,MAAO1B,EAAM,KACb,MAAOA,EAAM,KAAK,KAClB,YAAaA,EAAM,KAAK,YACxB,aAAcM,EAAa,gBAAgBN,EAAM,IAAI,CAAA,CAAA,EAEvDoB,EAAAA,IAACO,EAAA,CAAqB,WAAYb,CAAA,CAAS,CAAA,CAAA,CAC7C,CAAA,CAAA,CAIR"}
@@ -0,0 +1,2 @@
1
+ import{j as o,E as t}from"./app-DlxnnX-Y.js";function i({error:r}){return o.jsx(t,{error:r})}export{i as NotFoundView};
2
+ //# sourceMappingURL=i6PC1lEa.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"D8bdW5jN.chunk.js","sources":["../../src/apps/default/views/not-found/ExchangeNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ExchangeErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}"],"names":["NotFoundView","error","jsx","ErrorView"],"mappings":"6CAWO,SAASA,EAAa,CAAE,MAAAC,GAAgD,CAC7E,OAAOC,MAACC,GAAU,MAAAF,EAAc,CAClC"}
1
+ {"version":3,"file":"i6PC1lEa.chunk.js","sources":["../../src/apps/default/views/not-found/ExchangeNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ExchangeErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}"],"names":["NotFoundView","error","jsx","ErrorView"],"mappings":"6CAWO,SAASA,EAAa,CAAE,MAAAC,GAAgD,CAC7E,OAAOC,MAACC,GAAU,MAAAF,EAAc,CAClC"}
@@ -1,2 +1,2 @@
1
- import{U as p,a3 as m,R as v,j as o,P as y,aD as U,a5 as h}from"./app-eQ6keCVj.js";import{u as C}from"./D0w9N-3T.chunk.js";import{C as P,P as w,a as R}from"./FwSaxfbL.chunk.js";import{T as b}from"./dlcOoTX2.chunk.js";import{u as T}from"./CqdCH0OC.chunk.js";import{u as j}from"./DWYleim7.chunk.js";import"./CrYQzjgZ.chunk.js";import"./jFTHf_UL.chunk.js";import"./D1o0K4Kj.chunk.js";import"./DlvPyEMc.chunk.js";import"./BlDVEZsX.chunk.js";import"./DQP0C036.chunk.js";import"./pkzD5BEm.chunk.js";import"./BZp1TuCa.chunk.js";import"./B1IKzVyn.chunk.js";import"./DsAzRbUN.chunk.js";import"./Dj2iNM2-.chunk.js";import"./BHC43d8p.chunk.js";import"./CeNx5Kzz.chunk.js";import"./e9ZqHdMv.chunk.js";import"./CKE8GGKH.chunk.js";import"./CXmjzxZL.chunk.js";import"./Ci21j_NU.chunk.js";import"./p9Hw1u0F.chunk.js";import"./BWu0k43d.chunk.js";import"./lO5fmjgI.chunk.js";import"./CBYrUSmz.chunk.js";import"./BwuTkpPz.chunk.js";import"./BKID_sLP.chunk.js";import"./B668bf5B.chunk.js";import"./DkVa76dg.chunk.js";import"./0Rgjdcqz.chunk.js";import"./BYXBfLyn.chunk.js";import"./Cog61quf.chunk.js";import"./BYq9jK40.chunk.js";import"./aImHyMo0.chunk.js";import"./D91xJv6J.chunk.js";function x(r){const{currentUser:t,region:i,config:e,program:a}=r,s=e.tvPreviewUrls[i.code],l=a.globalId.replace(/-/g,""),c=p.safeUrlConcat(s,`/thumbnail/${l}.jpg`),u=p.safeUrlConcat(s,`/144p/${l.toUpperCase()}_144p.mp4`),n=p.safeUrlConcat(s,`/subtitle/${l.toUpperCase()}.srt`),d=p.urlBuilder(p.safeUrlConcat(e.playerApiUrl,"/api/srt-to-vtt"),{url:n});return{videoId:null,episodeNumber:0,seriesName:null,mediaId:null,mediaType:null,ratingCode:null,region:t.instanceRegion,seasonNumber:null,viewerId:t.id,viewerCustomerId:t.customerId,files:{fileToken:"",progressive:[{mimeType:"video/mp4",profile:"144",url:u,label:"Preview"}]},chapters:{list:[]},instanceRegion:t.instanceRegion,localCacheAddresses:[],posterUrl:c,resources:{list:[]},settings:{showSubtitles:!1,playbackProfile:"144",playbackProfileLocalCache:"144",playbackSubtitleSizeDefault:"medium"},subtitles:{list:[{url:d,isDefault:!1,language:"en-AU",mimeType:"text/vtt",label:"English"}]},title:a.title}}function ce(r){var g;const t=m(b.region(r.region)),i=m(U.config()),e=m(b.program(r.id)),a=m(h.currentUser()),[s,l]=v.useState(),c=T("preview",t.data,s);j(t,!0),C(e.statusCode);function u(f){l(f),r.currentTime&&f.currentTime(r.currentTime)}const n=t.hasCompleted&&e.hasCompleted&&i.hasCompleted&&a.hasCompleted,d=n&&x({currentUser:a.data,region:t.data,config:i.data,program:e.data});return o.jsx(y,{title:(g=e.data)==null?void 0:g.title,closePopup:r.closePopup,showLoadingSpinner:!n,size:"lg",bodyClassName:"p-0 rounded-3 position-relative",hideTitle:!0,children:n&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"overflow-hidden rounded-top-lg",children:o.jsx(P,{viewKey:null,offlinePlaybackObject:d,playerApi:new URL(i.data.playerApiUrl),autoplay:!0,hotkeyElQuerySelector:"body",onReady:u,allowFullscreen:!1})}),o.jsx(w,{program:e.data,title:e.data.title,description:e.data.description,videoActions:c(e.data)}),o.jsx(R,{closePopup:r.closePopup})]})})}export{ce as TvPreviewView};
2
- //# sourceMappingURL=BYTm1HdJ.chunk.js.map
1
+ import{U as p,a3 as m,R as v,j as o,P as y,aD as U,a5 as h}from"./app-DlxnnX-Y.js";import{u as C}from"./DHQlkDUq.chunk.js";import{C as P,P as w,a as R}from"./YhHoI_hl.chunk.js";import{T as b}from"./97GoF_Eh.chunk.js";import{u as T}from"./DgCvHCTv.chunk.js";import{u as j}from"./D_K0UgSq.chunk.js";import"./B7sQixjZ.chunk.js";import"./CWjXnQlc.chunk.js";import"./DIzcUtXf.chunk.js";import"./DzTRfLQn.chunk.js";import"./BlDVEZsX.chunk.js";import"./DxppYmgw.chunk.js";import"./pkzD5BEm.chunk.js";import"./Bvlv6PGR.chunk.js";import"./59HBVVj3.chunk.js";import"./Cj7-nmDw.chunk.js";import"./BQz8nP4M.chunk.js";import"./DSuqoCKU.chunk.js";import"./Cxg7zIQ7.chunk.js";import"./BbGFMokw.chunk.js";import"./CsI_aEby.chunk.js";import"./C06GoFsR.chunk.js";import"./BTJwiZTv.chunk.js";import"./BSZHRB-3.chunk.js";import"./BP-61ONz.chunk.js";import"./CKbq02SS.chunk.js";import"./eF4foLm3.chunk.js";import"./CXEroOnb.chunk.js";import"./B3hUKuRr.chunk.js";import"./B668bf5B.chunk.js";import"./A03ti58C.chunk.js";import"./BiAKqJdD.chunk.js";import"./BwS3tIqZ.chunk.js";import"./DGdFdv74.chunk.js";import"./DLqmmsup.chunk.js";import"./BX8fMfGC.chunk.js";import"./BaNAbBYa.chunk.js";function x(r){const{currentUser:t,region:i,config:e,program:a}=r,s=e.tvPreviewUrls[i.code],l=a.globalId.replace(/-/g,""),c=p.safeUrlConcat(s,`/thumbnail/${l}.jpg`),u=p.safeUrlConcat(s,`/144p/${l.toUpperCase()}_144p.mp4`),n=p.safeUrlConcat(s,`/subtitle/${l.toUpperCase()}.srt`),d=p.urlBuilder(p.safeUrlConcat(e.playerApiUrl,"/api/srt-to-vtt"),{url:n});return{videoId:null,episodeNumber:0,seriesName:null,mediaId:null,mediaType:null,ratingCode:null,region:t.instanceRegion,seasonNumber:null,viewerId:t.id,viewerCustomerId:t.customerId,files:{fileToken:"",progressive:[{mimeType:"video/mp4",profile:"144",url:u,label:"Preview"}]},chapters:{list:[]},instanceRegion:t.instanceRegion,localCacheAddresses:[],posterUrl:c,resources:{list:[]},settings:{showSubtitles:!1,playbackProfile:"144",playbackProfileLocalCache:"144",playbackSubtitleSizeDefault:"medium"},subtitles:{list:[{url:d,isDefault:!1,language:"en-AU",mimeType:"text/vtt",label:"English"}]},title:a.title}}function ce(r){var g;const t=m(b.region(r.region)),i=m(U.config()),e=m(b.program(r.id)),a=m(h.currentUser()),[s,l]=v.useState(),c=T("preview",t.data,s);j(t,!0),C(e.statusCode);function u(f){l(f),r.currentTime&&f.currentTime(r.currentTime)}const n=t.hasCompleted&&e.hasCompleted&&i.hasCompleted&&a.hasCompleted,d=n&&x({currentUser:a.data,region:t.data,config:i.data,program:e.data});return o.jsx(y,{title:(g=e.data)==null?void 0:g.title,closePopup:r.closePopup,showLoadingSpinner:!n,size:"lg",bodyClassName:"p-0 rounded-3 position-relative",hideTitle:!0,children:n&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"overflow-hidden rounded-top-lg",children:o.jsx(P,{viewKey:null,offlinePlaybackObject:d,playerApi:new URL(i.data.playerApiUrl),autoplay:!0,hotkeyElQuerySelector:"body",onReady:u,allowFullscreen:!1})}),o.jsx(w,{program:e.data,title:e.data.title,description:e.data.description,videoActions:c(e.data)}),o.jsx(R,{closePopup:r.closePopup})]})})}export{ce as TvPreviewView};
2
+ //# sourceMappingURL=mMvgsH8u.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BYTm1HdJ.chunk.js","sources":["../../src/apps/tv/views/tv-preview/utils/getTvPlaybackObject.ts","../../src/apps/tv/views/tv-preview/TvPreviewView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { RegionName } from 'libs/analytics/enums/RegionName';\n\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\n\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\ninterface GetTvPlaybackObjectOptions {\n currentUser: CurrentUser;\n region: TvRegion;\n config: ExchangeConfig;\n program: TvProgram;\n}\n\nexport function getTvPlaybackObject(options: GetTvPlaybackObjectOptions): PlaybackObject {\n const { currentUser, region, config, program } = options;\n\n const previewUrl = config.tvPreviewUrls[region.code];\n\n const globalId = program.globalId.replace(/-/g, '');\n\n const thumbnailUrl = UrlHelper.safeUrlConcat(\n previewUrl,\n `/thumbnail/${globalId}.jpg`\n );\n const fileUrl = UrlHelper.safeUrlConcat(\n previewUrl,\n `/144p/${globalId.toUpperCase()}_144p.mp4`\n );\n const subtitleLocation = UrlHelper.safeUrlConcat(\n previewUrl,\n `/subtitle/${globalId.toUpperCase()}.srt`\n );\n const subtitleUrl = UrlHelper.urlBuilder(\n UrlHelper.safeUrlConcat(config.playerApiUrl, `/api/srt-to-vtt`),\n { url: subtitleLocation }\n );\n\n return ({\n videoId: null,\n episodeNumber: 0,\n seriesName: null,\n mediaId: null,\n mediaType: null,\n ratingCode: null,\n region: currentUser.instanceRegion,\n seasonNumber: null,\n viewerId: currentUser.id,\n viewerCustomerId: currentUser.customerId,\n files: {\n fileToken: '',\n progressive: [{\n mimeType: 'video/mp4',\n profile: '144',\n url: fileUrl,\n label: 'Preview'\n }]\n },\n chapters: { list: []},\n instanceRegion: currentUser.instanceRegion as unknown as RegionName,\n localCacheAddresses: [],\n posterUrl: thumbnailUrl,\n resources: { list: []},\n settings: {\n showSubtitles: false,\n playbackProfile: '144',\n playbackProfileLocalCache: '144',\n playbackSubtitleSizeDefault: 'medium'\n },\n subtitles: {\n list: [{\n url: subtitleUrl,\n isDefault: false,\n language: 'en-AU',\n mimeType: 'text/vtt',\n label: 'English'\n }]\n },\n title: program.title\n });\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport { PlayerOverlayButtons } from 'shared/components/player-overlay-buttons/PlayerOverlayButtons';\nimport { PreviewVideoDetails } from 'shared/components/preview-video-details/PreviewVideoDetails';\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nimport { getTvPlaybackObject } from './utils/getTvPlaybackObject';\n\ninterface TvPreviewViewProps extends PopupViewProps {\n id: string;\n region: string;\n currentTime: number;\n}\n\nexport function TvPreviewView(props: TvPreviewViewProps): JSX.Element {\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const config = Flight.useBasicFetch<ExchangeConfig>(ConfigRequests.config());\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(props.id));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const [ playerRef, setPlayerRef ] = React.useState<PlayerReference>();\n\n const getVideoActions = useGetTvActions('preview', region.data, playerRef);\n\n useHandleRegionError(region, true);\n useHandleDialogError(program.statusCode);\n\n // TODO: Solve analytics collection\n function onReady(player: PlayerReference): void {\n setPlayerRef(player);\n\n if (props.currentTime)\n player.currentTime(props.currentTime);\n // setupAnalytics(player);\n }\n\n const dataLoaded = (\n region.hasCompleted &&\n program.hasCompleted &&\n config.hasCompleted &&\n currentUser.hasCompleted\n );\n\n const playbackObject = dataLoaded && getTvPlaybackObject({\n currentUser: currentUser.data,\n region: region.data,\n config: config.data,\n program: program.data\n });\n\n return (\n <Popup\n title={program.data?.title}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded}\n size='lg'\n bodyClassName='p-0 rounded-3 position-relative'\n hideTitle\n >\n {dataLoaded &&\n <>\n <div className='overflow-hidden rounded-top-lg'>\n <ClickViewPlayer\n viewKey={null}\n offlinePlaybackObject={playbackObject}\n playerApi={new URL(config.data.playerApiUrl)}\n autoplay\n hotkeyElQuerySelector='body'\n onReady={onReady}\n allowFullscreen={false}\n />\n </div>\n <PreviewVideoDetails\n program={program.data}\n title={program.data.title}\n description={program.data.description}\n videoActions={getVideoActions(program.data)}\n />\n <PlayerOverlayButtons closePopup={props.closePopup} />\n </>\n }\n </Popup>\n );\n}"],"names":["getTvPlaybackObject","options","currentUser","region","config","program","previewUrl","globalId","thumbnailUrl","UrlHelper","fileUrl","subtitleLocation","subtitleUrl","TvPreviewView","props","Flight.useBasicFetch","TvRequests","ConfigRequests","UserRequests","playerRef","setPlayerRef","React","getVideoActions","useGetTvActions","useHandleRegionError","useHandleDialogError","onReady","player","dataLoaded","playbackObject","jsx","Popup","_a","jsxs","Fragment","ClickViewPlayer","PreviewVideoDetails","PlayerOverlayButtons"],"mappings":"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"}
1
+ {"version":3,"file":"mMvgsH8u.chunk.js","sources":["../../src/apps/tv/views/tv-preview/utils/getTvPlaybackObject.ts","../../src/apps/tv/views/tv-preview/TvPreviewView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { RegionName } from 'libs/analytics/enums/RegionName';\n\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\n\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\ninterface GetTvPlaybackObjectOptions {\n currentUser: CurrentUser;\n region: TvRegion;\n config: ExchangeConfig;\n program: TvProgram;\n}\n\nexport function getTvPlaybackObject(options: GetTvPlaybackObjectOptions): PlaybackObject {\n const { currentUser, region, config, program } = options;\n\n const previewUrl = config.tvPreviewUrls[region.code];\n\n const globalId = program.globalId.replace(/-/g, '');\n\n const thumbnailUrl = UrlHelper.safeUrlConcat(\n previewUrl,\n `/thumbnail/${globalId}.jpg`\n );\n const fileUrl = UrlHelper.safeUrlConcat(\n previewUrl,\n `/144p/${globalId.toUpperCase()}_144p.mp4`\n );\n const subtitleLocation = UrlHelper.safeUrlConcat(\n previewUrl,\n `/subtitle/${globalId.toUpperCase()}.srt`\n );\n const subtitleUrl = UrlHelper.urlBuilder(\n UrlHelper.safeUrlConcat(config.playerApiUrl, `/api/srt-to-vtt`),\n { url: subtitleLocation }\n );\n\n return ({\n videoId: null,\n episodeNumber: 0,\n seriesName: null,\n mediaId: null,\n mediaType: null,\n ratingCode: null,\n region: currentUser.instanceRegion,\n seasonNumber: null,\n viewerId: currentUser.id,\n viewerCustomerId: currentUser.customerId,\n files: {\n fileToken: '',\n progressive: [{\n mimeType: 'video/mp4',\n profile: '144',\n url: fileUrl,\n label: 'Preview'\n }]\n },\n chapters: { list: []},\n instanceRegion: currentUser.instanceRegion as unknown as RegionName,\n localCacheAddresses: [],\n posterUrl: thumbnailUrl,\n resources: { list: []},\n settings: {\n showSubtitles: false,\n playbackProfile: '144',\n playbackProfileLocalCache: '144',\n playbackSubtitleSizeDefault: 'medium'\n },\n subtitles: {\n list: [{\n url: subtitleUrl,\n isDefault: false,\n language: 'en-AU',\n mimeType: 'text/vtt',\n label: 'English'\n }]\n },\n title: program.title\n });\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport { PlayerOverlayButtons } from 'shared/components/player-overlay-buttons/PlayerOverlayButtons';\nimport { PreviewVideoDetails } from 'shared/components/preview-video-details/PreviewVideoDetails';\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nimport { getTvPlaybackObject } from './utils/getTvPlaybackObject';\n\ninterface TvPreviewViewProps extends PopupViewProps {\n id: string;\n region: string;\n currentTime: number;\n}\n\nexport function TvPreviewView(props: TvPreviewViewProps): JSX.Element {\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const config = Flight.useBasicFetch<ExchangeConfig>(ConfigRequests.config());\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(props.id));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const [ playerRef, setPlayerRef ] = React.useState<PlayerReference>();\n\n const getVideoActions = useGetTvActions('preview', region.data, playerRef);\n\n useHandleRegionError(region, true);\n useHandleDialogError(program.statusCode);\n\n // TODO: Solve analytics collection\n function onReady(player: PlayerReference): void {\n setPlayerRef(player);\n\n if (props.currentTime)\n player.currentTime(props.currentTime);\n // setupAnalytics(player);\n }\n\n const dataLoaded = (\n region.hasCompleted &&\n program.hasCompleted &&\n config.hasCompleted &&\n currentUser.hasCompleted\n );\n\n const playbackObject = dataLoaded && getTvPlaybackObject({\n currentUser: currentUser.data,\n region: region.data,\n config: config.data,\n program: program.data\n });\n\n return (\n <Popup\n title={program.data?.title}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded}\n size='lg'\n bodyClassName='p-0 rounded-3 position-relative'\n hideTitle\n >\n {dataLoaded &&\n <>\n <div className='overflow-hidden rounded-top-lg'>\n <ClickViewPlayer\n viewKey={null}\n offlinePlaybackObject={playbackObject}\n playerApi={new URL(config.data.playerApiUrl)}\n autoplay\n hotkeyElQuerySelector='body'\n onReady={onReady}\n allowFullscreen={false}\n />\n </div>\n <PreviewVideoDetails\n program={program.data}\n title={program.data.title}\n description={program.data.description}\n videoActions={getVideoActions(program.data)}\n />\n <PlayerOverlayButtons closePopup={props.closePopup} />\n </>\n }\n </Popup>\n );\n}"],"names":["getTvPlaybackObject","options","currentUser","region","config","program","previewUrl","globalId","thumbnailUrl","UrlHelper","fileUrl","subtitleLocation","subtitleUrl","TvPreviewView","props","Flight.useBasicFetch","TvRequests","ConfigRequests","UserRequests","playerRef","setPlayerRef","React","getVideoActions","useGetTvActions","useHandleRegionError","useHandleDialogError","onReady","player","dataLoaded","playbackObject","jsx","Popup","_a","jsxs","Fragment","ClickViewPlayer","PreviewVideoDetails","PlayerOverlayButtons"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{a3 as b,a5 as O,aD as D,U as k,M as l,L as R,aH as T,aj as M,n as x,o as H,ad as U,ac as m,aI as P,ae as C,af as S,aJ as v,aK as q,a as w,b as E}from"./app-eQ6keCVj.js";import{L as _}from"./0Rgjdcqz.chunk.js";import{V as $}from"./DlvPyEMc.chunk.js";import{A as F}from"./BKID_sLP.chunk.js";var L=(e=>(e.Developer="Curator Devs",e.Content="Content",e.Curator="Curators",e.Support="Support",e.SalesSupport="Sales Support",e.GraphicDesigner="Graphic Designers",e.MetadataEditor="Metadata Editors",e.ResourcingManager="Resourcing Managers",e.SeniorContentManager="Senior Content Manager",e.Marketing="Marketing",e.Sales="Sales Representatives",e.StreamableCurator="Streamable Curator",e.SupportExtraPermission="Support - Extra Permissions",e.SeoManager="SEO Manager",e.ContentReviewer="Content Reviewer",e))(L||{});const W="shared.hooks",X=R.encloseNamespace(W);function j(e,r,n,p){const s=k.safeUrlConcat(e,"manage"),i=k.safeUrlConcat(e,"exchange"),a=(o,c,f)=>k.safeUrlConcat(o,`${c}/${f}`);switch(r){case l.Subject:return k.safeUrlConcat(s,`subjects/presentations/${p}/classifications/${n}/edit`);case l.Video:return a(s,"videos",n);case l.Playlist:return a(s,"playlists",n);case l.Series:return a(s,"series",n);case l.Company:return a(s,"companies",n);case l.Interactive:return a(s,"interactives",n);case l.Clip:return a(s,"clips",n);case l.Category:return a(i,"categories",n)}}function B(){return X("openInCurationStudio")}function z(){var i,a;const e=b(O.currentUser()),{data:r}=b(((i=e.data)==null?void 0:i.id)&&O.groups((a=e.data)==null?void 0:a.id)),n=b(D.config()),p=[L.Curator,L.Content,L.Developer];function s(){return p.some(o=>r==null?void 0:r.data.find(c=>c.name===o))}return{openInCurationStudioLabel:B(),isUserCurator:s(),getOpenInCurationStudioLink:(o,c,f)=>{var t;return j((t=n.data)==null?void 0:t.curatorUrl,o,c,f)}}}var N=(e=>(e[e.PlayPage=0]="PlayPage",e))(N||{});function J(e){const r=T(),n=M();function p(a){return e.type!==0?null:$.getVideoRequest(a.id,a.typeId,e.shareId)}function s(a){const o=p(a);r(o.key).shouldFetch&&n(o)}function i(a){const o=p(a);return r(o.key).hasCompleted}return{hydrate:s,isHydrated:i}}const K="exchange.exchangeHooks",d=R.encloseNamespace(K),Y={lazyPlaceholder:!0};function ae(e){const{hasPermissions:r}=x(),{isUserCurator:n,openInCurationStudioLabel:p,getOpenInCurationStudioLink:s}=z(),i=b(D.config()),a=b(r(H.ContributeVideo)&&_.libraryRequestLibraries()),{hydrate:o,isHydrated:c}=J({type:N.PlayPage});function f(t){var I,V,A;const u=e==="preview",h={id:t.id,name:t.name},g=u?U.VideoItemPreview:U.VideoListItem,y=[{order:10,label:u?d("openInClickView"):"",svg:q,tooltip:u?"":d("openInClickView"),className:u?"btn btn-dark me-2":"",button:!0,href:i.data&&v.safeUrlConcat(i.data.liteUrl,`/videos/${t.id}`),analyticsData:h,analyticsOptions:{actionType:S.Click,entity:C.Video,descriptor:P.OpenInClickView,location:g,workflowPhase:m.Start}},{order:20,label:u?d("addVideo"):null,svg:u?void 0:F,tooltip:u?"":d("addVideo"),button:!u,appLink:{application:E.EXCHANGE,action:w.Exchange.ADD,args:[t.id]},analyticsData:h,analyticsOptions:{actionType:S.Click,entity:C.Video,descriptor:P.AddToWorkspace,location:g,workflowPhase:m.Start}},{order:30,label:d("suggest"),className:"",appLink:{application:E.EXCHANGE,action:w.Exchange.SUGGEST_EDIT,args:[t.id],params:{location:g}},analyticsData:h,analyticsOptions:{actionType:S.Click,entity:C.Video,descriptor:P.SuggestEdit,location:g,workflowPhase:m.Start}}];return c(t)?((I=t._canAddToLibrary)!=null&&I.customLibrary&&((V=a.data)!=null&&V.length)&&y.push({order:25,label:d("addToLibrary"),className:"",appLink:{application:E.EXCHANGE,action:w.Exchange.ADD_TO_LIBRARY,args:[t.id]},analyticsData:h,analyticsOptions:{actionType:S.Create,entity:C.LibraryRequest,workflowPhase:m.Start,location:g}}),(A=t._canDownload)!=null&&A.value&&y.push({order:40,label:d("download"),className:"",appLink:{application:E.EXCHANGE,action:w.Exchange.DOWNLOAD_VIDEO,args:[t.id]},analyticsData:h,analyticsOptions:{actionType:S.Download,entity:C.Video,workflowPhase:m.Start,location:g}}),n&&y.push({order:50,label:p,openInNewTab:!0,href:s(l.Video,t.id)}),y):[...y,Y]}return{getVideoActions:f,fetchMoreActions:t=>o(t)}}export{ae as a,z as u};
2
- //# sourceMappingURL=1JtZW3TW.chunk.js.map
1
+ import{a3 as b,a5 as O,aD as D,U as k,M as l,L as R,aH as T,aj as M,n as x,o as H,ad as U,ac as m,aI as P,ae as C,af as S,aJ as v,aK as q,a as w,b as E}from"./app-DlxnnX-Y.js";import{L as _}from"./BiAKqJdD.chunk.js";import{V as $}from"./DzTRfLQn.chunk.js";import{A as F}from"./B3hUKuRr.chunk.js";var L=(e=>(e.Developer="Curator Devs",e.Content="Content",e.Curator="Curators",e.Support="Support",e.SalesSupport="Sales Support",e.GraphicDesigner="Graphic Designers",e.MetadataEditor="Metadata Editors",e.ResourcingManager="Resourcing Managers",e.SeniorContentManager="Senior Content Manager",e.Marketing="Marketing",e.Sales="Sales Representatives",e.StreamableCurator="Streamable Curator",e.SupportExtraPermission="Support - Extra Permissions",e.SeoManager="SEO Manager",e.ContentReviewer="Content Reviewer",e))(L||{});const W="shared.hooks",X=R.encloseNamespace(W);function j(e,r,n,p){const s=k.safeUrlConcat(e,"manage"),i=k.safeUrlConcat(e,"exchange"),a=(o,c,f)=>k.safeUrlConcat(o,`${c}/${f}`);switch(r){case l.Subject:return k.safeUrlConcat(s,`subjects/presentations/${p}/classifications/${n}/edit`);case l.Video:return a(s,"videos",n);case l.Playlist:return a(s,"playlists",n);case l.Series:return a(s,"series",n);case l.Company:return a(s,"companies",n);case l.Interactive:return a(s,"interactives",n);case l.Clip:return a(s,"clips",n);case l.Category:return a(i,"categories",n)}}function B(){return X("openInCurationStudio")}function z(){var i,a;const e=b(O.currentUser()),{data:r}=b(((i=e.data)==null?void 0:i.id)&&O.groups((a=e.data)==null?void 0:a.id)),n=b(D.config()),p=[L.Curator,L.Content,L.Developer];function s(){return p.some(o=>r==null?void 0:r.data.find(c=>c.name===o))}return{openInCurationStudioLabel:B(),isUserCurator:s(),getOpenInCurationStudioLink:(o,c,f)=>{var t;return j((t=n.data)==null?void 0:t.curatorUrl,o,c,f)}}}var N=(e=>(e[e.PlayPage=0]="PlayPage",e))(N||{});function J(e){const r=T(),n=M();function p(a){return e.type!==0?null:$.getVideoRequest(a.id,a.typeId,e.shareId)}function s(a){const o=p(a);r(o.key).shouldFetch&&n(o)}function i(a){const o=p(a);return r(o.key).hasCompleted}return{hydrate:s,isHydrated:i}}const K="exchange.exchangeHooks",d=R.encloseNamespace(K),Y={lazyPlaceholder:!0};function ae(e){const{hasPermissions:r}=x(),{isUserCurator:n,openInCurationStudioLabel:p,getOpenInCurationStudioLink:s}=z(),i=b(D.config()),a=b(r(H.ContributeVideo)&&_.libraryRequestLibraries()),{hydrate:o,isHydrated:c}=J({type:N.PlayPage});function f(t){var I,V,A;const u=e==="preview",h={id:t.id,name:t.name},g=u?U.VideoItemPreview:U.VideoListItem,y=[{order:10,label:u?d("openInClickView"):"",svg:q,tooltip:u?"":d("openInClickView"),className:u?"btn btn-dark me-2":"",button:!0,href:i.data&&v.safeUrlConcat(i.data.liteUrl,`/videos/${t.id}`),analyticsData:h,analyticsOptions:{actionType:S.Click,entity:C.Video,descriptor:P.OpenInClickView,location:g,workflowPhase:m.Start}},{order:20,label:u?d("addVideo"):null,svg:u?void 0:F,tooltip:u?"":d("addVideo"),button:!u,appLink:{application:E.EXCHANGE,action:w.Exchange.ADD,args:[t.id]},analyticsData:h,analyticsOptions:{actionType:S.Click,entity:C.Video,descriptor:P.AddToWorkspace,location:g,workflowPhase:m.Start}},{order:30,label:d("suggest"),className:"",appLink:{application:E.EXCHANGE,action:w.Exchange.SUGGEST_EDIT,args:[t.id],params:{location:g}},analyticsData:h,analyticsOptions:{actionType:S.Click,entity:C.Video,descriptor:P.SuggestEdit,location:g,workflowPhase:m.Start}}];return c(t)?((I=t._canAddToLibrary)!=null&&I.customLibrary&&((V=a.data)!=null&&V.length)&&y.push({order:25,label:d("addToLibrary"),className:"",appLink:{application:E.EXCHANGE,action:w.Exchange.ADD_TO_LIBRARY,args:[t.id]},analyticsData:h,analyticsOptions:{actionType:S.Create,entity:C.LibraryRequest,workflowPhase:m.Start,location:g}}),(A=t._canDownload)!=null&&A.value&&y.push({order:40,label:d("download"),className:"",appLink:{application:E.EXCHANGE,action:w.Exchange.DOWNLOAD_VIDEO,args:[t.id]},analyticsData:h,analyticsOptions:{actionType:S.Download,entity:C.Video,workflowPhase:m.Start,location:g}}),n&&y.push({order:50,label:p,openInNewTab:!0,href:s(l.Video,t.id)}),y):[...y,Y]}return{getVideoActions:f,fetchMoreActions:t=>o(t)}}export{ae as a,z as u};
2
+ //# sourceMappingURL=nzWgRE-N.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1JtZW3TW.chunk.js","sources":["../../../../libs/shared/src/enums/CuratorGroup.ts","../../../../libs/shared/src/hooks/useCurationStudio.ts","../../../../libs/shared/src/hooks/useVideohydration.ts","../../src/apps/exchange/hooks/useGetExchangeActions.ts"],"sourcesContent":["/**\n * The values in this enum directly\n * map to the group names in Master.\n */\nexport enum CuratorGroup {\n Developer = 'Curator Devs',\n Content = 'Content',\n Curator = 'Curators',\n Support = 'Support',\n SalesSupport = 'Sales Support',\n GraphicDesigner = 'Graphic Designers',\n MetadataEditor = 'Metadata Editors',\n ResourcingManager = 'Resourcing Managers',\n SeniorContentManager = 'Senior Content Manager',\n Marketing = 'Marketing',\n Sales = 'Sales Representatives',\n StreamableCurator = 'Streamable Curator',\n SupportExtraPermission = 'Support - Extra Permissions',\n SeoManager = 'SEO Manager',\n ContentReviewer = 'Content Reviewer'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CuratorUserGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getOpenInCurationStudioLink(\n baseUrl: string,\n objectType: MasterType | string,\n id: string,\n presentationId?: string\n) {\n const baseManageUrl = UrlHelper.safeUrlConcat(baseUrl, 'manage');\n const baseExchangeUrl = UrlHelper.safeUrlConcat(baseUrl, 'exchange');\n const href = (baseUrl: string, objectType: string, id: string) => UrlHelper.safeUrlConcat(baseUrl, `${objectType}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseManageUrl, `subjects/presentations/${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseManageUrl, 'videos', id);\n case MasterType.Playlist:\n return href(baseManageUrl, 'playlists', id);\n case MasterType.Series:\n return href(baseManageUrl, 'series', id);\n case MasterType.Company:\n return href(baseManageUrl, 'companies', id);\n case MasterType.Interactive:\n return href(baseManageUrl, 'interactives', id);\n case MasterType.Clip:\n return href(baseManageUrl, 'clips', id);\n case MasterType.Category:\n return href(baseExchangeUrl, 'categories', id);\n }\n}\n\nexport function getOpenInCurationStudioLabel(): string {\n return getPhrase('openInCurationStudio');\n}\n\nexport function useCurationStudio() {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { data: userGroups } = Flight.useBasicFetch<CuratorUserGroupCollection>(\n (currentUser.data?.id) && UserRequests.groups(currentUser.data?.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const curatorGroups = [ CuratorGroup.Curator, CuratorGroup.Content, CuratorGroup.Developer ];\n\n function isUserCurator(): boolean {\n return curatorGroups.some(group => userGroups?.data.find(userGroup => userGroup.name === group));\n }\n\n return {\n openInCurationStudioLabel: getOpenInCurationStudioLabel(),\n isUserCurator: isUserCurator(),\n getOpenInCurationStudioLink: (objectType: MasterType | string, id: string, presentationId?: string) =>\n getOpenInCurationStudioLink(config.data?.curatorUrl, objectType, id, presentationId)\n };\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport enum VideoHydrationType {\n PlayPage\n}\n\ninterface UseVideoHydrationOptions {\n type: VideoHydrationType;\n shareId?: string;\n}\n\nexport function useVideoHydration(options: UseVideoHydrationOptions) {\n const getResponse = Flight.useGetResponseFunc();\n const fetch = Flight.useGetFetch();\n \n function getRequest(video: VideoTypes): Flight.Request {\n if (options.type !== VideoHydrationType.PlayPage)\n return null;\n\n\n return VideoHelper.getVideoRequest(video.id, video.typeId, options.shareId);\n }\n \n function hydrate(video: VideoTypes): void {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n resp.shouldFetch && fetch(request);\n }\n\n function isHydrated(video: VideoTypes): boolean {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n return resp.hasCompleted;\n }\n\n return { hydrate, isHydrated };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useVideoHydration, VideoHydrationType } from 'libs/shared/hooks/useVideohydration';\nimport { AddVideoSvg } from 'libs/shared/images/svg/actions/AddVideoSvg';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Config, Library, Video, VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nconst namespace = 'exchange.exchangeHooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Location = 'preview' | 'video-list';\n\nconst FETCH_MORE_ACTION_OPTION: ActionOptions = {\n lazyPlaceholder: true\n};\n\nexport function useGetExchangeActions(location: Location) {\n const { hasPermissions } = usePermissions();\n\n const { isUserCurator, openInCurationStudioLabel, getOpenInCurationStudioLink } = useCurationStudio();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestLibraries = Flight.useBasicFetch<Library[]>(\n hasPermissions(PermissionName.ContributeVideo) &&\n LibraryRequests.libraryRequestLibraries()\n );\n\n const { hydrate, isHydrated } = useVideoHydration({\n type: VideoHydrationType.PlayPage\n });\n \n function getVideoActions(video: Video): ActionOptions[] {\n const isPreview = location === 'preview';\n const analyticsData = { id: video.id, name: video.name };\n const locationContext = isPreview ? LocationContext.VideoItemPreview : LocationContext.VideoListItem;\n\n const actions: ActionOptions[] = [{\n order: 10,\n label: isPreview ? getPhrase('openInClickView') : '',\n svg: NewWindowSvg,\n tooltip: isPreview ? '' : getPhrase('openInClickView'),\n className: isPreview ? 'btn btn-dark me-2' : '',\n button: true,\n href: config.data && UrlHelper.safeUrlConcat(config.data.liteUrl, `/videos/${video.id}`),\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.OpenInClickView,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 20,\n label: isPreview ? getPhrase('addVideo') : null,\n svg: !isPreview ? AddVideoSvg : undefined,\n tooltip: isPreview ? '' : getPhrase('addVideo'),\n button: !isPreview,\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 30,\n label: getPhrase('suggest'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.SUGGEST_EDIT,\n args: [video.id],\n params: { location: locationContext }\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }];\n\n if (!isHydrated(video)) {\n return [ ...actions, FETCH_MORE_ACTION_OPTION ];\n }\n\n if (video._canAddToLibrary?.customLibrary && requestLibraries.data?.length) {\n actions.push({\n order: 25,\n label: getPhrase('addToLibrary'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD_TO_LIBRARY,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.LibraryRequest,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (video._canDownload?.value) {\n actions.push({\n order: 40,\n label: getPhrase('download'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.DOWNLOAD_VIDEO,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Download,\n entity: EntityType.Video,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (isUserCurator) {\n actions.push({\n order: 50,\n label: openInCurationStudioLabel,\n openInNewTab: true,\n href: getOpenInCurationStudioLink(MasterType.Video, video.id)\n });\n }\n\n return actions;\n }\n\n return {\n getVideoActions,\n fetchMoreActions: (video: VideoTypes) => hydrate(video)\n };\n}"],"names":["CuratorGroup","namespace","getPhrase","LanguageService","getOpenInCurationStudioLink","baseUrl","objectType","id","presentationId","baseManageUrl","UrlHelper","baseExchangeUrl","href","MasterType","getOpenInCurationStudioLabel","useCurationStudio","currentUser","Flight.useBasicFetch","UserRequests","userGroups","_a","_b","config","ConfigRequests","curatorGroups","isUserCurator","group","userGroup","VideoHydrationType","useVideoHydration","options","getResponse","Flight.useGetResponseFunc","fetch","Flight.useGetFetch","getRequest","video","VideoHelper","hydrate","request","isHydrated","FETCH_MORE_ACTION_OPTION","useGetExchangeActions","location","hasPermissions","usePermissions","openInCurationStudioLabel","requestLibraries","PermissionName","LibraryRequests","getVideoActions","isPreview","analyticsData","locationContext","LocationContext","actions","NewWindowSvg","UserAction","EntityType","VideoActionDescriptor","WorkflowPhase","AddVideoSvg","AppChannels","Actions","_c"],"mappings":"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"}
1
+ {"version":3,"file":"nzWgRE-N.chunk.js","sources":["../../../../libs/shared/src/enums/CuratorGroup.ts","../../../../libs/shared/src/hooks/useCurationStudio.ts","../../../../libs/shared/src/hooks/useVideohydration.ts","../../src/apps/exchange/hooks/useGetExchangeActions.ts"],"sourcesContent":["/**\n * The values in this enum directly\n * map to the group names in Master.\n */\nexport enum CuratorGroup {\n Developer = 'Curator Devs',\n Content = 'Content',\n Curator = 'Curators',\n Support = 'Support',\n SalesSupport = 'Sales Support',\n GraphicDesigner = 'Graphic Designers',\n MetadataEditor = 'Metadata Editors',\n ResourcingManager = 'Resourcing Managers',\n SeniorContentManager = 'Senior Content Manager',\n Marketing = 'Marketing',\n Sales = 'Sales Representatives',\n StreamableCurator = 'Streamable Curator',\n SupportExtraPermission = 'Support - Extra Permissions',\n SeoManager = 'SEO Manager',\n ContentReviewer = 'Content Reviewer'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CuratorUserGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getOpenInCurationStudioLink(\n baseUrl: string,\n objectType: MasterType | string,\n id: string,\n presentationId?: string\n) {\n const baseManageUrl = UrlHelper.safeUrlConcat(baseUrl, 'manage');\n const baseExchangeUrl = UrlHelper.safeUrlConcat(baseUrl, 'exchange');\n const href = (baseUrl: string, objectType: string, id: string) => UrlHelper.safeUrlConcat(baseUrl, `${objectType}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseManageUrl, `subjects/presentations/${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseManageUrl, 'videos', id);\n case MasterType.Playlist:\n return href(baseManageUrl, 'playlists', id);\n case MasterType.Series:\n return href(baseManageUrl, 'series', id);\n case MasterType.Company:\n return href(baseManageUrl, 'companies', id);\n case MasterType.Interactive:\n return href(baseManageUrl, 'interactives', id);\n case MasterType.Clip:\n return href(baseManageUrl, 'clips', id);\n case MasterType.Category:\n return href(baseExchangeUrl, 'categories', id);\n }\n}\n\nexport function getOpenInCurationStudioLabel(): string {\n return getPhrase('openInCurationStudio');\n}\n\nexport function useCurationStudio() {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { data: userGroups } = Flight.useBasicFetch<CuratorUserGroupCollection>(\n (currentUser.data?.id) && UserRequests.groups(currentUser.data?.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const curatorGroups = [ CuratorGroup.Curator, CuratorGroup.Content, CuratorGroup.Developer ];\n\n function isUserCurator(): boolean {\n return curatorGroups.some(group => userGroups?.data.find(userGroup => userGroup.name === group));\n }\n\n return {\n openInCurationStudioLabel: getOpenInCurationStudioLabel(),\n isUserCurator: isUserCurator(),\n getOpenInCurationStudioLink: (objectType: MasterType | string, id: string, presentationId?: string) =>\n getOpenInCurationStudioLink(config.data?.curatorUrl, objectType, id, presentationId)\n };\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport enum VideoHydrationType {\n PlayPage\n}\n\ninterface UseVideoHydrationOptions {\n type: VideoHydrationType;\n shareId?: string;\n}\n\nexport function useVideoHydration(options: UseVideoHydrationOptions) {\n const getResponse = Flight.useGetResponseFunc();\n const fetch = Flight.useGetFetch();\n \n function getRequest(video: VideoTypes): Flight.Request {\n if (options.type !== VideoHydrationType.PlayPage)\n return null;\n\n\n return VideoHelper.getVideoRequest(video.id, video.typeId, options.shareId);\n }\n \n function hydrate(video: VideoTypes): void {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n resp.shouldFetch && fetch(request);\n }\n\n function isHydrated(video: VideoTypes): boolean {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n return resp.hasCompleted;\n }\n\n return { hydrate, isHydrated };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useVideoHydration, VideoHydrationType } from 'libs/shared/hooks/useVideohydration';\nimport { AddVideoSvg } from 'libs/shared/images/svg/actions/AddVideoSvg';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Config, Library, Video, VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nconst namespace = 'exchange.exchangeHooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Location = 'preview' | 'video-list';\n\nconst FETCH_MORE_ACTION_OPTION: ActionOptions = {\n lazyPlaceholder: true\n};\n\nexport function useGetExchangeActions(location: Location) {\n const { hasPermissions } = usePermissions();\n\n const { isUserCurator, openInCurationStudioLabel, getOpenInCurationStudioLink } = useCurationStudio();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestLibraries = Flight.useBasicFetch<Library[]>(\n hasPermissions(PermissionName.ContributeVideo) &&\n LibraryRequests.libraryRequestLibraries()\n );\n\n const { hydrate, isHydrated } = useVideoHydration({\n type: VideoHydrationType.PlayPage\n });\n \n function getVideoActions(video: Video): ActionOptions[] {\n const isPreview = location === 'preview';\n const analyticsData = { id: video.id, name: video.name };\n const locationContext = isPreview ? LocationContext.VideoItemPreview : LocationContext.VideoListItem;\n\n const actions: ActionOptions[] = [{\n order: 10,\n label: isPreview ? getPhrase('openInClickView') : '',\n svg: NewWindowSvg,\n tooltip: isPreview ? '' : getPhrase('openInClickView'),\n className: isPreview ? 'btn btn-dark me-2' : '',\n button: true,\n href: config.data && UrlHelper.safeUrlConcat(config.data.liteUrl, `/videos/${video.id}`),\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.OpenInClickView,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 20,\n label: isPreview ? getPhrase('addVideo') : null,\n svg: !isPreview ? AddVideoSvg : undefined,\n tooltip: isPreview ? '' : getPhrase('addVideo'),\n button: !isPreview,\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 30,\n label: getPhrase('suggest'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.SUGGEST_EDIT,\n args: [video.id],\n params: { location: locationContext }\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }];\n\n if (!isHydrated(video)) {\n return [ ...actions, FETCH_MORE_ACTION_OPTION ];\n }\n\n if (video._canAddToLibrary?.customLibrary && requestLibraries.data?.length) {\n actions.push({\n order: 25,\n label: getPhrase('addToLibrary'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD_TO_LIBRARY,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.LibraryRequest,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (video._canDownload?.value) {\n actions.push({\n order: 40,\n label: getPhrase('download'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.DOWNLOAD_VIDEO,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Download,\n entity: EntityType.Video,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (isUserCurator) {\n actions.push({\n order: 50,\n label: openInCurationStudioLabel,\n openInNewTab: true,\n href: getOpenInCurationStudioLink(MasterType.Video, video.id)\n });\n }\n\n return actions;\n }\n\n return {\n getVideoActions,\n fetchMoreActions: (video: VideoTypes) => hydrate(video)\n };\n}"],"names":["CuratorGroup","namespace","getPhrase","LanguageService","getOpenInCurationStudioLink","baseUrl","objectType","id","presentationId","baseManageUrl","UrlHelper","baseExchangeUrl","href","MasterType","getOpenInCurationStudioLabel","useCurationStudio","currentUser","Flight.useBasicFetch","UserRequests","userGroups","_a","_b","config","ConfigRequests","curatorGroups","isUserCurator","group","userGroup","VideoHydrationType","useVideoHydration","options","getResponse","Flight.useGetResponseFunc","fetch","Flight.useGetFetch","getRequest","video","VideoHelper","hydrate","request","isHydrated","FETCH_MORE_ACTION_OPTION","useGetExchangeActions","location","hasPermissions","usePermissions","openInCurationStudioLabel","requestLibraries","PermissionName","LibraryRequests","getVideoActions","isPreview","analyticsData","locationContext","LocationContext","actions","NewWindowSvg","UserAction","EntityType","VideoActionDescriptor","WorkflowPhase","AddVideoSvg","AppChannels","Actions","_c"],"mappings":"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"}