@clickview/exchange 0.62.0-rc.0 → 0.62.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +531 -531
- package/dist/bundles.json +1 -1
- package/dist/css/Crtlho0p.chunk.css +8 -0
- package/dist/en.json +1 -1
- package/dist/scripts/{cIPkkuhG.chunk.js → 1iKkdpYv.chunk.js} +2 -2
- package/dist/scripts/{cIPkkuhG.chunk.js.map → 1iKkdpYv.chunk.js.map} +1 -1
- package/dist/scripts/{uPFXIvcK2.chunk.js → 8pXw5z942.chunk.js} +2 -2
- package/dist/scripts/{uPFXIvcK2.chunk.js.map → 8pXw5z942.chunk.js.map} +1 -1
- package/dist/scripts/{DVVx1aiS2.chunk.js → B7m3cCi42.chunk.js} +2 -2
- package/dist/scripts/{DVVx1aiS2.chunk.js.map → B7m3cCi42.chunk.js.map} +1 -1
- package/dist/scripts/{DBJfKQKx.chunk.js → BAN6QE-X.chunk.js} +2 -2
- package/dist/scripts/{DBJfKQKx.chunk.js.map → BAN6QE-X.chunk.js.map} +1 -1
- package/dist/scripts/{YGLkoFLc.chunk.js → BHbt9wzx.chunk.js} +2 -2
- package/dist/scripts/{YGLkoFLc.chunk.js.map → BHbt9wzx.chunk.js.map} +1 -1
- package/dist/scripts/{DeevL6eQ.chunk.js → BINz0dmF.chunk.js} +2 -2
- package/dist/scripts/{DeevL6eQ.chunk.js.map → BINz0dmF.chunk.js.map} +1 -1
- package/dist/scripts/{Dg-h5qnR.chunk.js → BPYdRA7H.chunk.js} +2 -2
- package/dist/scripts/{Dg-h5qnR.chunk.js.map → BPYdRA7H.chunk.js.map} +1 -1
- package/dist/scripts/{CkH6ird3.chunk.js → BS8sYAAh.chunk.js} +2 -2
- package/dist/scripts/{CkH6ird3.chunk.js.map → BS8sYAAh.chunk.js.map} +1 -1
- package/dist/scripts/{CKrB9r9w.chunk.js → BaSi1pig.chunk.js} +2 -2
- package/dist/scripts/{CKrB9r9w.chunk.js.map → BaSi1pig.chunk.js.map} +1 -1
- package/dist/scripts/{BRQhDr-02.chunk.js → BbrEvwAi2.chunk.js} +2 -2
- package/dist/scripts/{BRQhDr-02.chunk.js.map → BbrEvwAi2.chunk.js.map} +1 -1
- package/dist/scripts/{Ct8ETEOn2.chunk.js → Bi8itw8v2.chunk.js} +2 -2
- package/dist/scripts/{Ct8ETEOn2.chunk.js.map → Bi8itw8v2.chunk.js.map} +1 -1
- package/dist/scripts/{Co_6cSBX2.chunk.js → BlOKamx72.chunk.js} +2 -2
- package/dist/scripts/{Co_6cSBX2.chunk.js.map → BlOKamx72.chunk.js.map} +1 -1
- package/dist/scripts/{B0hNKKDw2.chunk.js → BobZ5p_m2.chunk.js} +2 -2
- package/dist/scripts/{B0hNKKDw2.chunk.js.map → BobZ5p_m2.chunk.js.map} +1 -1
- package/dist/scripts/{Nx0q4bij.chunk.js → BsLLiG1-.chunk.js} +2 -2
- package/dist/scripts/{Nx0q4bij.chunk.js.map → BsLLiG1-.chunk.js.map} +1 -1
- package/dist/scripts/{D0H6Hjd-2.chunk.js → BtdygabL2.chunk.js} +2 -2
- package/dist/scripts/{D0H6Hjd-2.chunk.js.map → BtdygabL2.chunk.js.map} +1 -1
- package/dist/scripts/{UjMbny4R.chunk.js → Bue5_bLM.chunk.js} +2 -2
- package/dist/scripts/{UjMbny4R.chunk.js.map → Bue5_bLM.chunk.js.map} +1 -1
- package/dist/scripts/{DBKlntFN2.chunk.js → BvamDkjt2.chunk.js} +2 -2
- package/dist/scripts/{DBKlntFN2.chunk.js.map → BvamDkjt2.chunk.js.map} +1 -1
- package/dist/scripts/{NInuYe7b2.chunk.js → BzJLc19T2.chunk.js} +2 -2
- package/dist/scripts/{NInuYe7b2.chunk.js.map → BzJLc19T2.chunk.js.map} +1 -1
- package/dist/scripts/{DyRGf1o8.chunk.js → C03mMZ4k.chunk.js} +2 -2
- package/dist/scripts/{DyRGf1o8.chunk.js.map → C03mMZ4k.chunk.js.map} +1 -1
- package/dist/scripts/{BV2vTX2L.chunk.js → C2AXrtJf.chunk.js} +2 -2
- package/dist/scripts/{BV2vTX2L.chunk.js.map → C2AXrtJf.chunk.js.map} +1 -1
- package/dist/scripts/{Fu0bLEzl2.chunk.js → C3Hw2TpW2.chunk.js} +2 -2
- package/dist/scripts/{Fu0bLEzl2.chunk.js.map → C3Hw2TpW2.chunk.js.map} +1 -1
- package/dist/scripts/{DoTtsl0X.chunk.js → CKL4ViMC.chunk.js} +2 -2
- package/dist/scripts/{DoTtsl0X.chunk.js.map → CKL4ViMC.chunk.js.map} +1 -1
- package/dist/scripts/{DtYC8Udi2.chunk.js → CKZJ2qae2.chunk.js} +2 -2
- package/dist/scripts/{DtYC8Udi2.chunk.js.map → CKZJ2qae2.chunk.js.map} +1 -1
- package/dist/scripts/{CyAM5o2e.chunk.js → CK_CN_mA.chunk.js} +2 -2
- package/dist/scripts/{CyAM5o2e.chunk.js.map → CK_CN_mA.chunk.js.map} +1 -1
- package/dist/scripts/{B6mSouu5.chunk.js → CL9SkODG.chunk.js} +2 -2
- package/dist/scripts/{B6mSouu5.chunk.js.map → CL9SkODG.chunk.js.map} +1 -1
- package/dist/scripts/{BHKm8WQq2.chunk.js → Ca_-2JTE2.chunk.js} +2 -2
- package/dist/scripts/{BHKm8WQq2.chunk.js.map → Ca_-2JTE2.chunk.js.map} +1 -1
- package/dist/scripts/{C7OCN_w_.chunk.js → CfNYdg0m.chunk.js} +2 -2
- package/dist/scripts/{C7OCN_w_.chunk.js.map → CfNYdg0m.chunk.js.map} +1 -1
- package/dist/scripts/{CUdaR862.chunk.js → Ct_4zyE3.chunk.js} +2 -2
- package/dist/scripts/{CUdaR862.chunk.js.map → Ct_4zyE3.chunk.js.map} +1 -1
- package/dist/scripts/{RiPZGw_q2.chunk.js → CxUrOnxW2.chunk.js} +2 -2
- package/dist/scripts/{RiPZGw_q2.chunk.js.map → CxUrOnxW2.chunk.js.map} +1 -1
- package/dist/scripts/{BJxTZJOX.chunk.js → DFXpg6rF.chunk.js} +2 -2
- package/dist/scripts/{BJxTZJOX.chunk.js.map → DFXpg6rF.chunk.js.map} +1 -1
- package/dist/scripts/{CKNdXwxe2.chunk.js → DG6L7zHU2.chunk.js} +2 -2
- package/dist/scripts/{CKNdXwxe2.chunk.js.map → DG6L7zHU2.chunk.js.map} +1 -1
- package/dist/scripts/{CvQQNf_J2.chunk.js → DKz4jhnr2.chunk.js} +2 -2
- package/dist/scripts/{CvQQNf_J2.chunk.js.map → DKz4jhnr2.chunk.js.map} +1 -1
- package/dist/scripts/{BOvQpQ21.chunk.js → DSZkTUVU.chunk.js} +2 -2
- package/dist/scripts/{BOvQpQ21.chunk.js.map → DSZkTUVU.chunk.js.map} +1 -1
- package/dist/scripts/{D5qMnGHT2.chunk.js → D_k-Kl3-2.chunk.js} +2 -2
- package/dist/scripts/{D5qMnGHT2.chunk.js.map → D_k-Kl3-2.chunk.js.map} +1 -1
- package/dist/scripts/{Dp0gbhZx2.chunk.js → DfOgl-0-2.chunk.js} +2 -2
- package/dist/scripts/{Dp0gbhZx2.chunk.js.map → DfOgl-0-2.chunk.js.map} +1 -1
- package/dist/scripts/{CeCXhgoJ.chunk.js → DkB0qBxI.chunk.js} +2 -2
- package/dist/scripts/{CeCXhgoJ.chunk.js.map → DkB0qBxI.chunk.js.map} +1 -1
- package/dist/scripts/{CeHHO1Hv.chunk.js → DmVXt6_V.chunk.js} +2 -2
- package/dist/scripts/{CeHHO1Hv.chunk.js.map → DmVXt6_V.chunk.js.map} +1 -1
- package/dist/scripts/{aDegERgV2.chunk.js → DqM6hYTJ2.chunk.js} +2 -2
- package/dist/scripts/{aDegERgV2.chunk.js.map → DqM6hYTJ2.chunk.js.map} +1 -1
- package/dist/scripts/{BPgKK-d32.chunk.js → DsHiClyc2.chunk.js} +2 -2
- package/dist/scripts/{BPgKK-d32.chunk.js.map → DsHiClyc2.chunk.js.map} +1 -1
- package/dist/scripts/{D9zlZIWi2.chunk.js → DuPL-nK72.chunk.js} +2 -2
- package/dist/scripts/{D9zlZIWi2.chunk.js.map → DuPL-nK72.chunk.js.map} +1 -1
- package/dist/scripts/{ZSP3Vfha2.chunk.js → EIJf9JbR2.chunk.js} +2 -2
- package/dist/scripts/{ZSP3Vfha2.chunk.js.map → EIJf9JbR2.chunk.js.map} +1 -1
- package/dist/scripts/{CqNKzFA4.chunk.js → EO2xPuAQ.chunk.js} +2 -2
- package/dist/scripts/{CqNKzFA4.chunk.js.map → EO2xPuAQ.chunk.js.map} +1 -1
- package/dist/scripts/{o2htB_49.chunk.js → F1LOVRO_.chunk.js} +2 -2
- package/dist/scripts/{o2htB_49.chunk.js.map → F1LOVRO_.chunk.js.map} +1 -1
- package/dist/scripts/{BggsU83p2.chunk.js → G-hiM6b42.chunk.js} +2 -2
- package/dist/scripts/{BggsU83p2.chunk.js.map → G-hiM6b42.chunk.js.map} +1 -1
- package/dist/scripts/{B0VKYPiu.chunk.js → MYu2AEsL.chunk.js} +2 -2
- package/dist/scripts/{B0VKYPiu.chunk.js.map → MYu2AEsL.chunk.js.map} +1 -1
- package/dist/scripts/{B9Rb6IIb.chunk.js → NtrZI2Ef.chunk.js} +2 -2
- package/dist/scripts/{B9Rb6IIb.chunk.js.map → NtrZI2Ef.chunk.js.map} +1 -1
- package/dist/scripts/{CRHkMr9_2.chunk.js → OBYDGOgI2.chunk.js} +2 -2
- package/dist/scripts/{CRHkMr9_2.chunk.js.map → OBYDGOgI2.chunk.js.map} +1 -1
- package/dist/scripts/{zp5MUThO.chunk.js → Pixwk-h-.chunk.js} +2 -2
- package/dist/scripts/{zp5MUThO.chunk.js.map → Pixwk-h-.chunk.js.map} +1 -1
- package/dist/scripts/{Ds3cFntF2.chunk.js → SDRXIwM22.chunk.js} +3 -3
- package/dist/scripts/{Ds3cFntF2.chunk.js.map → SDRXIwM22.chunk.js.map} +1 -1
- package/dist/scripts/{C1u2qBZg2.chunk.js → U0UyGd9c2.chunk.js} +2 -2
- package/dist/scripts/{C1u2qBZg2.chunk.js.map → U0UyGd9c2.chunk.js.map} +1 -1
- package/dist/scripts/{CYUx40jk.chunk.js → amjwjus3.chunk.js} +2 -2
- package/dist/scripts/{CYUx40jk.chunk.js.map → amjwjus3.chunk.js.map} +1 -1
- package/dist/scripts/{app-DDrsm5nt.js → app-BGxmHvGl.js} +3 -3
- package/dist/scripts/{app-DDrsm5nt.js.map → app-BGxmHvGl.js.map} +1 -1
- package/dist/scripts/{CgGl8jzo.chunk.js → eUKFc6dK.chunk.js} +2 -2
- package/dist/scripts/{CgGl8jzo.chunk.js.map → eUKFc6dK.chunk.js.map} +1 -1
- package/dist/scripts/{CWsmm40y.chunk.js → l7UAnIb0.chunk.js} +2 -2
- package/dist/scripts/{CWsmm40y.chunk.js.map → l7UAnIb0.chunk.js.map} +1 -1
- package/dist/scripts/{BsSKrRku2.chunk.js → nMyWveQA2.chunk.js} +2 -2
- package/dist/scripts/{BsSKrRku2.chunk.js.map → nMyWveQA2.chunk.js.map} +1 -1
- package/dist/scripts/{CKUk2HqE.chunk.js → pOL5_XNC.chunk.js} +2 -2
- package/dist/scripts/{CKUk2HqE.chunk.js.map → pOL5_XNC.chunk.js.map} +1 -1
- package/dist/scripts/{eLmgigsW.chunk.js → sViLex0Q.chunk.js} +2 -2
- package/dist/scripts/{eLmgigsW.chunk.js.map → sViLex0Q.chunk.js.map} +1 -1
- package/dist/scripts/{Xs1Bv1h-.chunk.js → vvCGyl_q.chunk.js} +2 -2
- package/dist/scripts/{Xs1Bv1h-.chunk.js.map → vvCGyl_q.chunk.js.map} +1 -1
- package/dist/scripts/{BijIuzIs2.chunk.js → xEGWFFpD2.chunk.js} +2 -2
- package/dist/scripts/{BijIuzIs2.chunk.js.map → xEGWFFpD2.chunk.js.map} +1 -1
- package/package.json +1 -1
|
@@ -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-
|
|
2
|
-
//# sourceMappingURL=
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D0H6Hjd-2.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":"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,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,d as n,mn as r,s as i,yt as a}from"./CnnBLBPY.chunk.js";import{g as o}from"./DW0w8_XN.chunk.js";import{l as s,u as c}from"./D8clSITt.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"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,d as n,mn as r,s as i,yt as a}from"./CnnBLBPY.chunk.js";import{g as o}from"./DW0w8_XN.chunk.js";import{l as s,u as c}from"./D8clSITt.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"./DIgVUF5c.chunk.js";import{t as h}from"./BjaJoJzM.chunk.js";import{t as g}from"./xL848v0O.chunk.js";import{t as _}from"./DRTfS6nN.chunk.js";import{r as v}from"./BK-FLPB-.chunk.js";import{F as y,I as b}from"./app-BGxmHvGl.js";import{t as x}from"./DWCNy_Jd2.chunk.js";import{t as S}from"./DuPL-nK72.chunk.js";import{n as C,t as w}from"./CXtVyCmH.chunk.js";import{r as T,t as E}from"./BsLLiG1-.chunk.js";import{n as D}from"./Jf-R5ehU.chunk.js";import{n as O,r as k}from"./ApcDOLl8.chunk.js";import{t as A}from"./DmVXt6_V.chunk.js";import{t as j}from"./CfNYdg0m.chunk.js";import{t as M}from"./BLtXMKpA.chunk.js";import{t as N}from"./U0UyGd9c2.chunk.js";import{t as P}from"./RDQrcIZZ2.chunk.js";import{t as F}from"./BcJCL8cu2.chunk.js";import{t as I}from"./BdSdO6n62.chunk.js";import{t as L}from"./C6jF43q92.chunk.js";import{t as R}from"./8pXw5z942.chunk.js";import{n as z,t as B}from"./6124murE2.chunk.js";import{t as V}from"./C3Hw2TpW2.chunk.js";import{t as H}from"./DkB0qBxI.chunk.js";var U=r(t()),W=e(),G=`tv.searchResultsEmptyState`;function K(e){return(0,W.jsx)(y.Provider,{value:G,children:(0,W.jsxs)(m,{children:[(0,W.jsx)(m.Image,{src:_.EmptyStates.SEARCH}),(0,W.jsx)(m.Heading,{children:e.query?(0,W.jsx)(b,{phrase:`headingWithQuery`,options:{query:e.query}}):(0,W.jsx)(b,{phrase:`headingWithoutQuery`})}),(0,W.jsx)(m.Info,{children:(0,W.jsx)(b,{phrase:`info`})})]})})}var q={highlight:`_highlight_107l1_1`,badgeOverlay:`_badgeOverlay_107l1_8`};function J(e,t){let n=new RegExp(t,`gi`);return e.replace(n,e=>`<span class=${q.highlight}>${e}</span>`)}function Y(e){let{program:t,query:n,region:r,getVideoActions:i}=e,[a,s]=U.useState(!1),c={application:l.TV,action:u.Tv.PREVIEW,args:[r.code,t.id]},d=F(t.startTime,t.timeZone),f=F(t.stopTime,t.timeZone),p=Math.abs(g.diffBetween(d,f,`milliseconds`));return(0,W.jsxs)(`div`,{className:`row gx-3 mb-3`,children:[(0,W.jsx)(`div`,{className:`col-3 flex-column align-items-flex-start pe-2`,children:(0,W.jsx)(`div`,{className:`rounded rounded-3 overflow-hidden`,children:(0,W.jsxs)(D,{imageType:v.Thumbnails,data:t.thumbnailUrl,appLink:c,children:[(0,W.jsx)(O,{type:k.Video}),(0,W.jsx)(`div`,{className:q.badgeOverlay,children:(0,W.jsx)(w,{type:C.DurationApproximate,data:p})})]})})}),(0,W.jsxs)(`div`,{className:`col-9 pb-2`,children:[(0,W.jsx)(x,{actions:i(t),className:`float-end mt-n1`,actionsDropdownClassName:`btn btn-link ms-1`}),(0,W.jsx)(o,{appLink:c,children:(0,W.jsx)(`h5`,{className:`h4 mb-1 align-middle text-dark text-truncate`,title:t.title??``,children:(0,W.jsx)(`span`,{dangerouslySetInnerHTML:{__html:J(t.title,n)}})})}),(0,W.jsxs)(M,{className:`mb-1`,children:[t.channelLogoUrl&&(0,W.jsx)(P,{logoUrl:t.channelLogoUrl,className:`me-1`,small:!0}),(0,W.jsx)(I,{program:t,className:`me-1`,showDate:!0,showEndTime:!0}),t.hasAdsFree&&(0,W.jsx)(N,{small:!0})]}),(0,W.jsx)(`div`,{className:`mb-1`,children:(0,W.jsx)(`span`,{dangerouslySetInnerHTML:{__html:J(t.description,n)}})}),!!t.subtitleHits?.length&&(0,W.jsxs)(`div`,{children:[t.subtitleHits?.map(((e,t)=>!a&&t>1?(0,W.jsx)(U.Fragment,{},t):(0,W.jsxs)(o,{appLink:{...c,args:[...c.args],params:{currentTime:e.hitStartTime/1e3}},className:`d-block text-dark`,children:[(0,W.jsxs)(`span`,{className:`fw-semibold`,children:[`[`,g.format(g.add(d,e.hitStartTime,`milliseconds`),`h:mm:ss a`),`]`]}),`\xA0`,(0,W.jsx)(`span`,{dangerouslySetInnerHTML:{__html:J(e.srtFragment,n)}})]},t))),!a&&t.subtitleHits?.length>2&&(0,W.jsx)(`div`,{className:`text-info cursor-pointer`,onClick:()=>s(!0),children:`Show more`})]})]})]})}X.defaultProps={queryParams:{}};function X(e){let{queryParams:t}=e,{query:r}=t,o=c(),m=S(),g=s(L.region(e.region)),_=s(L.regions()),v=s(g.data&&L.channels(g.data.code));g.hasCompleted&&!g.data&&A(a.BadRequest);let{setRegion:y}=V();R(g),j([_,v]),h({title:r??``});let{items:b,hasMore:x,isFetching:C,nextCursor:w}=p(g.data&&D,O,k,e=>e.results,e=>e.page*25>e.totalNumber?null:(e.page+1).toString());function D(e){return L.search(g.data.code,t,+e)}function O(e){return o(D(e))}function k(e,t){if(e===1)return A(t);m.error(`Something went wrong`)}let M=H(`video-list`,g.data),N=g.hasCompleted&&_.hasCompleted&&v.hasCompleted,P=[T.TvChannel(v.data),T.TvDateBroadcast(),T.TvFields()];return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(B,{query:r,region:g.data}),(0,W.jsxs)(`div`,{className:`d-flex justify-content-between mb-2`,children:[(0,W.jsx)(E,{queryParams:t,mainFilters:P,analyticsOptions:{entity:i.SearchResults,location:n.SearchFilters},appLink:{application:l.TV,action:u.Tv.SEARCH,args:[g.data?.code]},hideDivider:!0,isFetchingOptions:!N}),(0,W.jsx)(z,{currentRegion:g.data,regions:_.data,appLink:{application:l.TV,action:u.Tv.SEARCH,params:{query:r}},onClick:y})]}),N&&(0,W.jsx)(W.Fragment,{children:b?.length?(0,W.jsxs)(W.Fragment,{children:[b.map((e,t)=>(0,W.jsx)(Y,{program:e,query:r,region:g.data,getVideoActions:M},t)),(x||C)&&(0,W.jsx)(f,{isFetching:C,fetchNext:O,nextCursor:w})]}):(0,W.jsx)(W.Fragment,{children:C?(0,W.jsx)(`div`,{className:`m-n2`,children:(0,W.jsx)(d,{})}):(0,W.jsx)(K,{query:r})})})]})}export{X as TvSearchResultsView};
|
|
2
|
+
//# sourceMappingURL=Bue5_bLM.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UjMbny4R.chunk.js","names":[],"sources":["../../src/apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState.tsx","../../src/apps/tv/views/tv-search-results/components/tv-search-result-item/tv-search-result-item.module.scss","../../src/apps/tv/views/tv-search-results/components/tv-search-result-item/TvSearchResultItem.tsx","../../src/apps/tv/views/tv-search-results/TvSearchResultsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'tv.searchResultsEmptyState';\n\ninterface TvSearchResultsStateProps {\n query?: string;\n}\n\nexport function TvSearchResultsState(props: TvSearchResultsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.SEARCH} />\n\n <EmptyState.Heading>\n {props.query ?\n <Text phrase='headingWithQuery' options={{ query: props.query }} /> :\n <Text phrase='headingWithoutQuery' />\n }\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n",":local {\n .highlight {\n background-color: rgba($yellow, 0.5);\n display: inline-block;\n margin: 0px -0.1875rem;\n padding: 0px 0.1875rem;\n border-radius: $border-radius;\n }\n\n .badgeOverlay {\n position: absolute;\n right: map-get($spacers, 2);\n bottom: map-get($spacers, 2);\n height: 1.5rem;\n z-index: 2;\n\n :global(.duration-badge-new) {\n font-size: 100%;\n font-weight: 500;\n height: 100%;\n }\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions, Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvChannelBadge } from 'apps/tv/components/tv-channel-badge/TvChannelBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport styles from './tv-search-result-item.module.scss';\n\nfunction highlightText(text: string, query: string): string {\n const regex = new RegExp(query, 'gi');\n return text.replace(regex, match => `<span class=${styles.highlight}>${match}</span>`);\n}\n\ninterface TvSearchResultItemProps {\n query: string;\n program: TvSearchResult;\n region: TvRegion;\n getVideoActions: (video: TvProgram) => ActionOptions[];\n}\n\nexport function TvSearchResultItem(props: TvSearchResultItemProps): JSX.Element {\n const { program, query, region, getVideoActions } = props;\n\n const [ showMore, setShowMore ] = React.useState(false);\n\n const appLink = {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region.code, program.id ]\n };\n\n const startTime = toLocalTime(program.startTime, program.timeZone);\n const stopTime = toLocalTime(program.stopTime, program.timeZone);\n const diff = Math.abs(DateHelper.diffBetween(startTime, stopTime, 'milliseconds'));\n\n return (\n <div className='row gx-3 mb-3'>\n <div className='col-3 flex-column align-items-flex-start pe-2'>\n <div className='rounded rounded-3 overflow-hidden'>\n <BaseImage\n imageType={ImageType.Thumbnails}\n data={program.thumbnailUrl}\n appLink={appLink}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n\n <div className={styles.badgeOverlay}>\n <Badge\n type={BadgeType.DurationApproximate}\n data={diff}\n />\n </div>\n </BaseImage>\n </div>\n </div>\n <div className='col-9 pb-2'>\n <ActionsComponent\n actions={getVideoActions(program as TvProgram)}\n className='float-end mt-n1'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n <AppLink appLink={appLink}>\n <h5 className='h4 mb-1 align-middle text-dark text-truncate' title={program.title ?? ''}>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.title, query)\n }}></span>\n </h5>\n </AppLink>\n <BadgeListContainer className='mb-1'>\n {program.channelLogoUrl && <TvChannelBadge logoUrl={program.channelLogoUrl} className='me-1' small />}\n <TvProgramTimeBadge program={program as TvProgram} className='me-1' showDate showEndTime />\n {program.hasAdsFree && <TvAdFreeBadge small />}\n </BadgeListContainer>\n <div className='mb-1'>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.description, query)\n }}></span>\n </div>\n {!!program.subtitleHits?.length &&\n <div>\n {program.subtitleHits?.map(((hit, index) => {\n if (!showMore && index > 1)\n return <React.Fragment key={index} />;\n\n return (\n <AppLink\n key={index}\n appLink={{\n ...appLink,\n args: [...appLink.args],\n params: {\n currentTime: hit.hitStartTime / 1000\n }\n }}\n className='d-block text-dark'\n >\n <span className='fw-semibold'>\n [{DateHelper.format(DateHelper.add(startTime, hit.hitStartTime, 'milliseconds'), 'h:mm:ss a')}]\n </span>\n \n <span dangerouslySetInnerHTML={{\n __html: highlightText(hit.srtFragment, query)\n }}></span>\n </AppLink>\n );\n }))}\n {!showMore && program.subtitleHits?.length > 2 && <div className='text-info cursor-pointer' onClick={() => setShowMore(true)}>Show more</div>}\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\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';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { TvSearchResponse } from 'apps/tv/interfaces/responses/TvSearchResponse';\nimport { TvSearchResultsState } from 'apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState';\n\nimport { TvSearchResultItem } from './components/tv-search-result-item/TvSearchResultItem';\n\ninterface TvSearchResultsViewProps {\n region: string;\n queryParams: HashObject;\n}\n\nTvSearchResultsView.defaultProps = {\n queryParams: {}\n};\n\nexport function TvSearchResultsView(props: TvSearchResultsViewProps): JSX.Element {\n const { queryParams } = props;\n const { query } = queryParams;\n\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n if (region.hasCompleted && !region.data) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n const { setRegion } = useSelectedRegion();\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels ]);\n\n useSetPageMetadata({ title: query ?? '' });\n\n const {\n items: programs,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<TvSearchResult, TvSearchResponse>(\n region.data && getRequest,\n fetchNext,\n onError,\n response => response.results,\n response => {\n if (response.page * 25 > response.totalNumber)\n return null;\n\n return (response.page + 1).toString();\n }\n );\n\n function getRequest(cursor?: string): Flight.Request {\n return TvRequests.search(\n region.data.code,\n queryParams,\n +cursor\n );\n }\n\n function fetchNext(cursor?: string): void {\n return fetch(getRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error('Something went wrong');\n }\n\n const getVideoActions = useGetTvActions('video-list', region.data);\n\n const dataLoaded = region.hasCompleted && regions.hasCompleted && channels.hasCompleted;\n\n const mainFilters = [\n Filters.TvChannel(channels.data),\n Filters.TvDateBroadcast(),\n Filters.TvFields()\n ];\n\n return (\n <>\n <TvSearchBar query={query} region={region.data} />\n\n <div className='d-flex justify-content-between mb-2'>\n <SearchFilters\n queryParams={queryParams}\n mainFilters={mainFilters}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.SearchFilters\n }}\n appLink={{ application: AppChannels.TV, action: Actions.Tv.SEARCH, args: [region.data?.code]}}\n hideDivider\n isFetchingOptions={!dataLoaded}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.SEARCH,\n params: { query: query }\n }}\n onClick={setRegion}\n />\n </div>\n\n {dataLoaded && (\n <>\n {programs?.length ? (\n <>\n {programs.map((program, index) => {\n return (\n <TvSearchResultItem\n key={index}\n program={program}\n query={query}\n region={region.data}\n getVideoActions={getVideoActions}\n />\n );\n })}\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n ) : (\n <>\n {isFetching ? (\n <div className='m-n2'>\n <PartialVideoList />\n </div>\n ) : <TvSearchResultsState query={query} />}\n </>\n )}\n </>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Bue5_bLM.chunk.js","names":[],"sources":["../../src/apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState.tsx","../../src/apps/tv/views/tv-search-results/components/tv-search-result-item/tv-search-result-item.module.scss","../../src/apps/tv/views/tv-search-results/components/tv-search-result-item/TvSearchResultItem.tsx","../../src/apps/tv/views/tv-search-results/TvSearchResultsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'tv.searchResultsEmptyState';\n\ninterface TvSearchResultsStateProps {\n query?: string;\n}\n\nexport function TvSearchResultsState(props: TvSearchResultsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.SEARCH} />\n\n <EmptyState.Heading>\n {props.query ?\n <Text phrase='headingWithQuery' options={{ query: props.query }} /> :\n <Text phrase='headingWithoutQuery' />\n }\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n",":local {\n .highlight {\n background-color: rgba($yellow, 0.5);\n display: inline-block;\n margin: 0px -0.1875rem;\n padding: 0px 0.1875rem;\n border-radius: $border-radius;\n }\n\n .badgeOverlay {\n position: absolute;\n right: map-get($spacers, 2);\n bottom: map-get($spacers, 2);\n height: 1.5rem;\n z-index: 2;\n\n :global(.duration-badge-new) {\n font-size: 100%;\n font-weight: 500;\n height: 100%;\n }\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions, Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvChannelBadge } from 'apps/tv/components/tv-channel-badge/TvChannelBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport styles from './tv-search-result-item.module.scss';\n\nfunction highlightText(text: string, query: string): string {\n const regex = new RegExp(query, 'gi');\n return text.replace(regex, match => `<span class=${styles.highlight}>${match}</span>`);\n}\n\ninterface TvSearchResultItemProps {\n query: string;\n program: TvSearchResult;\n region: TvRegion;\n getVideoActions: (video: TvProgram) => ActionOptions[];\n}\n\nexport function TvSearchResultItem(props: TvSearchResultItemProps): JSX.Element {\n const { program, query, region, getVideoActions } = props;\n\n const [ showMore, setShowMore ] = React.useState(false);\n\n const appLink = {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region.code, program.id ]\n };\n\n const startTime = toLocalTime(program.startTime, program.timeZone);\n const stopTime = toLocalTime(program.stopTime, program.timeZone);\n const diff = Math.abs(DateHelper.diffBetween(startTime, stopTime, 'milliseconds'));\n\n return (\n <div className='row gx-3 mb-3'>\n <div className='col-3 flex-column align-items-flex-start pe-2'>\n <div className='rounded rounded-3 overflow-hidden'>\n <BaseImage\n imageType={ImageType.Thumbnails}\n data={program.thumbnailUrl}\n appLink={appLink}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n\n <div className={styles.badgeOverlay}>\n <Badge\n type={BadgeType.DurationApproximate}\n data={diff}\n />\n </div>\n </BaseImage>\n </div>\n </div>\n <div className='col-9 pb-2'>\n <ActionsComponent\n actions={getVideoActions(program as TvProgram)}\n className='float-end mt-n1'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n <AppLink appLink={appLink}>\n <h5 className='h4 mb-1 align-middle text-dark text-truncate' title={program.title ?? ''}>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.title, query)\n }}></span>\n </h5>\n </AppLink>\n <BadgeListContainer className='mb-1'>\n {program.channelLogoUrl && <TvChannelBadge logoUrl={program.channelLogoUrl} className='me-1' small />}\n <TvProgramTimeBadge program={program as TvProgram} className='me-1' showDate showEndTime />\n {program.hasAdsFree && <TvAdFreeBadge small />}\n </BadgeListContainer>\n <div className='mb-1'>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.description, query)\n }}></span>\n </div>\n {!!program.subtitleHits?.length &&\n <div>\n {program.subtitleHits?.map(((hit, index) => {\n if (!showMore && index > 1)\n return <React.Fragment key={index} />;\n\n return (\n <AppLink\n key={index}\n appLink={{\n ...appLink,\n args: [...appLink.args],\n params: {\n currentTime: hit.hitStartTime / 1000\n }\n }}\n className='d-block text-dark'\n >\n <span className='fw-semibold'>\n [{DateHelper.format(DateHelper.add(startTime, hit.hitStartTime, 'milliseconds'), 'h:mm:ss a')}]\n </span>\n \n <span dangerouslySetInnerHTML={{\n __html: highlightText(hit.srtFragment, query)\n }}></span>\n </AppLink>\n );\n }))}\n {!showMore && program.subtitleHits?.length > 2 && <div className='text-info cursor-pointer' onClick={() => setShowMore(true)}>Show more</div>}\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\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';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { TvSearchResponse } from 'apps/tv/interfaces/responses/TvSearchResponse';\nimport { TvSearchResultsState } from 'apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState';\n\nimport { TvSearchResultItem } from './components/tv-search-result-item/TvSearchResultItem';\n\ninterface TvSearchResultsViewProps {\n region: string;\n queryParams: HashObject;\n}\n\nTvSearchResultsView.defaultProps = {\n queryParams: {}\n};\n\nexport function TvSearchResultsView(props: TvSearchResultsViewProps): JSX.Element {\n const { queryParams } = props;\n const { query } = queryParams;\n\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n if (region.hasCompleted && !region.data) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n const { setRegion } = useSelectedRegion();\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels ]);\n\n useSetPageMetadata({ title: query ?? '' });\n\n const {\n items: programs,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<TvSearchResult, TvSearchResponse>(\n region.data && getRequest,\n fetchNext,\n onError,\n response => response.results,\n response => {\n if (response.page * 25 > response.totalNumber)\n return null;\n\n return (response.page + 1).toString();\n }\n );\n\n function getRequest(cursor?: string): Flight.Request {\n return TvRequests.search(\n region.data.code,\n queryParams,\n +cursor\n );\n }\n\n function fetchNext(cursor?: string): void {\n return fetch(getRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error('Something went wrong');\n }\n\n const getVideoActions = useGetTvActions('video-list', region.data);\n\n const dataLoaded = region.hasCompleted && regions.hasCompleted && channels.hasCompleted;\n\n const mainFilters = [\n Filters.TvChannel(channels.data),\n Filters.TvDateBroadcast(),\n Filters.TvFields()\n ];\n\n return (\n <>\n <TvSearchBar query={query} region={region.data} />\n\n <div className='d-flex justify-content-between mb-2'>\n <SearchFilters\n queryParams={queryParams}\n mainFilters={mainFilters}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.SearchFilters\n }}\n appLink={{ application: AppChannels.TV, action: Actions.Tv.SEARCH, args: [region.data?.code]}}\n hideDivider\n isFetchingOptions={!dataLoaded}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.SEARCH,\n params: { query: query }\n }}\n onClick={setRegion}\n />\n </div>\n\n {dataLoaded && (\n <>\n {programs?.length ? (\n <>\n {programs.map((program, index) => {\n return (\n <TvSearchResultItem\n key={index}\n program={program}\n query={query}\n region={region.data}\n getVideoActions={getVideoActions}\n />\n );\n })}\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n ) : (\n <>\n {isFetching ? (\n <div className='m-n2'>\n <PartialVideoList />\n </div>\n ) : <TvSearchResultsState query={query} />}\n </>\n )}\n </>\n )}\n </>\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"./
|
|
2
|
-
//# sourceMappingURL=
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DBKlntFN2.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":"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,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,O as n,St as r,mn as i}from"./CnnBLBPY.chunk.js";import{_ as a,r as o}from"./DW0w8_XN.chunk.js";import{d as s,l as c}from"./D8clSITt.chunk.js";import{t as l}from"./CBDo4oAU.chunk.js";import{t as u}from"./GN6vNflP.chunk.js";import{t as d}from"./DXNyYUq4.chunk.js";import{t as f}from"./DzbIsgVg.chunk.js";import{t as p}from"./CrBD6Z4s.chunk.js";import{t as m}from"./CRRZVEmA.chunk.js";import{I as h,J as g,M as _,Q as v,U as y,Z as b,tt as x,z as S}from"./app-DDrsm5nt.js";import{t as C}from"./CtVGVkI72.chunk.js";import{i as w,n as ee,r as T,t as E}from"./BPgKK-d32.chunk.js";import{t as D}from"./DWCNy_Jd2.chunk.js";import{t as te}from"./B9Q0qBO32.chunk.js";import{t as O}from"./ZSP3Vfha2.chunk.js";import{t as k}from"./BijIuzIs2.chunk.js";import{t as ne}from"./CKNdXwxe2.chunk.js";import{t as A}from"./D9zlZIWi2.chunk.js";import{t as re}from"./B0hNKKDw2.chunk.js";import{t as j}from"./BggsU83p2.chunk.js";var M=C(),N=i(t());function P(e,t,n){if(d.isEqual(e.id,t))return[e,n];let r=e.children;if(!r||!r.length)return[null,null];for(let i=0;i<r.length;i++){let[a,o]=P(r[i],t,[...n,e]);if(a)return[a,o]}return[null,null]}var F={find(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[r]=P(e.children[n],t,[]);if(r)return r}},getPath(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[,r]=P(e.children[n],t,[]);if(r?.length)return r}},getParent(e,t){let n=F.getPath(e,t);return n?.length?n[n.length-1]:null},convertNestedObjectToTree(e){let t={...e.data,children:e.children};return t.children?.length&&(t.children=t.children.map(F.convertNestedObjectToTree)),t},findDepth(e,t,n=0){if(!e||e.length===0)return 0;let r=0;for(let i of e){if(i.data?.id?.toString()===t.toString())return n;let e=F.findDepth(i.children,t,n+1);if(e>0){r=e;break}}return r},findMaxChildDepth(e,t=0){if(!e||e.length===0)return t;let n=t;for(let r of e){let e=F.findMaxChildDepth(r.children,t+1);n=Math.max(n,e)}return n},findTargetNode(e,t){if(!e||e.length===0)return null;for(let n of e){if(n.data?.id?.toString()===t.toString())return n;let e=F.findTargetNode(n.children,t);if(e!==null)return e}return null},isMaxDepth(e,t,n,r=7){let i=F.findTargetNode(e,t);return F.findMaxChildDepth(i.children)+F.findDepth(e,n)>=r},flatten(e){if(!e)return[];let t=[];function r(e){t.push(n.omit(e,[`children`])),e.children.forEach(r)}return e.children.forEach(r),t}},I={tree:`_tree_u0qyb_1`,text:`_text_u0qyb_1`,chevron:`_chevron_u0qyb_4`,disabled:`_disabled_u0qyb_163`,root:`_root_u0qyb_166`,selected:`_selected_u0qyb_172`,actions:`_actions_u0qyb_175`,node:`_node_u0qyb_185`,noActions:`_noActions_u0qyb_188`},L=e();function R(e){function t(){let t=`${I.text} clamp-4`;return e.className&&(t+=` ${e.className}`),t}return e.isDisabled?(0,L.jsx)(o,{title:typeof e.disabledTooltip==`string`?e.disabledTooltip:e.disabledTooltip?.(e.tree),spanHack:!0,spanHackClassName:`d-inline-block flex-grow-1`,children:(0,L.jsx)(`span`,{className:`${t()} text-secondary ${I.disabled}`,children:e.text})}):(0,L.jsx)(`div`,{className:t(),children:e.text})}var z=`tree-actions`;B.defaultProps={selectedLinkClassName:I.selected};function B(e){let{tree:t,selectedIds:n,getAppLink:i,onSelect:o,isDisabled:s,isClickDisabled:c,actions:l,isDropdown:u}=e,f=N.useRef(null),p=N.useMemo(()=>n?.some(e=>F.find(t,e)),[t,n]),m=e.openDepth&&e.depth<e.openDepth,[h,g]=N.useState(p||m),_=n?.some(e=>d.isEqual(t.id,e)),v=!!t.children&&!!t.children.length;e.maxDisplayDepth&&v&&(v=e.depth<e.maxDisplayDepth),N.useEffect(()=>{if(!f.current||!u)return;let e=e=>{e.stopPropagation(),y()};return f.current.addEventListener(`click`,e),()=>{f.current&&f.current.removeEventListener(`click`,e)}},[f.current,o]),N.useEffect(()=>{e.multiSelect||h&&(p||_||!e.selectedIds?.length&&s?.(e.tree)||m||g(!1))},[n]);function y(){if(!c?.(t)){if(e.multiSelect||g(!h),i){r.trigger(i(t));return}if(s?.(t)){o(null);return}o?.(t)}}function b(t){if(t.stopPropagation(),e.multiSelect){g(!h);return}y()}function x(){let t=`py-1 d-flex align-items-center w-100 position-relative ${I.node}`;return _&&(t+=` `+e.selectedLinkClassName),l?.length||(t+=` `+I.noActions),p&&e.multiSelect&&(t+=` text-underline fst-italic`),t}return e.maxDisplayDepth&&e.depth>e.maxDisplayDepth?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`li`,{className:`position-relative ${h?``:I.collapsed} ${e.isRoot?I.root:``}`,children:(0,L.jsxs)(`div`,{className:`position-relative`,children:[(0,L.jsxs)(a,{className:x(),onClick:u?null:y,ref:f,children:[v&&(0,L.jsx)(`div`,{className:I.chevron,onClick:b,children:(0,L.jsx)(te,{direction:h?`down`:`right`})}),(0,L.jsx)(R,{tree:t,text:t.name||t.description,isDisabled:s?.(t)||c?.(t),disabledTooltip:e.disabledTooltip})]}),!!e.actions&&(0,L.jsx)(D,{className:I.actions,actions:l?.map(e=>({...e,appLink:e.getAppLink(t)})),actionsDropdownClassName:`btn btn-light ${z} py-0`}),h&&(0,L.jsx)(V,{...e,isChild:!0,depth:e.depth+1},t.id)]})})}function V(e){let{tree:t,...n}=e;return!t||!t.children?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`ul`,{className:`m-0 p-0 list-unstyled ${I.tree}`,children:t.children.map((t,r)=>(0,L.jsx)(B,{tree:t,...n,isRoot:!e.isChild,depth:e.depth||0},r))})}var H=`libraries.addToLibraryForm`,U=u.encloseNamespace(H);function W(e){let t=T(),n=!t.values.library.canAddContent,r=e.videoLibraries?.find(e=>e.id===t.values.library.id),i=N.useMemo(()=>({children:e.getCategoryTree(t.values.library.id).map(F.convertNestedObjectToTree)}),[t.values.library.id]);return(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsx)(`div`,{className:`alert alert-info`,children:(0,L.jsx)(h,{namespace:H,phrase:`alreadyInLibrary`,options:{library:t.values.library.name}})}),n&&(0,L.jsx)(`p`,{children:(0,L.jsx)(h,{namespace:H,phrase:`sendLibraryRequest`,options:{video:e.video.name}})}),(0,L.jsxs)(S,{children:[e.libraries.length>1&&(0,L.jsx)(w,{as:`select`,label:U(`selectLibrary`),name:`library`,value:t.values.library?.id??``,className:t.values.library?.id?``:`text-secondary`,showRequiredStar:!0,onChange:n=>{t.setFieldValue(`folder`,null);let r=n.target.value;t.setFieldValue(`library`,e.libraries.find(e=>e.id.toString()===r.toString()))},children:e.libraries.map(e=>(0,L.jsx)(`option`,{value:e.id,className:`text-dark`,children:e.name},e.id))}),(0,L.jsx)(w,{label:U(`selectFolder`),name:`folder`,showRequiredStar:!0,disabled:!t.values.library,children:()=>(0,L.jsx)(M.Scrollbars,{autoHeight:!0,autoHeightMax:300,className:`border rounded-3`,children:(0,L.jsx)(V,{tree:i,onSelect:e=>t.setFieldValue(`folder`,e),isDisabled:e.isFolderDisabled,disabledTooltip:u.getPhrase(H,`disabledFolder`),selectedIds:t.values.folder?.id?[t.values.folder.id]:void 0,selectedLinkClassName:`bg-light`})})}),!!t.values.folder&&(0,L.jsx)(`p`,{className:`mt-n2`,children:(0,L.jsx)(h,{namespace:H,phrase:n?`requestTo`:`addTo`,options:{folder:t.values.folder.name}})}),n&&(0,L.jsx)(w,{label:u.getPhrase(H,`comment`),as:`textarea`,name:`comment`,id:`comment`,placeholder:u.getPhrase(H,`commentPlaceholder`),value:t.values.comment}),(0,L.jsxs)(_,{children:[(0,L.jsx)(_.Cancel,{onClick:e.closePopup}),(0,L.jsx)(_.Submit,{variant:`dark`,text:U(`addToLibrary`)})]})]})]})}var G={sort(e){return e?.length?e.sort((e,t)=>{let n=e.isSharedLibrary?`shared_library`:e.type,r=t.isSharedLibrary?`shared_library`:t.type;return n===r?e.name.localeCompare(t.name):n===`custom_library`||n===`shared_library`&&r!==`custom_library`||n===`hosted_library`&&r!==`custom_library`&&r!==`shared_library`?-1:1}):[]},hasTwigOrTigtag(e,t){if(!t)return{hasTwig:!1,hasTigtag:!1};if(!t.isAuthenticated){let e=t.contentRegion===f.UK||t.contentRegion===f.SCOT;return{hasTwig:e,hasTigtag:e}}if(!e)return{hasTwig:!1,hasTigtag:!1};let n=!1,r=!1;for(let t of e)if(t.id.toString()===O.Libraries.TWIG?n=!0:t.id.toString()===O.Libraries.TIGTAG&&(r=!0),n&&r)break;return{hasTwig:n,hasTigtag:r}}},K=i(E()),q=`libraries.validation`,J=(0,K.object)().shape({comment:(0,K.string)().nullable().max(512,()=>u.getPhrase(q,`commentExceeds`)),library:(0,K.object)().required(()=>u.getPhrase(q,`libraryRequired`)).nullable(),folder:(0,K.object)().required(()=>u.getPhrase(q,`folderRequired`)).nullable()}),Y=function(e){return e[e.MasterVideo=1]=`MasterVideo`,e[e.MasterClip=2]=`MasterClip`,e[e.MasterInteractive=3]=`MasterInteractive`,e}({}),X=u.encloseNamespace(`shared.errorMessageHelper`),ie={"operation-not-allowed":`operationNotAllowed`,"library-not-supported":`libraryNotSupported`,"access-denied":`accessDenied`,"library-access-denied":`libraryAccessDenied`,"library-access-denied-create":`libraryAccessDeniedCreate`,"library-access-denied-fulfil":`libraryAccessDeniedFulfill`,"library-access-denied-not-authorized":`libraryAccessDeniedNotAuthorized`,"library-request-access-denied":`accessDenied`,"library-request-access-denied-create-request":`libraryRequestAccessDeniedCreateRequest`,"library-request-access-denied-process-comment":`libraryRequestAccessDeniedProcessComment`,"customer-not-found":`customerNotFound`,"customer-not-found-current-user":`customerNotFound`,"customer-not-found-library-owner":`customerNotFoundLibraryOwner`,"customer-not-found-destination-library-owner":`customerNotFoundLibraryOwner`,"user-not-found":`userNotFound`,"library-not-found":`libraryNotFound`,"video-not-found":`videoNotFound`,"category-not-found":`categoryNotFound`,"category-not-found-destination-not-provided":`categoryNotFoundDestinationNotProvided`,"category-not-found-not-in-library":`categoryNotFoundInLibrary`,"library-request-not-found":`libraryRequestNotFound`,"invalid-category-path":`invalidCategoryPath`,"library-api-error":`somethingWentWrong`,"content-not-playable":`contentNotPlayable`,"invalid-object":`invalidObject`,"same-request-existed":`sameRequestExisted`,"unknown-error":`somethingWentWrong`,"no-email":`noEmailError`},ae={"create-invitation-failed":`createInvitationFailed`,"invitation-resend-failed":`invitationResendFailed`,"failed-to-accept":`failedToAccept`,"invitee-not-found":`inviteeNotFound`,"invitation-not-found":`invitationNotFound`,"invitation-deleted":`invitationDeleted`,"too-many-emails":`tooManyEmails`},Z={libraryApiError(e){let t=ie[e?.responseJSON?.type];return X(t||`somethingWentWrong`)},inviteColleagueError(e){let t=ae[e?.responseJSON?.type];return X(t||`somethingWentWrong`)}},Q={buildOpenAppLinkUrl(e,t,n){return p.urlBuilder(`${e}/open`,{appLink:t,product:n})},buildOpenVideoUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`video:${t}`,n)},buildOpenClipUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`clip:${t}`,n)},buildOpenInteractiveUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`interactive:${t}`,n)},buildOpenTopicUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`topic:${t}`,n)},buildOpenSeriesUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`series:${t}`,n)},buildOpenPlaylistUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`playlist:${t}`,n)},buildOpenCategoryUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`category:${t}`,n)},buildOpenLibraryFolderUrl(e,t,n){let r=`library:${t.libraryId}:folder:${t.folderId}`;return Q.buildOpenAppLinkUrl(e,r,n)}},oe={[x.Video]:Y.MasterVideo,[x.Clip]:Y.MasterClip,[x.Interactive]:Y.MasterInteractive},$=u.encloseNamespace(`libraries.addToLibrary`);function se(e){let t=c(m.currentUser()),n=c(k.librariesWithCategories()),r=c(k.libraryRequestLibraries()),i=c(j.getVideoRequest(e.id,e.typeId)),a=(j.isClip(i.data)||j.isInteractive(i.data))&&i.data?._parentVideo,o=c(a&&ne.video(a.id)),{loading:u,handleGenerateReportError:f}=re(),p=c(b.config()),h=N.useMemo(()=>G.sort(r.data),[r.data]),_=s(),x=A(),S=!!t.data&&v.getOrSetSortType(t.data.id);function C(){let e=null,t=l.first(i.data?.libraries?.data)?.id;if(t&&i.data.categories.data?.length){let n=i.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}if(!t&&(t=l.first(o.data?.libraries?.data)?.id,t&&o.data.categories.data?.length)){let n=o.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}return{sourceLibraryId:t?+t:null,sourceCategoryId:e?+e:null}}function w(t,n){let{sourceLibraryId:r,sourceCategoryId:a}=C(),o={objectId:e.id.toString(),objectType:oe[e.typeId],message:t.comment,sourceLibraryId:r,destinationLibraryId:+t.library.id,metadata:{destinationCategoryId:+t.folder.id,sourceCategoryId:a}};_(k.addToLibrary(o,S)).then(()=>{t.library.canAddContent?x.success({type:g.Success,heading:``,message:$(`addToLibrarySuccess`,{folder:t.folder.name,video:i.data.name,escapeText:!0}),...e.folderAppLink?{appLink:{...e.folderAppLink,args:[t.library.id,t.folder.id,d.slugify(t.folder.name)]},appLinkText:$(`goToFolder`,{folder:t.folder.name}),appLinkClassName:`info-link`}:{extLink:Q.buildOpenLibraryFolderUrl(p.data.launchUrl,{libraryId:t.library.id,folderId:t.folder.id}),extLinkText:$(`goToFolder`,{folder:t.folder.name}),extLinkClassName:`info-link`}}):x.success({type:g.Pending,heading:$(`pendingApproval`),message:$(`libraryRequestSent`,{library:t.library.name,escapeText:!0})})}).catch(e=>{let t=Z.libraryApiError(e);f(e,t,t),n()}).finally(()=>{e.closePopup()})}function T(e){return n.data.find(t=>t.data.id.toString()===e.toString())?.children}function E(e){return!!i.data.categories?.data?.find(t=>t.id===e.id)}let D=r.data&&i.data&&n.data;return(0,L.jsx)(y,{title:$(`addToLibrary`),closePopup:e.closePopup,showLoadingSpinner:!D||u,children:D&&(0,L.jsx)(ee,{initialValues:{library:l.first(h),folder:null,comment:``},validationSchema:J,onSubmit:w,children:(0,L.jsx)(W,{libraries:h,closePopup:e.closePopup,isFolderDisabled:E,video:i.data,videoLibraries:i.data?.libraries?.data,getCategoryTree:T})})})}export{se as AddToLibraryView};
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,O as n,St as r,mn as i}from"./CnnBLBPY.chunk.js";import{_ as a,r as o}from"./DW0w8_XN.chunk.js";import{d as s,l as c}from"./D8clSITt.chunk.js";import{t as l}from"./CBDo4oAU.chunk.js";import{t as u}from"./GN6vNflP.chunk.js";import{t as d}from"./DXNyYUq4.chunk.js";import{t as f}from"./DzbIsgVg.chunk.js";import{t as p}from"./CrBD6Z4s.chunk.js";import{t as m}from"./CRRZVEmA.chunk.js";import{I as h,J as g,M as _,Q as v,U as y,Z as b,tt as x,z as S}from"./app-BGxmHvGl.js";import{t as C}from"./CtVGVkI72.chunk.js";import{i as w,n as ee,r as T,t as E}from"./DsHiClyc2.chunk.js";import{t as D}from"./DWCNy_Jd2.chunk.js";import{t as te}from"./B9Q0qBO32.chunk.js";import{t as O}from"./EIJf9JbR2.chunk.js";import{t as k}from"./xEGWFFpD2.chunk.js";import{t as ne}from"./DG6L7zHU2.chunk.js";import{t as A}from"./DuPL-nK72.chunk.js";import{t as re}from"./BobZ5p_m2.chunk.js";import{t as j}from"./G-hiM6b42.chunk.js";var M=C(),N=i(t());function P(e,t,n){if(d.isEqual(e.id,t))return[e,n];let r=e.children;if(!r||!r.length)return[null,null];for(let i=0;i<r.length;i++){let[a,o]=P(r[i],t,[...n,e]);if(a)return[a,o]}return[null,null]}var F={find(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[r]=P(e.children[n],t,[]);if(r)return r}},getPath(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[,r]=P(e.children[n],t,[]);if(r?.length)return r}},getParent(e,t){let n=F.getPath(e,t);return n?.length?n[n.length-1]:null},convertNestedObjectToTree(e){let t={...e.data,children:e.children};return t.children?.length&&(t.children=t.children.map(F.convertNestedObjectToTree)),t},findDepth(e,t,n=0){if(!e||e.length===0)return 0;let r=0;for(let i of e){if(i.data?.id?.toString()===t.toString())return n;let e=F.findDepth(i.children,t,n+1);if(e>0){r=e;break}}return r},findMaxChildDepth(e,t=0){if(!e||e.length===0)return t;let n=t;for(let r of e){let e=F.findMaxChildDepth(r.children,t+1);n=Math.max(n,e)}return n},findTargetNode(e,t){if(!e||e.length===0)return null;for(let n of e){if(n.data?.id?.toString()===t.toString())return n;let e=F.findTargetNode(n.children,t);if(e!==null)return e}return null},isMaxDepth(e,t,n,r=7){let i=F.findTargetNode(e,t);return F.findMaxChildDepth(i.children)+F.findDepth(e,n)>=r},flatten(e){if(!e)return[];let t=[];function r(e){t.push(n.omit(e,[`children`])),e.children.forEach(r)}return e.children.forEach(r),t}},I={tree:`_tree_u0qyb_1`,text:`_text_u0qyb_1`,chevron:`_chevron_u0qyb_4`,disabled:`_disabled_u0qyb_163`,root:`_root_u0qyb_166`,selected:`_selected_u0qyb_172`,actions:`_actions_u0qyb_175`,node:`_node_u0qyb_185`,noActions:`_noActions_u0qyb_188`},L=e();function R(e){function t(){let t=`${I.text} clamp-4`;return e.className&&(t+=` ${e.className}`),t}return e.isDisabled?(0,L.jsx)(o,{title:typeof e.disabledTooltip==`string`?e.disabledTooltip:e.disabledTooltip?.(e.tree),spanHack:!0,spanHackClassName:`d-inline-block flex-grow-1`,children:(0,L.jsx)(`span`,{className:`${t()} text-secondary ${I.disabled}`,children:e.text})}):(0,L.jsx)(`div`,{className:t(),children:e.text})}var z=`tree-actions`;B.defaultProps={selectedLinkClassName:I.selected};function B(e){let{tree:t,selectedIds:n,getAppLink:i,onSelect:o,isDisabled:s,isClickDisabled:c,actions:l,isDropdown:u}=e,f=N.useRef(null),p=N.useMemo(()=>n?.some(e=>F.find(t,e)),[t,n]),m=e.openDepth&&e.depth<e.openDepth,[h,g]=N.useState(p||m),_=n?.some(e=>d.isEqual(t.id,e)),v=!!t.children&&!!t.children.length;e.maxDisplayDepth&&v&&(v=e.depth<e.maxDisplayDepth),N.useEffect(()=>{if(!f.current||!u)return;let e=e=>{e.stopPropagation(),y()};return f.current.addEventListener(`click`,e),()=>{f.current&&f.current.removeEventListener(`click`,e)}},[f.current,o]),N.useEffect(()=>{e.multiSelect||h&&(p||_||!e.selectedIds?.length&&s?.(e.tree)||m||g(!1))},[n]);function y(){if(!c?.(t)){if(e.multiSelect||g(!h),i){r.trigger(i(t));return}if(s?.(t)){o(null);return}o?.(t)}}function b(t){if(t.stopPropagation(),e.multiSelect){g(!h);return}y()}function x(){let t=`py-1 d-flex align-items-center w-100 position-relative ${I.node}`;return _&&(t+=` `+e.selectedLinkClassName),l?.length||(t+=` `+I.noActions),p&&e.multiSelect&&(t+=` text-underline fst-italic`),t}return e.maxDisplayDepth&&e.depth>e.maxDisplayDepth?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`li`,{className:`position-relative ${h?``:I.collapsed} ${e.isRoot?I.root:``}`,children:(0,L.jsxs)(`div`,{className:`position-relative`,children:[(0,L.jsxs)(a,{className:x(),onClick:u?null:y,ref:f,children:[v&&(0,L.jsx)(`div`,{className:I.chevron,onClick:b,children:(0,L.jsx)(te,{direction:h?`down`:`right`})}),(0,L.jsx)(R,{tree:t,text:t.name||t.description,isDisabled:s?.(t)||c?.(t),disabledTooltip:e.disabledTooltip})]}),!!e.actions&&(0,L.jsx)(D,{className:I.actions,actions:l?.map(e=>({...e,appLink:e.getAppLink(t)})),actionsDropdownClassName:`btn btn-light ${z} py-0`}),h&&(0,L.jsx)(V,{...e,isChild:!0,depth:e.depth+1},t.id)]})})}function V(e){let{tree:t,...n}=e;return!t||!t.children?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`ul`,{className:`m-0 p-0 list-unstyled ${I.tree}`,children:t.children.map((t,r)=>(0,L.jsx)(B,{tree:t,...n,isRoot:!e.isChild,depth:e.depth||0},r))})}var H=`libraries.addToLibraryForm`,U=u.encloseNamespace(H);function W(e){let t=T(),n=!t.values.library.canAddContent,r=e.videoLibraries?.find(e=>e.id===t.values.library.id),i=N.useMemo(()=>({children:e.getCategoryTree(t.values.library.id).map(F.convertNestedObjectToTree)}),[t.values.library.id]);return(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsx)(`div`,{className:`alert alert-info`,children:(0,L.jsx)(h,{namespace:H,phrase:`alreadyInLibrary`,options:{library:t.values.library.name}})}),n&&(0,L.jsx)(`p`,{children:(0,L.jsx)(h,{namespace:H,phrase:`sendLibraryRequest`,options:{video:e.video.name}})}),(0,L.jsxs)(S,{children:[e.libraries.length>1&&(0,L.jsx)(w,{as:`select`,label:U(`selectLibrary`),name:`library`,value:t.values.library?.id??``,className:t.values.library?.id?``:`text-secondary`,showRequiredStar:!0,onChange:n=>{t.setFieldValue(`folder`,null);let r=n.target.value;t.setFieldValue(`library`,e.libraries.find(e=>e.id.toString()===r.toString()))},children:e.libraries.map(e=>(0,L.jsx)(`option`,{value:e.id,className:`text-dark`,children:e.name},e.id))}),(0,L.jsx)(w,{label:U(`selectFolder`),name:`folder`,showRequiredStar:!0,disabled:!t.values.library,children:()=>(0,L.jsx)(M.Scrollbars,{autoHeight:!0,autoHeightMax:300,className:`border rounded-3`,children:(0,L.jsx)(V,{tree:i,onSelect:e=>t.setFieldValue(`folder`,e),isDisabled:e.isFolderDisabled,disabledTooltip:u.getPhrase(H,`disabledFolder`),selectedIds:t.values.folder?.id?[t.values.folder.id]:void 0,selectedLinkClassName:`bg-light`})})}),!!t.values.folder&&(0,L.jsx)(`p`,{className:`mt-n2`,children:(0,L.jsx)(h,{namespace:H,phrase:n?`requestTo`:`addTo`,options:{folder:t.values.folder.name}})}),n&&(0,L.jsx)(w,{label:u.getPhrase(H,`comment`),as:`textarea`,name:`comment`,id:`comment`,placeholder:u.getPhrase(H,`commentPlaceholder`),value:t.values.comment}),(0,L.jsxs)(_,{children:[(0,L.jsx)(_.Cancel,{onClick:e.closePopup}),(0,L.jsx)(_.Submit,{variant:`dark`,text:U(`addToLibrary`)})]})]})]})}var G={sort(e){return e?.length?e.sort((e,t)=>{let n=e.isSharedLibrary?`shared_library`:e.type,r=t.isSharedLibrary?`shared_library`:t.type;return n===r?e.name.localeCompare(t.name):n===`custom_library`||n===`shared_library`&&r!==`custom_library`||n===`hosted_library`&&r!==`custom_library`&&r!==`shared_library`?-1:1}):[]},hasTwigOrTigtag(e,t){if(!t)return{hasTwig:!1,hasTigtag:!1};if(!t.isAuthenticated){let e=t.contentRegion===f.UK||t.contentRegion===f.SCOT;return{hasTwig:e,hasTigtag:e}}if(!e)return{hasTwig:!1,hasTigtag:!1};let n=!1,r=!1;for(let t of e)if(t.id.toString()===O.Libraries.TWIG?n=!0:t.id.toString()===O.Libraries.TIGTAG&&(r=!0),n&&r)break;return{hasTwig:n,hasTigtag:r}}},K=i(E()),q=`libraries.validation`,J=(0,K.object)().shape({comment:(0,K.string)().nullable().max(512,()=>u.getPhrase(q,`commentExceeds`)),library:(0,K.object)().required(()=>u.getPhrase(q,`libraryRequired`)).nullable(),folder:(0,K.object)().required(()=>u.getPhrase(q,`folderRequired`)).nullable()}),Y=function(e){return e[e.MasterVideo=1]=`MasterVideo`,e[e.MasterClip=2]=`MasterClip`,e[e.MasterInteractive=3]=`MasterInteractive`,e}({}),X=u.encloseNamespace(`shared.errorMessageHelper`),ie={"operation-not-allowed":`operationNotAllowed`,"library-not-supported":`libraryNotSupported`,"access-denied":`accessDenied`,"library-access-denied":`libraryAccessDenied`,"library-access-denied-create":`libraryAccessDeniedCreate`,"library-access-denied-fulfil":`libraryAccessDeniedFulfill`,"library-access-denied-not-authorized":`libraryAccessDeniedNotAuthorized`,"library-request-access-denied":`accessDenied`,"library-request-access-denied-create-request":`libraryRequestAccessDeniedCreateRequest`,"library-request-access-denied-process-comment":`libraryRequestAccessDeniedProcessComment`,"customer-not-found":`customerNotFound`,"customer-not-found-current-user":`customerNotFound`,"customer-not-found-library-owner":`customerNotFoundLibraryOwner`,"customer-not-found-destination-library-owner":`customerNotFoundLibraryOwner`,"user-not-found":`userNotFound`,"library-not-found":`libraryNotFound`,"video-not-found":`videoNotFound`,"category-not-found":`categoryNotFound`,"category-not-found-destination-not-provided":`categoryNotFoundDestinationNotProvided`,"category-not-found-not-in-library":`categoryNotFoundInLibrary`,"library-request-not-found":`libraryRequestNotFound`,"invalid-category-path":`invalidCategoryPath`,"library-api-error":`somethingWentWrong`,"content-not-playable":`contentNotPlayable`,"invalid-object":`invalidObject`,"same-request-existed":`sameRequestExisted`,"unknown-error":`somethingWentWrong`,"no-email":`noEmailError`},ae={"create-invitation-failed":`createInvitationFailed`,"invitation-resend-failed":`invitationResendFailed`,"failed-to-accept":`failedToAccept`,"invitee-not-found":`inviteeNotFound`,"invitation-not-found":`invitationNotFound`,"invitation-deleted":`invitationDeleted`,"too-many-emails":`tooManyEmails`},Z={libraryApiError(e){let t=ie[e?.responseJSON?.type];return X(t||`somethingWentWrong`)},inviteColleagueError(e){let t=ae[e?.responseJSON?.type];return X(t||`somethingWentWrong`)}},Q={buildOpenAppLinkUrl(e,t,n){return p.urlBuilder(`${e}/open`,{appLink:t,product:n})},buildOpenVideoUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`video:${t}`,n)},buildOpenClipUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`clip:${t}`,n)},buildOpenInteractiveUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`interactive:${t}`,n)},buildOpenTopicUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`topic:${t}`,n)},buildOpenSeriesUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`series:${t}`,n)},buildOpenPlaylistUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`playlist:${t}`,n)},buildOpenCategoryUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`category:${t}`,n)},buildOpenLibraryFolderUrl(e,t,n){let r=`library:${t.libraryId}:folder:${t.folderId}`;return Q.buildOpenAppLinkUrl(e,r,n)}},oe={[x.Video]:Y.MasterVideo,[x.Clip]:Y.MasterClip,[x.Interactive]:Y.MasterInteractive},$=u.encloseNamespace(`libraries.addToLibrary`);function se(e){let t=c(m.currentUser()),n=c(k.librariesWithCategories()),r=c(k.libraryRequestLibraries()),i=c(j.getVideoRequest(e.id,e.typeId)),a=(j.isClip(i.data)||j.isInteractive(i.data))&&i.data?._parentVideo,o=c(a&&ne.video(a.id)),{loading:u,handleGenerateReportError:f}=re(),p=c(b.config()),h=N.useMemo(()=>G.sort(r.data),[r.data]),_=s(),x=A(),S=!!t.data&&v.getOrSetSortType(t.data.id);function C(){let e=null,t=l.first(i.data?.libraries?.data)?.id;if(t&&i.data.categories.data?.length){let n=i.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}if(!t&&(t=l.first(o.data?.libraries?.data)?.id,t&&o.data.categories.data?.length)){let n=o.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}return{sourceLibraryId:t?+t:null,sourceCategoryId:e?+e:null}}function w(t,n){let{sourceLibraryId:r,sourceCategoryId:a}=C(),o={objectId:e.id.toString(),objectType:oe[e.typeId],message:t.comment,sourceLibraryId:r,destinationLibraryId:+t.library.id,metadata:{destinationCategoryId:+t.folder.id,sourceCategoryId:a}};_(k.addToLibrary(o,S)).then(()=>{t.library.canAddContent?x.success({type:g.Success,heading:``,message:$(`addToLibrarySuccess`,{folder:t.folder.name,video:i.data.name,escapeText:!0}),...e.folderAppLink?{appLink:{...e.folderAppLink,args:[t.library.id,t.folder.id,d.slugify(t.folder.name)]},appLinkText:$(`goToFolder`,{folder:t.folder.name}),appLinkClassName:`info-link`}:{extLink:Q.buildOpenLibraryFolderUrl(p.data.launchUrl,{libraryId:t.library.id,folderId:t.folder.id}),extLinkText:$(`goToFolder`,{folder:t.folder.name}),extLinkClassName:`info-link`}}):x.success({type:g.Pending,heading:$(`pendingApproval`),message:$(`libraryRequestSent`,{library:t.library.name,escapeText:!0})})}).catch(e=>{let t=Z.libraryApiError(e);f(e,t,t),n()}).finally(()=>{e.closePopup()})}function T(e){return n.data.find(t=>t.data.id.toString()===e.toString())?.children}function E(e){return!!i.data.categories?.data?.find(t=>t.id===e.id)}let D=r.data&&i.data&&n.data;return(0,L.jsx)(y,{title:$(`addToLibrary`),closePopup:e.closePopup,showLoadingSpinner:!D||u,children:D&&(0,L.jsx)(ee,{initialValues:{library:l.first(h),folder:null,comment:``},validationSchema:J,onSubmit:w,children:(0,L.jsx)(W,{libraries:h,closePopup:e.closePopup,isFolderDisabled:E,video:i.data,videoLibraries:i.data?.libraries?.data,getCategoryTree:T})})})}export{se as AddToLibraryView};
|
|
2
|
+
//# sourceMappingURL=BzJLc19T2.chunk.js.map
|