@clickview/exchange 0.62.0-rc.1 → 0.62.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 (123) hide show
  1. package/dist/.vite/manifest.json +542 -542
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{BPYdRA7H.chunk.js → 0uwnPAi2.chunk.js} +2 -2
  5. package/dist/scripts/{BPYdRA7H.chunk.js.map → 0uwnPAi2.chunk.js.map} +1 -1
  6. package/dist/scripts/{eUKFc6dK.chunk.js → 6f-CHYL3.chunk.js} +2 -2
  7. package/dist/scripts/{eUKFc6dK.chunk.js.map → 6f-CHYL3.chunk.js.map} +1 -1
  8. package/dist/scripts/{BS8sYAAh.chunk.js → B09qwiFG.chunk.js} +2 -2
  9. package/dist/scripts/{BS8sYAAh.chunk.js.map → B09qwiFG.chunk.js.map} +1 -1
  10. package/dist/scripts/{BbrEvwAi2.chunk.js → B0uOvqjG2.chunk.js} +2 -2
  11. package/dist/scripts/{BbrEvwAi2.chunk.js.map → B0uOvqjG2.chunk.js.map} +1 -1
  12. package/dist/scripts/{EIJf9JbR2.chunk.js → B8BobN3r2.chunk.js} +2 -2
  13. package/dist/scripts/{EIJf9JbR2.chunk.js.map → B8BobN3r2.chunk.js.map} +1 -1
  14. package/dist/scripts/{Ca_-2JTE2.chunk.js → B8wHzPHI2.chunk.js} +2 -2
  15. package/dist/scripts/{Ca_-2JTE2.chunk.js.map → B8wHzPHI2.chunk.js.map} +1 -1
  16. package/dist/scripts/{DkB0qBxI.chunk.js → BAIdKirt.chunk.js} +2 -2
  17. package/dist/scripts/{DkB0qBxI.chunk.js.map → BAIdKirt.chunk.js.map} +1 -1
  18. package/dist/scripts/{Bi8itw8v2.chunk.js → BAwP70HI2.chunk.js} +2 -2
  19. package/dist/scripts/{Bi8itw8v2.chunk.js.map → BAwP70HI2.chunk.js.map} +1 -1
  20. package/dist/scripts/{BHbt9wzx.chunk.js → BEv09vqz.chunk.js} +2 -2
  21. package/dist/scripts/{BHbt9wzx.chunk.js.map → BEv09vqz.chunk.js.map} +1 -1
  22. package/dist/scripts/{8pXw5z942.chunk.js → BLs3APIS2.chunk.js} +2 -2
  23. package/dist/scripts/{8pXw5z942.chunk.js.map → BLs3APIS2.chunk.js.map} +1 -1
  24. package/dist/scripts/{DuPL-nK72.chunk.js → BP0LMV9S2.chunk.js} +2 -2
  25. package/dist/scripts/{DuPL-nK72.chunk.js.map → BP0LMV9S2.chunk.js.map} +1 -1
  26. package/dist/scripts/{EO2xPuAQ.chunk.js → BPttZx0-.chunk.js} +2 -2
  27. package/dist/scripts/{EO2xPuAQ.chunk.js.map → BPttZx0-.chunk.js.map} +1 -1
  28. package/dist/scripts/{NtrZI2Ef.chunk.js → BQk9Mhlr.chunk.js} +2 -2
  29. package/dist/scripts/{NtrZI2Ef.chunk.js.map → BQk9Mhlr.chunk.js.map} +1 -1
  30. package/dist/scripts/{amjwjus3.chunk.js → BXIfsdxg.chunk.js} +2 -2
  31. package/dist/scripts/{amjwjus3.chunk.js.map → BXIfsdxg.chunk.js.map} +1 -1
  32. package/dist/scripts/{DKz4jhnr2.chunk.js → B_P4D3Hf2.chunk.js} +2 -2
  33. package/dist/scripts/{DKz4jhnr2.chunk.js.map → B_P4D3Hf2.chunk.js.map} +1 -1
  34. package/dist/scripts/{DfOgl-0-2.chunk.js → BgskDBpT2.chunk.js} +2 -2
  35. package/dist/scripts/{DfOgl-0-2.chunk.js.map → BgskDBpT2.chunk.js.map} +1 -1
  36. package/dist/scripts/{BsLLiG1-.chunk.js → BhOZYAZn.chunk.js} +2 -2
  37. package/dist/scripts/{BsLLiG1-.chunk.js.map → BhOZYAZn.chunk.js.map} +1 -1
  38. package/dist/scripts/{BaSi1pig.chunk.js → Bn9ROglk.chunk.js} +2 -2
  39. package/dist/scripts/{BaSi1pig.chunk.js.map → Bn9ROglk.chunk.js.map} +1 -1
  40. package/dist/scripts/{SDRXIwM22.chunk.js → Bo8PhXY12.chunk.js} +3 -3
  41. package/dist/scripts/{SDRXIwM22.chunk.js.map → Bo8PhXY12.chunk.js.map} +1 -1
  42. package/dist/scripts/{C3Hw2TpW2.chunk.js → BrVyRSUS2.chunk.js} +2 -2
  43. package/dist/scripts/{C3Hw2TpW2.chunk.js.map → BrVyRSUS2.chunk.js.map} +1 -1
  44. package/dist/scripts/{DmVXt6_V.chunk.js → BxLgTmMl.chunk.js} +2 -2
  45. package/dist/scripts/{DmVXt6_V.chunk.js.map → BxLgTmMl.chunk.js.map} +1 -1
  46. package/dist/scripts/{DsHiClyc2.chunk.js → Bxsu4S752.chunk.js} +2 -2
  47. package/dist/scripts/{DsHiClyc2.chunk.js.map → Bxsu4S752.chunk.js.map} +1 -1
  48. package/dist/scripts/{MYu2AEsL.chunk.js → C-PORBUs.chunk.js} +2 -2
  49. package/dist/scripts/{MYu2AEsL.chunk.js.map → C-PORBUs.chunk.js.map} +1 -1
  50. package/dist/scripts/{CxUrOnxW2.chunk.js → C1StI3Bl2.chunk.js} +2 -2
  51. package/dist/scripts/{CxUrOnxW2.chunk.js.map → C1StI3Bl2.chunk.js.map} +1 -1
  52. package/dist/scripts/{CKL4ViMC.chunk.js → C6Hr-vqw.chunk.js} +2 -2
  53. package/dist/scripts/{CKL4ViMC.chunk.js.map → C6Hr-vqw.chunk.js.map} +1 -1
  54. package/dist/scripts/{Bue5_bLM.chunk.js → CBnNAkzx.chunk.js} +2 -2
  55. package/dist/scripts/{Bue5_bLM.chunk.js.map → CBnNAkzx.chunk.js.map} +1 -1
  56. package/dist/scripts/{C03mMZ4k.chunk.js → CFkqPGiT.chunk.js} +2 -2
  57. package/dist/scripts/{C03mMZ4k.chunk.js.map → CFkqPGiT.chunk.js.map} +1 -1
  58. package/dist/scripts/{vvCGyl_q.chunk.js → CKD2j1rw.chunk.js} +2 -2
  59. package/dist/scripts/{vvCGyl_q.chunk.js.map → CKD2j1rw.chunk.js.map} +1 -1
  60. package/dist/scripts/{DqM6hYTJ2.chunk.js → CSKzCsLv2.chunk.js} +2 -2
  61. package/dist/scripts/{DqM6hYTJ2.chunk.js.map → CSKzCsLv2.chunk.js.map} +1 -1
  62. package/dist/scripts/{B7m3cCi42.chunk.js → CZgaUoHE2.chunk.js} +2 -2
  63. package/dist/scripts/{B7m3cCi42.chunk.js.map → CZgaUoHE2.chunk.js.map} +1 -1
  64. package/dist/scripts/{CL9SkODG.chunk.js → C_7tv1r9.chunk.js} +2 -2
  65. package/dist/scripts/{CL9SkODG.chunk.js.map → C_7tv1r9.chunk.js.map} +1 -1
  66. package/dist/scripts/{CKZJ2qae2.chunk.js → C_jUsStb2.chunk.js} +2 -2
  67. package/dist/scripts/{CKZJ2qae2.chunk.js.map → C_jUsStb2.chunk.js.map} +1 -1
  68. package/dist/scripts/{DSZkTUVU.chunk.js → CdNTKjPA.chunk.js} +2 -2
  69. package/dist/scripts/{DSZkTUVU.chunk.js.map → CdNTKjPA.chunk.js.map} +1 -1
  70. package/dist/scripts/{CfNYdg0m.chunk.js → ChDwbV8F.chunk.js} +2 -2
  71. package/dist/scripts/{CfNYdg0m.chunk.js.map → ChDwbV8F.chunk.js.map} +1 -1
  72. package/dist/scripts/{pOL5_XNC.chunk.js → Cq-TpkxJ.chunk.js} +2 -2
  73. package/dist/scripts/{pOL5_XNC.chunk.js.map → Cq-TpkxJ.chunk.js.map} +1 -1
  74. package/dist/scripts/{F1LOVRO_.chunk.js → CrCX606H.chunk.js} +2 -2
  75. package/dist/scripts/{F1LOVRO_.chunk.js.map → CrCX606H.chunk.js.map} +1 -1
  76. package/dist/scripts/{BtdygabL2.chunk.js → CrDpB82d2.chunk.js} +2 -2
  77. package/dist/scripts/{BtdygabL2.chunk.js.map → CrDpB82d2.chunk.js.map} +1 -1
  78. package/dist/scripts/{BvamDkjt2.chunk.js → Czivka682.chunk.js} +2 -2
  79. package/dist/scripts/{BvamDkjt2.chunk.js.map → Czivka682.chunk.js.map} +1 -1
  80. package/dist/scripts/{sViLex0Q.chunk.js → DEP_Z-S0.chunk.js} +2 -2
  81. package/dist/scripts/{sViLex0Q.chunk.js.map → DEP_Z-S0.chunk.js.map} +1 -1
  82. package/dist/scripts/{1iKkdpYv.chunk.js → DQBoqkL7.chunk.js} +2 -2
  83. package/dist/scripts/{1iKkdpYv.chunk.js.map → DQBoqkL7.chunk.js.map} +1 -1
  84. package/dist/scripts/{C2AXrtJf.chunk.js → DeXP2wHV.chunk.js} +2 -2
  85. package/dist/scripts/{C2AXrtJf.chunk.js.map → DeXP2wHV.chunk.js.map} +1 -1
  86. package/dist/scripts/{U0UyGd9c2.chunk.js → Df82DFJ62.chunk.js} +2 -2
  87. package/dist/scripts/{U0UyGd9c2.chunk.js.map → Df82DFJ62.chunk.js.map} +1 -1
  88. package/dist/scripts/{BlOKamx72.chunk.js → DgrEIxhT2.chunk.js} +2 -2
  89. package/dist/scripts/{BlOKamx72.chunk.js.map → DgrEIxhT2.chunk.js.map} +1 -1
  90. package/dist/scripts/{OBYDGOgI2.chunk.js → DhT0tpZm2.chunk.js} +2 -2
  91. package/dist/scripts/{OBYDGOgI2.chunk.js.map → DhT0tpZm2.chunk.js.map} +1 -1
  92. package/dist/scripts/{Ct_4zyE3.chunk.js → Dhe09-jE.chunk.js} +2 -2
  93. package/dist/scripts/{Ct_4zyE3.chunk.js.map → Dhe09-jE.chunk.js.map} +1 -1
  94. package/dist/scripts/{xEGWFFpD2.chunk.js → DhtgaF-y2.chunk.js} +2 -2
  95. package/dist/scripts/{xEGWFFpD2.chunk.js.map → DhtgaF-y2.chunk.js.map} +1 -1
  96. package/dist/scripts/{nMyWveQA2.chunk.js → Div1wl-R2.chunk.js} +2 -2
  97. package/dist/scripts/{nMyWveQA2.chunk.js.map → Div1wl-R2.chunk.js.map} +1 -1
  98. package/dist/scripts/{DG6L7zHU2.chunk.js → DjuXXgD-2.chunk.js} +2 -2
  99. package/dist/scripts/{DG6L7zHU2.chunk.js.map → DjuXXgD-2.chunk.js.map} +1 -1
  100. package/dist/scripts/{BAN6QE-X.chunk.js → Dkazht4Q.chunk.js} +2 -2
  101. package/dist/scripts/{BAN6QE-X.chunk.js.map → Dkazht4Q.chunk.js.map} +1 -1
  102. package/dist/scripts/{D_k-Kl3-2.chunk.js → DmmZ2XbB2.chunk.js} +2 -2
  103. package/dist/scripts/{D_k-Kl3-2.chunk.js.map → DmmZ2XbB2.chunk.js.map} +1 -1
  104. package/dist/scripts/{l7UAnIb0.chunk.js → Dr35AMvf.chunk.js} +2 -2
  105. package/dist/scripts/{l7UAnIb0.chunk.js.map → Dr35AMvf.chunk.js.map} +1 -1
  106. package/dist/scripts/{CK_CN_mA.chunk.js → HgLS_KfH.chunk.js} +2 -2
  107. package/dist/scripts/{CK_CN_mA.chunk.js.map → HgLS_KfH.chunk.js.map} +1 -1
  108. package/dist/scripts/{Pixwk-h-.chunk.js → W8Q7Z6fd.chunk.js} +2 -2
  109. package/dist/scripts/{Pixwk-h-.chunk.js.map → W8Q7Z6fd.chunk.js.map} +1 -1
  110. package/dist/scripts/{BzJLc19T2.chunk.js → XWykPl9h2.chunk.js} +2 -2
  111. package/dist/scripts/{BzJLc19T2.chunk.js.map → XWykPl9h2.chunk.js.map} +1 -1
  112. package/dist/scripts/{G-hiM6b42.chunk.js → _3n_0ch72.chunk.js} +2 -2
  113. package/dist/scripts/{G-hiM6b42.chunk.js.map → _3n_0ch72.chunk.js.map} +1 -1
  114. package/dist/scripts/{app-BGxmHvGl.js → app-CgkYY4K0.js} +3 -3
  115. package/dist/scripts/app-CgkYY4K0.js.map +1 -0
  116. package/dist/scripts/{BINz0dmF.chunk.js → go6zFmPK.chunk.js} +2 -2
  117. package/dist/scripts/{BINz0dmF.chunk.js.map → go6zFmPK.chunk.js.map} +1 -1
  118. package/dist/scripts/{DFXpg6rF.chunk.js → p5-1Ey-R.chunk.js} +2 -2
  119. package/dist/scripts/{DFXpg6rF.chunk.js.map → p5-1Ey-R.chunk.js.map} +1 -1
  120. package/dist/scripts/{BobZ5p_m2.chunk.js → qrcrWbQJ2.chunk.js} +2 -2
  121. package/dist/scripts/{BobZ5p_m2.chunk.js.map → qrcrWbQJ2.chunk.js.map} +1 -1
  122. package/package.json +1 -1
  123. package/dist/scripts/app-BGxmHvGl.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,St as n,b as r,d as i,mn as a,s as o,t as s,x as c}from"./CnnBLBPY.chunk.js";import{d as l,l as u}from"./D8clSITt.chunk.js";import{t as d}from"./GN6vNflP.chunk.js";import{t as f}from"./DRTfS6nN.chunk.js";import{I as p,M as m,U as h,Z as g}from"./app-BGxmHvGl.js";import{t as _}from"./DG6L7zHU2.chunk.js";import{t as v}from"./DuPL-nK72.chunk.js";import{t as y}from"./DrVEkVd5.chunk.js";import{t as b}from"./CK_CN_mA.chunk.js";import{t as x}from"./NtrZI2Ef.chunk.js";var S=a(t()),C=e(),w=`exchange.add`,T=d.encloseNamespace(w);function E(e){let t=v(),a=l(),d=u(g.config()),E=u(b.exchange()),D=u(_.video(e.id)),[O,k]=S.useState(!1),[A,j]=S.useState(!1),[M,N]=S.useState(null),{previewContext:P,clearPreviewContext:F}=x(e.id,!1);S.useEffect(()=>{!D.data||A||I()},[D.data?.id]);async function I(){j(!0);try{let e=await a(b.addVideo(E.data.id,D.data.id));k(!0),N(e.id),s.logUserAction({id:D.data.id,name:D.data.name},{actionType:r.Submit,descriptor:c.AddToWorkspace,location:i.Popup,entity:o.Video})}catch{t.error(T(`error`)),e.closePopup()}}function L(){e.closePopup(),P?.appLink&&(y.preventScrollTop(),n.trigger(P.appLink),F())}return(0,C.jsx)(h,{title:T(`title`),closePopup:L,showLoadingSpinner:!O,children:O&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`mx-auto w-75 mt-1 mb-2`,children:(0,C.jsx)(`img`,{src:f.General.CONFETTI,className:`img-fluid`,draggable:!1})}),(0,C.jsx)(`div`,{className:`text-center pb-3`,children:(0,C.jsx)(`h4`,{className:`mb-2`,children:(0,C.jsx)(p,{namespace:w,phrase:`added`})})}),(0,C.jsxs)(m,{children:[(0,C.jsx)(m.Cancel,{text:T(`close`),onClick:L,variant:`link`}),(0,C.jsx)(`a`,{href:`${d.data.liteUrl}/videos/${M}`,className:`btn btn-dark`,children:(0,C.jsx)(`span`,{className:`align-text-bottom me-1`,children:(0,C.jsx)(p,{namespace:w,phrase:`open`})})})]})]})})}export{E as ExchangeAddView};
