@clickview/exchange 0.60.0 → 0.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{DQWSGmPO.chunk.js → 2GC-PPDy.chunk.js} +2 -2
- package/dist/scripts/{DQWSGmPO.chunk.js.map → 2GC-PPDy.chunk.js.map} +1 -1
- package/dist/scripts/{C_vLRfti.chunk.js → 5yUbuX8U.chunk.js} +2 -2
- package/dist/scripts/{C_vLRfti.chunk.js.map → 5yUbuX8U.chunk.js.map} +1 -1
- package/dist/scripts/{DfR8N6KN.chunk.js → B1cVJr0t.chunk.js} +2 -2
- package/dist/scripts/{DfR8N6KN.chunk.js.map → B1cVJr0t.chunk.js.map} +1 -1
- package/dist/scripts/B4AGq_K6.chunk.js +2 -0
- package/dist/scripts/{u96pPes-.chunk.js.map → B4AGq_K6.chunk.js.map} +1 -1
- package/dist/scripts/{Ej7a07_u.chunk.js → B57luw20.chunk.js} +2 -2
- package/dist/scripts/{Ej7a07_u.chunk.js.map → B57luw20.chunk.js.map} +1 -1
- package/dist/scripts/{Csq5lSfL.chunk.js → B5VX0-05.chunk.js} +2 -2
- package/dist/scripts/{Csq5lSfL.chunk.js.map → B5VX0-05.chunk.js.map} +1 -1
- package/dist/scripts/{B1FXQpYQ.chunk.js → B5yQ-o2c.chunk.js} +2 -2
- package/dist/scripts/{B1FXQpYQ.chunk.js.map → B5yQ-o2c.chunk.js.map} +1 -1
- package/dist/scripts/{CfHe4kqG.chunk.js → BAaMmtA5.chunk.js} +2 -2
- package/dist/scripts/{CfHe4kqG.chunk.js.map → BAaMmtA5.chunk.js.map} +1 -1
- package/dist/scripts/{Ien9POMb.chunk.js → BJB2pvo-.chunk.js} +2 -2
- package/dist/scripts/{Ien9POMb.chunk.js.map → BJB2pvo-.chunk.js.map} +1 -1
- package/dist/scripts/{CXQ4Otim.chunk.js → BJmQsLgH.chunk.js} +2 -2
- package/dist/scripts/{CXQ4Otim.chunk.js.map → BJmQsLgH.chunk.js.map} +1 -1
- package/dist/scripts/{zD1LoHGd.chunk.js → BKtt7r9I.chunk.js} +2 -2
- package/dist/scripts/{zD1LoHGd.chunk.js.map → BKtt7r9I.chunk.js.map} +1 -1
- package/dist/scripts/{CLS2QNAc.chunk.js → BQ7D2X0o.chunk.js} +2 -2
- package/dist/scripts/{CLS2QNAc.chunk.js.map → BQ7D2X0o.chunk.js.map} +1 -1
- package/dist/scripts/{Bv-rZ1ws.chunk.js → BQTdalXA.chunk.js} +2 -2
- package/dist/scripts/{Bv-rZ1ws.chunk.js.map → BQTdalXA.chunk.js.map} +1 -1
- package/dist/scripts/{C52tRwVm.chunk.js → BR_C7b5M.chunk.js} +2 -2
- package/dist/scripts/{C52tRwVm.chunk.js.map → BR_C7b5M.chunk.js.map} +1 -1
- package/dist/scripts/{DxRcVeDA.chunk.js → BVViiWF8.chunk.js} +2 -2
- package/dist/scripts/{DxRcVeDA.chunk.js.map → BVViiWF8.chunk.js.map} +1 -1
- package/dist/scripts/{BwA4-wPQ.chunk.js → BWoESSLv.chunk.js} +2 -2
- package/dist/scripts/{BwA4-wPQ.chunk.js.map → BWoESSLv.chunk.js.map} +1 -1
- package/dist/scripts/{DhSjZ3FD.chunk.js → BZXmaOzt.chunk.js} +2 -2
- package/dist/scripts/{DhSjZ3FD.chunk.js.map → BZXmaOzt.chunk.js.map} +1 -1
- package/dist/scripts/{CkxEvxLE.chunk.js → Bcaq2QKq.chunk.js} +2 -2
- package/dist/scripts/{CkxEvxLE.chunk.js.map → Bcaq2QKq.chunk.js.map} +1 -1
- package/dist/scripts/{BuwaCenI.chunk.js → BdMXRcT3.chunk.js} +2 -2
- package/dist/scripts/{BuwaCenI.chunk.js.map → BdMXRcT3.chunk.js.map} +1 -1
- package/dist/scripts/{C0I1ovgn.chunk.js → BlabCH8N.chunk.js} +2 -2
- package/dist/scripts/{C0I1ovgn.chunk.js.map → BlabCH8N.chunk.js.map} +1 -1
- package/dist/scripts/{2NsO29qP.chunk.js → Bo-iDjSh.chunk.js} +2 -2
- package/dist/scripts/{2NsO29qP.chunk.js.map → Bo-iDjSh.chunk.js.map} +1 -1
- package/dist/scripts/{Cjy2K1zH.chunk.js → BqRzwJ-J.chunk.js} +2 -2
- package/dist/scripts/{Cjy2K1zH.chunk.js.map → BqRzwJ-J.chunk.js.map} +1 -1
- package/dist/scripts/BrdU6Hc2.chunk.js +2 -0
- package/dist/scripts/{WarFtyTw.chunk.js.map → BrdU6Hc2.chunk.js.map} +1 -1
- package/dist/scripts/{Cca7nDsG.chunk.js → Bt07VepM.chunk.js} +2 -2
- package/dist/scripts/{Cca7nDsG.chunk.js.map → Bt07VepM.chunk.js.map} +1 -1
- package/dist/scripts/{3hd9Wq4c.chunk.js → BtbirQej.chunk.js} +2 -2
- package/dist/scripts/{3hd9Wq4c.chunk.js.map → BtbirQej.chunk.js.map} +1 -1
- package/dist/scripts/{DCLePavE.chunk.js → Byh4RoGO.chunk.js} +2 -2
- package/dist/scripts/{DCLePavE.chunk.js.map → Byh4RoGO.chunk.js.map} +1 -1
- package/dist/scripts/{DTHb9InD.chunk.js → Bz3eAWKb.chunk.js} +2 -2
- package/dist/scripts/{DTHb9InD.chunk.js.map → Bz3eAWKb.chunk.js.map} +1 -1
- package/dist/scripts/{Cu0qnVi5.chunk.js → BzzIpmJj.chunk.js} +2 -2
- package/dist/scripts/{Cu0qnVi5.chunk.js.map → BzzIpmJj.chunk.js.map} +1 -1
- package/dist/scripts/{C7un82WP.chunk.js → C3LmB7vs.chunk.js} +2 -2
- package/dist/scripts/{C7un82WP.chunk.js.map → C3LmB7vs.chunk.js.map} +1 -1
- package/dist/scripts/C42aTLRq.chunk.js +2 -0
- package/dist/scripts/{C2TRBWPd.chunk.js.map → C42aTLRq.chunk.js.map} +1 -1
- package/dist/scripts/C4BzCmwg.chunk.js +2 -0
- package/dist/scripts/{BwdSbre5.chunk.js.map → C4BzCmwg.chunk.js.map} +1 -1
- package/dist/scripts/{B5mlcFJg.chunk.js → CFRAo5Sd.chunk.js} +2 -2
- package/dist/scripts/{B5mlcFJg.chunk.js.map → CFRAo5Sd.chunk.js.map} +1 -1
- package/dist/scripts/{C-Dd1wEr.chunk.js → CKGW3m2X.chunk.js} +3 -3
- package/dist/scripts/{C-Dd1wEr.chunk.js.map → CKGW3m2X.chunk.js.map} +1 -1
- package/dist/scripts/{D0Tp9Z65.chunk.js → CL6ZWANl.chunk.js} +2 -2
- package/dist/scripts/{D0Tp9Z65.chunk.js.map → CL6ZWANl.chunk.js.map} +1 -1
- package/dist/scripts/CLgSNdF3.chunk.js +2 -0
- package/dist/scripts/{BxcHYWuR.chunk.js.map → CLgSNdF3.chunk.js.map} +1 -1
- package/dist/scripts/{XOHWRN-E.chunk.js → CMfzHyZ-.chunk.js} +2 -2
- package/dist/scripts/{XOHWRN-E.chunk.js.map → CMfzHyZ-.chunk.js.map} +1 -1
- package/dist/scripts/{Vk3DDGeP.chunk.js → CPvN_Soe.chunk.js} +2 -2
- package/dist/scripts/{Vk3DDGeP.chunk.js.map → CPvN_Soe.chunk.js.map} +1 -1
- package/dist/scripts/{LLCJ2-mR.chunk.js → CYISpSfn.chunk.js} +2 -2
- package/dist/scripts/{LLCJ2-mR.chunk.js.map → CYISpSfn.chunk.js.map} +1 -1
- package/dist/scripts/{DfcdtoXp.chunk.js → CZQS_NPT.chunk.js} +2 -2
- package/dist/scripts/{DfcdtoXp.chunk.js.map → CZQS_NPT.chunk.js.map} +1 -1
- package/dist/scripts/{DeW1mjFb.chunk.js → CcHhPXQX.chunk.js} +2 -2
- package/dist/scripts/{DeW1mjFb.chunk.js.map → CcHhPXQX.chunk.js.map} +1 -1
- package/dist/scripts/{DLsA7vPe.chunk.js → CjgcuP3Q.chunk.js} +2 -2
- package/dist/scripts/{DLsA7vPe.chunk.js.map → CjgcuP3Q.chunk.js.map} +1 -1
- package/dist/scripts/{itWDNVl_.chunk.js → CmVJO7VI.chunk.js} +2 -2
- package/dist/scripts/{itWDNVl_.chunk.js.map → CmVJO7VI.chunk.js.map} +1 -1
- package/dist/scripts/{DBtiEa66.chunk.js → CpMkRd2a.chunk.js} +2 -2
- package/dist/scripts/{DBtiEa66.chunk.js.map → CpMkRd2a.chunk.js.map} +1 -1
- package/dist/scripts/{Y2rXSgTV.chunk.js → CqWvHKP5.chunk.js} +2 -2
- package/dist/scripts/{Y2rXSgTV.chunk.js.map → CqWvHKP5.chunk.js.map} +1 -1
- package/dist/scripts/{zO2QdKtt.chunk.js → CvgQRmjv.chunk.js} +2 -2
- package/dist/scripts/{zO2QdKtt.chunk.js.map → CvgQRmjv.chunk.js.map} +1 -1
- package/dist/scripts/{B9W1QLWn.chunk.js → CwexEXsi.chunk.js} +2 -2
- package/dist/scripts/{B9W1QLWn.chunk.js.map → CwexEXsi.chunk.js.map} +1 -1
- package/dist/scripts/{BpwHr0J0.chunk.js → CyQDGNI3.chunk.js} +2 -2
- package/dist/scripts/{BpwHr0J0.chunk.js.map → CyQDGNI3.chunk.js.map} +1 -1
- package/dist/scripts/{CHAwVVRw.chunk.js → D21QHirZ.chunk.js} +2 -2
- package/dist/scripts/{CHAwVVRw.chunk.js.map → D21QHirZ.chunk.js.map} +1 -1
- package/dist/scripts/{DxJfmOeq.chunk.js → D30qaGvM.chunk.js} +2 -2
- package/dist/scripts/{DxJfmOeq.chunk.js.map → D30qaGvM.chunk.js.map} +1 -1
- package/dist/scripts/{CJIYSOTb.chunk.js → D3juPk5Y.chunk.js} +2 -2
- package/dist/scripts/{CJIYSOTb.chunk.js.map → D3juPk5Y.chunk.js.map} +1 -1
- package/dist/scripts/{B-IgnxzS.chunk.js → D5FAzio3.chunk.js} +2 -2
- package/dist/scripts/{B-IgnxzS.chunk.js.map → D5FAzio3.chunk.js.map} +1 -1
- package/dist/scripts/{DIBfWWih.chunk.js → D7NOMVC8.chunk.js} +2 -2
- package/dist/scripts/{DIBfWWih.chunk.js.map → D7NOMVC8.chunk.js.map} +1 -1
- package/dist/scripts/{bogFjz2G.chunk.js → D7QRJrh2.chunk.js} +2 -2
- package/dist/scripts/{bogFjz2G.chunk.js.map → D7QRJrh2.chunk.js.map} +1 -1
- package/dist/scripts/{BZb44_Lh.chunk.js → D9df4Id7.chunk.js} +2 -2
- package/dist/scripts/{BZb44_Lh.chunk.js.map → D9df4Id7.chunk.js.map} +1 -1
- package/dist/scripts/{BYLKD39d.chunk.js → DFEBv1_O.chunk.js} +2 -2
- package/dist/scripts/{BYLKD39d.chunk.js.map → DFEBv1_O.chunk.js.map} +1 -1
- package/dist/scripts/{ChXJhYla.chunk.js → DGvEmnsP.chunk.js} +2 -2
- package/dist/scripts/{ChXJhYla.chunk.js.map → DGvEmnsP.chunk.js.map} +1 -1
- package/dist/scripts/DIkrkJAo.chunk.js +2 -0
- package/dist/scripts/{CD1TqwcB.chunk.js.map → DIkrkJAo.chunk.js.map} +1 -1
- package/dist/scripts/{BrjepIq5.chunk.js → DMAci3S_.chunk.js} +2 -2
- package/dist/scripts/{BrjepIq5.chunk.js.map → DMAci3S_.chunk.js.map} +1 -1
- package/dist/scripts/{COBKg5HM.chunk.js → DOsWx99L.chunk.js} +2 -2
- package/dist/scripts/{COBKg5HM.chunk.js.map → DOsWx99L.chunk.js.map} +1 -1
- package/dist/scripts/{Bh_0dfl8.chunk.js → DYRoLttd.chunk.js} +2 -2
- package/dist/scripts/{Bh_0dfl8.chunk.js.map → DYRoLttd.chunk.js.map} +1 -1
- package/dist/scripts/{DiR8Ds2K.chunk.js → DbNPwlCF.chunk.js} +2 -2
- package/dist/scripts/{DiR8Ds2K.chunk.js.map → DbNPwlCF.chunk.js.map} +1 -1
- package/dist/scripts/{BCd9ozXx.chunk.js → DeSk2YFH.chunk.js} +2 -2
- package/dist/scripts/{BCd9ozXx.chunk.js.map → DeSk2YFH.chunk.js.map} +1 -1
- package/dist/scripts/{CgplGqf6.chunk.js → DgYE66Vs.chunk.js} +2 -2
- package/dist/scripts/{CgplGqf6.chunk.js.map → DgYE66Vs.chunk.js.map} +1 -1
- package/dist/scripts/{DsPW-ne8.chunk.js → DigjAeMR.chunk.js} +2 -2
- package/dist/scripts/{DsPW-ne8.chunk.js.map → DigjAeMR.chunk.js.map} +1 -1
- package/dist/scripts/{Bu06fyx_.chunk.js → Dj7sCTJQ.chunk.js} +2 -2
- package/dist/scripts/{Bu06fyx_.chunk.js.map → Dj7sCTJQ.chunk.js.map} +1 -1
- package/dist/scripts/{B2OzXphM.chunk.js → Dk7tKls8.chunk.js} +2 -2
- package/dist/scripts/{B2OzXphM.chunk.js.map → Dk7tKls8.chunk.js.map} +1 -1
- package/dist/scripts/{CJ1ig2Kx.chunk.js → DmTetbor.chunk.js} +2 -2
- package/dist/scripts/{CJ1ig2Kx.chunk.js.map → DmTetbor.chunk.js.map} +1 -1
- package/dist/scripts/{USTuMLcb.chunk.js → Ds3SQeo1.chunk.js} +2 -2
- package/dist/scripts/{USTuMLcb.chunk.js.map → Ds3SQeo1.chunk.js.map} +1 -1
- package/dist/scripts/{B696AbD2.chunk.js → Dw-3sJ6z.chunk.js} +2 -2
- package/dist/scripts/{B696AbD2.chunk.js.map → Dw-3sJ6z.chunk.js.map} +1 -1
- package/dist/scripts/{DjT7A1F0.chunk.js → DzUywVIn.chunk.js} +2 -2
- package/dist/scripts/{DjT7A1F0.chunk.js.map → DzUywVIn.chunk.js.map} +1 -1
- package/dist/scripts/{BX_8MApq.chunk.js → FqMxoz-g.chunk.js} +2 -2
- package/dist/scripts/{BX_8MApq.chunk.js.map → FqMxoz-g.chunk.js.map} +1 -1
- package/dist/scripts/{CtovEsFz.chunk.js → M8-7wL03.chunk.js} +2 -2
- package/dist/scripts/{CtovEsFz.chunk.js.map → M8-7wL03.chunk.js.map} +1 -1
- package/dist/scripts/{BF2PCV8G.chunk.js → O3KYJlt8.chunk.js} +2 -2
- package/dist/scripts/{BF2PCV8G.chunk.js.map → O3KYJlt8.chunk.js.map} +1 -1
- package/dist/scripts/{-wh0Q1Mk.chunk.js → P1w98jqc.chunk.js} +2 -2
- package/dist/scripts/{-wh0Q1Mk.chunk.js.map → P1w98jqc.chunk.js.map} +1 -1
- package/dist/scripts/{Q3oue8AK.chunk.js → PLxejfSI.chunk.js} +2 -2
- package/dist/scripts/{Q3oue8AK.chunk.js.map → PLxejfSI.chunk.js.map} +1 -1
- package/dist/scripts/{D_O3OU5_.chunk.js → Q9FeiQkl.chunk.js} +2 -2
- package/dist/scripts/{D_O3OU5_.chunk.js.map → Q9FeiQkl.chunk.js.map} +1 -1
- package/dist/scripts/{dn7SonjL.chunk.js → TYfK47yR.chunk.js} +2 -2
- package/dist/scripts/{dn7SonjL.chunk.js.map → TYfK47yR.chunk.js.map} +1 -1
- package/dist/scripts/{CuGgxXq6.chunk.js → X5emuMm3.chunk.js} +2 -2
- package/dist/scripts/{CuGgxXq6.chunk.js.map → X5emuMm3.chunk.js.map} +1 -1
- package/dist/scripts/{CQoqpuSN.chunk.js → YuqHkk0a.chunk.js} +2 -2
- package/dist/scripts/{CQoqpuSN.chunk.js.map → YuqHkk0a.chunk.js.map} +1 -1
- package/dist/scripts/{BM3jzDzF.chunk.js → ZFLNGNny.chunk.js} +2 -2
- package/dist/scripts/{BM3jzDzF.chunk.js.map → ZFLNGNny.chunk.js.map} +1 -1
- package/dist/scripts/{DcWRg8v3.chunk.js → aou-5sJI.chunk.js} +2 -2
- package/dist/scripts/{DcWRg8v3.chunk.js.map → aou-5sJI.chunk.js.map} +1 -1
- package/dist/scripts/{app-7svuou3-.js → app-CShb1Dgt.js} +3 -3
- package/dist/scripts/{app-7svuou3-.js.map → app-CShb1Dgt.js.map} +1 -1
- package/dist/scripts/baur_fn0.chunk.js +2 -0
- package/dist/scripts/{zDrAtVBw.chunk.js.map → baur_fn0.chunk.js.map} +1 -1
- package/dist/scripts/{BrdxuhDZ.chunk.js → cDgsKsmM.chunk.js} +2 -2
- package/dist/scripts/{BrdxuhDZ.chunk.js.map → cDgsKsmM.chunk.js.map} +1 -1
- package/dist/scripts/{Di0ieRgB.chunk.js → d6bZeQ7u.chunk.js} +2 -2
- package/dist/scripts/{Di0ieRgB.chunk.js.map → d6bZeQ7u.chunk.js.map} +1 -1
- package/dist/scripts/{BqAavbCw.chunk.js → dP41rDFl.chunk.js} +2 -2
- package/dist/scripts/{BqAavbCw.chunk.js.map → dP41rDFl.chunk.js.map} +1 -1
- package/dist/scripts/{BcDguH17.chunk.js → jH3hqwI2.chunk.js} +2 -2
- package/dist/scripts/{BcDguH17.chunk.js.map → jH3hqwI2.chunk.js.map} +1 -1
- package/dist/scripts/{DL-oEZtF.chunk.js → kUTnu8Iq.chunk.js} +2 -2
- package/dist/scripts/{DL-oEZtF.chunk.js.map → kUTnu8Iq.chunk.js.map} +1 -1
- package/dist/scripts/{cyDp1kQU.chunk.js → nbVa2u9N.chunk.js} +2 -2
- package/dist/scripts/{cyDp1kQU.chunk.js.map → nbVa2u9N.chunk.js.map} +1 -1
- package/dist/scripts/{CtTd6EE8.chunk.js → vbpGTzKU.chunk.js} +2 -2
- package/dist/scripts/{CtTd6EE8.chunk.js.map → vbpGTzKU.chunk.js.map} +1 -1
- package/dist/scripts/{Co_YIZXn.chunk.js → zr54fY9l.chunk.js} +2 -2
- package/dist/scripts/{Co_YIZXn.chunk.js.map → zr54fY9l.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/BwdSbre5.chunk.js +0 -2
- package/dist/scripts/BxcHYWuR.chunk.js +0 -2
- package/dist/scripts/C2TRBWPd.chunk.js +0 -2
- package/dist/scripts/CD1TqwcB.chunk.js +0 -2
- package/dist/scripts/WarFtyTw.chunk.js +0 -2
- package/dist/scripts/u96pPes-.chunk.js +0 -2
- package/dist/scripts/zDrAtVBw.chunk.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{at as S,j as e,R as x,aq as g,w as h,A as j,G as b,ab as k}from"./app-
|
|
1
|
+
import{at as S,j as e,R as x,aq as g,w as h,A as j,G as b,ab as k}from"./app-CShb1Dgt.js";import{B as v,a as _}from"./C3LmB7vs.chunk.js";const D="_pillTabSelector_a6f6x_1",T="_tab_a6f6x_4",L="_minWidth_a6f6x_21",N="_radiusSmall_a6f6x_24",$="_tabLink_a6f6x_35",s={pillTabSelector:D,tab:T,minWidth:L,radiusSmall:N,tabLink:$};function d(t){var l;return e.jsxs(e.Fragment,{children:[!!t.tab.svg&&e.jsx("div",{className:t.tab.name?"pe-1":"",children:e.jsx(b,{svg:t.tab.svg,size:t.tab.svgSize})}),((l=t.formatDisplayText)==null?void 0:l.call(t,t.tab.name))??t.tab.name,typeof t.tab.count=="number"&&e.jsx("div",{className:"ps-2",children:e.jsx(v,{type:_.Count,data:t.tab.count})})]})}function A(t){const{borderRadius:l="lg"}=t,r=S();function o(a){a.analyticsData&&a.analyticsOptions&&k.logUserAction(a.analyticsData,a.analyticsOptions)}function u(a){a.active||!a.onSelect||(a.onSelect(),o(a))}function f(a){const n=a.target.value,i=t.tabs.find(y=>y.name===n);!i||i.active||(o(i),j.trigger(i.appLink))}const c=t.tabs.find(a=>a.active),m=t.forceSmallScreenDropdown||t.enableSmallScreenSupport&&(r.sm||r.xs);return e.jsxs("nav",{className:t.className??"",children:[m&&e.jsx("select",{className:"form-select",onChange:f,value:c==null?void 0:c.name,style:{minWidth:"150px"},children:t.tabs.map((a,n)=>{var i;return a.hide?e.jsx(x.Fragment,{},n):e.jsx("option",{value:a.name,children:((i=t.formatDisplayText)==null?void 0:i.call(t,a.name))??a.name},n)})}),!m&&e.jsx("ul",{className:`
|
|
2
2
|
list-unstyled d-inline-block m-0 ${s.pillTabSelector}
|
|
3
3
|
${l?s.radiusSmall:""}
|
|
4
4
|
${t.listClassName}
|
|
@@ -12,4 +12,4 @@ import{at as S,j as e,R as x,aq as g,w as h,A as j,G as b,ab as k}from"./app-7sv
|
|
|
12
12
|
cursor-pointer d-flex align-items-center justify-content-center
|
|
13
13
|
text-decoration-none text-reset px-2 text-nowrap ${s.tabLink}
|
|
14
14
|
`,onClick:()=>u(a),children:e.jsx(d,{tab:a,formatDisplayText:t.formatDisplayText})})},n))})]})}export{A as P};
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=2GC-PPDy.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"2GC-PPDy.chunk.js","sources":["../../../../libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.module.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n formatDisplayText?: (name: string) => string;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svg && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svg={props.tab.svg} size={props.tab.svgSize} />\n </div>\n )}\n\n {props.formatDisplayText?.(props.tab.name) ?? props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svg?: SvgIcon;\n svgSize?: SvgContainerSize;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n\n hide?: boolean;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n const { borderRadius = 'lg' } = props;\n \n const breakpoints = useBreakpoints();\n \n function logAnalytics(tab: PillTab): void {\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n \n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n logAnalytics(tab);\n }\n\n function onChangeSelect(event: React.ChangeEvent<HTMLSelectElement>): void {\n const value = event.target.value;\n const tab = props.tabs.find(tab => tab.name === value);\n if (!tab || tab.active)\n return;\n \n logAnalytics(tab);\n AppLinkHelper.trigger(tab.appLink);\n }\n\n const selectedTab = props.tabs.find(tab => tab.active);\n const showSelectDropdown = props.forceSmallScreenDropdown\n || (props.enableSmallScreenSupport && (breakpoints.sm || breakpoints.xs));\n\n return (\n <nav className={props.className ?? ''}>\n {showSelectDropdown && (\n <select className='form-select' onChange={onChangeSelect} value={selectedTab?.name} style={{ minWidth: '150px' }}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n\n return (\n <option\n key={index}\n value={tab.name}>\n {props.formatDisplayText?.(tab.name) ?? tab.name}\n </option>\n );\n })}\n </select>\n )}\n \n {!showSelectDropdown && (\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n \n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n );\n}\n"],"names":["TabContents","props","jsxs","Fragment","jsx","SvgContainer","_a","Badge","BadgeType","PillTabSelector","borderRadius","breakpoints","useBreakpoints","logAnalytics","tab","AnalyticsHelper","onSelectTab","onChangeSelect","event","value","AppLinkHelper","selectedTab","showSelectDropdown","index","React","styles","AppLink","DivButton"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{U as p,a3 as c,R as b,j as i,P as v,aD as U,a5 as h}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{U as p,a3 as c,R as b,j as i,P as v,aD as U,a5 as h}from"./app-CShb1Dgt.js";import{u as C}from"./C4BzCmwg.chunk.js";import{C as P,P as w,a as R}from"./CKGW3m2X.chunk.js";import{T as y}from"./Bt07VepM.chunk.js";import{u as k}from"./BJmQsLgH.chunk.js";import{u as T}from"./DIkrkJAo.chunk.js";import"./DmTetbor.chunk.js";import"./BQ7D2X0o.chunk.js";import"./vbpGTzKU.chunk.js";import"./D5FAzio3.chunk.js";import"./BlDVEZsX.chunk.js";import"./D9df4Id7.chunk.js";import"./pkzD5BEm.chunk.js";import"./B1cVJr0t.chunk.js";import"./BqRzwJ-J.chunk.js";import"./M8-7wL03.chunk.js";import"./DigjAeMR.chunk.js";import"./BlabCH8N.chunk.js";import"./C3LmB7vs.chunk.js";import"./DbNPwlCF.chunk.js";import"./CpMkRd2a.chunk.js";import"./D30qaGvM.chunk.js";import"./YuqHkk0a.chunk.js";import"./BVViiWF8.chunk.js";import"./DFEBv1_O.chunk.js";import"./B5VX0-05.chunk.js";import"./DGvEmnsP.chunk.js";import"./Bcaq2QKq.chunk.js";import"./B668bf5B.chunk.js";import"./DeSk2YFH.chunk.js";import"./aou-5sJI.chunk.js";import"./dP41rDFl.chunk.js";import"./BJB2pvo-.chunk.js";import"./TYfK47yR.chunk.js";import"./DYRoLttd.chunk.js";import"./CcHhPXQX.chunk.js";function j(r){const{currentUser:t,region:o,config:e,program:a}=r,l=e.tvPreviewUrls[o.code],s=a.globalId.replace(/-/g,""),m=p.safeUrlConcat(l,`/thumbnail/${s}.jpg`),u=p.safeUrlConcat(l,`/144p/${s.toUpperCase()}_144p.mp4`),n=p.safeUrlConcat(l,`/subtitle/${s.toUpperCase()}.srt`),d=p.urlBuilder(p.safeUrlConcat(e.playerApiUrl,"/api/srt-to-vtt"),{url:n});return{videoId:null,episodeNumber:0,seriesName:null,mediaId:null,mediaType:null,ratingCode:null,region:t.instanceRegion,seasonNumber:null,viewerId:t.id,viewerCustomerId:t.customerId,files:{fileToken:"",progressive:[{mimeType:"video/mp4",profile:"144",quality:144,url:u,label:"Preview"}]},chapters:{list:[]},instanceRegion:t.instanceRegion,localCacheAddresses:[],posterUrl:m,resources:{list:[]},settings:{showSubtitles:!1,playbackProfile:"144",playbackProfileLocalCache:"144",playbackQuality:"144",playbackQualityLocalCache:"144",playbackQualityFallback:"144",playbackSubtitleSizeDefault:"medium"},subtitles:{list:[{url:d,isDefault:!1,language:"en-AU",mimeType:"text/vtt",label:"English"}]},title:a.title}}function ce(r){var g;const t=c(y.region(r.region)),o=c(U.config()),e=c(y.program(r.id)),a=c(h.currentUser()),[l,s]=b.useState(),m=k("preview",t.data,l);T(t,!0),C(e.statusCode);function u(f){s(f),r.currentTime&&f.currentTime(r.currentTime)}const n=t.hasCompleted&&e.hasCompleted&&o.hasCompleted&&a.hasCompleted,d=n&&j({currentUser:a.data,region:t.data,config:o.data,program:e.data});return i.jsx(v,{title:(g=e.data)==null?void 0:g.title,closePopup:r.closePopup,showLoadingSpinner:!n,size:"lg",bodyClassName:"p-0 rounded-3 position-relative",hideTitle:!0,children:n&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"overflow-hidden rounded-top-lg",children:i.jsx(P,{viewKey:null,offlinePlaybackObject:d,playerApi:new URL(o.data.playerApiUrl),autoplay:!0,hotkeyElQuerySelector:"body",onReady:u,allowFullscreen:!1})}),i.jsx(w,{program:e.data,title:e.data.title,description:e.data.description,videoActions:m(e.data)}),i.jsx(R,{closePopup:r.closePopup})]})})}export{ce as TvPreviewView};
|
|
2
|
+
//# sourceMappingURL=5yUbuX8U.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"5yUbuX8U.chunk.js","sources":["../../src/apps/tv/views/tv-preview/utils/getTvPlaybackObject.ts","../../src/apps/tv/views/tv-preview/TvPreviewView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { RegionName } from 'libs/analytics/enums/RegionName';\n\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\n\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\ninterface GetTvPlaybackObjectOptions {\n currentUser: CurrentUser;\n region: TvRegion;\n config: ExchangeConfig;\n program: TvProgram;\n}\n\nexport function getTvPlaybackObject(options: GetTvPlaybackObjectOptions): PlaybackObject {\n const { currentUser, region, config, program } = options;\n\n const previewUrl = config.tvPreviewUrls[region.code];\n\n const globalId = program.globalId.replace(/-/g, '');\n\n const thumbnailUrl = UrlHelper.safeUrlConcat(\n previewUrl,\n `/thumbnail/${globalId}.jpg`\n );\n const fileUrl = UrlHelper.safeUrlConcat(\n previewUrl,\n `/144p/${globalId.toUpperCase()}_144p.mp4`\n );\n const subtitleLocation = UrlHelper.safeUrlConcat(\n previewUrl,\n `/subtitle/${globalId.toUpperCase()}.srt`\n );\n const subtitleUrl = UrlHelper.urlBuilder(\n UrlHelper.safeUrlConcat(config.playerApiUrl, `/api/srt-to-vtt`),\n { url: subtitleLocation }\n );\n\n return ({\n videoId: null,\n episodeNumber: 0,\n seriesName: null,\n mediaId: null,\n mediaType: null,\n ratingCode: null,\n region: currentUser.instanceRegion,\n seasonNumber: null,\n viewerId: currentUser.id,\n viewerCustomerId: currentUser.customerId,\n files: {\n fileToken: '',\n progressive: [{\n mimeType: 'video/mp4',\n profile: '144',\n quality: 144,\n url: fileUrl,\n label: 'Preview'\n }]\n },\n chapters: { list: []},\n instanceRegion: currentUser.instanceRegion as unknown as RegionName,\n localCacheAddresses: [],\n posterUrl: thumbnailUrl,\n resources: { list: []},\n settings: {\n showSubtitles: false,\n playbackProfile: '144',\n playbackProfileLocalCache: '144',\n playbackQuality: '144',\n playbackQualityLocalCache: '144',\n playbackQualityFallback: '144',\n playbackSubtitleSizeDefault: 'medium'\n },\n subtitles: {\n list: [{\n url: subtitleUrl,\n isDefault: false,\n language: 'en-AU',\n mimeType: 'text/vtt',\n label: 'English'\n }]\n },\n title: program.title\n });\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport { PlayerOverlayButtons } from 'shared/components/player-overlay-buttons/PlayerOverlayButtons';\nimport { PreviewVideoDetails } from 'shared/components/preview-video-details/PreviewVideoDetails';\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nimport { getTvPlaybackObject } from './utils/getTvPlaybackObject';\n\ninterface TvPreviewViewProps extends PopupViewProps {\n id: string;\n region: string;\n currentTime: number;\n}\n\nexport function TvPreviewView(props: TvPreviewViewProps): JSX.Element {\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const config = Flight.useBasicFetch<ExchangeConfig>(ConfigRequests.config());\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(props.id));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const [ playerRef, setPlayerRef ] = React.useState<PlayerReference>();\n\n const getVideoActions = useGetTvActions('preview', region.data, playerRef);\n\n useHandleRegionError(region, true);\n useHandleDialogError(program.statusCode);\n\n // TODO: Solve analytics collection\n function onReady(player: PlayerReference): void {\n setPlayerRef(player);\n\n if (props.currentTime)\n player.currentTime(props.currentTime);\n // setupAnalytics(player);\n }\n\n const dataLoaded = (\n region.hasCompleted &&\n program.hasCompleted &&\n config.hasCompleted &&\n currentUser.hasCompleted\n );\n\n const playbackObject = dataLoaded && getTvPlaybackObject({\n currentUser: currentUser.data,\n region: region.data,\n config: config.data,\n program: program.data\n });\n\n return (\n <Popup\n title={program.data?.title}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded}\n size='lg'\n bodyClassName='p-0 rounded-3 position-relative'\n hideTitle\n >\n {dataLoaded &&\n <>\n <div className='overflow-hidden rounded-top-lg'>\n <ClickViewPlayer\n viewKey={null}\n offlinePlaybackObject={playbackObject}\n playerApi={new URL(config.data.playerApiUrl)}\n autoplay\n hotkeyElQuerySelector='body'\n onReady={onReady}\n allowFullscreen={false}\n />\n </div>\n <PreviewVideoDetails\n program={program.data}\n title={program.data.title}\n description={program.data.description}\n videoActions={getVideoActions(program.data)}\n />\n <PlayerOverlayButtons closePopup={props.closePopup} />\n </>\n }\n </Popup>\n );\n}"],"names":["getTvPlaybackObject","options","currentUser","region","config","program","previewUrl","globalId","thumbnailUrl","UrlHelper","fileUrl","subtitleLocation","subtitleUrl","TvPreviewView","props","Flight.useBasicFetch","TvRequests","ConfigRequests","UserRequests","playerRef","setPlayerRef","React","getVideoActions","useGetTvActions","useHandleRegionError","useHandleDialogError","onReady","player","dataLoaded","playbackObject","jsx","Popup","_a","jsxs","Fragment","ClickViewPlayer","PreviewVideoDetails","PlayerOverlayButtons"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{U as a,an as C,S as l,H as p,M as v,m as T}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{U as a,an as C,S as l,H as p,M as v,m as T}from"./app-CShb1Dgt.js";import{C as y}from"./BlDVEZsX.chunk.js";import{P as $}from"./pkzD5BEm.chunk.js";var m=(e=>(e.Series="series",e.Playlist="playlist",e.Widget="widget",e.Folder="category",e.CategoryTree="categoryTree",e))(m||{});const d={sharedVideo:(e,i)=>a.urlBuilder(`/api/objects/${e}`,{shareId:i,query:l.VIDEO}),publicVideo:(e,i)=>a.urlBuilder(`/api/objects/${e}`,{query:"thumbnail,_canBeConsumed,series,season,_rating,libraries{typeId:[17]}",permissionFilterOption:$.StripMetadata,shareId:i}),getVideosById:e=>a.urlBuilder("{gateway}/v1/objects",{"query.video":l.VIDEO_COLLECTION,"query.clip":l.CLIP_COLLECTION,"query.interactive":l.INTERACTIVE_COLLECTION,id:e}),relatedVideos:e=>{const{videoId:i,context:t,collectionId:r,moviesAndTv:s,limit:n}=e,o={videoId:i,limit:n,query:l.VIDEO_COLLECTION};return t&&(t===m.Widget?o["context.widgetId"]=r:(o["context.collectionType"]=t,o["context.collectionId"]=r)),s&&(o["context.moviesAndTv"]=!0),a.urlBuilder("{gateway}/v1/suggestions/related-videos",o)}},f={video(e,i){return{url:a.urlBuilder(`{gateway}/v1/objects/${e}`,{query:l.VIDEO,permissionFilterOption:i}),publicUrl:a.urlBuilder(`/api/objects/${e}`,{query:T.VIDEO,permissionFilterOption:i}),key:`videos:${e}:${i}`}},publicVideo(e,i,t,r){return{url:d.publicVideo(e,i),key:`videos:${e}:public:${i}`,bootstrapName:`shared:object:${e}`,success:t,error:r}},sharedVideo(e,i,t,r){return{url:d.sharedVideo(e,i),key:`shared:video:${e}`,success:t,error:r}},myVideos(e,i){const{VIDEO_COLLECTION:t,CLIP_COLLECTION:r,INTERACTIVE:s}=l,n=`videos[${t}]{libraries.typeid:${v.WorkspaceCollection}}`,o=`clips[${r}]`,u=`interactives[${s}]{status:[${y.Published},${y.Draft}]}`,c={query:`(${n}|${o}|${u}){orderbydesc:id}`,permissionFilterOption:$.StripMetadata};return i&&(c.cursor=i),{url:a.urlBuilder(`{gateway}/v1/objects/${e}/members`,c),key:`my:videos:${i}`}},videos(e,i){return{url:d.getVideosById(e),key:`videos:by:id:${e.join(",")}`,success:i}},watchHistoryVideos(e,i){return{url:d.getVideosById(e),key:`watch:history:videos:by:id:${e.join(",")}`,success:i}},updateVideo(e,i,t,r,s){return{key:`update:video:${e}`,url:`{gateway}/v1/objects/${e}`,type:p.PUT,data:i,success:t,error:r,always:s}},videoRatings(e,i){const t=e.map(r=>`id=${r}`);if(t.length)return{url:`/api/domain/v2/objects?query=rating&${t.join("&")}`,key:`video:ratings:by:id:${e.join(",")}`,normalizeOptions:{namespace:i}}},videoMixinAssocs(e,i){if(e.map(r=>`id=${r}`).length)return{url:a.urlBuilder("{gateway}/v1/objects",{query:"interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks",id:e}),publicUrl:a.urlBuilder("/api/objects",{query:"interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks",id:e}),key:`video:mixin:assocs:${e.join(",")}`,normalizeOptions:{namespace:i}}},getRestrictions(e){const i=e.slice().sort();return{url:`/api/domain/v1/restrictedobjects?objectTypeId=${v.Video}${i.map(t=>`&objectId=${t}`).join("")}`,key:`restrictions:${i.join(",")}`,normalizeOptions:{namespace:"domain",idAttribute:"objectId"}}},delete(e,i,t){return{url:`{gateway}/v1/objects/${e}`,key:`delete:video:${e}`,type:p.DELETE,success:i,error:t,invalidationKeys:["videos","search"]}},deleteBulk(e,i,t,r,s){const n=e.map(u=>`videoIds=${u}`).join("&"),o=[`categoryId=${t}`,`${n}`].join("&");return{url:`/api/domain/v1/libraries/${i}/videos?${o}`,key:`delete:bulk:video:${e.join(":")}:${i}:${t}`,type:p.DELETE,success:r,error:s,invalidationKeys:["videos","search"]}},relatedVideos(e){const{videoId:i,context:t,collectionId:r,moviesAndTv:s}=e;return{url:d.relatedVideos(e),key:`related:videos:${i}:${t}:${r}:${s}`}},collectionVideos(e,i,t,r,s,n){const o=C.getVideoSortParam(i),{VIDEO_COLLECTION:u,CLIP_COLLECTION:c,INTERACTIVE:b}=l,g=`videos[${u}]`,j=`clips[${c}]`,I=`interactives[${b}]{status:[${y.Published},${y.Draft}]}`,O={query:`(${g}|${j}|${I})${o?`{${o}}`:""}`,permissionFilterOption:$.FilterOut,...t?{cursor:t}:{}},V=["folder","videos",e,t,i].filter(E=>!!E).join(":");return{url:a.urlBuilder(`{gateway}/v1/objects/${e}/members`,O),key:V,success:r,error:s,always:n}},pointsOfInterest(e,i,t,r,s){const n={query:"{limit:100}",cursor:i};return{url:a.urlBuilder(`{gateway}/v1/objects/${e}/pointsofinterest`,n),publicUrl:a.urlBuilder(`/api/objects/${e}/pointsofinterest`,n),key:`pointsofinterest:${e}${i?`:${i}`:""}`,success:t,error:r,always:s}},regionAlternatives(e,i,t,r){return{url:`/api/objects/videos/${e}/region-alternatives`,publicUrl:`/api/objects/videos/${e}/region-alternatives`,key:`video:regionAlternatives:${e}`,normalize:!1,success:i,error:t,always:r}}};export{f as V};
|
|
2
|
+
//# sourceMappingURL=B1cVJr0t.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DfR8N6KN.chunk.js","sources":["../../../../libs/shared/src/enums/RelatedVideosContext.ts","../../../../libs/shared/src/flight-requests/VideoRequests.ts"],"sourcesContent":["export enum RelatedVideosContext {\n Series = 'series',\n Playlist = 'playlist',\n Widget = 'widget',\n Folder = 'category',\n CategoryTree = 'categoryTree'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { PointOfInterestCollection, UpdateVideoRequest, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { RegionAlternative } from 'libs/shared/interfaces/models/RegionAlternative';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedVideo: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n shareId,\n query: SharedWithStatements.VIDEO\n }),\n\n publicVideo: (id: string, shareId?: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n // Query statement here is coupled with ClickView.Lite.Common\\Services\\OpenGraph\\OpenGraphService.cs\n // in lite. If you update this, please update both.\n query: 'thumbnail,_canBeConsumed,series,season,_rating,libraries{typeId:[17]}',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n }),\n\n getVideosById: (ids: string[]) => {\n return UrlHelper.urlBuilder('{gateway}/v1/objects', {\n 'query.video': SharedWithStatements.VIDEO_COLLECTION,\n 'query.clip': SharedWithStatements.CLIP_COLLECTION,\n 'query.interactive': SharedWithStatements.INTERACTIVE_COLLECTION,\n 'id': ids\n });\n },\n\n relatedVideos: (options: {\n videoId: string;\n context?: RelatedVideosContext;\n collectionId?: string;\n moviesAndTv?: boolean;\n limit: number;\n }) => {\n const { videoId, context, collectionId, moviesAndTv, limit } = options;\n\n const params: HashObject = {\n videoId,\n limit,\n query: SharedWithStatements.VIDEO_COLLECTION\n };\n\n if (context) {\n if (context === RelatedVideosContext.Widget) {\n params['context.widgetId'] = collectionId;\n } else {\n params['context.collectionType'] = context;\n params['context.collectionId'] = collectionId;\n }\n }\n\n if (moviesAndTv)\n params['context.moviesAndTv'] = true;\n\n return UrlHelper.urlBuilder('{gateway}/v1/suggestions/related-videos', params);\n }\n};\n\nexport const VideoRequests = {\n video(id: string, permissionFilterOption?: PermissionFilterOption): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: SharedWithStatements.VIDEO,\n permissionFilterOption\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: PublicWithStatement.VIDEO,\n permissionFilterOption\n }),\n key: `videos:${id}:${permissionFilterOption}`\n };\n },\n\n publicVideo(\n id: string,\n shareId?: string,\n success?: (video: Video) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: endpoints.publicVideo(id, shareId),\n key: `videos:${id}:public:${shareId}`,\n bootstrapName: `shared:object:${id}`,\n success,\n error\n };\n },\n\n sharedVideo(\n id: string,\n shareId: string,\n success?: (video: Video) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: endpoints.sharedVideo(id, shareId),\n key: `shared:video:${id}`,\n success,\n error\n };\n },\n\n myVideos(userId: string, cursor: string): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const params: HashObject = {\n query: `(${videoQuery}|${clipQuery}|${interactiveQuery}){orderbydesc:id}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${userId}/members`, params),\n key: `my:videos:${cursor}`\n };\n },\n\n videos(ids: string[], success?: (videos: Video[]) => void): Flight.Request {\n return {\n url: endpoints.getVideosById(ids),\n key: `videos:by:id:${ids.join(',')}`,\n success\n };\n },\n\n watchHistoryVideos(\n ids: string[],\n success?: (videos: Video[]) => void\n ): Flight.Request {\n return {\n url: endpoints.getVideosById(ids),\n key: `watch:history:videos:by:id:${ids.join(',')}`,\n success\n };\n },\n\n updateVideo(\n id: string,\n data: UpdateVideoRequest,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: `update:video:${id}`,\n url: `{gateway}/v1/objects/${id}`,\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n always\n };\n },\n\n /**\n * This is simply an example to show the prototype for useVideoMixin\n * eventually there will be endpoints in domain that let us fetch members\n * without fetching the objects properties, so we can fetch stuff like\n * hasInteractives and isFavourited as subsequent calls\n */\n videoRatings(ids: string[], namespace?: string): Flight.Request {\n const params = ids.map(i => `id=${i}`);\n\n if (!params.length)\n return;\n\n return {\n url: `/api/domain/v2/objects?query=rating&${params.join('&')}`,\n key: `video:ratings:by:id:${ids.join(',')}`,\n normalizeOptions: {\n namespace\n }\n };\n },\n\n videoMixinAssocs(ids: string[], namespace?: string): Flight.PublicRequest {\n const params = ids.map(i => `id=${i}`);\n\n if (!params.length)\n return;\n\n /**\n * IMPORTANT!\n * \n * This request is used for BOTH clips and videos. This means these requests will fail if you\n * add assocs in the future that are not supported for both object types. If you find yourself in this\n * case, what you should do is:\n * \n * 1. Consider whether clips should support the assoc that you're hydrating for videos. In most cases,\n * I think they should, as we want clips and videos to basically support the same fields and metadata.\n * 2. If the above is false or can't be done right now, you will need to create a separate request for clips\n * and update the logic in useVideoMixin to handle this.\n */\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/objects', {\n query: 'interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks',\n id: ids\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects`, {\n query: 'interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks',\n id: ids\n }),\n /**\n * We are intentionally NOT sorting the IDs here. This is because `useVideoMixin` wants to provide\n * the IDs in their original order so that the cache key here doesn't change for subsequent calls.\n * \n * Here is an example of a problem that would occur if we were sorting: say we search for something,\n * and load the first page of 25 results. The videos and clips here would have their IDs sorted in the cache\n * key, then fetched. Then, we scrolled down and fetched the next 25, leading to 50 IDs in the array. If we\n * sort the IDs in the key, the keys would change from the first request, leading to all of the videos/clips\n * from the first request being fetched a second time unnecessarily. Every time you'd fetch a new page, you'd\n * be making multiple unnecessary API calls.\n * \n * TL;DR: Don't sort the IDs here, `useVideoMixin` will handle that.\n */\n key: `video:mixin:assocs:${ids.join(',')}`,\n normalizeOptions: {\n namespace\n }\n };\n },\n\n getRestrictions(videoIds: string[]): Flight.Request {\n const sortedIds = videoIds.slice().sort();\n\n return {\n url: '/api/domain/v1/restrictedobjects'\n + `?objectTypeId=${MasterType.Video}${sortedIds.map(id => `&objectId=${id}`).join('')}`,\n key: `restrictions:${sortedIds.join(',')}`,\n normalizeOptions: {\n namespace: 'domain',\n idAttribute: 'objectId'\n }\n };\n },\n\n delete(videoId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${videoId}`,\n key: `delete:video:${videoId}`,\n type: HttpVerbs.DELETE,\n success,\n error,\n invalidationKeys: [ 'videos', 'search' ]\n };\n },\n\n deleteBulk(\n videoId: string[],\n libraryId: string,\n categoryId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n const videoIds = videoId.map(id => `videoIds=${id}`).join('&');\n const params = [\n `categoryId=${categoryId}`,\n `${videoIds}`\n ].join('&');\n\n return {\n url: `/api/domain/v1/libraries/${libraryId}/videos?${params}`,\n key: `delete:bulk:video:${videoId.join(':')}:${libraryId}:${categoryId}`,\n type: HttpVerbs.DELETE,\n success,\n error,\n invalidationKeys: [ 'videos', 'search' ]\n };\n },\n\n relatedVideos(options: {\n videoId: string;\n context?: RelatedVideosContext;\n collectionId?: string;\n moviesAndTv?: boolean;\n /**\n * This limit is intentionall not in the key. See useGetRelatedVideos for an explanation\n */\n limit: number;\n }): Flight.Request {\n const { videoId, context, collectionId, moviesAndTv } = options;\n\n return {\n url: endpoints.relatedVideos(options),\n key: `related:videos:${videoId}:${context}:${collectionId}:${moviesAndTv}`\n };\n },\n\n collectionVideos(\n collectionId: string,\n sort?: VideoSortType,\n cursor?: string,\n success?: (data: VideoCollection) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]`;\n const clipQuery = `clips[${CLIP_COLLECTION}]`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const params: HashObject = {\n query: `(${videoQuery}|${clipQuery}|${interactiveQuery})${sortFilter ? `{${sortFilter}}` : ''}`,\n permissionFilterOption: PermissionFilterOption.FilterOut,\n ...(cursor ? { cursor } : {})\n };\n\n const key = [ 'folder', 'videos', collectionId, cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${collectionId}/members`, params),\n key,\n success,\n error,\n always\n };\n },\n\n pointsOfInterest(\n videoId: string,\n cursor?: string,\n success?: (data: PointOfInterestCollection) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.PublicRequest {\n const queryStringObj = { query: '{limit:100}', cursor };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}/pointsofinterest`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${videoId}/pointsofinterest`, queryStringObj),\n key: `pointsofinterest:${videoId}${cursor ? `:${cursor}` : ''}`,\n success,\n error,\n always\n };\n },\n\n regionAlternatives(\n videoId: string,\n success?: (data: RegionAlternative[]) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.PublicRequest {\n return {\n url: `/api/objects/videos/${videoId}/region-alternatives`,\n publicUrl: `/api/objects/videos/${videoId}/region-alternatives`,\n key: `video:regionAlternatives:${videoId}`,\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n"],"names":["RelatedVideosContext","endpoints","id","shareId","UrlHelper","SharedWithStatements","PermissionFilterOption","ids","options","videoId","context","collectionId","moviesAndTv","limit","params","VideoRequests","permissionFilterOption","PublicWithStatement","success","error","userId","cursor","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","MasterType","clipQuery","interactiveQuery","CurationStatus","data","always","HttpVerbs","namespace","i","videoIds","sortedIds","libraryId","categoryId","sort","sortFilter","VideoSortHelper","key","k","queryStringObj"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"B1cVJr0t.chunk.js","sources":["../../../../libs/shared/src/enums/RelatedVideosContext.ts","../../../../libs/shared/src/flight-requests/VideoRequests.ts"],"sourcesContent":["export enum RelatedVideosContext {\n Series = 'series',\n Playlist = 'playlist',\n Widget = 'widget',\n Folder = 'category',\n CategoryTree = 'categoryTree'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { PointOfInterestCollection, UpdateVideoRequest, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { RegionAlternative } from 'libs/shared/interfaces/models/RegionAlternative';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedVideo: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n shareId,\n query: SharedWithStatements.VIDEO\n }),\n\n publicVideo: (id: string, shareId?: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n // Query statement here is coupled with ClickView.Lite.Common\\Services\\OpenGraph\\OpenGraphService.cs\n // in lite. If you update this, please update both.\n query: 'thumbnail,_canBeConsumed,series,season,_rating,libraries{typeId:[17]}',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n }),\n\n getVideosById: (ids: string[]) => {\n return UrlHelper.urlBuilder('{gateway}/v1/objects', {\n 'query.video': SharedWithStatements.VIDEO_COLLECTION,\n 'query.clip': SharedWithStatements.CLIP_COLLECTION,\n 'query.interactive': SharedWithStatements.INTERACTIVE_COLLECTION,\n 'id': ids\n });\n },\n\n relatedVideos: (options: {\n videoId: string;\n context?: RelatedVideosContext;\n collectionId?: string;\n moviesAndTv?: boolean;\n limit: number;\n }) => {\n const { videoId, context, collectionId, moviesAndTv, limit } = options;\n\n const params: HashObject = {\n videoId,\n limit,\n query: SharedWithStatements.VIDEO_COLLECTION\n };\n\n if (context) {\n if (context === RelatedVideosContext.Widget) {\n params['context.widgetId'] = collectionId;\n } else {\n params['context.collectionType'] = context;\n params['context.collectionId'] = collectionId;\n }\n }\n\n if (moviesAndTv)\n params['context.moviesAndTv'] = true;\n\n return UrlHelper.urlBuilder('{gateway}/v1/suggestions/related-videos', params);\n }\n};\n\nexport const VideoRequests = {\n video(id: string, permissionFilterOption?: PermissionFilterOption): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: SharedWithStatements.VIDEO,\n permissionFilterOption\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: PublicWithStatement.VIDEO,\n permissionFilterOption\n }),\n key: `videos:${id}:${permissionFilterOption}`\n };\n },\n\n publicVideo(\n id: string,\n shareId?: string,\n success?: (video: Video) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: endpoints.publicVideo(id, shareId),\n key: `videos:${id}:public:${shareId}`,\n bootstrapName: `shared:object:${id}`,\n success,\n error\n };\n },\n\n sharedVideo(\n id: string,\n shareId: string,\n success?: (video: Video) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: endpoints.sharedVideo(id, shareId),\n key: `shared:video:${id}`,\n success,\n error\n };\n },\n\n myVideos(userId: string, cursor: string): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const params: HashObject = {\n query: `(${videoQuery}|${clipQuery}|${interactiveQuery}){orderbydesc:id}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${userId}/members`, params),\n key: `my:videos:${cursor}`\n };\n },\n\n videos(ids: string[], success?: (videos: Video[]) => void): Flight.Request {\n return {\n url: endpoints.getVideosById(ids),\n key: `videos:by:id:${ids.join(',')}`,\n success\n };\n },\n\n watchHistoryVideos(\n ids: string[],\n success?: (videos: Video[]) => void\n ): Flight.Request {\n return {\n url: endpoints.getVideosById(ids),\n key: `watch:history:videos:by:id:${ids.join(',')}`,\n success\n };\n },\n\n updateVideo(\n id: string,\n data: UpdateVideoRequest,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: `update:video:${id}`,\n url: `{gateway}/v1/objects/${id}`,\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n always\n };\n },\n\n /**\n * This is simply an example to show the prototype for useVideoMixin\n * eventually there will be endpoints in domain that let us fetch members\n * without fetching the objects properties, so we can fetch stuff like\n * hasInteractives and isFavourited as subsequent calls\n */\n videoRatings(ids: string[], namespace?: string): Flight.Request {\n const params = ids.map(i => `id=${i}`);\n\n if (!params.length)\n return;\n\n return {\n url: `/api/domain/v2/objects?query=rating&${params.join('&')}`,\n key: `video:ratings:by:id:${ids.join(',')}`,\n normalizeOptions: {\n namespace\n }\n };\n },\n\n videoMixinAssocs(ids: string[], namespace?: string): Flight.PublicRequest {\n const params = ids.map(i => `id=${i}`);\n\n if (!params.length)\n return;\n\n /**\n * IMPORTANT!\n * \n * This request is used for BOTH clips and videos. This means these requests will fail if you\n * add assocs in the future that are not supported for both object types. If you find yourself in this\n * case, what you should do is:\n * \n * 1. Consider whether clips should support the assoc that you're hydrating for videos. In most cases,\n * I think they should, as we want clips and videos to basically support the same fields and metadata.\n * 2. If the above is false or can't be done right now, you will need to create a separate request for clips\n * and update the logic in useVideoMixin to handle this.\n */\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/objects', {\n query: 'interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks',\n id: ids\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects`, {\n query: 'interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks',\n id: ids\n }),\n /**\n * We are intentionally NOT sorting the IDs here. This is because `useVideoMixin` wants to provide\n * the IDs in their original order so that the cache key here doesn't change for subsequent calls.\n * \n * Here is an example of a problem that would occur if we were sorting: say we search for something,\n * and load the first page of 25 results. The videos and clips here would have their IDs sorted in the cache\n * key, then fetched. Then, we scrolled down and fetched the next 25, leading to 50 IDs in the array. If we\n * sort the IDs in the key, the keys would change from the first request, leading to all of the videos/clips\n * from the first request being fetched a second time unnecessarily. Every time you'd fetch a new page, you'd\n * be making multiple unnecessary API calls.\n * \n * TL;DR: Don't sort the IDs here, `useVideoMixin` will handle that.\n */\n key: `video:mixin:assocs:${ids.join(',')}`,\n normalizeOptions: {\n namespace\n }\n };\n },\n\n getRestrictions(videoIds: string[]): Flight.Request {\n const sortedIds = videoIds.slice().sort();\n\n return {\n url: '/api/domain/v1/restrictedobjects'\n + `?objectTypeId=${MasterType.Video}${sortedIds.map(id => `&objectId=${id}`).join('')}`,\n key: `restrictions:${sortedIds.join(',')}`,\n normalizeOptions: {\n namespace: 'domain',\n idAttribute: 'objectId'\n }\n };\n },\n\n delete(videoId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${videoId}`,\n key: `delete:video:${videoId}`,\n type: HttpVerbs.DELETE,\n success,\n error,\n invalidationKeys: [ 'videos', 'search' ]\n };\n },\n\n deleteBulk(\n videoId: string[],\n libraryId: string,\n categoryId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n const videoIds = videoId.map(id => `videoIds=${id}`).join('&');\n const params = [\n `categoryId=${categoryId}`,\n `${videoIds}`\n ].join('&');\n\n return {\n url: `/api/domain/v1/libraries/${libraryId}/videos?${params}`,\n key: `delete:bulk:video:${videoId.join(':')}:${libraryId}:${categoryId}`,\n type: HttpVerbs.DELETE,\n success,\n error,\n invalidationKeys: [ 'videos', 'search' ]\n };\n },\n\n relatedVideos(options: {\n videoId: string;\n context?: RelatedVideosContext;\n collectionId?: string;\n moviesAndTv?: boolean;\n /**\n * This limit is intentionall not in the key. See useGetRelatedVideos for an explanation\n */\n limit: number;\n }): Flight.Request {\n const { videoId, context, collectionId, moviesAndTv } = options;\n\n return {\n url: endpoints.relatedVideos(options),\n key: `related:videos:${videoId}:${context}:${collectionId}:${moviesAndTv}`\n };\n },\n\n collectionVideos(\n collectionId: string,\n sort?: VideoSortType,\n cursor?: string,\n success?: (data: VideoCollection) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]`;\n const clipQuery = `clips[${CLIP_COLLECTION}]`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const params: HashObject = {\n query: `(${videoQuery}|${clipQuery}|${interactiveQuery})${sortFilter ? `{${sortFilter}}` : ''}`,\n permissionFilterOption: PermissionFilterOption.FilterOut,\n ...(cursor ? { cursor } : {})\n };\n\n const key = [ 'folder', 'videos', collectionId, cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${collectionId}/members`, params),\n key,\n success,\n error,\n always\n };\n },\n\n pointsOfInterest(\n videoId: string,\n cursor?: string,\n success?: (data: PointOfInterestCollection) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.PublicRequest {\n const queryStringObj = { query: '{limit:100}', cursor };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}/pointsofinterest`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${videoId}/pointsofinterest`, queryStringObj),\n key: `pointsofinterest:${videoId}${cursor ? `:${cursor}` : ''}`,\n success,\n error,\n always\n };\n },\n\n regionAlternatives(\n videoId: string,\n success?: (data: RegionAlternative[]) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.PublicRequest {\n return {\n url: `/api/objects/videos/${videoId}/region-alternatives`,\n publicUrl: `/api/objects/videos/${videoId}/region-alternatives`,\n key: `video:regionAlternatives:${videoId}`,\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n"],"names":["RelatedVideosContext","endpoints","id","shareId","UrlHelper","SharedWithStatements","PermissionFilterOption","ids","options","videoId","context","collectionId","moviesAndTv","limit","params","VideoRequests","permissionFilterOption","PublicWithStatement","success","error","userId","cursor","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","MasterType","clipQuery","interactiveQuery","CurationStatus","data","always","HttpVerbs","namespace","i","videoIds","sortedIds","libraryId","categoryId","sort","sortFilter","VideoSortHelper","key","k","queryStringObj"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{aj as m,a3 as c,l as n,L as p,j as e}from"./app-CShb1Dgt.js";import{u as h,P as x,F as g}from"./O3KYJlt8.chunk.js";import{L as l}from"./aou-5sJI.chunk.js";import{u as d}from"./baur_fn0.chunk.js";import{E as u}from"./Byh4RoGO.chunk.js";import{E as f}from"./CMfzHyZ-.chunk.js";import{E as j}from"./BAaMmtA5.chunk.js";import{g as F}from"./DeSk2YFH.chunk.js";import"./ZFLNGNny.chunk.js";import"./DGvEmnsP.chunk.js";import"./cDgsKsmM.chunk.js";import"./DFEBv1_O.chunk.js";import"./B5VX0-05.chunk.js";import"./nbVa2u9N.chunk.js";import"./DbNPwlCF.chunk.js";import"./CcHhPXQX.chunk.js";import"./M8-7wL03.chunk.js";import"./2GC-PPDy.chunk.js";import"./C3LmB7vs.chunk.js";import"./BlDVEZsX.chunk.js";import"./D9df4Id7.chunk.js";import"./d6bZeQ7u.chunk.js";import"./pkzD5BEm.chunk.js";const E="exchange.exchange",L=p.encloseNamespace(E);function K(){const i=m(),r=c(j.exchange()),a=s=>l.childFolders(r.data.categoryTree.id,s),o=s=>i(a(s)),t=h(r.data&&a,o);return d(r),n({title:L("exchangeArchive")}),e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3",children:[e.jsx(u,{}),e.jsx(f,{active:"categories"})]}),t!=null&&t.items?t.items.length?e.jsx("div",{className:"mx-n2",children:e.jsx(g,{folders:t.items,getAppLink:s=>F(s),expandFolders:!0,showHeading:!1})}):e.jsx(e.Fragment,{}):e.jsx("div",{className:"mt-3",children:e.jsx(x,{count:22})})]})}export{K as ExchangeView};
|
|
2
|
+
//# sourceMappingURL=B4AGq_K6.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"B4AGq_K6.chunk.js","sources":["../../src/apps/exchange/views/exchange/ExchangeView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Folder, Library } from 'libs/shared/interfaces';\n\nimport { ExchangeSearchBar } from 'apps/exchange/components/exchange-search-bar/ExchangeSearchBar';\nimport { ExchangeTabs } from 'apps/exchange/components/exchange-tabs/ExchangeTabs';\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { getFolderAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nconst namespace = 'exchange.exchange';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ExchangeView(): JSX.Element {\n const fetch = Flight.useGetFetch();\n\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n const getRequest = (cursor: string) => LibraryRequests.childFolders(exchange.data.categoryTree.id, cursor);\n const fetchNext = (cursor: string) => fetch(getRequest(cursor));\n const libraryFolders = useFetchAll(exchange.data && getRequest, fetchNext);\n\n useHandleObjectError(exchange);\n\n useSetPageMetadata({ title: getPhrase('exchangeArchive') });\n\n return (\n <>\n <div className='mb-3'>\n <ExchangeSearchBar />\n <ExchangeTabs active='categories' />\n </div>\n \n {(() => {\n if (!libraryFolders?.items)\n return <div className='mt-3'><PartialFolderList count={22} /></div>;\n\n if (!libraryFolders.items.length)\n return <></>;\n\n return (\n <div className='mx-n2'>\n <FolderList\n folders={libraryFolders.items}\n getAppLink={(f: Folder) => getFolderAppLink(f)}\n expandFolders\n showHeading={false}\n />\n </div>\n );\n })()}\n </>\n );\n}"],"names":["namespace","getPhrase","LanguageService","ExchangeView","fetch","Flight.useGetFetch","exchange","Flight.useBasicFetch","ExchangeRequests","getRequest","cursor","LibraryRequests","fetchNext","libraryFolders","useFetchAll","useHandleObjectError","useSetPageMetadata","jsxs","Fragment","jsx","ExchangeSearchBar","ExchangeTabs","FolderList","f","getFolderAppLink","PartialFolderList"],"mappings":"8wBAkBA,MAAMA,EAAY,oBACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAErD,SAASG,GAA4B,CAC1C,MAAMC,EAAQC,EAAO,EAEfC,EAAWC,EAA8BC,EAAiB,UAAU,EACpEC,EAAcC,GAAmBC,EAAgB,aAAaL,EAAS,KAAK,aAAa,GAAII,CAAM,EACnGE,EAAaF,GAAmBN,EAAMK,EAAWC,CAAM,CAAC,EACxDG,EAAiBC,EAAYR,EAAS,MAAQG,EAAYG,CAAS,EAEzE,OAAAG,EAAqBT,CAAQ,EAE7BU,EAAmB,CAAE,MAAOf,EAAU,iBAAiB,EAAG,EAGxDgB,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAE,EAAAA,IAACC,EAAA,EAAkB,EACnBD,EAAAA,IAACE,EAAA,CAAa,OAAO,YAAA,CAAa,CAAA,EACpC,EAGOR,GAAA,MAAAA,EAAgB,MAGhBA,EAAe,MAAM,OAIxBM,EAAAA,IAAC,MAAA,CAAI,UAAU,QACb,SAAAA,EAAAA,IAACG,EAAA,CACC,QAAST,EAAe,MACxB,WAAaU,GAAcC,EAAiBD,CAAC,EAC7C,cAAa,GACb,YAAa,EAAA,CAAA,EAEjB,EAVOJ,EAAAA,IAAAD,EAAAA,SAAA,EAAE,EAHFC,MAAC,OAAI,UAAU,OAAO,eAACM,EAAA,CAAkB,MAAO,GAAI,CAAA,CAAE,CAe9D,EACL,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as r}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as r}from"./app-CShb1Dgt.js";function m(t){return r.jsx("svg",{...t,children:r.jsx("path",{d:"m8.305 11.267 5.906-5.963a1.046 1.046 0 0 1 1.473 0l.011.01a1.034 1.034 0 0 1 0 1.467L10.526 12l5.17 5.22c.406.41.406 1.055 0 1.465l-.012.011a1.046 1.046 0 0 1-1.473 0l-5.906-5.963a1.034 1.034 0 0 1 0-1.466",fill:"currentColor"})})}const o={numItems:5,minWidth:50,maxWidth:100},e={getPartialLoadingItems(t={}){const a={...o,...t},n=()=>Math.max(Math.floor(Math.random()*a.maxWidth),a.minWidth);return[...Array(a.numItems)].map(()=>({width:`${n()}px`}))}};export{m as C,e as P};
|
|
2
|
+
//# sourceMappingURL=B57luw20.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"B57luw20.chunk.js","sources":["../../../../libs/shared/src/images/svg/arrows/ChevronLeftSvg.tsx","../../../../libs/shared/src/utils/PartialLoadingHelper.ts"],"sourcesContent":["import React from 'react';\n\nexport function ChevronLeftSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m8.305 11.267 5.906-5.963a1.046 1.046 0 0 1 1.473 0l.011.01a1.034 1.034 0 0 1 0 1.467L10.526 12l5.17 5.22c.406.41.406 1.055 0 1.465l-.012.011a1.046 1.046 0 0 1-1.473 0l-5.906-5.963a1.034 1.034 0 0 1 0-1.466'\n fill='currentColor'\n />\n </svg>\n );\n}\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};"],"names":["ChevronLeftSvg","props","jsx","DEFAULT_PARTIAL_LOADING_OPTIONS","PartialLoadingHelper","options","opts","getRandomFilterWidth"],"mappings":"sCAEO,SAASA,EAAeC,EAAsC,CACnE,OACEC,EAAAA,IAAC,MAAA,CAAK,GAAGD,EACP,SAAAC,EAAAA,IAAC,OAAA,CACC,EAAE,iNACF,KAAK,cAAA,CAAA,EAET,CAEJ,CCXA,MAAMC,EAAyD,CAC7D,SAAU,EACV,SAAU,GACV,SAAU,GACZ,EAYaC,EAAuB,CAClC,uBAAuBC,EAAiC,GAA0B,CAChF,MAAMC,EAAO,CACX,GAAGH,EACH,GAAGE,CAAA,EAGCE,EAAuB,IAAM,KAAK,IAAI,KAAK,MAAM,KAAK,OAAA,EAAWD,EAAK,QAAQ,EAAGA,EAAK,QAAQ,EAEpG,MAAO,CAAC,GAAG,MAAMA,EAAK,QAAQ,CAAC,EAAE,IAAI,KAAO,CAAE,MAAO,GAAGC,EAAA,CAAsB,MAAO,CACvF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as d,j as h}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{r as d,j as h}from"./app-CShb1Dgt.js";var I=new Map,R=new WeakMap,y=0,L=void 0;function O(e){return e?(R.has(e)||(y+=1,R.set(e,y.toString())),R.get(e)):"0"}function _(e){return Object.keys(e).sort().filter(r=>e[r]!==void 0).map(r=>`${r}_${r==="root"?O(e.root):e[r]}`).toString()}function $(e){const r=_(e);let s=I.get(r);if(!s){const n=new Map;let a;const i=new IntersectionObserver(o=>{o.forEach(t=>{var c;const g=t.isIntersecting&&a.some(u=>t.intersectionRatio>=u);e.trackVisibility&&typeof t.isVisible>"u"&&(t.isVisible=g),(c=n.get(t.target))==null||c.forEach(u=>{u(g,t)})})},e);a=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),s={id:r,observer:i,elements:n},I.set(r,s)}return s}function j(e,r,s={},n=L){if(typeof window.IntersectionObserver>"u"&&n!==void 0){const c=e.getBoundingClientRect();return r(n,{isIntersecting:n,target:e,intersectionRatio:typeof s.threshold=="number"?s.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),()=>{}}const{id:a,observer:i,elements:o}=$(s),t=o.get(e)||[];return o.has(e)||o.set(e,t),t.push(r),i.observe(e),function(){t.splice(t.indexOf(r),1),t.length===0&&(o.delete(e),i.unobserve(e)),o.size===0&&(i.disconnect(),I.delete(a))}}function D({threshold:e,delay:r,trackVisibility:s,rootMargin:n,root:a,triggerOnce:i,skip:o,initialInView:t,fallbackInView:c,onChange:g}={}){var u;const[f,p]=d.useState(null),m=d.useRef(),[A,l]=d.useState({inView:!!t,entry:void 0});m.current=g,d.useEffect(()=>{if(o||!f)return;let b;return b=j(f,(x,E)=>{l({inView:x,entry:E}),m.current&&m.current(x,E),E.isIntersecting&&i&&b&&(b(),b=void 0)},{root:a,rootMargin:n,threshold:e,trackVisibility:s,delay:r},c),()=>{b&&b()}},[Array.isArray(e)?e.toString():e,f,a,n,i,o,s,c,r]);const w=(u=A.entry)==null?void 0:u.target,S=d.useRef();!f&&w&&!i&&!o&&S.current!==w&&(S.current=w,l({inView:!!t,entry:void 0}));const v=[p,A.inView,A.entry];return v.ref=v[0],v.inView=v[1],v.entry=v[2],v}function V(e={}){const{prevent:r,rootMargin:s,triggerOnce:n=!0}=e;let[a,i,o]=D({triggerOnce:n,rootMargin:s});return(r===!0||typeof window.IntersectionObserver>"u")&&(i=!0,a=null),{ref:a,inView:i,initialized:!!o}}const M="_image_pp6me_1",C={image:M},z="500px",B="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",T=d.memo(function(e){const{forceLoad:r,extraClasses:s="",errorFallbackImageSrc:n,preventLoad:a=!1,errorFallbackImageClassName:i,src:o,alt:t,...c}=e,{ref:g,inView:u}=V({rootMargin:z}),[f,p]=d.useState(!1);d.useEffect(()=>{if(!r&&!u||a)return;const l=new Image;return l.onerror=()=>{p(!0),n&&(l.src=n)},l.src=o,()=>l.onerror=null},[u,a]);function m(){return f&&n?n:e.src}if(f&&!n)return h.jsx(h.Fragment,{});if(!g)return h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,alt:t,src:m(),...c});const A={alt:t,...c,...(u||r)&&!a?{src:m()}:{src:B}};return r||(A.ref=g),h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,...A})});export{T as L,D as a,V as u};
|
|
2
|
+
//# sourceMappingURL=B5VX0-05.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Csq5lSfL.chunk.js","sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});"],"names":["observerMap","RootIds","rootId","unsupportedValue","getRootId","root","optionsToId","options","key","createObserver","id","instance","elements","thresholds","observer","entries","entry","_a","inView","threshold","callback","observe","element","fallbackInView","bounds","callbacks","useInView","delay","trackVisibility","rootMargin","triggerOnce","skip","initialInView","onChange","ref","setRef","React2.useState","React2.useRef","state","setState","React2.useEffect","unobserve","entryTarget","previousEntryTarget","result","useLazyLoad","prevent","PRELOAD_DISTANCE","PLACEHOLDER_SRC","LazyImage","React.memo","props","forceLoad","extraClasses","errorFallbackImageSrc","preventLoad","errorFallbackImageClassName","src","alt","propsWithoutSrc","error","setError","React.useState","React.useEffect","img","getSrc","jsx","Fragment","styles","imgProps"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"B5VX0-05.chunk.js","sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});"],"names":["observerMap","RootIds","rootId","unsupportedValue","getRootId","root","optionsToId","options","key","createObserver","id","instance","elements","thresholds","observer","entries","entry","_a","inView","threshold","callback","observe","element","fallbackInView","bounds","callbacks","useInView","delay","trackVisibility","rootMargin","triggerOnce","skip","initialInView","onChange","ref","setRef","React2.useState","React2.useRef","state","setState","React2.useEffect","unobserve","entryTarget","previousEntryTarget","result","useLazyLoad","prevent","PRELOAD_DISTANCE","PLACEHOLDER_SRC","LazyImage","React.memo","props","forceLoad","extraClasses","errorFallbackImageSrc","preventLoad","errorFallbackImageClassName","src","alt","propsWithoutSrc","error","setError","React.useState","React.useEffect","img","getSrc","jsx","Fragment","styles","imgProps"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as a}from"./app-CShb1Dgt.js";function s(e){return a.jsx("span",{id:`${e.name}Error`,className:`${e.className} invalid-feedback d-block`,role:"status",children:e.children})}export{s as F};
|
|
2
|
+
//# sourceMappingURL=B5yQ-o2c.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"B5yQ-o2c.chunk.js","sources":["../../../../libs/shared/src/components/forms/form-feedback/FormFeedback.tsx"],"sourcesContent":["import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}"],"names":["FormFeedback","props","jsx"],"mappings":"sCAOO,SAASA,EAAaC,EAA0B,CACrD,OACEC,EAAAA,IAAC,OAAA,CAAK,GAAI,GAAGD,EAAM,IAAI,QAAS,UAAW,GAAGA,EAAM,SAAS,4BAA6B,KAAK,SAAU,WAAM,SAAS,CAE5H"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{U as n,H as $,an as k,c as D,S as y}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{U as n,H as $,an as k,c as D,S as y}from"./app-CShb1Dgt.js";import{S as C}from"./d6bZeQ7u.chunk.js";import{P as b}from"./pkzD5BEm.chunk.js";const j={exchange(){return{url:n.urlBuilder("/api/domain/v2/me/libraries",{type:["exchange"],maxCategoryDepth:0}),key:"exchange",normalize:!1,formatData:e=>D.first(e).data}},categories(){return{url:n.urlBuilder("/api/domain/v2/me/libraries",{type:["exchange"],maxCategoryDepth:2}),key:"exchange:categories",normalize:!1,formatData:e=>D.first(e).children}},folderVideos(e,t,a){const i=k.getVideoSortParam(t),s=(i?`{${i},libraries.typeid:18}`:"")+y.VIDEO_COLLECTION,o=n.urlBuilder(`{gateway}/v1/objects/${e}/videos`,{cursor:a,query:s,permissionFilterOption:b.StripMetadata}),r=["folder","videos",e,a,t].filter(l=>!!l).join(":");return{url:o,key:r}},seriesVideos(e,t,a){const i=k.getVideoSortParam(t),s=(i?`{${i},libraries.typeid:18}`:"")+y.VIDEO_COLLECTION,o=n.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:s,cursor:a}),r=["series","videos",e,a,t].filter(l=>!!l).join(":");return{url:o,key:r}},mostRecentVideos(e,t){const a="{orderByDesc:timestamp}"+y.VIDEO_COLLECTION,i=n.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:a,cursor:t}),s=["mostRecent","videos",e,t].filter(o=>!!o).join(":");return{url:i,key:s}},addVideo(e,t){return{key:"add:video:exchange",url:"{gateway}/v1/users/me/add-videos",data:{libraryId:e,objectId:t},type:$.POST,invalidationKeys:`videos:${t}:`}},suggestEdit(e,t){return{key:"suggest:an:edit",url:`{gateway}/v1/videos/${e}/suggest-edit`,data:t,type:$.POST}},search(e,t,a={},i){let s=`search:${e}:${t}:${i}`;s+=Object.keys(a).map(r=>a[r]).join(";");const o=Object.assign({},{index:t,cursor:i??void 0,query:e,...a});return{url:n.urlBuilder("{gateway}/v3/search/exchange",o),key:s,formatData:r=>{var g,m;let l=r.totalResults;const u=((g=r==null?void 0:r.results)==null?void 0:g.filter(d=>{var p,v,h,f,x,O,S,V;if(d._index!=="series"&&d._index!=="playlist")return!0;if(d._index==="playlist"){const c=d;return(v=(p=c.clips)==null?void 0:p.data)!=null&&v.length||(f=(h=c.interactives)==null?void 0:h.data)!=null&&f.length||(O=(x=c.videos)==null?void 0:x.data)!=null&&O.length?!0:(l--,!1)}return((V=(S=d.videos)==null?void 0:S.data)==null?void 0:V.length)===0?(l--,!1):!0}))??[];r.results=u,r.totalResults=l;const E=(m=u[0])==null?void 0:m._score;return{...r,results:C.mapMaxScoreToSearchResults(u,E)}}}}};export{j as E};
|
|
2
|
+
//# sourceMappingURL=BAaMmtA5.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BAaMmtA5.chunk.js","sources":["../../src/apps/exchange/flight-requests/ExchangeRequests.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SearchIndices, SearchResultObjectTypes, SearchResults, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { SharedSearchHelper } from 'libs/shared/apps/search/utils/SharedSearchHelper';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { Playlist, Series, SuggestEditRequest } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nexport const ExchangeRequests = {\n exchange() {\n return {\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 0\n }),\n key: 'exchange',\n normalize: false,\n formatData: (data: HashObject[]) => {\n return ArrayHelper.first(data).data;\n }\n };\n },\n categories() {\n return {\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 2\n }),\n key: 'exchange:categories',\n normalize: false,\n formatData: (data: HashObject[]) => {\n return ArrayHelper.first(data).children;\n }\n };\n },\n folderVideos(\n folderId: string,\n sort?: VideoSortType,\n cursor?: string\n ): Flight.Request {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n \n const query = (sortFilter ? `{${sortFilter},libraries.typeid:18}` : '') + SharedWithStatements.VIDEO_COLLECTION;\n\n const url = UrlHelper.urlBuilder(`{gateway}/v1/objects/${folderId}/videos`, {\n cursor,\n query,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n });\n\n const key = [ 'folder', 'videos', folderId, cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url,\n key\n };\n },\n seriesVideos(\n seriesId: string,\n sort?: VideoSortType,\n cursor?: string\n ): Flight.Request {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const query = (sortFilter ? `{${sortFilter},libraries.typeid:18}` : '') + SharedWithStatements.VIDEO_COLLECTION;\n\n const url = UrlHelper.urlBuilder(`{gateway}/v1/collections/${seriesId}/videos`, {\n query,\n cursor\n });\n\n const key = [ 'series', 'videos', seriesId, cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url,\n key\n };\n },\n mostRecentVideos(exchangeId: string, cursor?: string): Flight.Request {\n const query = '{orderByDesc:timestamp}' + SharedWithStatements.VIDEO_COLLECTION;\n \n const url = UrlHelper.urlBuilder(`{gateway}/v1/collections/${exchangeId}/videos`, {\n query,\n cursor\n });\n\n const key = [ 'mostRecent', 'videos', exchangeId, cursor ].filter(k => !!k).join(':');\n\n return {\n url,\n key\n };\n },\n addVideo(\n libraryId: string,\n objectId: string\n ): Flight.Request {\n return {\n key: 'add:video:exchange',\n url: '{gateway}/v1/users/me/add-videos',\n data: {\n libraryId,\n objectId\n },\n type: HttpVerbs.POST,\n invalidationKeys: `videos:${objectId}:`\n };\n },\n\n suggestEdit(id: string, data: SuggestEditRequest): Flight.Request {\n return {\n key: 'suggest:an:edit',\n url: `{gateway}/v1/videos/${id}/suggest-edit`,\n data,\n type: HttpVerbs.POST\n };\n },\n\n search(\n query: string,\n indices: SearchIndices[],\n filters: HashObject = {},\n cursor?: string\n ): Flight.Request {\n let key = `search:${query}:${indices}:${cursor}`;\n\n key += Object.keys(filters).map(filterName => filters[filterName]).join(';');\n\n const params = Object.assign({}, {\n index: indices,\n cursor: cursor ?? undefined,\n query,\n ...filters\n });\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v3/search/exchange', params),\n key,\n formatData: (response: SearchResults<SearchResultObjectTypes>) => {\n /**\n * Until playlists and series are regionalised, search will always return every series/playlist that exists\n * even if the current user doesn't have access to the content inside (which will happen for example when playlists/series)\n * contain all UK library content but is being searched for by an AU user.\n *\n * For some search queries, this may result in search showing a bunch of \"empty\" playlists/series, which sucks.\n * This will filter all empty collections out and decrement the `totalResults` to avoid this and make search a better\n * experience.\n *\n * Ideally this will be removed one day when this regionalisation is no longer an issue.\n */\n let totalResults = response.totalResults;\n\n const results = response?.results?.filter(result => {\n if (result._index !== 'series' && result._index !== 'playlist')\n return true;\n\n if (result._index === 'playlist') {\n const playlist = result as SearchResultsObject<Playlist>;\n\n if (playlist.clips?.data?.length ||\n playlist.interactives?.data?.length ||\n playlist.videos?.data?.length)\n return true;\n\n totalResults--;\n return false;\n }\n\n if ((result as SearchResultsObject<Series>).videos?.data?.length === 0) {\n totalResults--;\n return false;\n }\n\n return true;\n }) ?? [];\n\n response.results = results;\n response.totalResults = totalResults;\n\n // The first search result will always have the highest score value.\n // We store it so that we can access it for subsequent results pages\n const resultMaxScore = results[0]?._score;\n\n return {\n ...response,\n results: SharedSearchHelper.mapMaxScoreToSearchResults(results, resultMaxScore)\n };\n }\n };\n }\n};"],"names":["ExchangeRequests","UrlHelper","data","ArrayHelper","folderId","sort","cursor","sortFilter","VideoSortHelper","query","SharedWithStatements","url","PermissionFilterOption","key","k","seriesId","exchangeId","libraryId","objectId","HttpVerbs","id","indices","filters","filterName","params","response","totalResults","results","_a","result","playlist","_b","_d","_c","_f","_e","_h","_g","resultMaxScore","SharedSearchHelper"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as l}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as l}from"./app-CShb1Dgt.js";const s="_channelBadge_1riea_1",n="_small_1riea_4",e={channelBadge:s,small:n};function m(a){return l.jsx("div",{className:`${e.channelBadge} ${a.small?e.small:""} ${a.className||""}`,children:l.jsx("img",{className:"h-100 align-baseline",src:a.logoUrl})})}export{m as T};
|
|
2
|
+
//# sourceMappingURL=BJB2pvo-.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BJB2pvo-.chunk.js","sources":["../../src/apps/tv/components/tv-channel-badge/TvChannelBadge.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './tv-channel-badge.module.scss';\n\ninterface TvChannelBadgeProps {\n logoUrl: string;\n small?: boolean;\n className?: string;\n}\n\nexport function TvChannelBadge(props: TvChannelBadgeProps) {\n return (\n <div className={`${styles.channelBadge} ${props.small ? styles.small : ''} ${props.className || ''}`}>\n <img className='h-100 align-baseline' src={props.logoUrl} />\n </div>\n );\n}"],"names":["TvChannelBadge","props","jsx","styles"],"mappings":"oHAUO,SAASA,EAAeC,EAA4B,CACzD,OACEC,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGC,EAAO,YAAY,IAAIF,EAAM,MAAQE,EAAO,MAAQ,EAAE,IAAIF,EAAM,WAAa,EAAE,GAChG,SAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,uBAAuB,IAAKD,EAAM,OAAA,CAAS,CAAA,CAC5D,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a3 as A,aD as m,ad as d,ac as T,aI as r,ae as l,af as p,L as V,U as g,A as b,a as f,b as h,a6 as k}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{a3 as A,aD as m,ad as d,ac as T,aI as r,ae as l,af as p,L as V,U as g,A as b,a as f,b as h,a6 as k}from"./app-CShb1Dgt.js";import{A as w}from"./Bcaq2QKq.chunk.js";const C="tv.addRequests",i=V.encloseNamespace(C);function y(u,a,o){const v=A(m.config());return function(e){var c;if(!a)return[];const t=u==="preview",n={id:e.id,name:e.title},s=t?d.VideoItemPreview:d.VideoListItem;return[{label:t?i("addVideo"):"",svg:t?void 0:w,tooltip:t?"":i("addVideo"),className:t?"btn btn-dark me-2 text-nowrap":"btn",button:!0,onClick:()=>{b.trigger({application:h.TV,action:f.Tv.ADD,args:[a.code,e.id],params:{currentTime:Math.floor(+(o==null?void 0:o.currentTime()))||void 0}})},analyticsData:n,analyticsOptions:{actionType:p.Click,entity:l.Video,descriptor:r.AddToWorkspace,location:s,workflowPhase:T.Start}},{label:i("editVideo"),href:g.urlBuilder(`${(c=v.data)==null?void 0:c.cloudEditorUrl}/tv/${e.globalId}`,{product:k.Exchange}),openInNewTab:!0,analyticsData:n,analyticsOptions:{actionType:p.Click,entity:l.Video,location:s,descriptor:r.EditVideo}}]}}export{y as u};
|
|
2
|
+
//# sourceMappingURL=BJmQsLgH.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BJmQsLgH.chunk.js","sources":["../../src/apps/tv/hooks/useGetTvActions.ts"],"sourcesContent":["import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { AddVideoSvg } from 'libs/shared/images/svg/actions/AddVideoSvg';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\nimport { ExchangeConfig } from 'shared/interfaces/ExchangeConfig';\n\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nconst namespace = 'tv.addRequests';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Location = 'preview' | 'video-list';\n\nexport function useGetTvActions(location: Location, region: TvRegion, playerRef?: PlayerReference) {\n const config = Flight.useBasicFetch<ExchangeConfig>(ConfigRequests.config());\n \n return function getTvActions(program: TvProgram): ActionOptions[] {\n if (!region)\n return [];\n\n const isPreview = location === 'preview';\n const analyticsData = { id: program.id, name: program.title };\n const locationContext = isPreview ? LocationContext.VideoItemPreview : LocationContext.VideoListItem;\n\n // TODO: Register analytics for all actions\n return [{\n label: isPreview ? getPhrase('addVideo') : '',\n svg: !isPreview ? AddVideoSvg : undefined,\n tooltip: isPreview ? '' : getPhrase('addVideo'),\n className: isPreview ? 'btn btn-dark me-2 text-nowrap' : 'btn',\n button: true,\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.ADD,\n args: [ region.code, program.id ],\n params: {\n currentTime: Math.floor(+playerRef?.currentTime()) || undefined\n }\n });\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n label: getPhrase('editVideo'),\n href: UrlHelper.urlBuilder(\n `${config.data?.cloudEditorUrl}/tv/${program.globalId}`,\n { product: ProductId.Exchange }\n ),\n openInNewTab: true,\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n location: locationContext,\n descriptor: VideoActionDescriptor.EditVideo\n }\n }];\n };\n}"],"names":["namespace","getPhrase","LanguageService","useGetTvActions","location","region","playerRef","config","Flight.useBasicFetch","ConfigRequests","program","isPreview","analyticsData","locationContext","LocationContext","AddVideoSvg","Core.AppLinkHelper","AppChannels","Actions","UserAction","EntityType","VideoActionDescriptor","WorkflowPhase","UrlHelper","_a","ProductId"],"mappings":"0KAoBA,MAAMA,EAAY,iBACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAIrD,SAASG,EAAgBC,EAAoBC,EAAkBC,EAA6B,CACjG,MAAMC,EAASC,EAAqCC,EAAe,QAAQ,EAE3E,OAAO,SAAsBC,EAAqC,OAChE,GAAI,CAACL,EACH,MAAO,CAAA,EAET,MAAMM,EAAYP,IAAa,UACzBQ,EAAgB,CAAE,GAAIF,EAAQ,GAAI,KAAMA,EAAQ,KAAA,EAChDG,EAAkBF,EAAYG,EAAgB,iBAAmBA,EAAgB,cAGvF,MAAO,CAAC,CACN,MAAOH,EAAYV,EAAU,UAAU,EAAI,GAC3C,IAAMU,EAA0B,OAAdI,EAClB,QAASJ,EAAY,GAAKV,EAAU,UAAU,EAC9C,UAAWU,EAAY,gCAAkC,MACzD,OAAQ,GACR,QAAS,IAAM,CACbK,EAAmB,QAAQ,CACzB,YAAaC,EAAY,GACzB,OAAQC,EAAQ,GAAG,IACnB,KAAM,CAAEb,EAAO,KAAMK,EAAQ,EAAG,EAChC,OAAQ,CACN,YAAa,KAAK,MAAM,EAACJ,GAAA,YAAAA,EAAW,cAAa,GAAK,MAAA,CACxD,CACD,CACH,EACA,cAAAM,EACA,iBAAkB,CAChB,WAAYO,EAAW,MACvB,OAAQC,EAAW,MACnB,WAAYC,EAAsB,eAClC,SAAUR,EACV,cAAeS,EAAc,KAAA,CAC/B,EACC,CACD,MAAOrB,EAAU,WAAW,EAC5B,KAAMsB,EAAU,WACd,IAAGC,EAAAjB,EAAO,OAAP,YAAAiB,EAAa,cAAc,OAAOd,EAAQ,QAAQ,GACrD,CAAE,QAASe,EAAU,QAAA,CAAS,EAEhC,aAAc,GACd,cAAAb,EACA,iBAAkB,CAChB,WAAYO,EAAW,MACvB,OAAQC,EAAW,MACnB,SAAUP,EACV,WAAYQ,EAAsB,SAAA,CACpC,CACD,CACH,CACF"}
|