2
- //# sourceMappingURL=F1LOVRO_.chunk.js.map
1
+ import{C as e,D as t,St as n,b as r,d as i,mn as a,s as o,t as s,x as c}from"./CnnBLBPY.chunk.js";import{d as l,l as u}from"./D8clSITt.chunk.js";import{t as d}from"./GN6vNflP.chunk.js";import{t as f}from"./DRTfS6nN.chunk.js";import{I as p,M as m,U as h,Z as g}from"./app-CgkYY4K0.js";import{t as _}from"./DjuXXgD-2.chunk.js";import{t as v}from"./BP0LMV9S2.chunk.js";import{t as y}from"./DrVEkVd5.chunk.js";import{t as b}from"./HgLS_KfH.chunk.js";import{t as x}from"./BQk9Mhlr.chunk.js";var S=a(t()),C=e(),w=`exchange.add`,T=d.encloseNamespace(w);function E(e){let t=v(),a=l(),d=u(g.config()),E=u(b.exchange()),D=u(_.video(e.id)),[O,k]=S.useState(!1),[A,j]=S.useState(!1),[M,N]=S.useState(null),{previewContext:P,clearPreviewContext:F}=x(e.id,!1);S.useEffect(()=>{!D.data||A||I()},[D.data?.id]);async function I(){j(!0);try{let e=await a(b.addVideo(E.data.id,D.data.id));k(!0),N(e.id),s.logUserAction({id:D.data.id,name:D.data.name},{actionType:r.Submit,descriptor:c.AddToWorkspace,location:i.Popup,entity:o.Video})}catch{t.error(T(`error`)),e.closePopup()}}function L(){e.closePopup(),P?.appLink&&(y.preventScrollTop(),n.trigger(P.appLink),F())}return(0,C.jsx)(h,{title:T(`title`),closePopup:L,showLoadingSpinner:!O,children:O&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`mx-auto w-75 mt-1 mb-2`,children:(0,C.jsx)(`img`,{src:f.General.CONFETTI,className:`img-fluid`,draggable:!1})}),(0,C.jsx)(`div`,{className:`text-center pb-3`,children:(0,C.jsx)(`h4`,{className:`mb-2`,children:(0,C.jsx)(p,{namespace:w,phrase:`added`})})}),(0,C.jsxs)(m,{children:[(0,C.jsx)(m.Cancel,{text:T(`close`),onClick:L,variant:`link`}),(0,C.jsx)(`a`,{href:`${d.data.liteUrl}/videos/${M}`,className:`btn btn-dark`,children:(0,C.jsx)(`span`,{className:`align-text-bottom me-1`,children:(0,C.jsx)(p,{namespace:w,phrase:`open`})})})]})]})})}export{E as ExchangeAddView};
2
+ //# sourceMappingURL=CrCX606H.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"F1LOVRO_.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-add/ExchangeAddView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Config, Library, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\n\nconst namespace = 'exchange.add';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeAddViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ExchangeAddView(props: ExchangeAddViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const [ added, setAdded ] = React.useState<boolean>(false);\n const [ adding, setAdding ] = React.useState<boolean>(false);\n const [ newVideoId, setNewVideoId ] = React.useState<string>(null);\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.id, false);\n\n React.useEffect(() => {\n if (!video.data || adding)\n return;\n\n addVideo();\n }, [video.data?.id]);\n\n async function addVideo() {\n setAdding(true);\n\n try {\n const newVideo = await fetchAsync<Video>(ExchangeRequests.addVideo(\n exchange.data.id,\n video.data.id\n ));\n\n setAdded(true);\n setNewVideoId(newVideo.id);\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: LocationContext.Popup,\n entity: EntityType.Video\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={!added}\n >\n {added &&\n <>\n <div className='mx-auto w-75 mt-1 mb-2'>\n <img src={ImageUrls.General.CONFETTI} className='img-fluid' draggable={false} />\n </div>\n\n <div className='text-center pb-3'>\n <h4 className='mb-2'>\n <Text namespace={namespace} phrase='added' />\n </h4>\n </div>\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('close')}\n onClick={closePopup}\n variant='link'\n />\n <a href={`${config.data.liteUrl}/videos/${newVideoId}`} className='btn btn-dark'>\n <span className='align-text-bottom me-1'>\n <Text namespace={namespace} phrase='open' />\n </span>\n </a>\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"yfAuBM,EAAY,eACZ,EAAY,EAAgB,iBAAiB,EAAU,CAM7D,SAAgB,EAAgB,EAA0C,CACxE,IAAM,EAAS,GAAW,CACpB,EAAa,GAAyB,CAEtC,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAC9D,EAAW,EAA8B,EAAiB,UAAU,CAAC,CACrE,EAAQ,EAA4B,EAAc,MAAM,EAAM,GAAG,CAAC,CAElE,CAAE,EAAO,GAAA,EAAmB,SAAkB,GAAM,CACpD,CAAE,EAAQ,GAAA,EAAoB,SAAkB,GAAM,CACtD,CAAE,EAAY,GAAA,EAAwB,SAAiB,KAAK,CAE5D,CAAE,iBAAgB,uBAAwB,EAAkB,EAAM,GAAI,GAAM,CAElF,EAAM,cAAgB,CAChB,CAAC,EAAM,MAAQ,GAGnB,GAAU,EACT,CAAC,EAAM,MAAM,GAAG,CAAC,CAEpB,eAAe,GAAW,CACxB,EAAU,GAAK,CAEf,GAAI,CACF,IAAM,EAAW,MAAM,EAAkB,EAAiB,SACxD,EAAS,KAAK,GACd,EAAM,KAAK,GACZ,CAAC,CAEF,EAAS,GAAK,CACd,EAAc,EAAS,GAAG,CAE1B,EAAgB,cACd,CAAE,GAAI,EAAM,KAAK,GAAI,KAAM,EAAM,KAAK,KAAM,CAC5C,CACE,WAAY,EAAW,OACvB,WAAY,EAAsB,eAClC,SAAU,EAAgB,MAC1B,OAAQ,EAAW,MACpB,CACF,MACK,CACN,EAAO,MAAM,EAAU,QAAQ,CAAC,CAChC,EAAM,YAAY,EAStB,SAAS,GAAmB,CAC1B,EAAM,YAAY,CAEb,GAAgB,UAGrB,EAAa,kBAAkB,CAC/B,EAAmB,QAAQ,EAAe,QAAQ,CAClD,GAAqB,EAGvB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,QAAQ,CACb,aACZ,mBAAoB,CAAC,WAEpB,IACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mCACb,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAU,QAAQ,SAAU,UAAU,YAAY,UAAW,GAAS,CAAA,CAC5E,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,iBACZ,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,QAAU,CAAA,CAC1C,CAAA,CACD,CAAA,EAEN,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,KAAM,EAAU,QAAQ,CACxB,QAAS,EACT,QAAQ,OACR,CAAA,EACF,EAAA,EAAA,KAAC,IAAD,CAAG,KAAM,GAAG,EAAO,KAAK,QAAQ,UAAU,IAAc,UAAU,yBAChE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACd,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,OAAS,CAAA,CACvC,CAAA,CACL,CAAA,CACS,CAAA,CAAA,CACd,CAAA,CAAA,CAEC,CAAA"}
1
+ {"version":3,"file":"CrCX606H.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-add/ExchangeAddView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Config, Library, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\n\nconst namespace = 'exchange.add';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeAddViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ExchangeAddView(props: ExchangeAddViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const [ added, setAdded ] = React.useState<boolean>(false);\n const [ adding, setAdding ] = React.useState<boolean>(false);\n const [ newVideoId, setNewVideoId ] = React.useState<string>(null);\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.id, false);\n\n React.useEffect(() => {\n if (!video.data || adding)\n return;\n\n addVideo();\n }, [video.data?.id]);\n\n async function addVideo() {\n setAdding(true);\n\n try {\n const newVideo = await fetchAsync<Video>(ExchangeRequests.addVideo(\n exchange.data.id,\n video.data.id\n ));\n\n setAdded(true);\n setNewVideoId(newVideo.id);\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: LocationContext.Popup,\n entity: EntityType.Video\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={!added}\n >\n {added &&\n <>\n <div className='mx-auto w-75 mt-1 mb-2'>\n <img src={ImageUrls.General.CONFETTI} className='img-fluid' draggable={false} />\n </div>\n\n <div className='text-center pb-3'>\n <h4 className='mb-2'>\n <Text namespace={namespace} phrase='added' />\n </h4>\n </div>\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('close')}\n onClick={closePopup}\n variant='link'\n />\n <a href={`${config.data.liteUrl}/videos/${newVideoId}`} className='btn btn-dark'>\n <span className='align-text-bottom me-1'>\n <Text namespace={namespace} phrase='open' />\n </span>\n </a>\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"yfAuBM,EAAY,eACZ,EAAY,EAAgB,iBAAiB,EAAU,CAM7D,SAAgB,EAAgB,EAA0C,CACxE,IAAM,EAAS,GAAW,CACpB,EAAa,GAAyB,CAEtC,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAC9D,EAAW,EAA8B,EAAiB,UAAU,CAAC,CACrE,EAAQ,EAA4B,EAAc,MAAM,EAAM,GAAG,CAAC,CAElE,CAAE,EAAO,GAAA,EAAmB,SAAkB,GAAM,CACpD,CAAE,EAAQ,GAAA,EAAoB,SAAkB,GAAM,CACtD,CAAE,EAAY,GAAA,EAAwB,SAAiB,KAAK,CAE5D,CAAE,iBAAgB,uBAAwB,EAAkB,EAAM,GAAI,GAAM,CAElF,EAAM,cAAgB,CAChB,CAAC,EAAM,MAAQ,GAGnB,GAAU,EACT,CAAC,EAAM,MAAM,GAAG,CAAC,CAEpB,eAAe,GAAW,CACxB,EAAU,GAAK,CAEf,GAAI,CACF,IAAM,EAAW,MAAM,EAAkB,EAAiB,SACxD,EAAS,KAAK,GACd,EAAM,KAAK,GACZ,CAAC,CAEF,EAAS,GAAK,CACd,EAAc,EAAS,GAAG,CAE1B,EAAgB,cACd,CAAE,GAAI,EAAM,KAAK,GAAI,KAAM,EAAM,KAAK,KAAM,CAC5C,CACE,WAAY,EAAW,OACvB,WAAY,EAAsB,eAClC,SAAU,EAAgB,MAC1B,OAAQ,EAAW,MACpB,CACF,MACK,CACN,EAAO,MAAM,EAAU,QAAQ,CAAC,CAChC,EAAM,YAAY,EAStB,SAAS,GAAmB,CAC1B,EAAM,YAAY,CAEb,GAAgB,UAGrB,EAAa,kBAAkB,CAC/B,EAAmB,QAAQ,EAAe,QAAQ,CAClD,GAAqB,EAGvB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,QAAQ,CACb,aACZ,mBAAoB,CAAC,WAEpB,IACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mCACb,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAU,QAAQ,SAAU,UAAU,YAAY,UAAW,GAAS,CAAA,CAC5E,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,iBACZ,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,QAAU,CAAA,CAC1C,CAAA,CACD,CAAA,EAEN,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,KAAM,EAAU,QAAQ,CACxB,QAAS,EACT,QAAQ,OACR,CAAA,EACF,EAAA,EAAA,KAAC,IAAD,CAAG,KAAM,GAAG,EAAO,KAAK,QAAQ,UAAU,IAAc,UAAU,yBAChE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACd,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,OAAS,CAAA,CACvC,CAAA,CACL,CAAA,CACS,CAAA,CAAA,CACd,CAAA,CAAA,CAEC,CAAA"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,S as n,St as r,b as i,d as a,mn as o,s,t as c,y as l}from"./CnnBLBPY.chunk.js";import{_ as u}from"./DW0w8_XN.chunk.js";import{d,l as f}from"./D8clSITt.chunk.js";import{t as p}from"./GN6vNflP.chunk.js";import{n as m,t as h}from"./Dn3hwC-o.chunk.js";import{t as g}from"./DRTfS6nN.chunk.js";import{t as _}from"./CRRZVEmA.chunk.js";import{A as v,I as y,J as b,M as x,U as S}from"./app-BGxmHvGl.js";import{t as C}from"./DuPL-nK72.chunk.js";import{t as w}from"./nMyWveQA2.chunk.js";import{n as T,t as E}from"./C6jF43q92.chunk.js";var D=o(t()),O={selected:`_selected_ii58d_1`,disabled:`_disabled_ii58d_4`},k=e();function A(e){function t(){e.option?.disabled||e.onSelect(e.option)}let n=`text-center cursor-pointer p-3 border rounded-3 mx-2 user-select-none w-50`;return e.selected&&(n+=` border-info ${O.selected}`),e.option?.disabled&&(n+=` ${O.disabled}`),(0,k.jsxs)(u,{onClick:t,className:n,children:[e.option?.imageUrl&&(0,k.jsx)(`img`,{src:e.option.imageUrl,className:`img-fluid my-3 ${e.option.imageClassName??``}`,draggable:!1}),e.option?.title&&(0,k.jsx)(`h2`,{className:`h3`,children:e.option.title}),e.option?.description&&(0,k.jsx)(`p`,{className:`mb-0`,dangerouslySetInnerHTML:{__html:e.option.description}}),e.children]})}var j=p.encloseNamespace(`tv.addRequests`);function M(e,t){let o=d(),u=C(),p=f(_.currentUser()),g=f(_.workspace()),y=f(E.program(e)),x=f(E.region(t)),S=f(y.data&&p.data&&E.workspaceVideo(y.data.id,p.data.id,p.data.customerId));async function w(){try{await o(E.createAdFreeRequest({programId:y.data.id,regionCode:x.data.code,userId:p.data.id,customerId:p.data.customerId})),u.success({heading:v.Success,message:j(`requestAdFreeSuccess`,{video:y.data.title}),type:b.Success}),r.trigger({application:m.TV,action:h.Tv.AD_FREE_REQUEST,args:[x.data.code,y.data.id]}),c.logUserAction({id:y.data.id,name:y.data.title},{actionType:i.Submit,entity:s.Video,descriptor:l.AdFreeRequest,location:a.Popup,workflowPhase:n.Complete})}catch(e){let t=e.responseJSON?.message;if(t){let e=JSON.parse(t);u.error(j(e.Type,{video:y.data.title}))}else u.error(j(`error`))}}async function T(){if(S.data.exists&&S.data.hasAdFree){r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,params:{alreadyAdded:!0}});return}try{let e={id:y.data.id,userId:p.data.id,customerId:p.data.customerId};await o(E.addAdFreeVideo(e,y.data.id)),u.success({heading:v.Success,message:j(`addAdFreeSuccess`,{video:y.data.title}),type:b.Success}),r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,args:[x.data.code,y.data.id]}),c.logUserAction({id:y.data.id,name:y.data.title},{actionType:i.Submit,entity:s.Video,descriptor:l.AddAdFreeVideo,location:a.Popup,workflowPhase:n.Complete})}catch{u.error(j(`error`))}}async function D(){if(S.data.exists){r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,params:{alreadyAdded:!0}});return}try{let e={userId:p.data.id,customerId:p.data.customerId,globalId:y.data.globalId,libraryId:g.data.id};await o(E.addFullVideo(e,y.data.id)),u.success({heading:v.Success,message:j(`addFullSuccess`,{video:y.data.title}),type:b.Success}),r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,args:[x.data.code,y.data.id]}),c.logUserAction({id:y.data.id,name:y.data.title},{actionType:i.Submit,entity:s.Video,descriptor:l.AddFullVideo,location:a.Popup,workflowPhase:n.Complete})}catch{u.error(j(`error`))}}return{requestAdFreeVideo:w,addAdFreeVideo:T,addFullVideo:D}}var N={circle:`_circle_1yxtg_1`},P=`tv.add`,F=p.encloseNamespace(P),I={id:`ad-free`,title:`adFreeTitle`,description:`adFreeDescription`,imageUrl:g.General.MOUNTAINS_FRAMED},L={id:`request-ad-free`,title:`adFreeTitle`,imageUrl:g.General.MOUNTAINS_FRAMED},R={id:`full-video`,title:`fullVideoTitle`,description:`fullVideoDescription`,imageUrl:g.General.ANNOUNCEMENT_FRAMED};function z(e){let t=f(_.currentUser()),n=f(E.program(e.id)),i=f(t.data&&E.adFreeCredits(t.data.id,t.data.customerId,e.region)),{requestAdFreeVideo:a,addAdFreeVideo:o,addFullVideo:s}=M(e.id,e.region);w(n.statusCode);let[c,l]=D.useState(null),u=!Number.isNaN(e.currentTime);function d(){c&&(c.id===R.id&&s(),c.id===I.id&&o(),c.id===L.id&&a())}function p(){if(!u){e.closePopup();return}r.trigger({application:m.TV,action:h.Tv.PREVIEW,args:[e.region,n.data.id],params:{currentTime:e.currentTime}})}let g=i.data&&i.data.userRequests<i.data.maxAvailableCredit,v=i.data&&i.data.maxAvailableCredit-i.data.userRequests;D.useEffect(()=>{i.hasCompleted&&(g||l(R))},[i,g]);let b=t.hasCompleted&&n.hasCompleted&&i.hasCompleted,C=c?.id===L.id&&T.isHolidayPeriod();return(0,k.jsxs)(S,{size:`lg`,title:F(`title`),showLoadingSpinner:!b,closePopup:e.closePopup,children:[b&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`div`,{className:`d-flex mb-3 mx-n2`,children:[n.data.hasAdsFree&&(0,k.jsxs)(A,{option:{id:I.id},onSelect:l,selected:c?.id===I.id,children:[(0,k.jsx)(`img`,{src:I.imageUrl,className:`img-fluid`,draggable:!1}),(0,k.jsx)(`h2`,{className:`h4 mb-1`,children:(0,k.jsx)(y,{namespace:P,phrase:I.title})}),(0,k.jsx)(`p`,{className:`mb-2`,children:(0,k.jsx)(y,{namespace:P,phrase:I.description})})]}),!n.data.hasAdsFree&&(0,k.jsxs)(A,{option:{id:L.id,disabled:!g},onSelect:l,selected:c?.id===L.id,children:[(0,k.jsx)(`img`,{src:L.imageUrl,className:`img-fluid`,draggable:!1}),(0,k.jsxs)(`div`,{className:`d-flex justify-content-center align-items-center mb-1`,children:[(0,k.jsx)(`h2`,{className:`h4 mb-1`,children:(0,k.jsx)(y,{namespace:P,phrase:L.title})}),(0,k.jsx)(`span`,{className:`badge bg-dark rounded-circle ms-2 ${N.circle}`,children:v})]}),(0,k.jsx)(`p`,{className:`mb-2`,children:(0,k.jsx)(y,{namespace:P,phrase:g?`requestAdFreeDescription`:`noRequestsDescription`})})]}),(0,k.jsxs)(A,{option:{id:R.id},onSelect:l,selected:c?.id===R.id,children:[(0,k.jsx)(`img`,{src:R.imageUrl,className:`img-fluid`,draggable:!1}),(0,k.jsx)(`h2`,{className:`h4 mb-1`,children:(0,k.jsx)(y,{namespace:P,phrase:R.title})}),(0,k.jsx)(`p`,{className:`mb-2`,children:(0,k.jsx)(y,{namespace:P,phrase:R.description})})]})]}),C&&(0,k.jsxs)(`div`,{className:`alert alert-warning`,role:`alert`,children:[(0,k.jsx)(`h3`,{className:`h5`,children:(0,k.jsx)(y,{namespace:P,phrase:`adFreeAlertHeading`})}),(0,k.jsx)(`p`,{className:`m-0`,children:(0,k.jsx)(y,{namespace:P,phrase:`adFreeAlertBody`})})]})]}),(0,k.jsxs)(x,{children:[(0,k.jsx)(x.Cancel,{text:F(u?`back`:`close`),onClick:p,variant:`link`}),(0,k.jsx)(x.Submit,{text:F(`continue`),onClick:d,variant:`dark`,disabled:!c})]})]})}export{z as TvAddView};
2
- //# sourceMappingURL=BtdygabL2.chunk.js.map
1
+ import{C as e,D as t,S as n,St as r,b as i,d as a,mn as o,s,t as c,y as l}from"./CnnBLBPY.chunk.js";import{_ as u}from"./DW0w8_XN.chunk.js";import{d,l as f}from"./D8clSITt.chunk.js";import{t as p}from"./GN6vNflP.chunk.js";import{n as m,t as h}from"./Dn3hwC-o.chunk.js";import{t as g}from"./DRTfS6nN.chunk.js";import{t as _}from"./CRRZVEmA.chunk.js";import{A as v,I as y,J as b,M as x,U as S}from"./app-CgkYY4K0.js";import{t as C}from"./BP0LMV9S2.chunk.js";import{t as w}from"./Div1wl-R2.chunk.js";import{n as T,t as E}from"./C6jF43q92.chunk.js";var D=o(t()),O={selected:`_selected_ii58d_1`,disabled:`_disabled_ii58d_4`},k=e();function A(e){function t(){e.option?.disabled||e.onSelect(e.option)}let n=`text-center cursor-pointer p-3 border rounded-3 mx-2 user-select-none w-50`;return e.selected&&(n+=` border-info ${O.selected}`),e.option?.disabled&&(n+=` ${O.disabled}`),(0,k.jsxs)(u,{onClick:t,className:n,children:[e.option?.imageUrl&&(0,k.jsx)(`img`,{src:e.option.imageUrl,className:`img-fluid my-3 ${e.option.imageClassName??``}`,draggable:!1}),e.option?.title&&(0,k.jsx)(`h2`,{className:`h3`,children:e.option.title}),e.option?.description&&(0,k.jsx)(`p`,{className:`mb-0`,dangerouslySetInnerHTML:{__html:e.option.description}}),e.children]})}var j=p.encloseNamespace(`tv.addRequests`);function M(e,t){let o=d(),u=C(),p=f(_.currentUser()),g=f(_.workspace()),y=f(E.program(e)),x=f(E.region(t)),S=f(y.data&&p.data&&E.workspaceVideo(y.data.id,p.data.id,p.data.customerId));async function w(){try{await o(E.createAdFreeRequest({programId:y.data.id,regionCode:x.data.code,userId:p.data.id,customerId:p.data.customerId})),u.success({heading:v.Success,message:j(`requestAdFreeSuccess`,{video:y.data.title}),type:b.Success}),r.trigger({application:m.TV,action:h.Tv.AD_FREE_REQUEST,args:[x.data.code,y.data.id]}),c.logUserAction({id:y.data.id,name:y.data.title},{actionType:i.Submit,entity:s.Video,descriptor:l.AdFreeRequest,location:a.Popup,workflowPhase:n.Complete})}catch(e){let t=e.responseJSON?.message;if(t){let e=JSON.parse(t);u.error(j(e.Type,{video:y.data.title}))}else u.error(j(`error`))}}async function T(){if(S.data.exists&&S.data.hasAdFree){r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,params:{alreadyAdded:!0}});return}try{let e={id:y.data.id,userId:p.data.id,customerId:p.data.customerId};await o(E.addAdFreeVideo(e,y.data.id)),u.success({heading:v.Success,message:j(`addAdFreeSuccess`,{video:y.data.title}),type:b.Success}),r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,args:[x.data.code,y.data.id]}),c.logUserAction({id:y.data.id,name:y.data.title},{actionType:i.Submit,entity:s.Video,descriptor:l.AddAdFreeVideo,location:a.Popup,workflowPhase:n.Complete})}catch{u.error(j(`error`))}}async function D(){if(S.data.exists){r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,params:{alreadyAdded:!0}});return}try{let e={userId:p.data.id,customerId:p.data.customerId,globalId:y.data.globalId,libraryId:g.data.id};await o(E.addFullVideo(e,y.data.id)),u.success({heading:v.Success,message:j(`addFullSuccess`,{video:y.data.title}),type:b.Success}),r.trigger({application:m.TV,action:h.Tv.ALREADY_ADDED,args:[x.data.code,y.data.id]}),c.logUserAction({id:y.data.id,name:y.data.title},{actionType:i.Submit,entity:s.Video,descriptor:l.AddFullVideo,location:a.Popup,workflowPhase:n.Complete})}catch{u.error(j(`error`))}}return{requestAdFreeVideo:w,addAdFreeVideo:T,addFullVideo:D}}var N={circle:`_circle_1yxtg_1`},P=`tv.add`,F=p.encloseNamespace(P),I={id:`ad-free`,title:`adFreeTitle`,description:`adFreeDescription`,imageUrl:g.General.MOUNTAINS_FRAMED},L={id:`request-ad-free`,title:`adFreeTitle`,imageUrl:g.General.MOUNTAINS_FRAMED},R={id:`full-video`,title:`fullVideoTitle`,description:`fullVideoDescription`,imageUrl:g.General.ANNOUNCEMENT_FRAMED};function z(e){let t=f(_.currentUser()),n=f(E.program(e.id)),i=f(t.data&&E.adFreeCredits(t.data.id,t.data.customerId,e.region)),{requestAdFreeVideo:a,addAdFreeVideo:o,addFullVideo:s}=M(e.id,e.region);w(n.statusCode);let[c,l]=D.useState(null),u=!Number.isNaN(e.currentTime);function d(){c&&(c.id===R.id&&s(),c.id===I.id&&o(),c.id===L.id&&a())}function p(){if(!u){e.closePopup();return}r.trigger({application:m.TV,action:h.Tv.PREVIEW,args:[e.region,n.data.id],params:{currentTime:e.currentTime}})}let g=i.data&&i.data.userRequests<i.data.maxAvailableCredit,v=i.data&&i.data.maxAvailableCredit-i.data.userRequests;D.useEffect(()=>{i.hasCompleted&&(g||l(R))},[i,g]);let b=t.hasCompleted&&n.hasCompleted&&i.hasCompleted,C=c?.id===L.id&&T.isHolidayPeriod();return(0,k.jsxs)(S,{size:`lg`,title:F(`title`),showLoadingSpinner:!b,closePopup:e.closePopup,children:[b&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`div`,{className:`d-flex mb-3 mx-n2`,children:[n.data.hasAdsFree&&(0,k.jsxs)(A,{option:{id:I.id},onSelect:l,selected:c?.id===I.id,children:[(0,k.jsx)(`img`,{src:I.imageUrl,className:`img-fluid`,draggable:!1}),(0,k.jsx)(`h2`,{className:`h4 mb-1`,children:(0,k.jsx)(y,{namespace:P,phrase:I.title})}),(0,k.jsx)(`p`,{className:`mb-2`,children:(0,k.jsx)(y,{namespace:P,phrase:I.description})})]}),!n.data.hasAdsFree&&(0,k.jsxs)(A,{option:{id:L.id,disabled:!g},onSelect:l,selected:c?.id===L.id,children:[(0,k.jsx)(`img`,{src:L.imageUrl,className:`img-fluid`,draggable:!1}),(0,k.jsxs)(`div`,{className:`d-flex justify-content-center align-items-center mb-1`,children:[(0,k.jsx)(`h2`,{className:`h4 mb-1`,children:(0,k.jsx)(y,{namespace:P,phrase:L.title})}),(0,k.jsx)(`span`,{className:`badge bg-dark rounded-circle ms-2 ${N.circle}`,children:v})]}),(0,k.jsx)(`p`,{className:`mb-2`,children:(0,k.jsx)(y,{namespace:P,phrase:g?`requestAdFreeDescription`:`noRequestsDescription`})})]}),(0,k.jsxs)(A,{option:{id:R.id},onSelect:l,selected:c?.id===R.id,children:[(0,k.jsx)(`img`,{src:R.imageUrl,className:`img-fluid`,draggable:!1}),(0,k.jsx)(`h2`,{className:`h4 mb-1`,children:(0,k.jsx)(y,{namespace:P,phrase:R.title})}),(0,k.jsx)(`p`,{className:`mb-2`,children:(0,k.jsx)(y,{namespace:P,phrase:R.description})})]})]}),C&&(0,k.jsxs)(`div`,{className:`alert alert-warning`,role:`alert`,children:[(0,k.jsx)(`h3`,{className:`h5`,children:(0,k.jsx)(y,{namespace:P,phrase:`adFreeAlertHeading`})}),(0,k.jsx)(`p`,{className:`m-0`,children:(0,k.jsx)(y,{namespace:P,phrase:`adFreeAlertBody`})})]})]}),(0,k.jsxs)(x,{children:[(0,k.jsx)(x.Cancel,{text:F(u?`back`:`close`),onClick:p,variant:`link`}),(0,k.jsx)(x.Submit,{text:F(`continue`),onClick:d,variant:`dark`,disabled:!c})]})]})}export{z as TvAddView};
2
+ //# sourceMappingURL=CrDpB82d2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BtdygabL2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/choices-popup/components/choices/choices.module.scss","../../../../libs/shared/src/components/choices-popup/components/choices/Choices.tsx","../../src/apps/tv/hooks/useTvAddRequests.ts","../../src/apps/tv/views/tv-add/tv-add.module.scss","../../src/apps/tv/views/tv-add/TvAddView.tsx"],"sourcesContent":[":local {\n .selected {\n background-color: $light-blue;\n }\n\n .disabled {\n background-color: $gray-100;\n filter: grayscale(1);\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './choices.module.scss';\n\nexport interface ChoicePopupOption {\n id: string;\n title?: string;\n description?: string;\n imageUrl?: string;\n disabled?: boolean;\n imageClassName?: string;\n}\n\ninterface ChoiceProps {\n option?: ChoicePopupOption;\n selected: boolean | ((selectedChoice: boolean) => boolean);\n onSelect: (option: ChoicePopupOption) => void;\n}\n\nexport function Choice(props: React.PropsWithChildren<ChoiceProps>): React.ReactElement {\n function onSelect(): void {\n if (props.option?.disabled)\n return;\n\n props.onSelect(props.option);\n }\n\n let className = 'text-center cursor-pointer p-3 border rounded-3 mx-2 user-select-none w-50';\n\n if (props.selected)\n className += ` border-info ${styles.selected}`;\n\n if (props.option?.disabled)\n className += ` ${styles.disabled}`;\n\n return (\n <DivButton onClick={onSelect} className={className}>\n {props.option?.imageUrl && <img src={props.option.imageUrl} className={`img-fluid my-3 ${props.option.imageClassName ?? ''}`} draggable={false} />}\n {props.option?.title && <h2 className='h3'>{props.option.title}</h2>}\n {props.option?.description && <p className='mb-0' dangerouslySetInnerHTML={{ __html: props.option.description }}></p>}\n {props.children}\n </DivButton>\n );\n}\n\ninterface ChoicesProps {\n options: [ChoicePopupOption, ChoicePopupOption];\n selection: ChoicePopupOption | null;\n selectOption: (option: ChoicePopupOption) => void;\n}\n\nexport function Choices(props: ChoicesProps): React.ReactElement {\n return (\n <div className='d-flex mb-3 mx-n2'>\n {props.options.map(o => (\n <Choice\n key={o.id}\n option={o}\n selected={props.selection?.id === o.id}\n onSelect={props.selectOption}\n />\n ))}\n </div>\n );\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, TvDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\nimport { DefaultAlertHeading } from 'shared/constants/DefaultAlertHeading';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvWorkspaceVideoResponse } from 'apps/tv/interfaces/responses/TvWorkspaceVideoResponse';\n\nconst namespace = 'tv.addRequests';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useTvAddRequests(programId: string, regionCode: string) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const workspace = Flight.useBasicFetch<Library>(UserRequests.workspace());\n\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(programId));\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(regionCode));\n const workspaceVideo = Flight.useBasicFetch<TvWorkspaceVideoResponse>(\n program.data && currentUser.data &&\n TvRequests.workspaceVideo(\n program.data.id,\n currentUser.data.id,\n currentUser.data.customerId\n )\n );\n \n async function requestAdFreeVideo(): Promise<void> {\n try {\n await fetchAsync(TvRequests.createAdFreeRequest({\n programId: program.data.id,\n regionCode: region.data.code,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId\n }));\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('requestAdFreeSuccess', { video: program.data.title }),\n type: AlertType.Success\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.AD_FREE_REQUEST,\n args: [ region.data.code, program.data.id ]\n });\n\n AnalyticsHelper.logUserAction(\n { id: program.data.id, name: program.data.title },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: TvDescriptor.AdFreeRequest,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch (error) {\n const errorMessage = error.responseJSON?.message;\n if (errorMessage) {\n const parsedErrorMessage = JSON.parse(errorMessage);\n alerts.error(getPhrase(parsedErrorMessage.Type, { video: program.data.title }));\n } else {\n alerts.error(getPhrase('error'));\n }\n }\n }\n\n async function addAdFreeVideo() {\n if (workspaceVideo.data.exists && workspaceVideo.data.hasAdFree) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n params: { alreadyAdded: true }\n });\n return;\n }\n\n try {\n const data = {\n id: program.data.id,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId\n };\n await fetchAsync(TvRequests.addAdFreeVideo(data, program.data.id));\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('addAdFreeSuccess', { video: program.data.title }),\n type: AlertType.Success\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n args: [ region.data.code, program.data.id ]\n });\n\n AnalyticsHelper.logUserAction(\n { id: program.data.id, name: program.data.title },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: TvDescriptor.AddAdFreeVideo,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n async function addFullVideo() {\n if (workspaceVideo.data.exists) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n params: { alreadyAdded: true }\n });\n return;\n }\n\n try {\n const data = {\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n globalId: program.data.globalId,\n libraryId: workspace.data.id\n };\n await fetchAsync(TvRequests.addFullVideo(data, program.data.id));\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('addFullSuccess', { video: program.data.title }),\n type: AlertType.Success\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n args: [ region.data.code, program.data.id ]\n });\n\n AnalyticsHelper.logUserAction(\n { id: program.data.id, name: program.data.title },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: TvDescriptor.AddFullVideo,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n return { requestAdFreeVideo, addAdFreeVideo, addFullVideo };\n}\n",":local {\n .circle {\n min-height: map-get($spacers, 3);\n min-width: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Choice, ChoicePopupOption } from 'libs/shared/components/choices-popup/components/choices/Choices';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useTvAddRequests } from 'apps/tv/hooks/useTvAddRequests';\nimport { AdFreeCredits } from 'apps/tv/interfaces/models/AdFreeCredits';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\n\nimport styles from './tv-add.module.scss';\n\nconst namespace = 'tv.add';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst AD_FREE = {\n id: 'ad-free',\n title: 'adFreeTitle',\n description: 'adFreeDescription',\n imageUrl: ImageUrls.General.MOUNTAINS_FRAMED\n};\n\nconst REQUEST_AD_FREE = {\n id: 'request-ad-free',\n title: 'adFreeTitle',\n imageUrl: ImageUrls.General.MOUNTAINS_FRAMED\n};\n\nconst FULL_VIDEO = {\n id: 'full-video',\n title: 'fullVideoTitle',\n description: 'fullVideoDescription',\n imageUrl: ImageUrls.General.ANNOUNCEMENT_FRAMED\n};\n\ninterface TvAddViewProps extends PopupViewProps {\n id: string;\n region: string;\n currentTime: number;\n}\n\nexport function TvAddView(props: TvAddViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(props.id));\n const adFreeCredits = Flight.useBasicFetch<AdFreeCredits>(\n currentUser.data &&\n TvRequests.adFreeCredits(\n currentUser.data.id,\n currentUser.data.customerId,\n props.region\n )\n );\n\n const { requestAdFreeVideo, addAdFreeVideo, addFullVideo } = useTvAddRequests(props.id, props.region);\n\n useHandleDialogError(program.statusCode);\n\n const [ selectedChoice, setSelectedChoice ] = React.useState<ChoicePopupOption>(null);\n\n const isFromPreview = !Number.isNaN(props.currentTime);\n\n function onClickContinue(): void {\n if (!selectedChoice)\n return;\n\n if (selectedChoice.id === FULL_VIDEO.id) {\n addFullVideo();\n }\n \n if (selectedChoice.id === AD_FREE.id) {\n addAdFreeVideo();\n }\n\n if (selectedChoice.id === REQUEST_AD_FREE.id) {\n requestAdFreeVideo();\n }\n }\n\n function onClickBack(): void {\n if (!isFromPreview) {\n props.closePopup();\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ props.region, program.data.id ],\n params: {\n currentTime: props.currentTime\n }\n });\n }\n\n const hasEnoughCredits = adFreeCredits.data &&\n (adFreeCredits.data.userRequests < adFreeCredits.data.maxAvailableCredit);\n const requestsRemaining = adFreeCredits.data &&\n (adFreeCredits.data.maxAvailableCredit - adFreeCredits.data.userRequests);\n\n React.useEffect(() => {\n if (!adFreeCredits.hasCompleted)\n return;\n \n if (hasEnoughCredits)\n return;\n\n setSelectedChoice(FULL_VIDEO);\n }, [ adFreeCredits, hasEnoughCredits ]);\n\n const hasLoaded = (\n currentUser.hasCompleted &&\n program.hasCompleted &&\n adFreeCredits.hasCompleted\n );\n\n const showAdFreeAlert = selectedChoice?.id === REQUEST_AD_FREE.id && TvUtils.isHolidayPeriod();\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={!hasLoaded}\n closePopup={props.closePopup}\n >\n {hasLoaded &&\n <>\n <div className='d-flex mb-3 mx-n2'>\n {program.data.hasAdsFree &&\n <Choice\n option={{ id: AD_FREE.id }}\n onSelect={setSelectedChoice}\n selected={selectedChoice?.id === AD_FREE.id}\n >\n <img src={AD_FREE.imageUrl} className='img-fluid' draggable={false} />\n <h2 className='h4 mb-1'><Text namespace={namespace} phrase={AD_FREE.title} /></h2>\n <p className='mb-2'><Text namespace={namespace} phrase={AD_FREE.description} /></p>\n </Choice>\n }\n \n {!program.data.hasAdsFree &&\n <Choice\n option={{ id: REQUEST_AD_FREE.id, disabled: !hasEnoughCredits }}\n onSelect={setSelectedChoice}\n selected={selectedChoice?.id === REQUEST_AD_FREE.id}\n >\n <img src={REQUEST_AD_FREE.imageUrl} className='img-fluid' draggable={false} />\n <div className='d-flex justify-content-center align-items-center mb-1'>\n <h2 className='h4 mb-1'><Text namespace={namespace} phrase={REQUEST_AD_FREE.title} /></h2>\n <span className={`badge bg-dark rounded-circle ms-2 ${styles.circle}`}>{requestsRemaining}</span>\n </div>\n <p className='mb-2'><Text namespace={namespace} phrase={hasEnoughCredits ? 'requestAdFreeDescription' : 'noRequestsDescription'} /></p>\n </Choice>\n }\n\n <Choice\n option={{ id: FULL_VIDEO.id }}\n onSelect={setSelectedChoice}\n selected={selectedChoice?.id === FULL_VIDEO.id}\n >\n <img src={FULL_VIDEO.imageUrl} className='img-fluid' draggable={false} />\n <h2 className='h4 mb-1'><Text namespace={namespace} phrase={FULL_VIDEO.title} /></h2>\n <p className='mb-2'><Text namespace={namespace} phrase={FULL_VIDEO.description} /></p>\n </Choice>\n </div>\n\n {showAdFreeAlert &&\n <div className='alert alert-warning' role='alert'>\n <h3 className='h5'>\n <Text namespace={namespace} phrase='adFreeAlertHeading' />\n </h3>\n <p className='m-0'>\n <Text namespace={namespace} phrase='adFreeAlertBody' />\n </p>\n </div>\n }\n </>\n }\n \n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase(isFromPreview ? 'back' : 'close')}\n onClick={onClickBack}\n variant='link'\n />\n <PopupButtons.Submit\n text={getPhrase('continue')}\n onClick={onClickContinue}\n variant='dark'\n disabled={!selectedChoice}\n />\n </PopupButtons>\n </Popup>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CrDpB82d2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/choices-popup/components/choices/choices.module.scss","../../../../libs/shared/src/components/choices-popup/components/choices/Choices.tsx","../../src/apps/tv/hooks/useTvAddRequests.ts","../../src/apps/tv/views/tv-add/tv-add.module.scss","../../src/apps/tv/views/tv-add/TvAddView.tsx"],"sourcesContent":[":local {\n .selected {\n background-color: $light-blue;\n }\n\n .disabled {\n background-color: $gray-100;\n filter: grayscale(1);\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './choices.module.scss';\n\nexport interface ChoicePopupOption {\n id: string;\n title?: string;\n description?: string;\n imageUrl?: string;\n disabled?: boolean;\n imageClassName?: string;\n}\n\ninterface ChoiceProps {\n option?: ChoicePopupOption;\n selected: boolean | ((selectedChoice: boolean) => boolean);\n onSelect: (option: ChoicePopupOption) => void;\n}\n\nexport function Choice(props: React.PropsWithChildren<ChoiceProps>): React.ReactElement {\n function onSelect(): void {\n if (props.option?.disabled)\n return;\n\n props.onSelect(props.option);\n }\n\n let className = 'text-center cursor-pointer p-3 border rounded-3 mx-2 user-select-none w-50';\n\n if (props.selected)\n className += ` border-info ${styles.selected}`;\n\n if (props.option?.disabled)\n className += ` ${styles.disabled}`;\n\n return (\n <DivButton onClick={onSelect} className={className}>\n {props.option?.imageUrl && <img src={props.option.imageUrl} className={`img-fluid my-3 ${props.option.imageClassName ?? ''}`} draggable={false} />}\n {props.option?.title && <h2 className='h3'>{props.option.title}</h2>}\n {props.option?.description && <p className='mb-0' dangerouslySetInnerHTML={{ __html: props.option.description }}></p>}\n {props.children}\n </DivButton>\n );\n}\n\ninterface ChoicesProps {\n options: [ChoicePopupOption, ChoicePopupOption];\n selection: ChoicePopupOption | null;\n selectOption: (option: ChoicePopupOption) => void;\n}\n\nexport function Choices(props: ChoicesProps): React.ReactElement {\n return (\n <div className='d-flex mb-3 mx-n2'>\n {props.options.map(o => (\n <Choice\n key={o.id}\n option={o}\n selected={props.selection?.id === o.id}\n onSelect={props.selectOption}\n />\n ))}\n </div>\n );\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, TvDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\nimport { DefaultAlertHeading } from 'shared/constants/DefaultAlertHeading';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvWorkspaceVideoResponse } from 'apps/tv/interfaces/responses/TvWorkspaceVideoResponse';\n\nconst namespace = 'tv.addRequests';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useTvAddRequests(programId: string, regionCode: string) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const workspace = Flight.useBasicFetch<Library>(UserRequests.workspace());\n\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(programId));\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(regionCode));\n const workspaceVideo = Flight.useBasicFetch<TvWorkspaceVideoResponse>(\n program.data && currentUser.data &&\n TvRequests.workspaceVideo(\n program.data.id,\n currentUser.data.id,\n currentUser.data.customerId\n )\n );\n \n async function requestAdFreeVideo(): Promise<void> {\n try {\n await fetchAsync(TvRequests.createAdFreeRequest({\n programId: program.data.id,\n regionCode: region.data.code,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId\n }));\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('requestAdFreeSuccess', { video: program.data.title }),\n type: AlertType.Success\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.AD_FREE_REQUEST,\n args: [ region.data.code, program.data.id ]\n });\n\n AnalyticsHelper.logUserAction(\n { id: program.data.id, name: program.data.title },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: TvDescriptor.AdFreeRequest,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch (error) {\n const errorMessage = error.responseJSON?.message;\n if (errorMessage) {\n const parsedErrorMessage = JSON.parse(errorMessage);\n alerts.error(getPhrase(parsedErrorMessage.Type, { video: program.data.title }));\n } else {\n alerts.error(getPhrase('error'));\n }\n }\n }\n\n async function addAdFreeVideo() {\n if (workspaceVideo.data.exists && workspaceVideo.data.hasAdFree) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n params: { alreadyAdded: true }\n });\n return;\n }\n\n try {\n const data = {\n id: program.data.id,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId\n };\n await fetchAsync(TvRequests.addAdFreeVideo(data, program.data.id));\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('addAdFreeSuccess', { video: program.data.title }),\n type: AlertType.Success\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n args: [ region.data.code, program.data.id ]\n });\n\n AnalyticsHelper.logUserAction(\n { id: program.data.id, name: program.data.title },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: TvDescriptor.AddAdFreeVideo,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n async function addFullVideo() {\n if (workspaceVideo.data.exists) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n params: { alreadyAdded: true }\n });\n return;\n }\n\n try {\n const data = {\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n globalId: program.data.globalId,\n libraryId: workspace.data.id\n };\n await fetchAsync(TvRequests.addFullVideo(data, program.data.id));\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('addFullSuccess', { video: program.data.title }),\n type: AlertType.Success\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ALREADY_ADDED,\n args: [ region.data.code, program.data.id ]\n });\n\n AnalyticsHelper.logUserAction(\n { id: program.data.id, name: program.data.title },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: TvDescriptor.AddFullVideo,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n return { requestAdFreeVideo, addAdFreeVideo, addFullVideo };\n}\n",":local {\n .circle {\n min-height: map-get($spacers, 3);\n min-width: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Choice, ChoicePopupOption } from 'libs/shared/components/choices-popup/components/choices/Choices';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useTvAddRequests } from 'apps/tv/hooks/useTvAddRequests';\nimport { AdFreeCredits } from 'apps/tv/interfaces/models/AdFreeCredits';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\n\nimport styles from './tv-add.module.scss';\n\nconst namespace = 'tv.add';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst AD_FREE = {\n id: 'ad-free',\n title: 'adFreeTitle',\n description: 'adFreeDescription',\n imageUrl: ImageUrls.General.MOUNTAINS_FRAMED\n};\n\nconst REQUEST_AD_FREE = {\n id: 'request-ad-free',\n title: 'adFreeTitle',\n imageUrl: ImageUrls.General.MOUNTAINS_FRAMED\n};\n\nconst FULL_VIDEO = {\n id: 'full-video',\n title: 'fullVideoTitle',\n description: 'fullVideoDescription',\n imageUrl: ImageUrls.General.ANNOUNCEMENT_FRAMED\n};\n\ninterface TvAddViewProps extends PopupViewProps {\n id: string;\n region: string;\n currentTime: number;\n}\n\nexport function TvAddView(props: TvAddViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(props.id));\n const adFreeCredits = Flight.useBasicFetch<AdFreeCredits>(\n currentUser.data &&\n TvRequests.adFreeCredits(\n currentUser.data.id,\n currentUser.data.customerId,\n props.region\n )\n );\n\n const { requestAdFreeVideo, addAdFreeVideo, addFullVideo } = useTvAddRequests(props.id, props.region);\n\n useHandleDialogError(program.statusCode);\n\n const [ selectedChoice, setSelectedChoice ] = React.useState<ChoicePopupOption>(null);\n\n const isFromPreview = !Number.isNaN(props.currentTime);\n\n function onClickContinue(): void {\n if (!selectedChoice)\n return;\n\n if (selectedChoice.id === FULL_VIDEO.id) {\n addFullVideo();\n }\n \n if (selectedChoice.id === AD_FREE.id) {\n addAdFreeVideo();\n }\n\n if (selectedChoice.id === REQUEST_AD_FREE.id) {\n requestAdFreeVideo();\n }\n }\n\n function onClickBack(): void {\n if (!isFromPreview) {\n props.closePopup();\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ props.region, program.data.id ],\n params: {\n currentTime: props.currentTime\n }\n });\n }\n\n const hasEnoughCredits = adFreeCredits.data &&\n (adFreeCredits.data.userRequests < adFreeCredits.data.maxAvailableCredit);\n const requestsRemaining = adFreeCredits.data &&\n (adFreeCredits.data.maxAvailableCredit - adFreeCredits.data.userRequests);\n\n React.useEffect(() => {\n if (!adFreeCredits.hasCompleted)\n return;\n \n if (hasEnoughCredits)\n return;\n\n setSelectedChoice(FULL_VIDEO);\n }, [ adFreeCredits, hasEnoughCredits ]);\n\n const hasLoaded = (\n currentUser.hasCompleted &&\n program.hasCompleted &&\n adFreeCredits.hasCompleted\n );\n\n const showAdFreeAlert = selectedChoice?.id === REQUEST_AD_FREE.id && TvUtils.isHolidayPeriod();\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={!hasLoaded}\n closePopup={props.closePopup}\n >\n {hasLoaded &&\n <>\n <div className='d-flex mb-3 mx-n2'>\n {program.data.hasAdsFree &&\n <Choice\n option={{ id: AD_FREE.id }}\n onSelect={setSelectedChoice}\n selected={selectedChoice?.id === AD_FREE.id}\n >\n <img src={AD_FREE.imageUrl} className='img-fluid' draggable={false} />\n <h2 className='h4 mb-1'><Text namespace={namespace} phrase={AD_FREE.title} /></h2>\n <p className='mb-2'><Text namespace={namespace} phrase={AD_FREE.description} /></p>\n </Choice>\n }\n \n {!program.data.hasAdsFree &&\n <Choice\n option={{ id: REQUEST_AD_FREE.id, disabled: !hasEnoughCredits }}\n onSelect={setSelectedChoice}\n selected={selectedChoice?.id === REQUEST_AD_FREE.id}\n >\n <img src={REQUEST_AD_FREE.imageUrl} className='img-fluid' draggable={false} />\n <div className='d-flex justify-content-center align-items-center mb-1'>\n <h2 className='h4 mb-1'><Text namespace={namespace} phrase={REQUEST_AD_FREE.title} /></h2>\n <span className={`badge bg-dark rounded-circle ms-2 ${styles.circle}`}>{requestsRemaining}</span>\n </div>\n <p className='mb-2'><Text namespace={namespace} phrase={hasEnoughCredits ? 'requestAdFreeDescription' : 'noRequestsDescription'} /></p>\n </Choice>\n }\n\n <Choice\n option={{ id: FULL_VIDEO.id }}\n onSelect={setSelectedChoice}\n selected={selectedChoice?.id === FULL_VIDEO.id}\n >\n <img src={FULL_VIDEO.imageUrl} className='img-fluid' draggable={false} />\n <h2 className='h4 mb-1'><Text namespace={namespace} phrase={FULL_VIDEO.title} /></h2>\n <p className='mb-2'><Text namespace={namespace} phrase={FULL_VIDEO.description} /></p>\n </Choice>\n </div>\n\n {showAdFreeAlert &&\n <div className='alert alert-warning' role='alert'>\n <h3 className='h5'>\n <Text namespace={namespace} phrase='adFreeAlertHeading' />\n </h3>\n <p className='m-0'>\n <Text namespace={namespace} phrase='adFreeAlertBody' />\n </p>\n </div>\n }\n </>\n }\n \n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase(isFromPreview ? 'back' : 'close')}\n onClick={onClickBack}\n variant='link'\n />\n <PopupButtons.Submit\n text={getPhrase('continue')}\n onClick={onClickContinue}\n variant='dark'\n disabled={!selectedChoice}\n />\n </PopupButtons>\n </Popup>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,S as n,b as r,d as i,s as a}from"./CnnBLBPY.chunk.js";import{l as o,u as s}from"./D8clSITt.chunk.js";import{t as c}from"./GN6vNflP.chunk.js";import{n as l,t as u}from"./Dn3hwC-o.chunk.js";import{i as d,o as f,s as p}from"./1iKkdpYv.chunk.js";import{t as m}from"./BjaJoJzM.chunk.js";import{t as h}from"./CrBD6Z4s.chunk.js";import{t as g}from"./CRRZVEmA.chunk.js";import{$ as _,Q as v,c as y,s as b}from"./app-BGxmHvGl.js";import{t as x}from"./DuPL-nK72.chunk.js";import{h as S,m as C,t as w}from"./C03mMZ4k.chunk.js";import{t as T}from"./CK_CN_mA.chunk.js";import{t as E}from"./DmVXt6_V.chunk.js";import{t as D}from"./BAN6QE-X.chunk.js";import{t as O}from"./CfNYdg0m.chunk.js";import{n as k,r as A}from"./amjwjus3.chunk.js";import{n as j,r as M,t as N}from"./l7UAnIb0.chunk.js";t();var P={sharedSeries:(e,t)=>h.urlBuilder(`/api/objects/${e}`,{query:y.SERIES,shareId:t}),seriesWithVideos:(e,t=3)=>`{gateway}/v1/objects/${e}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${t}}`},F={series(e){let t={query:y.SERIES};return{url:h.urlBuilder(`{gateway}/v1/objects/${e}`,t),publicUrl:h.urlBuilder(`/api/objects/${e}`,t),key:`series:${e}`}},sharedSeries(e,t){return{url:P.sharedSeries(e,t),key:`shared:series:${e}:${t}`}},seriesWithVideos(e,t=3){return{url:P.seriesWithVideos(e,t),key:`series:${e}:with:videos:${t}`}},seriesWithThumbnailAndCount(e){return{url:`{gateway}/v1/objects/${e}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,key:`series:${e}:thumbnail:count`}},seriesVideos(e,t,n,r){let i=v.getVideoSortParam(n),a=[`series`,e,`videos`,r,n].filter(e=>!!e).join(`:`);return{url:h.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:`{${i}}${y.VIDEO_COLLECTION}`,cursor:r}),publicUrl:h.urlBuilder(`/api/objects/collections/${e}/videos`,{query:`{${i}}${b.VIDEO_COLLECTION}`,cursor:r}),key:a}}},I=e();function L(){return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`partial-loading-background pb-4 mb-3 w-50`}),(0,I.jsx)(`div`,{className:`d-flex align-items-center justify-content-between mb-2`,children:(0,I.jsx)(M,{})}),(0,I.jsx)(`div`,{className:`mx-n2`,children:(0,I.jsx)(d,{})})]})}var R=c.encloseNamespace(`exchange.exchangeSeries`);function z(e){let t=s(),c=x(),h=o(F.series(e.seriesId)),y=o(g.currentUser());m({title:h.data?.name}),O(h);let{commonVideoProps:b}=C(),M=!!y.data&&v.getOrSetSortType(y.data.id,e.sort,_.ProductionYear,`series`),{items:P,hasMore:z,isFetching:B,nextCursor:V}=p(H,U,W);function H(t){return T.seriesVideos(e.seriesId,M,t)}function U(e){return t(H(e))}function W(e,t){if(e===1)return E(t);c.error(R(`error`))}let G=D(`video-list`),K=h.data?[{name:R(`exchangeArchive`),appLink:{application:l.EXCHANGE,action:u.Exchange.INDEX}},{name:h.data.name,active:!0}]:[];return!h.data||B?(0,I.jsx)(L,{}):(0,I.jsxs)(S.Provider,{value:G,children:[(0,I.jsx)(`h1`,{className:`h2`,children:h.data.name}),(0,I.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,I.jsx)(j,{breadcrumbs:K}),(0,I.jsx)(N,{variant:`outline-dark`,type:M,getSortAppLink:e=>k(h.data,e),analyticsOptions:{location:i.VideoListHeader,entity:a.Video,actionType:r.Sort,workflowPhase:n.Complete},includeProductionYear:!0})]}),(0,I.jsxs)(`div`,{className:`pb-3`,children:[P?(0,I.jsx)(w,{videos:P,getVideoAppLink:A,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:b}):(0,I.jsx)(`div`,{className:`mx-n2`,children:(0,I.jsx)(d,{})}),(z||B)&&(0,I.jsx)(f,{isFetching:B,fetchNext:U,nextCursor:V})]})]})}export{z as ExchangeSeriesView};
2
- //# sourceMappingURL=BvamDkjt2.chunk.js.map
1
+ import{C as e,D as t,S as n,b as r,d as i,s as a}from"./CnnBLBPY.chunk.js";import{l as o,u as s}from"./D8clSITt.chunk.js";import{t as c}from"./GN6vNflP.chunk.js";import{n as l,t as u}from"./Dn3hwC-o.chunk.js";import{i as d,o as f,s as p}from"./DQBoqkL7.chunk.js";import{t as m}from"./BjaJoJzM.chunk.js";import{t as h}from"./CrBD6Z4s.chunk.js";import{t as g}from"./CRRZVEmA.chunk.js";import{$ as _,Q as v,c as y,s as b}from"./app-CgkYY4K0.js";import{t as x}from"./BP0LMV9S2.chunk.js";import{h as S,m as C,t as w}from"./CFkqPGiT.chunk.js";import{t as T}from"./HgLS_KfH.chunk.js";import{t as E}from"./BxLgTmMl.chunk.js";import{t as D}from"./Dkazht4Q.chunk.js";import{t as O}from"./ChDwbV8F.chunk.js";import{n as k,r as A}from"./BXIfsdxg.chunk.js";import{n as j,r as M,t as N}from"./Dr35AMvf.chunk.js";t();var P={sharedSeries:(e,t)=>h.urlBuilder(`/api/objects/${e}`,{query:y.SERIES,shareId:t}),seriesWithVideos:(e,t=3)=>`{gateway}/v1/objects/${e}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${t}}`},F={series(e){let t={query:y.SERIES};return{url:h.urlBuilder(`{gateway}/v1/objects/${e}`,t),publicUrl:h.urlBuilder(`/api/objects/${e}`,t),key:`series:${e}`}},sharedSeries(e,t){return{url:P.sharedSeries(e,t),key:`shared:series:${e}:${t}`}},seriesWithVideos(e,t=3){return{url:P.seriesWithVideos(e,t),key:`series:${e}:with:videos:${t}`}},seriesWithThumbnailAndCount(e){return{url:`{gateway}/v1/objects/${e}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,key:`series:${e}:thumbnail:count`}},seriesVideos(e,t,n,r){let i=v.getVideoSortParam(n),a=[`series`,e,`videos`,r,n].filter(e=>!!e).join(`:`);return{url:h.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:`{${i}}${y.VIDEO_COLLECTION}`,cursor:r}),publicUrl:h.urlBuilder(`/api/objects/collections/${e}/videos`,{query:`{${i}}${b.VIDEO_COLLECTION}`,cursor:r}),key:a}}},I=e();function L(){return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`partial-loading-background pb-4 mb-3 w-50`}),(0,I.jsx)(`div`,{className:`d-flex align-items-center justify-content-between mb-2`,children:(0,I.jsx)(M,{})}),(0,I.jsx)(`div`,{className:`mx-n2`,children:(0,I.jsx)(d,{})})]})}var R=c.encloseNamespace(`exchange.exchangeSeries`);function z(e){let t=s(),c=x(),h=o(F.series(e.seriesId)),y=o(g.currentUser());m({title:h.data?.name}),O(h);let{commonVideoProps:b}=C(),M=!!y.data&&v.getOrSetSortType(y.data.id,e.sort,_.ProductionYear,`series`),{items:P,hasMore:z,isFetching:B,nextCursor:V}=p(H,U,W);function H(t){return T.seriesVideos(e.seriesId,M,t)}function U(e){return t(H(e))}function W(e,t){if(e===1)return E(t);c.error(R(`error`))}let G=D(`video-list`),K=h.data?[{name:R(`exchangeArchive`),appLink:{application:l.EXCHANGE,action:u.Exchange.INDEX}},{name:h.data.name,active:!0}]:[];return!h.data||B?(0,I.jsx)(L,{}):(0,I.jsxs)(S.Provider,{value:G,children:[(0,I.jsx)(`h1`,{className:`h2`,children:h.data.name}),(0,I.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,I.jsx)(j,{breadcrumbs:K}),(0,I.jsx)(N,{variant:`outline-dark`,type:M,getSortAppLink:e=>k(h.data,e),analyticsOptions:{location:i.VideoListHeader,entity:a.Video,actionType:r.Sort,workflowPhase:n.Complete},includeProductionYear:!0})]}),(0,I.jsxs)(`div`,{className:`pb-3`,children:[P?(0,I.jsx)(w,{videos:P,getVideoAppLink:A,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:b}):(0,I.jsx)(`div`,{className:`mx-n2`,children:(0,I.jsx)(d,{})}),(z||B)&&(0,I.jsx)(f,{isFetching:B,fetchNext:U,nextCursor:V})]})]})}export{z as ExchangeSeriesView};
2
+ //# sourceMappingURL=Czivka682.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BvamDkjt2.chunk.js","names":[],"sources":["../../../../libs/shared/src/flight-requests/SeriesRequests.ts","../../src/apps/exchange/views/exchange-series/partial-loading/PartialExchangeSeries.tsx","../../src/apps/exchange/views/exchange-series/ExchangeSeriesView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedSeries: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: SharedWithStatements.SERIES,\n shareId\n }),\n seriesWithVideos: (id: string, videoCount: number = 3) => {\n return `{gateway}/v1/objects/${id}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${videoCount}}`;\n }\n};\n\nexport const SeriesRequests = {\n series(id: string): Flight.PublicRequest {\n const queryStringObj = { query: SharedWithStatements.SERIES };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, queryStringObj),\n key: `series:${id}`\n };\n },\n sharedSeries(id: string, shareId: string): Flight.Request {\n return {\n url: endpoints.sharedSeries(id, shareId),\n key: `shared:series:${id}:${shareId}`\n };\n },\n seriesWithVideos(id: string, videoCount: number = 3): Flight.Request {\n return {\n url: endpoints.seriesWithVideos(id, videoCount),\n key: `series:${id}:with:videos:${videoCount}`\n };\n },\n seriesWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,\n key: `series:${id}:thumbnail:count`\n };\n },\n seriesVideos(id: string, userId?: string, sort?: VideoSortType, cursor?: string): Flight.PublicRequest {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const key = [ 'series', id, 'videos', cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/collections/${id}/videos`, {\n query: `{${sortFilter}}${SharedWithStatements.VIDEO_COLLECTION}`,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/collections/${id}/videos`, {\n query: `{${sortFilter}}${PublicWithStatement.VIDEO_COLLECTION}`,\n cursor\n }),\n key\n };\n }\n};\n","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialExchangeSeries() {\n return (\n <>\n <div\n className='partial-loading-background pb-4 mb-3 w-50'\n ></div>\n\n <div className='d-flex align-items-center justify-content-between mb-2'>\n <PartialBreadcrumbs />\n </div>\n \n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Series, Video } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getSeriesAppLink, getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nimport { PartialExchangeSeries } from './partial-loading/PartialExchangeSeries';\n\nconst namespace = 'exchange.exchangeSeries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSeriesViewProps {\n seriesId: string;\n sort: VideoSortType;\n}\n\nexport function ExchangeSeriesView(props: ExchangeSeriesViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useSetPageMetadata({ title: series.data?.name });\n useHandleObjectError(series);\n\n const { commonVideoProps } = useCommonVideoProps();\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data\n && VideoSortHelper.getOrSetSortType(currentUser.data.id, props.sort, VideoSortType.ProductionYear, 'series');\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.seriesVideos(props.seriesId, sort, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n const videoActions = useGetExchangeActions('video-list');\n\n const breadcrumbs = series.data ? [{\n name: getPhrase('exchangeArchive'),\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n }\n }, {\n name: series.data.name,\n active: true\n }] : [];\n\n if (!series.data || isFetching)\n return <PartialExchangeSeries />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <h1 className='h2'>{series.data.name}</h1>\n\n <div className='d-flex justify-content-between align-items-center'>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n getSortAppLink={sort => getSeriesAppLink(series.data, sort)}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n includeProductionYear\n />\n </div>\n\n <div className='pb-3'>\n {videos ? (\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={commonVideoProps}\n />) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n />\n )}\n </div>\n </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"kyBAOA,IAAA,EAAA,4GAMI,wBAAA,EAAA,8DAAA,EAAA,IAIJ,EAAA,kCAII,MAAA,qIAOA,MAAA,iFAMA,MAAA,iGAMA,MAAA,4OAUA,MAAA,sOC7CJ,SAAgB,GAAwB,CACtC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,4CACL,CAAA,EAEP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mEACb,EAAA,EAAA,KAAC,EAAD,EAAsB,CAAA,CAClB,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,CACL,CAAA,CAAA,CCiBP,IAAM,EAAY,EAAgB,iBADhB,0BAC2C,CAO7D,SAAgB,EAAmB,EAA6C,CAC9E,IAAM,EAAQ,GAAoB,CAC5B,EAAS,GAAW,CAEpB,EAAS,EAA6B,EAAe,OAAO,EAAM,SAAS,CAAC,CAC5E,EAAc,EAAkC,EAAa,aAAa,CAAC,CAEjF,EAAmB,CAAE,MAAO,EAAO,MAAM,KAAM,CAAC,CAChD,EAAqB,EAAO,CAE5B,GAAM,CAAE,oBAAqB,GAAqB,CAG5C,EAAO,CAAC,CAAC,EAAY,MACtB,EAAgB,iBAAiB,EAAY,KAAK,GAAI,EAAM,KAAM,EAAc,eAAgB,SAAS,CAExG,CACJ,MAAO,EACP,UACA,aACA,cACE,EAAuB,EAAkB,EAAiB,EAAQ,CAEtE,SAAS,EAAiB,EAAiC,CACzD,OAAO,EAAiB,aAAa,EAAM,SAAU,EAAM,EAAO,CAGpE,SAAS,EAAgB,EAAuB,CAC9C,OAAO,EAAM,EAAiB,EAAO,CAAC,CAGxC,SAAS,EAAQ,EAAoB,EAA8B,CACjE,GAAI,IAAe,EACjB,OAAO,EAAgB,EAAW,CAEpC,EAAO,MAAM,EAAU,QAAQ,CAAC,CAGlC,IAAM,EAAe,EAAsB,aAAa,CAElD,EAAc,EAAO,KAAO,CAAC,CACjC,KAAM,EAAU,kBAAkB,CAClC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,MAC1B,CACF,CAAE,CACD,KAAM,EAAO,KAAK,KAClB,OAAQ,GACT,CAAC,CAAG,EAAE,CAKP,MAHI,CAAC,EAAO,MAAQ,GACX,EAAA,EAAA,KAAC,EAAD,EAAyB,CAAA,EAGhC,EAAA,EAAA,MAAC,EAAoB,SAArB,CAA8B,MAAO,WAArC,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,cAAM,EAAO,KAAK,KAAU,CAAA,EAE1C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6DAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAA0B,cAAe,CAAA,EAEzC,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,eACR,KAAM,EACN,eAAgB,GAAQ,EAAiB,EAAO,KAAM,EAAK,CAC3D,iBAAkB,CAChB,SAAU,EAAgB,gBAC1B,OAAQ,EAAW,MACnB,WAAY,EAAW,KACvB,cAAe,EAAc,SAC9B,CACD,sBAAA,GACA,CAAA,CACE,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,CACG,GACC,EAAA,EAAA,KAAC,EAAD,CACU,SACS,kBACjB,sBAAuB,KACvB,+BAAkC,KAClC,mBAAsB,GACtB,kBAAA,GACkB,mBAClB,CAAA,EACF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,EAGN,GAAW,KACX,EAAA,EAAA,KAAC,EAAD,CACc,aACZ,UAAW,EACC,aACZ,CAAA,CAEA,GACuB"}
1
+ {"version":3,"file":"Czivka682.chunk.js","names":[],"sources":["../../../../libs/shared/src/flight-requests/SeriesRequests.ts","../../src/apps/exchange/views/exchange-series/partial-loading/PartialExchangeSeries.tsx","../../src/apps/exchange/views/exchange-series/ExchangeSeriesView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedSeries: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: SharedWithStatements.SERIES,\n shareId\n }),\n seriesWithVideos: (id: string, videoCount: number = 3) => {\n return `{gateway}/v1/objects/${id}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${videoCount}}`;\n }\n};\n\nexport const SeriesRequests = {\n series(id: string): Flight.PublicRequest {\n const queryStringObj = { query: SharedWithStatements.SERIES };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, queryStringObj),\n key: `series:${id}`\n };\n },\n sharedSeries(id: string, shareId: string): Flight.Request {\n return {\n url: endpoints.sharedSeries(id, shareId),\n key: `shared:series:${id}:${shareId}`\n };\n },\n seriesWithVideos(id: string, videoCount: number = 3): Flight.Request {\n return {\n url: endpoints.seriesWithVideos(id, videoCount),\n key: `series:${id}:with:videos:${videoCount}`\n };\n },\n seriesWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,\n key: `series:${id}:thumbnail:count`\n };\n },\n seriesVideos(id: string, userId?: string, sort?: VideoSortType, cursor?: string): Flight.PublicRequest {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const key = [ 'series', id, 'videos', cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/collections/${id}/videos`, {\n query: `{${sortFilter}}${SharedWithStatements.VIDEO_COLLECTION}`,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/collections/${id}/videos`, {\n query: `{${sortFilter}}${PublicWithStatement.VIDEO_COLLECTION}`,\n cursor\n }),\n key\n };\n }\n};\n","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialExchangeSeries() {\n return (\n <>\n <div\n className='partial-loading-background pb-4 mb-3 w-50'\n ></div>\n\n <div className='d-flex align-items-center justify-content-between mb-2'>\n <PartialBreadcrumbs />\n </div>\n \n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Series, Video } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getSeriesAppLink, getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nimport { PartialExchangeSeries } from './partial-loading/PartialExchangeSeries';\n\nconst namespace = 'exchange.exchangeSeries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSeriesViewProps {\n seriesId: string;\n sort: VideoSortType;\n}\n\nexport function ExchangeSeriesView(props: ExchangeSeriesViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useSetPageMetadata({ title: series.data?.name });\n useHandleObjectError(series);\n\n const { commonVideoProps } = useCommonVideoProps();\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data\n && VideoSortHelper.getOrSetSortType(currentUser.data.id, props.sort, VideoSortType.ProductionYear, 'series');\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.seriesVideos(props.seriesId, sort, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n const videoActions = useGetExchangeActions('video-list');\n\n const breadcrumbs = series.data ? [{\n name: getPhrase('exchangeArchive'),\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n }\n }, {\n name: series.data.name,\n active: true\n }] : [];\n\n if (!series.data || isFetching)\n return <PartialExchangeSeries />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <h1 className='h2'>{series.data.name}</h1>\n\n <div className='d-flex justify-content-between align-items-center'>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n getSortAppLink={sort => getSeriesAppLink(series.data, sort)}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n includeProductionYear\n />\n </div>\n\n <div className='pb-3'>\n {videos ? (\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={commonVideoProps}\n />) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n />\n )}\n </div>\n </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"kyBAOA,IAAA,EAAA,4GAMI,wBAAA,EAAA,8DAAA,EAAA,IAIJ,EAAA,kCAII,MAAA,qIAOA,MAAA,iFAMA,MAAA,iGAMA,MAAA,4OAUA,MAAA,sOC7CJ,SAAgB,GAAwB,CACtC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,4CACL,CAAA,EAEP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mEACb,EAAA,EAAA,KAAC,EAAD,EAAsB,CAAA,CAClB,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,CACL,CAAA,CAAA,CCiBP,IAAM,EAAY,EAAgB,iBADhB,0BAC2C,CAO7D,SAAgB,EAAmB,EAA6C,CAC9E,IAAM,EAAQ,GAAoB,CAC5B,EAAS,GAAW,CAEpB,EAAS,EAA6B,EAAe,OAAO,EAAM,SAAS,CAAC,CAC5E,EAAc,EAAkC,EAAa,aAAa,CAAC,CAEjF,EAAmB,CAAE,MAAO,EAAO,MAAM,KAAM,CAAC,CAChD,EAAqB,EAAO,CAE5B,GAAM,CAAE,oBAAqB,GAAqB,CAG5C,EAAO,CAAC,CAAC,EAAY,MACtB,EAAgB,iBAAiB,EAAY,KAAK,GAAI,EAAM,KAAM,EAAc,eAAgB,SAAS,CAExG,CACJ,MAAO,EACP,UACA,aACA,cACE,EAAuB,EAAkB,EAAiB,EAAQ,CAEtE,SAAS,EAAiB,EAAiC,CACzD,OAAO,EAAiB,aAAa,EAAM,SAAU,EAAM,EAAO,CAGpE,SAAS,EAAgB,EAAuB,CAC9C,OAAO,EAAM,EAAiB,EAAO,CAAC,CAGxC,SAAS,EAAQ,EAAoB,EAA8B,CACjE,GAAI,IAAe,EACjB,OAAO,EAAgB,EAAW,CAEpC,EAAO,MAAM,EAAU,QAAQ,CAAC,CAGlC,IAAM,EAAe,EAAsB,aAAa,CAElD,EAAc,EAAO,KAAO,CAAC,CACjC,KAAM,EAAU,kBAAkB,CAClC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,MAC1B,CACF,CAAE,CACD,KAAM,EAAO,KAAK,KAClB,OAAQ,GACT,CAAC,CAAG,EAAE,CAKP,MAHI,CAAC,EAAO,MAAQ,GACX,EAAA,EAAA,KAAC,EAAD,EAAyB,CAAA,EAGhC,EAAA,EAAA,MAAC,EAAoB,SAArB,CAA8B,MAAO,WAArC,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,cAAM,EAAO,KAAK,KAAU,CAAA,EAE1C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6DAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAA0B,cAAe,CAAA,EAEzC,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,eACR,KAAM,EACN,eAAgB,GAAQ,EAAiB,EAAO,KAAM,EAAK,CAC3D,iBAAkB,CAChB,SAAU,EAAgB,gBAC1B,OAAQ,EAAW,MACnB,WAAY,EAAW,KACvB,cAAe,EAAc,SAC9B,CACD,sBAAA,GACA,CAAA,CACE,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,CACG,GACC,EAAA,EAAA,KAAC,EAAD,CACU,SACS,kBACjB,sBAAuB,KACvB,+BAAkC,KAClC,mBAAsB,GACtB,kBAAA,GACkB,mBAClB,CAAA,EACF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,EAGN,GAAW,KACX,EAAA,EAAA,KAAC,EAAD,CACc,aACZ,UAAW,EACC,aACZ,CAAA,CAEA,GACuB"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,b as n,mn as r,s as i}from"./CnnBLBPY.chunk.js";import{_ as a,g as o}from"./DW0w8_XN.chunk.js";import{t as s}from"./CrBD6Z4s.chunk.js";import{t as c}from"./BIhfRmDn.chunk.js";import{n as l,r as u}from"./BK-FLPB-.chunk.js";import{I as d,T as f}from"./app-BGxmHvGl.js";import{t as p}from"./DWCNy_Jd2.chunk.js";import{t as m}from"./B9Q0qBO32.chunk.js";import{t as h}from"./BXmlDh1p.chunk.js";import{n as g}from"./Jf-R5ehU.chunk.js";import{n as _,r as v,t as y}from"./ApcDOLl8.chunk.js";var b={actions:`_actions_1psxq_1`,actionsContainer:`_actionsContainer_1psxq_14`,ownerLogo:`_ownerLogo_1psxq_24`,dropStyle:`_dropStyle_1psxq_33`,dragStyle:`_dragStyle_1psxq_38`},x=r(t()),S=e();function C(e){let t=e.folder.thumbnail?s.urlBuilder(e.folder.thumbnail.url,{size:l.Small}):null,r=e.folder?.libraries?.data?.[0]?.owner,a=e.showOwnerLogo&&r?.logo?.url?s.urlBuilder(r.logo.url,{size:l.Small}):null,c=e.getFolderActions?.(e.folder),d=e.analyticsData?{id:e.folder.id.toString(),name:e.folder.name,...e.analyticsData}:void 0,f=e.analyticsOptions?{actionType:n.Click,entity:i.Folder,...e.analyticsOptions}:void 0;return(0,S.jsx)(h,{draggable:e.drag&&{id:e.folder.id,data:e.folder},droppable:e.drop&&{id:e.folder.id,data:e.folder},dropStye:b.dropStyle,dragStyle:b.dragStyle,children:(0,S.jsxs)(`div`,{className:`position-relative`,children:[(0,S.jsxs)(o,{className:`rounded-3 d-block text-decoration-none`,appLink:e.getAppLink(e.folder),title:e.folder.name,analyticsData:d,analyticsOptions:f,children:[(0,S.jsx)(g,{data:t,imageType:u.Thumbnails,imageClassName:`rounded-top-lg`,children:(0,S.jsx)(_,{name:e.folder.name,type:v.Folder,extraClasses:`rounded-top-lg`})}),(0,S.jsx)(`h3`,{className:`bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2`,children:(0,S.jsx)(`span`,{className:`text-truncate d-block`,children:e.folder.name})})]}),c?.length&&(0,S.jsx)(p,{actions:c,className:b.actionsContainer,actionsDropdownClassName:b.actions,dropdownToggleSvgSize:null}),!!a&&(0,S.jsx)(`img`,{src:a,className:`rounded-circle ${b.ownerLogo}`,alt:`${r?.name} logo`,title:r?.name||``})]})})}var w=`libraries.folderList`,T=`has:expanded:library:folders`;function E(){let e=f();return e.xxl||e.xl||e.lg?6:e.md?4:3}D.defaultProps={showHeading:!0};function D(e){let[t,n]=x.useState(c.get(T)||!1),r=e.expandFolders||t,i=E();function o(){n(!r),c.set(T,!r)}let s=r?e.folders:e.folders.slice(0,i),l=e.folders.length>i&&!e.expandFolders;return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[e.showHeading&&(0,S.jsxs)(a,{className:`d-inline-flex align-items-center mb-2 px-2 ${l?``:`cursor-default`}`,onClick:o,children:[l&&(0,S.jsx)(m,{direction:r?`down`:`right`}),(0,S.jsx)(`h2`,{className:`h4 mb-0`,children:(0,S.jsx)(d,{namespace:w,phrase:`folders`,options:{count:e.folders.length}})})]}),!!(!r&&l)&&(0,S.jsx)(`div`,{className:`d-flex justify-content-end justify-self-end px-2`,children:(0,S.jsx)(a,{onClick:o,className:`text-dark hover-text-underline d-inline-block`,children:(0,S.jsx)(d,{namespace:w,phrase:`seeAll`,options:{count:e.folders.length}})})}),!!(r&&l)&&(0,S.jsx)(`div`,{className:`d-flex justify-content-end justify-self-end px-2`,children:(0,S.jsx)(a,{onClick:o,className:`text-dark hover-text-underline d-inline-block`,children:(0,S.jsx)(d,{namespace:w,phrase:`seeLess`})})}),e.extraButtons?e.extraButtons:(0,S.jsx)(S.Fragment,{})]}),(0,S.jsx)(`div`,{className:`row mx-1`,children:s.map(t=>(0,S.jsx)(`div`,{className:`col-4 col-md-3 col-lg-2 px-1 pb-3`,children:(0,S.jsx)(C,{folder:t,getAppLink:e.getAppLink,getFolderActions:e.getFolderActions,drag:e.drag,drop:e.drop})},t.id))})]})}function O(e,t){let n=e,r=t,i=y(e&&(e=>n(e).key));return(0,x.useEffect)(()=>{i&&i.shouldInitialFetch&&t&&r()},[i?.shouldInitialFetch,t]),(0,x.useEffect)(()=>{!i||!i.nextCursor||i.isFetching||!t||r(i.nextCursor)},[i?.nextCursor,i?.isFetching,t]),i}var k={partialFolderHeading:`_partialFolderHeading_1surw_1`,partialFolderThumbnail:`_partialFolderThumbnail_1surw_4`,partialFolderName:`_partialFolderName_1surw_7`},A=()=>(0,S.jsxs)(`div`,{className:`col-4 col-md-3 col-lg-2 px-1 pb-3`,children:[(0,S.jsx)(`div`,{className:`${k.partialFolderThumbnail} partial-loading-background rounded-top-lg`}),(0,S.jsx)(`div`,{className:`${k.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`,children:`\xA0`})]});function j({count:e=3}){return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`div`,{className:`${k.partialFolderHeading} h4 mb-2 partial-loading-background`,children:`\xA0`}),(0,S.jsx)(`div`,{className:`row mx-n1`,children:Array(e).fill(null).map((e,t)=>(0,S.jsx)(A,{},t))})]})}export{O as n,D as r,j as t};
2
- //# sourceMappingURL=sViLex0Q.chunk.js.map
1
+ import{C as e,D as t,b as n,mn as r,s as i}from"./CnnBLBPY.chunk.js";import{_ as a,g as o}from"./DW0w8_XN.chunk.js";import{t as s}from"./CrBD6Z4s.chunk.js";import{t as c}from"./BIhfRmDn.chunk.js";import{n as l,r as u}from"./BK-FLPB-.chunk.js";import{I as d,T as f}from"./app-CgkYY4K0.js";import{t as p}from"./DWCNy_Jd2.chunk.js";import{t as m}from"./B9Q0qBO32.chunk.js";import{t as h}from"./BXmlDh1p.chunk.js";import{n as g}from"./Jf-R5ehU.chunk.js";import{n as _,r as v,t as y}from"./ApcDOLl8.chunk.js";var b={actions:`_actions_1psxq_1`,actionsContainer:`_actionsContainer_1psxq_14`,ownerLogo:`_ownerLogo_1psxq_24`,dropStyle:`_dropStyle_1psxq_33`,dragStyle:`_dragStyle_1psxq_38`},x=r(t()),S=e();function C(e){let t=e.folder.thumbnail?s.urlBuilder(e.folder.thumbnail.url,{size:l.Small}):null,r=e.folder?.libraries?.data?.[0]?.owner,a=e.showOwnerLogo&&r?.logo?.url?s.urlBuilder(r.logo.url,{size:l.Small}):null,c=e.getFolderActions?.(e.folder),d=e.analyticsData?{id:e.folder.id.toString(),name:e.folder.name,...e.analyticsData}:void 0,f=e.analyticsOptions?{actionType:n.Click,entity:i.Folder,...e.analyticsOptions}:void 0;return(0,S.jsx)(h,{draggable:e.drag&&{id:e.folder.id,data:e.folder},droppable:e.drop&&{id:e.folder.id,data:e.folder},dropStye:b.dropStyle,dragStyle:b.dragStyle,children:(0,S.jsxs)(`div`,{className:`position-relative`,children:[(0,S.jsxs)(o,{className:`rounded-3 d-block text-decoration-none`,appLink:e.getAppLink(e.folder),title:e.folder.name,analyticsData:d,analyticsOptions:f,children:[(0,S.jsx)(g,{data:t,imageType:u.Thumbnails,imageClassName:`rounded-top-lg`,children:(0,S.jsx)(_,{name:e.folder.name,type:v.Folder,extraClasses:`rounded-top-lg`})}),(0,S.jsx)(`h3`,{className:`bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2`,children:(0,S.jsx)(`span`,{className:`text-truncate d-block`,children:e.folder.name})})]}),c?.length&&(0,S.jsx)(p,{actions:c,className:b.actionsContainer,actionsDropdownClassName:b.actions,dropdownToggleSvgSize:null}),!!a&&(0,S.jsx)(`img`,{src:a,className:`rounded-circle ${b.ownerLogo}`,alt:`${r?.name} logo`,title:r?.name||``})]})})}var w=`libraries.folderList`,T=`has:expanded:library:folders`;function E(){let e=f();return e.xxl||e.xl||e.lg?6:e.md?4:3}D.defaultProps={showHeading:!0};function D(e){let[t,n]=x.useState(c.get(T)||!1),r=e.expandFolders||t,i=E();function o(){n(!r),c.set(T,!r)}let s=r?e.folders:e.folders.slice(0,i),l=e.folders.length>i&&!e.expandFolders;return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[e.showHeading&&(0,S.jsxs)(a,{className:`d-inline-flex align-items-center mb-2 px-2 ${l?``:`cursor-default`}`,onClick:o,children:[l&&(0,S.jsx)(m,{direction:r?`down`:`right`}),(0,S.jsx)(`h2`,{className:`h4 mb-0`,children:(0,S.jsx)(d,{namespace:w,phrase:`folders`,options:{count:e.folders.length}})})]}),!!(!r&&l)&&(0,S.jsx)(`div`,{className:`d-flex justify-content-end justify-self-end px-2`,children:(0,S.jsx)(a,{onClick:o,className:`text-dark hover-text-underline d-inline-block`,children:(0,S.jsx)(d,{namespace:w,phrase:`seeAll`,options:{count:e.folders.length}})})}),!!(r&&l)&&(0,S.jsx)(`div`,{className:`d-flex justify-content-end justify-self-end px-2`,children:(0,S.jsx)(a,{onClick:o,className:`text-dark hover-text-underline d-inline-block`,children:(0,S.jsx)(d,{namespace:w,phrase:`seeLess`})})}),e.extraButtons?e.extraButtons:(0,S.jsx)(S.Fragment,{})]}),(0,S.jsx)(`div`,{className:`row mx-1`,children:s.map(t=>(0,S.jsx)(`div`,{className:`col-4 col-md-3 col-lg-2 px-1 pb-3`,children:(0,S.jsx)(C,{folder:t,getAppLink:e.getAppLink,getFolderActions:e.getFolderActions,drag:e.drag,drop:e.drop})},t.id))})]})}function O(e,t){let n=e,r=t,i=y(e&&(e=>n(e).key));return(0,x.useEffect)(()=>{i&&i.shouldInitialFetch&&t&&r()},[i?.shouldInitialFetch,t]),(0,x.useEffect)(()=>{!i||!i.nextCursor||i.isFetching||!t||r(i.nextCursor)},[i?.nextCursor,i?.isFetching,t]),i}var k={partialFolderHeading:`_partialFolderHeading_1surw_1`,partialFolderThumbnail:`_partialFolderThumbnail_1surw_4`,partialFolderName:`_partialFolderName_1surw_7`},A=()=>(0,S.jsxs)(`div`,{className:`col-4 col-md-3 col-lg-2 px-1 pb-3`,children:[(0,S.jsx)(`div`,{className:`${k.partialFolderThumbnail} partial-loading-background rounded-top-lg`}),(0,S.jsx)(`div`,{className:`${k.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`,children:`\xA0`})]});function j({count:e=3}){return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`div`,{className:`${k.partialFolderHeading} h4 mb-2 partial-loading-background`,children:`\xA0`}),(0,S.jsx)(`div`,{className:`row mx-n1`,children:Array(e).fill(null).map((e,t)=>(0,S.jsx)(A,{},t))})]})}export{O as n,D as r,j as t};
2
+ //# sourceMappingURL=DEP_Z-S0.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sViLex0Q.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/library-folder/library-folder.module.scss","../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../libs/shared/src/components/folder-list/FolderList.tsx","../../../../libs/shared/src/hooks/UseFetchAll.ts","../../../../libs/shared/src/components/folder-list/partial-loading/partial-folder-list.module.scss","../../../../libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx"],"sourcesContent":[":local {\n .actions {\n background: none;\n color: $white;\n border: none;\n padding: 0;\n outline: inherit;\n border-radius: 50%;\n width: 1.5rem;\n height: 1.5rem;\n\n &:hover {\n background-color: rgba(0, 0, 0, .5);\n }\n }\n\n .actionsContainer {\n position: absolute;\n top: 0;\n right: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: 0.9375rem;\n margin-right: 0.9375rem;\n z-index: 10;\n }\n\n .ownerLogo {\n position: absolute;\n top: 0;\n left: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 0.9375rem;\n margin-left: 0.9375rem;\n }\n\n .dropStyle {\n box-shadow: 0 0 $focus-ring-blur 2px $gray-900;\n border-radius: $border-radius-lg;\n background: $gray-900;\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail ?\n UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small }) :\n null;\n\n const owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url ?\n UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small }) :\n null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}\n","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolder(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolder}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolder} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolder} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}\n","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { SelectAllPagesResult, useSelectAllPages } from './UseSelectAllPages';\n\n/**\n * Hook to fetch all pages of a collection.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useFetchAll<T = BaseObject>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false\n): SelectAllPagesResult<T> {\n const getRequestFn = getRequest as (cursor?: string) => Flight.Request;\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n const response = useSelectAllPages<T>(getRequest && ((cursor?: string) => getRequestFn(cursor).key));\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext)\n fetchNextFn();\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response || !response.nextCursor || response.isFetching || !fetchNext)\n return;\n\n fetchNextFn(response.nextCursor);\n }, [ response?.nextCursor, response?.isFetching, fetchNext ]);\n\n return response;\n}\n",":local {\n .partialFolderHeading {\n width: 6.25rem;\n }\n\n .partialFolderThumbnail {\n padding-bottom: 56.25%;\n }\n\n .partialFolderName {\n line-height: 1.2;\n }\n}","import React from 'react';\n\nimport styles from './partial-folder-list.module.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n &nbsp;\n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}>&nbsp;</div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DEP_Z-S0.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/library-folder/library-folder.module.scss","../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../libs/shared/src/components/folder-list/FolderList.tsx","../../../../libs/shared/src/hooks/UseFetchAll.ts","../../../../libs/shared/src/components/folder-list/partial-loading/partial-folder-list.module.scss","../../../../libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx"],"sourcesContent":[":local {\n .actions {\n background: none;\n color: $white;\n border: none;\n padding: 0;\n outline: inherit;\n border-radius: 50%;\n width: 1.5rem;\n height: 1.5rem;\n\n &:hover {\n background-color: rgba(0, 0, 0, .5);\n }\n }\n\n .actionsContainer {\n position: absolute;\n top: 0;\n right: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: 0.9375rem;\n margin-right: 0.9375rem;\n z-index: 10;\n }\n\n .ownerLogo {\n position: absolute;\n top: 0;\n left: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 0.9375rem;\n margin-left: 0.9375rem;\n }\n\n .dropStyle {\n box-shadow: 0 0 $focus-ring-blur 2px $gray-900;\n border-radius: $border-radius-lg;\n background: $gray-900;\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail ?\n UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small }) :\n null;\n\n const owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url ?\n UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small }) :\n null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}\n","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolder(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolder}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolder} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolder} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}\n","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { SelectAllPagesResult, useSelectAllPages } from './UseSelectAllPages';\n\n/**\n * Hook to fetch all pages of a collection.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useFetchAll<T = BaseObject>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false\n): SelectAllPagesResult<T> {\n const getRequestFn = getRequest as (cursor?: string) => Flight.Request;\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n const response = useSelectAllPages<T>(getRequest && ((cursor?: string) => getRequestFn(cursor).key));\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext)\n fetchNextFn();\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response || !response.nextCursor || response.isFetching || !fetchNext)\n return;\n\n fetchNextFn(response.nextCursor);\n }, [ response?.nextCursor, response?.isFetching, fetchNext ]);\n\n return response;\n}\n",":local {\n .partialFolderHeading {\n width: 6.25rem;\n }\n\n .partialFolderThumbnail {\n padding-bottom: 56.25%;\n }\n\n .partialFolderName {\n line-height: 1.2;\n }\n}","import React from 'react';\n\nimport styles from './partial-folder-list.module.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n &nbsp;\n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}>&nbsp;</div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,bt as n,mn as r}from"./CnnBLBPY.chunk.js";import{n as i,t as a,v as o}from"./DW0w8_XN.chunk.js";import{C as s,M as c,T as l,w as u}from"./Cme1qeEa.chunk.js";import{t as d}from"./QxhzRpcg.chunk.js";import{n as f}from"./dawN348Z.chunk.js";import{t as p}from"./BHEKlg6n.chunk.js";import{T as m}from"./app-BGxmHvGl.js";import{t as h}from"./B7KaaLVd.chunk.js";import{r as g}from"./Bzw5oyg9.chunk.js";import{t as _}from"./ApcDOLl8.chunk.js";import{t as v}from"./CHUTfIvf.chunk.js";var y=r(c()),b=r(t()),x=e(),S=b.forwardRef(({bsPrefix:e,className:t,as:n=`div`,...r},i)=>{let a=l(e,`row`),o=s(),c=u(),d=`${a}-cols`,f=[];return o.forEach(e=>{let t=r[e];delete r[e];let n;typeof t==`object`&&t?{cols:n}=t:n=t;let i=e===c?``:`-${e}`;n!=null&&f.push(`${d}${i}-${n}`)}),(0,x.jsx)(n,{ref:i,...r,className:(0,y.default)(t,a,...f)})});S.displayName=`Row`;var C=400;function w(e){let t=()=>{if(!e.isFetching){if(e.scrollContainer){let{scrollContainer:t}=e;if(t.getBoundingClientRect().height+t.scrollTop<t.scrollHeight-C)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-C)return;e.fetchNextPage()}};(0,b.useEffect)(()=>{let n=o.throttle(t,200),r=e.scrollContainer||window;return e.hasMore&&r.addEventListener(`scroll`,n),()=>r.removeEventListener(`scroll`,n)},[e.hasMore,e.fetchNextPage,e.scrollContainer])}function T(e,t,r,i,a,s){let[c,l]=(0,b.useState)(0),u=t;function d(t){if(!e)return null;let n=e(t);return n?n.key:null}let f=_(d,i,a);function p(){if(!(!t||!e||!f))return l(e=>e+1),u(f.nextCursor)}return w({fetchNextPage:p,hasMore:!!f?.nextCursor,isFetching:f?.isFetching,scrollContainer:s}),(0,b.useEffect)(()=>{f&&f.shouldInitialFetch&&t&&(u(),l(e=>e+1))},[f?.shouldInitialFetch,t]),(0,b.useEffect)(()=>{if(!f?.statusCode||!o.isFunction(r))return;let e=+f.statusCode?.toString()?.substr(0,1);e!==n.ClientError&&e!==n.ServerError||r(c,f.statusCode)},[f?.statusCode]),{items:f?.items,hasMore:!!f?.nextCursor,nextCursor:f?.nextCursor,isFetching:f?.isFetching,totalItems:f?.totalItems,hasFirstPageCompleted:f?.hasFirstPageCompleted}}var E={container:`_container_1kfhe_1`,spinner:`_spinner_1kfhe_4`};D.defaultProps={fetchOnScroll:!1};function D(e){let[t,n]=g();return b.useEffect(()=>{e.fetchOnScroll&&(!n||e.isFetching||e.fetchNext?.(e.nextCursor))},[n,e.isFetching]),(0,x.jsx)(`div`,{className:`p-3 text-center ${E.container}`,children:e.isFetching?(0,x.jsx)(f,{as:`span`,animation:`border`,role:`status`,className:E.spinner}):(0,x.jsx)(`div`,{ref:t,children:(0,x.jsx)(a,{svg:v,className:`svg-container cursor-pointer`,size:i.Large,onClick:()=>e.fetchNext?.(e.nextCursor)})})})}var O={getThumbnailColumns(){return{xs:12,sm:5,lg:3}},getDetailsColumns(){return{xs:12,sm:7,lg:9}},getSize(e,t){return e.sm?`sm`:t||`md`},getThumbnailColSize(e){return e?10:12}},k={partialOptions:`_partialOptions_157xw_1`,partialName:`_partialName_157xw_4`,partialDescription:`_partialDescription_157xw_8`,partialThumbnail:`_partialThumbnail_157xw_12`,partialDragHandle:`_partialDragHandle_157xw_15`};A.defaultProps={numVideos:15};function A(e){return(0,x.jsx)(x.Fragment,{children:Array(e.numVideos).fill(null).map((t,n)=>(0,x.jsxs)(`div`,{className:`d-flex`,children:[e.allowBulkActions&&(0,x.jsx)(`div`,{className:`form-check pe-3 pe-sm-2 mx-0 mx-md-2`}),(0,x.jsx)(j,{...e})]},n))})}function j(e){let t=m(),n=O.getSize(t,`md`)===`sm`,r=e.withReordering&&!t.xs;return(0,x.jsxs)(S,{className:`${n?``:`py-2`} flex-grow-1`,children:[(0,x.jsx)(d,{...O.getThumbnailColumns(),className:`flex-column align-items-flex-start ${n?`pb-2 pe-1`:`mb-1 pe-3 pe-md-2`}`,children:(0,x.jsxs)(S,{children:[!!r&&(0,x.jsx)(`div`,{className:`d-flex align-items-center justify-content-center col-2`,children:(0,x.jsx)(`div`,{className:`partial-loading-background ${k.partialDragHandle}`})}),(0,x.jsx)(d,{xs:O.getThumbnailColSize(r),children:(0,x.jsx)(`div`,{className:`partial-loading-background ${n?`rounded`:`rounded-3`} ${k.partialThumbnail}`})})]})}),(0,x.jsxs)(d,{...O.getDetailsColumns(),className:n?`pb-2`:`px-2`,children:[(0,x.jsx)(`div`,{className:`partial-loading-background mb-1 ${k.partialName}`}),(0,x.jsx)(`div`,{className:`partial-loading-background ${k.partialDescription}`})]})]})}M.defaultProps={checked:!1,label:``,className:``};function M(e){let{isLabelEllipsis:t}=e,n=b.useRef(null);return b.useEffect(()=>{if(n.current){if(e.checked){n.current.indeterminate&&(n.current.indeterminate=!1);return}if(e.indeterminate&&!n.current.indeterminate){n.current.indeterminate=!0;return}!e.indeterminate&&n.current.indeterminate&&(n.current.indeterminate=!1)}},[n.current,e.indeterminate,e.checked]),(0,x.jsxs)(`div`,{className:`form-check pe-2 ${e.className}`,children:[(0,x.jsx)(`input`,{ref:n,type:`checkbox`,className:`${e.inputClassName} form-check-input`,id:e.id,name:e.name,checked:e.checked,onChange:e.onChange,disabled:e.disabled,"aria-checked":e.checked,"aria-label":e.ariaLabel}),e.label&&(0,x.jsx)(`label`,{className:`form-check-label cursor-pointer align-top`,htmlFor:e.id,children:(0,x.jsx)(`span`,{className:`${t?`clamp-1`:``}`,children:e.label})})]})}function N(e){return(0,x.jsx)(`svg`,{...e,children:(0,x.jsx)(`path`,{fill:`currentColor`,d:`M16.863 20c-.662 0-1.21-.567-1.21-1.252s.548-1.252 1.21-1.252c.663 0 1.21.567 1.21 1.252S17.527 20 16.864 20m0-1.441a.183.183 0 0 0-.182.189c0 .118.068.189.182.189.115 0 .183-.071.183-.19a.183.183 0 0 0-.183-.188m0-.118a.516.516 0 0 1-.502-.52v-6.19L11.75 9.158a.53.53 0 0 1-.205-.71c.137-.26.456-.354.685-.212l4.886 2.717a.57.57 0 0 1 .274.473v6.496a.52.52 0 0 1-.526.52m-4.908-4.205a.8.8 0 0 1-.229-.048L2.296 9.51A.55.55 0 0 1 2 9.014c0-.212.114-.401.297-.472l9.52-4.489a.47.47 0 0 1 .434 0l9.452 4.489a.55.55 0 0 1 .297.472.49.49 0 0 1-.297.473l-9.52 4.701a.8.8 0 0 1-.228.048m-8.22-5.198 8.22 4.087 8.288-4.087-8.22-3.898zm8.151 8.41c-4.749 0-6.644-2.905-6.712-3.047a.7.7 0 0 1-.092-.284V10.81c0-.283.229-.52.503-.52s.502.237.502.52v3.142c.388.496 2.077 2.434 5.776 2.434 3.653 0 5.548-1.938 6.005-2.457v-2.93c0-.284.228-.52.502-.52s.502.236.502.52v3.118a.6.6 0 0 1-.091.307c-.046.142-2.192 3.024-6.895 3.024`})})}function P(){let e=p(h.XS),t=p(h.SM),n=p(h.MD),r=p(h.LG),i=p(h.XL),a=p(h.XXL),o=h.LG;return e&&(o=h.XS),t&&(o=h.SM),n&&(o=h.MD),r&&(o=h.LG),i&&(o=h.XL),a&&(o=h.XXL),o}export{O as a,S as c,A as i,N as n,D as o,M as r,T as s,P as t};
2
- //# sourceMappingURL=1iKkdpYv.chunk.js.map
1
+ import{C as e,D as t,bt as n,mn as r}from"./CnnBLBPY.chunk.js";import{n as i,t as a,v as o}from"./DW0w8_XN.chunk.js";import{C as s,M as c,T as l,w as u}from"./Cme1qeEa.chunk.js";import{t as d}from"./QxhzRpcg.chunk.js";import{n as f}from"./dawN348Z.chunk.js";import{t as p}from"./BHEKlg6n.chunk.js";import{T as m}from"./app-CgkYY4K0.js";import{t as h}from"./B7KaaLVd.chunk.js";import{r as g}from"./Bzw5oyg9.chunk.js";import{t as _}from"./ApcDOLl8.chunk.js";import{t as v}from"./CHUTfIvf.chunk.js";var y=r(c()),b=r(t()),x=e(),S=b.forwardRef(({bsPrefix:e,className:t,as:n=`div`,...r},i)=>{let a=l(e,`row`),o=s(),c=u(),d=`${a}-cols`,f=[];return o.forEach(e=>{let t=r[e];delete r[e];let n;typeof t==`object`&&t?{cols:n}=t:n=t;let i=e===c?``:`-${e}`;n!=null&&f.push(`${d}${i}-${n}`)}),(0,x.jsx)(n,{ref:i,...r,className:(0,y.default)(t,a,...f)})});S.displayName=`Row`;var C=400;function w(e){let t=()=>{if(!e.isFetching){if(e.scrollContainer){let{scrollContainer:t}=e;if(t.getBoundingClientRect().height+t.scrollTop<t.scrollHeight-C)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-C)return;e.fetchNextPage()}};(0,b.useEffect)(()=>{let n=o.throttle(t,200),r=e.scrollContainer||window;return e.hasMore&&r.addEventListener(`scroll`,n),()=>r.removeEventListener(`scroll`,n)},[e.hasMore,e.fetchNextPage,e.scrollContainer])}function T(e,t,r,i,a,s){let[c,l]=(0,b.useState)(0),u=t;function d(t){if(!e)return null;let n=e(t);return n?n.key:null}let f=_(d,i,a);function p(){if(!(!t||!e||!f))return l(e=>e+1),u(f.nextCursor)}return w({fetchNextPage:p,hasMore:!!f?.nextCursor,isFetching:f?.isFetching,scrollContainer:s}),(0,b.useEffect)(()=>{f&&f.shouldInitialFetch&&t&&(u(),l(e=>e+1))},[f?.shouldInitialFetch,t]),(0,b.useEffect)(()=>{if(!f?.statusCode||!o.isFunction(r))return;let e=+f.statusCode?.toString()?.substr(0,1);e!==n.ClientError&&e!==n.ServerError||r(c,f.statusCode)},[f?.statusCode]),{items:f?.items,hasMore:!!f?.nextCursor,nextCursor:f?.nextCursor,isFetching:f?.isFetching,totalItems:f?.totalItems,hasFirstPageCompleted:f?.hasFirstPageCompleted}}var E={container:`_container_1kfhe_1`,spinner:`_spinner_1kfhe_4`};D.defaultProps={fetchOnScroll:!1};function D(e){let[t,n]=g();return b.useEffect(()=>{e.fetchOnScroll&&(!n||e.isFetching||e.fetchNext?.(e.nextCursor))},[n,e.isFetching]),(0,x.jsx)(`div`,{className:`p-3 text-center ${E.container}`,children:e.isFetching?(0,x.jsx)(f,{as:`span`,animation:`border`,role:`status`,className:E.spinner}):(0,x.jsx)(`div`,{ref:t,children:(0,x.jsx)(a,{svg:v,className:`svg-container cursor-pointer`,size:i.Large,onClick:()=>e.fetchNext?.(e.nextCursor)})})})}var O={getThumbnailColumns(){return{xs:12,sm:5,lg:3}},getDetailsColumns(){return{xs:12,sm:7,lg:9}},getSize(e,t){return e.sm?`sm`:t||`md`},getThumbnailColSize(e){return e?10:12}},k={partialOptions:`_partialOptions_157xw_1`,partialName:`_partialName_157xw_4`,partialDescription:`_partialDescription_157xw_8`,partialThumbnail:`_partialThumbnail_157xw_12`,partialDragHandle:`_partialDragHandle_157xw_15`};A.defaultProps={numVideos:15};function A(e){return(0,x.jsx)(x.Fragment,{children:Array(e.numVideos).fill(null).map((t,n)=>(0,x.jsxs)(`div`,{className:`d-flex`,children:[e.allowBulkActions&&(0,x.jsx)(`div`,{className:`form-check pe-3 pe-sm-2 mx-0 mx-md-2`}),(0,x.jsx)(j,{...e})]},n))})}function j(e){let t=m(),n=O.getSize(t,`md`)===`sm`,r=e.withReordering&&!t.xs;return(0,x.jsxs)(S,{className:`${n?``:`py-2`} flex-grow-1`,children:[(0,x.jsx)(d,{...O.getThumbnailColumns(),className:`flex-column align-items-flex-start ${n?`pb-2 pe-1`:`mb-1 pe-3 pe-md-2`}`,children:(0,x.jsxs)(S,{children:[!!r&&(0,x.jsx)(`div`,{className:`d-flex align-items-center justify-content-center col-2`,children:(0,x.jsx)(`div`,{className:`partial-loading-background ${k.partialDragHandle}`})}),(0,x.jsx)(d,{xs:O.getThumbnailColSize(r),children:(0,x.jsx)(`div`,{className:`partial-loading-background ${n?`rounded`:`rounded-3`} ${k.partialThumbnail}`})})]})}),(0,x.jsxs)(d,{...O.getDetailsColumns(),className:n?`pb-2`:`px-2`,children:[(0,x.jsx)(`div`,{className:`partial-loading-background mb-1 ${k.partialName}`}),(0,x.jsx)(`div`,{className:`partial-loading-background ${k.partialDescription}`})]})]})}M.defaultProps={checked:!1,label:``,className:``};function M(e){let{isLabelEllipsis:t}=e,n=b.useRef(null);return b.useEffect(()=>{if(n.current){if(e.checked){n.current.indeterminate&&(n.current.indeterminate=!1);return}if(e.indeterminate&&!n.current.indeterminate){n.current.indeterminate=!0;return}!e.indeterminate&&n.current.indeterminate&&(n.current.indeterminate=!1)}},[n.current,e.indeterminate,e.checked]),(0,x.jsxs)(`div`,{className:`form-check pe-2 ${e.className}`,children:[(0,x.jsx)(`input`,{ref:n,type:`checkbox`,className:`${e.inputClassName} form-check-input`,id:e.id,name:e.name,checked:e.checked,onChange:e.onChange,disabled:e.disabled,"aria-checked":e.checked,"aria-label":e.ariaLabel}),e.label&&(0,x.jsx)(`label`,{className:`form-check-label cursor-pointer align-top`,htmlFor:e.id,children:(0,x.jsx)(`span`,{className:`${t?`clamp-1`:``}`,children:e.label})})]})}function N(e){return(0,x.jsx)(`svg`,{...e,children:(0,x.jsx)(`path`,{fill:`currentColor`,d:`M16.863 20c-.662 0-1.21-.567-1.21-1.252s.548-1.252 1.21-1.252c.663 0 1.21.567 1.21 1.252S17.527 20 16.864 20m0-1.441a.183.183 0 0 0-.182.189c0 .118.068.189.182.189.115 0 .183-.071.183-.19a.183.183 0 0 0-.183-.188m0-.118a.516.516 0 0 1-.502-.52v-6.19L11.75 9.158a.53.53 0 0 1-.205-.71c.137-.26.456-.354.685-.212l4.886 2.717a.57.57 0 0 1 .274.473v6.496a.52.52 0 0 1-.526.52m-4.908-4.205a.8.8 0 0 1-.229-.048L2.296 9.51A.55.55 0 0 1 2 9.014c0-.212.114-.401.297-.472l9.52-4.489a.47.47 0 0 1 .434 0l9.452 4.489a.55.55 0 0 1 .297.472.49.49 0 0 1-.297.473l-9.52 4.701a.8.8 0 0 1-.228.048m-8.22-5.198 8.22 4.087 8.288-4.087-8.22-3.898zm8.151 8.41c-4.749 0-6.644-2.905-6.712-3.047a.7.7 0 0 1-.092-.284V10.81c0-.283.229-.52.503-.52s.502.237.502.52v3.142c.388.496 2.077 2.434 5.776 2.434 3.653 0 5.548-1.938 6.005-2.457v-2.93c0-.284.228-.52.502-.52s.502.236.502.52v3.118a.6.6 0 0 1-.091.307c-.046.142-2.192 3.024-6.895 3.024`})})}function P(){let e=p(h.XS),t=p(h.SM),n=p(h.MD),r=p(h.LG),i=p(h.XL),a=p(h.XXL),o=h.LG;return e&&(o=h.XS),t&&(o=h.SM),n&&(o=h.MD),r&&(o=h.LG),i&&(o=h.XL),a&&(o=h.XXL),o}export{O as a,S as c,A as i,N as n,D as o,M as r,T as s,P as t};
2
+ //# sourceMappingURL=DQBoqkL7.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1iKkdpYv.chunk.js","names":[],"sources":["../../../../../node_modules/react-bootstrap/esm/Row.js","../../../../libs/shared/src/hooks/UseInfiniteScroll.ts","../../../../libs/shared/src/hooks/UseInfiniteList.ts","../../../../libs/shared/src/components/infinite-scroll-footer/infinite-scroll-footer.module.scss","../../../../libs/shared/src/components/infinite-scroll-footer/InfiniteScrollFooter.tsx","../../../../libs/shared/src/components/video-list/VideoListHelper.tsx","../../../../libs/shared/src/components/video-list/partial-loading/partial-video-list.module.scss","../../../../libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","../../../../libs/shared/src/components/forms/form-checkbox/Checkbox.tsx","../../../../libs/shared/src/images/svg/objects/GraduationCapSvg.tsx","../../../../libs/shared/src/hooks/UseGetMediaQueryString.ts"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}\n","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}\n",":local {\n .container {\n color: $gray-900;\n }\n\n .spinner {\n width: $cv-svg-size-md;\n height: $cv-svg-size-md;\n }\n}","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\n\nimport styles from './infinite-scroll-footer.module.scss';\n\ninterface InfiniteScrollFooterProps {\n isFetching: boolean;\n fetchNext?: (nextCursor: string) => void;\n nextCursor?: string;\n fetchOnScroll?: boolean;\n}\n\nInfiniteScrollFooter.defaultProps = {\n fetchOnScroll: false\n};\n\nexport function InfiniteScrollFooter(props: InfiniteScrollFooterProps): React.ReactElement {\n const [ ref, inView ] = useInView();\n\n React.useEffect(() => {\n if (!props.fetchOnScroll)\n return;\n\n if (!inView || props.isFetching)\n return;\n\n props.fetchNext?.(props.nextCursor);\n }, [ inView, props.isFetching ]);\n\n return (\n <div className={`p-3 text-center ${styles.container}`}>\n {props.isFetching ?\n <Spinner as='span' animation='border' role='status' className={styles.spinner} /> :\n (\n <div ref={ref}>\n <SvgContainer\n svg={ChevronDownSvg}\n className='svg-container cursor-pointer'\n size={SvgContainerSize.Large}\n onClick={() => props.fetchNext?.(props.nextCursor)}\n />\n </div>\n )\n }\n </div>\n );\n}\n","import { ColProps } from 'react-bootstrap';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport const VideoListHelper = {\n getThumbnailColumns(): ColProps {\n return {\n xs: 12,\n sm: 5,\n lg: 3\n };\n },\n\n getDetailsColumns(): ColProps {\n return {\n xs: 12,\n sm: 7,\n lg: 9\n };\n },\n\n getSize(breakpoints: Breakpoints, size: VideoItemSize): VideoItemSize {\n if (breakpoints.sm)\n return 'sm';\n \n return size || 'md';\n },\n\n getThumbnailColSize(hasDragHandle: boolean): number {\n return hasDragHandle ? 10 : 12;\n }\n};\n",":local {\n .partialOptions {\n width: 5.375rem;\n }\n\n .partialName {\n width: 18.75rem;\n height: 1.3125rem;\n }\n\n .partialDescription {\n width: 12.5rem;\n height: 1.3125rem;\n }\n\n .partialThumbnail {\n padding-bottom: 56.25%;\n }\n\n .partialDragHandle {\n width: 1.25rem;\n height: 1.25rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.module.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import * as React from 'react';\n\ninterface CheckboxProps {\n id: string;\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n label?: string;\n ariaLabel?: string;\n name?: string;\n className?: string;\n inputClassName?: string;\n disabled?: boolean;\n indeterminate?: boolean;\n isLabelEllipsis?: boolean;\n}\n\nCheckbox.defaultProps = {\n checked: false,\n label: '',\n className: ''\n};\n\n/**\n * Use this checkbox outside of Formik contexts\n */\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n const { isLabelEllipsis } = props;\n const ref = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (!ref.current)\n return;\n\n if (props.checked) {\n if (ref.current.indeterminate)\n ref.current.indeterminate = false;\n\n return;\n }\n\n if (props.indeterminate && !ref.current.indeterminate) {\n ref.current.indeterminate = true;\n return;\n }\n\n if (!props.indeterminate && ref.current.indeterminate)\n ref.current.indeterminate = false;\n }, [ ref.current, props.indeterminate, props.checked ]);\n\n return (\n <div className={`form-check pe-2 ${props.className}`}>\n <input\n ref={ref}\n type='checkbox'\n className={`${props.inputClassName} form-check-input`}\n id={props.id}\n name={props.name}\n checked={props.checked}\n onChange={props.onChange}\n disabled={props.disabled}\n aria-checked={props.checked}\n aria-label={props.ariaLabel}\n />\n {props.label && (\n <label className='form-check-label cursor-pointer align-top' htmlFor={props.id}>\n <span className={`${isLabelEllipsis ? 'clamp-1' : ''}`}>{props.label}</span>\n </label>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport function GraduationCapSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M16.863 20c-.662 0-1.21-.567-1.21-1.252s.548-1.252 1.21-1.252c.663 0 1.21.567 1.21 1.252S17.527 20 16.864 20m0-1.441a.183.183 0 0 0-.182.189c0 .118.068.189.182.189.115 0 .183-.071.183-.19a.183.183 0 0 0-.183-.188m0-.118a.516.516 0 0 1-.502-.52v-6.19L11.75 9.158a.53.53 0 0 1-.205-.71c.137-.26.456-.354.685-.212l4.886 2.717a.57.57 0 0 1 .274.473v6.496a.52.52 0 0 1-.526.52m-4.908-4.205a.8.8 0 0 1-.229-.048L2.296 9.51A.55.55 0 0 1 2 9.014c0-.212.114-.401.297-.472l9.52-4.489a.47.47 0 0 1 .434 0l9.452 4.489a.55.55 0 0 1 .297.472.49.49 0 0 1-.297.473l-9.52 4.701a.8.8 0 0 1-.228.048m-8.22-5.198 8.22 4.087 8.288-4.087-8.22-3.898zm8.151 8.41c-4.749 0-6.644-2.905-6.712-3.047a.7.7 0 0 1-.092-.284V10.81c0-.283.229-.52.503-.52s.502.237.502.52v3.142c.388.496 2.077 2.434 5.776 2.434 3.653 0 5.548-1.938 6.005-2.457v-2.93c0-.284.228-.52.502-.52s.502.236.502.52v3.118a.6.6 0 0 1-.091.307c-.046.142-2.192 3.024-6.895 3.024'\n />\n </svg>\n );\n}\n","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"DQBoqkL7.chunk.js","names":[],"sources":["../../../../../node_modules/react-bootstrap/esm/Row.js","../../../../libs/shared/src/hooks/UseInfiniteScroll.ts","../../../../libs/shared/src/hooks/UseInfiniteList.ts","../../../../libs/shared/src/components/infinite-scroll-footer/infinite-scroll-footer.module.scss","../../../../libs/shared/src/components/infinite-scroll-footer/InfiniteScrollFooter.tsx","../../../../libs/shared/src/components/video-list/VideoListHelper.tsx","../../../../libs/shared/src/components/video-list/partial-loading/partial-video-list.module.scss","../../../../libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","../../../../libs/shared/src/components/forms/form-checkbox/Checkbox.tsx","../../../../libs/shared/src/images/svg/objects/GraduationCapSvg.tsx","../../../../libs/shared/src/hooks/UseGetMediaQueryString.ts"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}\n","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}\n",":local {\n .container {\n color: $gray-900;\n }\n\n .spinner {\n width: $cv-svg-size-md;\n height: $cv-svg-size-md;\n }\n}","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\n\nimport styles from './infinite-scroll-footer.module.scss';\n\ninterface InfiniteScrollFooterProps {\n isFetching: boolean;\n fetchNext?: (nextCursor: string) => void;\n nextCursor?: string;\n fetchOnScroll?: boolean;\n}\n\nInfiniteScrollFooter.defaultProps = {\n fetchOnScroll: false\n};\n\nexport function InfiniteScrollFooter(props: InfiniteScrollFooterProps): React.ReactElement {\n const [ ref, inView ] = useInView();\n\n React.useEffect(() => {\n if (!props.fetchOnScroll)\n return;\n\n if (!inView || props.isFetching)\n return;\n\n props.fetchNext?.(props.nextCursor);\n }, [ inView, props.isFetching ]);\n\n return (\n <div className={`p-3 text-center ${styles.container}`}>\n {props.isFetching ?\n <Spinner as='span' animation='border' role='status' className={styles.spinner} /> :\n (\n <div ref={ref}>\n <SvgContainer\n svg={ChevronDownSvg}\n className='svg-container cursor-pointer'\n size={SvgContainerSize.Large}\n onClick={() => props.fetchNext?.(props.nextCursor)}\n />\n </div>\n )\n }\n </div>\n );\n}\n","import { ColProps } from 'react-bootstrap';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport const VideoListHelper = {\n getThumbnailColumns(): ColProps {\n return {\n xs: 12,\n sm: 5,\n lg: 3\n };\n },\n\n getDetailsColumns(): ColProps {\n return {\n xs: 12,\n sm: 7,\n lg: 9\n };\n },\n\n getSize(breakpoints: Breakpoints, size: VideoItemSize): VideoItemSize {\n if (breakpoints.sm)\n return 'sm';\n \n return size || 'md';\n },\n\n getThumbnailColSize(hasDragHandle: boolean): number {\n return hasDragHandle ? 10 : 12;\n }\n};\n",":local {\n .partialOptions {\n width: 5.375rem;\n }\n\n .partialName {\n width: 18.75rem;\n height: 1.3125rem;\n }\n\n .partialDescription {\n width: 12.5rem;\n height: 1.3125rem;\n }\n\n .partialThumbnail {\n padding-bottom: 56.25%;\n }\n\n .partialDragHandle {\n width: 1.25rem;\n height: 1.25rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.module.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import * as React from 'react';\n\ninterface CheckboxProps {\n id: string;\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n label?: string;\n ariaLabel?: string;\n name?: string;\n className?: string;\n inputClassName?: string;\n disabled?: boolean;\n indeterminate?: boolean;\n isLabelEllipsis?: boolean;\n}\n\nCheckbox.defaultProps = {\n checked: false,\n label: '',\n className: ''\n};\n\n/**\n * Use this checkbox outside of Formik contexts\n */\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n const { isLabelEllipsis } = props;\n const ref = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (!ref.current)\n return;\n\n if (props.checked) {\n if (ref.current.indeterminate)\n ref.current.indeterminate = false;\n\n return;\n }\n\n if (props.indeterminate && !ref.current.indeterminate) {\n ref.current.indeterminate = true;\n return;\n }\n\n if (!props.indeterminate && ref.current.indeterminate)\n ref.current.indeterminate = false;\n }, [ ref.current, props.indeterminate, props.checked ]);\n\n return (\n <div className={`form-check pe-2 ${props.className}`}>\n <input\n ref={ref}\n type='checkbox'\n className={`${props.inputClassName} form-check-input`}\n id={props.id}\n name={props.name}\n checked={props.checked}\n onChange={props.onChange}\n disabled={props.disabled}\n aria-checked={props.checked}\n aria-label={props.ariaLabel}\n />\n {props.label && (\n <label className='form-check-label cursor-pointer align-top' htmlFor={props.id}>\n <span className={`${isLabelEllipsis ? 'clamp-1' : ''}`}>{props.label}</span>\n </label>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport function GraduationCapSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M16.863 20c-.662 0-1.21-.567-1.21-1.252s.548-1.252 1.21-1.252c.663 0 1.21.567 1.21 1.252S17.527 20 16.864 20m0-1.441a.183.183 0 0 0-.182.189c0 .118.068.189.182.189.115 0 .183-.071.183-.19a.183.183 0 0 0-.183-.188m0-.118a.516.516 0 0 1-.502-.52v-6.19L11.75 9.158a.53.53 0 0 1-.205-.71c.137-.26.456-.354.685-.212l4.886 2.717a.57.57 0 0 1 .274.473v6.496a.52.52 0 0 1-.526.52m-4.908-4.205a.8.8 0 0 1-.229-.048L2.296 9.51A.55.55 0 0 1 2 9.014c0-.212.114-.401.297-.472l9.52-4.489a.47.47 0 0 1 .434 0l9.452 4.489a.55.55 0 0 1 .297.472.49.49 0 0 1-.297.473l-9.52 4.701a.8.8 0 0 1-.228.048m-8.22-5.198 8.22 4.087 8.288-4.087-8.22-3.898zm8.151 8.41c-4.749 0-6.644-2.905-6.712-3.047a.7.7 0 0 1-.092-.284V10.81c0-.283.229-.52.503-.52s.502.237.502.52v3.142c.388.496 2.077 2.434 5.776 2.434 3.653 0 5.548-1.938 6.005-2.457v-2.93c0-.284.228-.52.502-.52s.502.236.502.52v3.118a.6.6 0 0 1-.091.307c-.046.142-2.192 3.024-6.895 3.024'\n />\n </svg>\n );\n}\n","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,St as n,mn as r}from"./CnnBLBPY.chunk.js";import{n as i,t as a}from"./Dn3hwC-o.chunk.js";import{t as o}from"./C3Hw2TpW2.chunk.js";var s=r(t()),c=e();function l(e){let{region:t,isLoading:r}=o();return s.useEffect(()=>{r||n.trigger({application:i.TV,action:a.Tv.CHANNELS,args:[t],params:e.requestVideo?{requestVideo:e.requestVideo}:void 0},{replace:!0})},[t]),(0,c.jsx)(c.Fragment,{})}export{l as TvHomeView};
2
- //# sourceMappingURL=C2AXrtJf.chunk.js.map
1
+ import{C as e,D as t,St as n,mn as r}from"./CnnBLBPY.chunk.js";import{n as i,t as a}from"./Dn3hwC-o.chunk.js";import{t as o}from"./BrVyRSUS2.chunk.js";var s=r(t()),c=e();function l(e){let{region:t,isLoading:r}=o();return s.useEffect(()=>{r||n.trigger({application:i.TV,action:a.Tv.CHANNELS,args:[t],params:e.requestVideo?{requestVideo:e.requestVideo}:void 0},{replace:!0})},[t]),(0,c.jsx)(c.Fragment,{})}export{l as TvHomeView};
2
+ //# sourceMappingURL=DeXP2wHV.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"C2AXrtJf.chunk.js","names":[],"sources":["../../src/apps/tv/views/tv-home/TvHomeView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\n\ninterface TvHomeViewProps {\n requestVideo: boolean;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TvHomeView(props: TvHomeViewProps): JSX.Element {\n const { region, isLoading } = useSelectedRegion();\n\n React.useEffect(() => {\n if (isLoading)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS,\n args: [region],\n params: props.requestVideo ? {\n requestVideo: props.requestVideo\n } : undefined\n }, { replace: true });\n }, [region]);\n\n return <></>;\n}\n"],"mappings":"0KAcA,SAAgB,EAAW,EAAqC,CAC9D,GAAM,CAAE,SAAQ,aAAc,GAAmB,CAgBjD,OAdA,EAAM,cAAgB,CAChB,GAGJ,EAAmB,QAAQ,CACzB,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,SACnB,KAAM,CAAC,EAAO,CACd,OAAQ,EAAM,aAAe,CAC3B,aAAc,EAAM,aACrB,CAAG,IAAA,GACL,CAAE,CAAE,QAAS,GAAM,CAAC,EACpB,CAAC,EAAO,CAAC,EAEL,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"DeXP2wHV.chunk.js","names":[],"sources":["../../src/apps/tv/views/tv-home/TvHomeView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\n\ninterface TvHomeViewProps {\n requestVideo: boolean;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TvHomeView(props: TvHomeViewProps): JSX.Element {\n const { region, isLoading } = useSelectedRegion();\n\n React.useEffect(() => {\n if (isLoading)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS,\n args: [region],\n params: props.requestVideo ? {\n requestVideo: props.requestVideo\n } : undefined\n }, { replace: true });\n }, [region]);\n\n return <></>;\n}\n"],"mappings":"0KAcA,SAAgB,EAAW,EAAqC,CAC9D,GAAM,CAAE,SAAQ,aAAc,GAAmB,CAgBjD,OAdA,EAAM,cAAgB,CAChB,GAGJ,EAAmB,QAAQ,CACzB,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,SACnB,KAAM,CAAC,EAAO,CACd,OAAQ,EAAM,aAAe,CAC3B,aAAc,EAAM,aACrB,CAAG,IAAA,GACL,CAAE,CAAE,QAAS,GAAM,CAAC,EACpB,CAAC,EAAO,CAAC,EAEL,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t}from"./CnnBLBPY.chunk.js";import{I as n}from"./app-BGxmHvGl.js";var r={adFreeBadge:`_adFreeBadge_1pwvw_1`,small:`_small_1pwvw_5`};t();var i=e(),a=`tv.adFreeBadge`;function o(e){return(0,i.jsx)(`div`,{className:`${r.adFreeBadge} ${e.small?r.small:``} ${e.className||``} d-flex align-items-center rounded bg-red text-white fw-semibold px-1 font-size-sm`,children:(0,i.jsx)(n,{namespace:a,phrase:`adFree`})})}export{o as t};
2
- //# sourceMappingURL=U0UyGd9c2.chunk.js.map
1
+ import{C as e,D as t}from"./CnnBLBPY.chunk.js";import{I as n}from"./app-CgkYY4K0.js";var r={adFreeBadge:`_adFreeBadge_1pwvw_1`,small:`_small_1pwvw_5`};t();var i=e(),a=`tv.adFreeBadge`;function o(e){return(0,i.jsx)(`div`,{className:`${r.adFreeBadge} ${e.small?r.small:``} ${e.className||``} d-flex align-items-center rounded bg-red text-white fw-semibold px-1 font-size-sm`,children:(0,i.jsx)(n,{namespace:a,phrase:`adFree`})})}export{o as t};
2
+ //# sourceMappingURL=Df82DFJ62.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"U0UyGd9c2.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-ad-free-badge/tv-ad-free-badge.module.scss","../../src/apps/tv/components/tv-ad-free-badge/TvAdFreeBadge.tsx"],"sourcesContent":[":local {\n .adFreeBadge {\n font-size: 0.75rem;\n height: 1.5rem;\n\n &.small {\n height: 1.25rem;\n }\n }\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './tv-ad-free-badge.module.scss';\n\nconst namespace = 'tv.adFreeBadge';\n\ninterface AdFreeBadgeProps {\n small?: boolean;\n className?: string;\n}\n\nexport function TvAdFreeBadge(props: AdFreeBadgeProps) {\n return (\n <div className={`${styles.adFreeBadge} ${props.small ? styles.small : ''} ${props.className || ''} d-flex align-items-center rounded bg-red text-white fw-semibold px-1 font-size-sm`}>\n <Text namespace={namespace} phrase='adFree' />\n </div>\n );\n}\n"],"mappings":"qKCMM,EAAY,iBAOlB,SAAgB,EAAc,EAAyB,CACrD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,GAAG,EAAO,YAAY,GAAG,EAAM,MAAQ,EAAO,MAAQ,GAAG,GAAG,EAAM,WAAa,GAAG,8FAChG,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,SAAW,CAAA,CAC1C,CAAA"}
1
+ {"version":3,"file":"Df82DFJ62.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-ad-free-badge/tv-ad-free-badge.module.scss","../../src/apps/tv/components/tv-ad-free-badge/TvAdFreeBadge.tsx"],"sourcesContent":[":local {\n .adFreeBadge {\n font-size: 0.75rem;\n height: 1.5rem;\n\n &.small {\n height: 1.25rem;\n }\n }\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './tv-ad-free-badge.module.scss';\n\nconst namespace = 'tv.adFreeBadge';\n\ninterface AdFreeBadgeProps {\n small?: boolean;\n className?: string;\n}\n\nexport function TvAdFreeBadge(props: AdFreeBadgeProps) {\n return (\n <div className={`${styles.adFreeBadge} ${props.small ? styles.small : ''} ${props.className || ''} d-flex align-items-center rounded bg-red text-white fw-semibold px-1 font-size-sm`}>\n <Text namespace={namespace} phrase='adFree' />\n </div>\n );\n}\n"],"mappings":"qKCMM,EAAY,iBAOlB,SAAgB,EAAc,EAAyB,CACrD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,GAAG,EAAO,YAAY,GAAG,EAAM,MAAQ,EAAO,MAAQ,GAAG,GAAG,EAAM,WAAa,GAAG,8FAChG,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,SAAW,CAAA,CAC1C,CAAA"}