@clickview/exchange 0.63.0 → 0.64.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +662 -633
- package/dist/bundles.json +1 -1
- package/dist/css/DuPOYFVx.chunk.css +1 -0
- package/dist/en.json +1 -1
- package/dist/scripts/0WVIsJXw.chunk.js +2 -0
- package/dist/scripts/0WVIsJXw.chunk.js.map +1 -0
- package/dist/scripts/{CoK2sqzN2.chunk.js → B0BkP9zj2.chunk.js} +2 -2
- package/dist/scripts/{CoK2sqzN2.chunk.js.map → B0BkP9zj2.chunk.js.map} +1 -1
- package/dist/scripts/{dkfSCDWH2.chunk.js → B0CItJhp2.chunk.js} +2 -2
- package/dist/scripts/{dkfSCDWH2.chunk.js.map → B0CItJhp2.chunk.js.map} +1 -1
- package/dist/scripts/B0NqlFZf.chunk.js +2 -0
- package/dist/scripts/B0NqlFZf.chunk.js.map +1 -0
- package/dist/scripts/B1i9atik.chunk.js.map +1 -1
- package/dist/scripts/{CYFRcx63.chunk.js → B3S7B746.chunk.js} +2 -2
- package/dist/scripts/{CYFRcx63.chunk.js.map → B3S7B746.chunk.js.map} +1 -1
- package/dist/scripts/{BnbM9YhY.chunk.js → B5B9BCxo.chunk.js} +2 -2
- package/dist/scripts/{BnbM9YhY.chunk.js.map → B5B9BCxo.chunk.js.map} +1 -1
- package/dist/scripts/{C3K3VtRR2.chunk.js → BKYpYiMb2.chunk.js} +2 -2
- package/dist/scripts/{C3K3VtRR2.chunk.js.map → BKYpYiMb2.chunk.js.map} +1 -1
- package/dist/scripts/{D3Jgk2dT.chunk.js → BLXI9pzb.chunk.js} +3 -3
- package/dist/scripts/{D3Jgk2dT.chunk.js.map → BLXI9pzb.chunk.js.map} +1 -1
- package/dist/scripts/{CDXcKno52.chunk.js → BLrooXWI2.chunk.js} +2 -2
- package/dist/scripts/{CDXcKno52.chunk.js.map → BLrooXWI2.chunk.js.map} +1 -1
- package/dist/scripts/{-x9MMtVv.chunk.js → BQVqfJL8.chunk.js} +2 -2
- package/dist/scripts/{-x9MMtVv.chunk.js.map → BQVqfJL8.chunk.js.map} +1 -1
- package/dist/scripts/{jErHNuXU2.chunk.js → BU2ULxCS2.chunk.js} +2 -2
- package/dist/scripts/{jErHNuXU2.chunk.js.map → BU2ULxCS2.chunk.js.map} +1 -1
- package/dist/scripts/{B6EmIhMh.chunk.js → BU_B6gyd.chunk.js} +2 -2
- package/dist/scripts/{B6EmIhMh.chunk.js.map → BU_B6gyd.chunk.js.map} +1 -1
- package/dist/scripts/{DHV6S1fA2.chunk.js → BbaX1lfI2.chunk.js} +2 -2
- package/dist/scripts/{DHV6S1fA2.chunk.js.map → BbaX1lfI2.chunk.js.map} +1 -1
- package/dist/scripts/{D6EZoO4S2.chunk.js → Bbaycd7V.chunk.js} +2 -2
- package/dist/scripts/Bbaycd7V.chunk.js.map +1 -0
- package/dist/scripts/{CeeAb-HT2.chunk.js → BgLWPZ7H2.chunk.js} +2 -2
- package/dist/scripts/{CeeAb-HT2.chunk.js.map → BgLWPZ7H2.chunk.js.map} +1 -1
- package/dist/scripts/{CjNkj1Q92.chunk.js → Bj6lJgAv2.chunk.js} +1 -1
- package/dist/scripts/{CjNkj1Q92.chunk.js.map → Bj6lJgAv2.chunk.js.map} +1 -1
- package/dist/scripts/{Da2KHzN02.chunk.js → BoWMmXN02.chunk.js} +2 -2
- package/dist/scripts/{Da2KHzN02.chunk.js.map → BoWMmXN02.chunk.js.map} +1 -1
- package/dist/scripts/{mkasrghR2.chunk.js → BpzuiXcd2.chunk.js} +2 -2
- package/dist/scripts/{mkasrghR2.chunk.js.map → BpzuiXcd2.chunk.js.map} +1 -1
- package/dist/scripts/{BEyI0jsC2.chunk.js → Bswd1QrZ2.chunk.js} +2 -2
- package/dist/scripts/{BEyI0jsC2.chunk.js.map → Bswd1QrZ2.chunk.js.map} +1 -1
- package/dist/scripts/{BaXT2aKo2.chunk.js → ByC5ZDQ-2.chunk.js} +2 -2
- package/dist/scripts/{BaXT2aKo2.chunk.js.map → ByC5ZDQ-2.chunk.js.map} +1 -1
- package/dist/scripts/{D-ivDlyL.chunk.js → C-jHArp-.chunk.js} +2 -2
- package/dist/scripts/{D-ivDlyL.chunk.js.map → C-jHArp-.chunk.js.map} +1 -1
- package/dist/scripts/{BrEvIvRP.chunk.js → C3cl5FmM.chunk.js} +2 -2
- package/dist/scripts/{BrEvIvRP.chunk.js.map → C3cl5FmM.chunk.js.map} +1 -1
- package/dist/scripts/{c2oA1XgG.chunk.js → C4hd6q9D.chunk.js} +2 -2
- package/dist/scripts/{c2oA1XgG.chunk.js.map → C4hd6q9D.chunk.js.map} +1 -1
- package/dist/scripts/{DsolW3Wd2.chunk.js → C8dtRvC52.chunk.js} +2 -2
- package/dist/scripts/{DsolW3Wd2.chunk.js.map → C8dtRvC52.chunk.js.map} +1 -1
- package/dist/scripts/{BmEexpMP2.chunk.js → C8lms6Rf2.chunk.js} +1 -1
- package/dist/scripts/{BmEexpMP2.chunk.js.map → C8lms6Rf2.chunk.js.map} +1 -1
- package/dist/scripts/{s776Po8a2.chunk.js → C9AjegY32.chunk.js} +2 -2
- package/dist/scripts/{s776Po8a2.chunk.js.map → C9AjegY32.chunk.js.map} +1 -1
- package/dist/scripts/{DgSFdSfV.chunk.js → CBwR65WF.chunk.js} +2 -2
- package/dist/scripts/{DgSFdSfV.chunk.js.map → CBwR65WF.chunk.js.map} +1 -1
- package/dist/scripts/{D36Shrdb2.chunk.js → CEOaf0tK2.chunk.js} +2 -2
- package/dist/scripts/{D36Shrdb2.chunk.js.map → CEOaf0tK2.chunk.js.map} +1 -1
- package/dist/scripts/CFdu6aud.chunk.js +2 -0
- package/dist/scripts/CFdu6aud.chunk.js.map +1 -0
- package/dist/scripts/{CYfnBEtT2.chunk.js → CHojcsxD2.chunk.js} +1 -1
- package/dist/scripts/{CYfnBEtT2.chunk.js.map → CHojcsxD2.chunk.js.map} +1 -1
- package/dist/scripts/{BibFbDqs.chunk.js → CIxLO-TM.chunk.js} +2 -2
- package/dist/scripts/{BibFbDqs.chunk.js.map → CIxLO-TM.chunk.js.map} +1 -1
- package/dist/scripts/{CAQAUQMB.chunk.js → CLTKXoqB.chunk.js} +2 -2
- package/dist/scripts/{CAQAUQMB.chunk.js.map → CLTKXoqB.chunk.js.map} +1 -1
- package/dist/scripts/{DGy73Ett2.chunk.js → CNuGo1LQ2.chunk.js} +2 -2
- package/dist/scripts/{DGy73Ett2.chunk.js.map → CNuGo1LQ2.chunk.js.map} +1 -1
- package/dist/scripts/{DsA2RTbF.chunk.js → CQKpvTZY.chunk.js} +2 -2
- package/dist/scripts/{DsA2RTbF.chunk.js.map → CQKpvTZY.chunk.js.map} +1 -1
- package/dist/scripts/{CL9-CkqC2.chunk.js → CRAcJqQV2.chunk.js} +2 -2
- package/dist/scripts/{CL9-CkqC2.chunk.js.map → CRAcJqQV2.chunk.js.map} +1 -1
- package/dist/scripts/{C1guWVFU2.chunk.js → CSB18s8X2.chunk.js} +2 -2
- package/dist/scripts/{C1guWVFU2.chunk.js.map → CSB18s8X2.chunk.js.map} +1 -1
- package/dist/scripts/CWZvMFYz.chunk.js +2 -0
- package/dist/scripts/CWZvMFYz.chunk.js.map +1 -0
- package/dist/scripts/{4oWF2EyV2.chunk.js → CZrMa6z92.chunk.js} +2 -2
- package/dist/scripts/{4oWF2EyV2.chunk.js.map → CZrMa6z92.chunk.js.map} +1 -1
- package/dist/scripts/{CAJOpkKZ.chunk.js → CfCxi56P.chunk.js} +2 -2
- package/dist/scripts/{CAJOpkKZ.chunk.js.map → CfCxi56P.chunk.js.map} +1 -1
- package/dist/scripts/{B0jhFNam2.chunk.js → Chib9pDe2.chunk.js} +3 -3
- package/dist/scripts/{B0jhFNam2.chunk.js.map → Chib9pDe2.chunk.js.map} +1 -1
- package/dist/scripts/{DUCTNoXj.chunk.js → CiEI8sTG.chunk.js} +2 -2
- package/dist/scripts/{DUCTNoXj.chunk.js.map → CiEI8sTG.chunk.js.map} +1 -1
- package/dist/scripts/{CAoPaL8M.chunk.js → CmIbuK_d.chunk.js} +2 -2
- package/dist/scripts/{CAoPaL8M.chunk.js.map → CmIbuK_d.chunk.js.map} +1 -1
- package/dist/scripts/{BTsePUCN2.chunk.js → CsQ6WMM92.chunk.js} +2 -2
- package/dist/scripts/{BTsePUCN2.chunk.js.map → CsQ6WMM92.chunk.js.map} +1 -1
- package/dist/scripts/{BHzUOyzG.chunk.js → Cxq38DxA.chunk.js} +2 -2
- package/dist/scripts/{BHzUOyzG.chunk.js.map → Cxq38DxA.chunk.js.map} +1 -1
- package/dist/scripts/{Cllrumah2.chunk.js → D0TX42le2.chunk.js} +2 -2
- package/dist/scripts/{Cllrumah2.chunk.js.map → D0TX42le2.chunk.js.map} +1 -1
- package/dist/scripts/{B7sWLg9v2.chunk.js → D8x02prV2.chunk.js} +2 -2
- package/dist/scripts/{B7sWLg9v2.chunk.js.map → D8x02prV2.chunk.js.map} +1 -1
- package/dist/scripts/{CCvXN2-C.chunk.js → DAQxdC_x.chunk.js} +2 -2
- package/dist/scripts/{CCvXN2-C.chunk.js.map → DAQxdC_x.chunk.js.map} +1 -1
- package/dist/scripts/{DOuiFwIH2.chunk.js → DGBrggmU2.chunk.js} +2 -2
- package/dist/scripts/{DOuiFwIH2.chunk.js.map → DGBrggmU2.chunk.js.map} +1 -1
- package/dist/scripts/{CSbvS-Cl.chunk.js → DI6eYZuV.chunk.js} +2 -2
- package/dist/scripts/{CSbvS-Cl.chunk.js.map → DI6eYZuV.chunk.js.map} +1 -1
- package/dist/scripts/DIsOuUSO2.chunk.js +2 -0
- package/dist/scripts/DIsOuUSO2.chunk.js.map +1 -0
- package/dist/scripts/{B3tq0EFi2.chunk.js → DN_CuUia2.chunk.js} +2 -2
- package/dist/scripts/{B3tq0EFi2.chunk.js.map → DN_CuUia2.chunk.js.map} +1 -1
- package/dist/scripts/{DRZvc_n5.chunk.js → DT626M1P.chunk.js} +3 -3
- package/dist/scripts/{DRZvc_n5.chunk.js.map → DT626M1P.chunk.js.map} +1 -1
- package/dist/scripts/DWVn5hOy2.chunk.js +2 -0
- package/dist/scripts/DWVn5hOy2.chunk.js.map +1 -0
- package/dist/scripts/DZ85IleM.chunk.js +2 -0
- package/dist/scripts/DZ85IleM.chunk.js.map +1 -0
- package/dist/scripts/{CsrTrVKj.chunk.js → DarQpJDR.chunk.js} +2 -2
- package/dist/scripts/{CsrTrVKj.chunk.js.map → DarQpJDR.chunk.js.map} +1 -1
- package/dist/scripts/{CGLWqKaa.chunk.js → DfWNECxe.chunk.js} +2 -2
- package/dist/scripts/{CGLWqKaa.chunk.js.map → DfWNECxe.chunk.js.map} +1 -1
- package/dist/scripts/{BEgLlK2Z2.chunk.js → Dfi_iXFg2.chunk.js} +2 -2
- package/dist/scripts/{BEgLlK2Z2.chunk.js.map → Dfi_iXFg2.chunk.js.map} +1 -1
- package/dist/scripts/{8vJGuJF-2.chunk.js → DjMOZfNJ2.chunk.js} +2 -2
- package/dist/scripts/{8vJGuJF-2.chunk.js.map → DjMOZfNJ2.chunk.js.map} +1 -1
- package/dist/scripts/{DGRBUJ6T2.chunk.js → DjUmgrOk2.chunk.js} +2 -2
- package/dist/scripts/{DGRBUJ6T2.chunk.js.map → DjUmgrOk2.chunk.js.map} +1 -1
- package/dist/scripts/DjdW7gMz.chunk.js +2 -0
- package/dist/scripts/DjdW7gMz.chunk.js.map +1 -0
- package/dist/scripts/{CAOBwDbU.chunk.js → DksIM59B.chunk.js} +2 -2
- package/dist/scripts/{CAOBwDbU.chunk.js.map → DksIM59B.chunk.js.map} +1 -1
- package/dist/scripts/{aXgcldgY.chunk.js → DpARg1IG.chunk.js} +2 -2
- package/dist/scripts/{aXgcldgY.chunk.js.map → DpARg1IG.chunk.js.map} +1 -1
- package/dist/scripts/{DM0JzOpR2.chunk.js → ErGRzsV12.chunk.js} +2 -2
- package/dist/scripts/{DM0JzOpR2.chunk.js.map → ErGRzsV12.chunk.js.map} +1 -1
- package/dist/scripts/{UK8sD-oL.chunk.js → GSm09vBX.chunk.js} +2 -2
- package/dist/scripts/{UK8sD-oL.chunk.js.map → GSm09vBX.chunk.js.map} +1 -1
- package/dist/scripts/{DDO16-at.chunk.js → HkF7AIye.chunk.js} +2 -2
- package/dist/scripts/{DDO16-at.chunk.js.map → HkF7AIye.chunk.js.map} +1 -1
- package/dist/scripts/{BI2S4EFA.chunk.js → I1XD6JKC.chunk.js} +2 -2
- package/dist/scripts/{BI2S4EFA.chunk.js.map → I1XD6JKC.chunk.js.map} +1 -1
- package/dist/scripts/MGxL1vUn.chunk.js +2 -0
- package/dist/scripts/MGxL1vUn.chunk.js.map +1 -0
- package/dist/scripts/{CBQgY9MD2.chunk.js → Tj-NqZ4q2.chunk.js} +1 -1
- package/dist/scripts/{CBQgY9MD2.chunk.js.map → Tj-NqZ4q2.chunk.js.map} +1 -1
- package/dist/scripts/{app-lnmpv5W4.js → app-fNhmX-xT.js} +4 -4
- package/dist/scripts/app-fNhmX-xT.js.map +1 -0
- package/dist/scripts/{Bu37Hprb2.chunk.js → fyOxYVvI2.chunk.js} +1 -1
- package/dist/scripts/{Bu37Hprb2.chunk.js.map → fyOxYVvI2.chunk.js.map} +1 -1
- package/dist/scripts/{Dsmr6Wly.chunk.js → gsffdqjU.chunk.js} +2 -2
- package/dist/scripts/{Dsmr6Wly.chunk.js.map → gsffdqjU.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/5Z0rGCy2.chunk.js +0 -2
- package/dist/scripts/5Z0rGCy2.chunk.js.map +0 -1
- package/dist/scripts/BjzONPz9.chunk.js +0 -2
- package/dist/scripts/BjzONPz9.chunk.js.map +0 -1
- package/dist/scripts/BuSq2beZ2.chunk.js +0 -2
- package/dist/scripts/BuSq2beZ2.chunk.js.map +0 -1
- package/dist/scripts/CHQN7xOX.chunk.js +0 -2
- package/dist/scripts/CHQN7xOX.chunk.js.map +0 -1
- package/dist/scripts/CuE3TVwa.chunk.js +0 -2
- package/dist/scripts/CuE3TVwa.chunk.js.map +0 -1
- package/dist/scripts/D6EZoO4S2.chunk.js.map +0 -1
- package/dist/scripts/D_PyfoSL.chunk.js +0 -2
- package/dist/scripts/D_PyfoSL.chunk.js.map +0 -1
- package/dist/scripts/DklryBsJ.chunk.js +0 -2
- package/dist/scripts/DklryBsJ.chunk.js.map +0 -1
- package/dist/scripts/app-lnmpv5W4.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as e,fn as t}from"./B1i9atik.chunk.js";import{n}from"./CzvVp9iC.chunk.js";import{J as r,Y as i,q as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{D as e,fn as t}from"./B1i9atik.chunk.js";import{n}from"./CzvVp9iC.chunk.js";import{J as r,Y as i,q as a}from"./app-fNhmX-xT.js";var o=t(e());function s(e){let t=a.getInstance(e);return o.useEffect(()=>()=>{a.releaseInstance(e)}),t}function c(e){return s(e)}function l(){let e=c(n.ALERT);return{success(t){e.success(t)()},error(t){e.error(t)()},warning(t){e.createAlert({type:r.Warning,heading:i.Warning,message:t})},info(t,n){e.createAlert({heading:t,message:n,type:r.Info})}}}export{c as n,l as t};
|
|
2
|
+
//# sourceMappingURL=Bswd1QrZ2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Bswd1QrZ2.chunk.js","names":[],"sources":["../../../../libs/common/src/react/hooks/UseInstance.ts","../../../../libs/common/src/react/hooks/UseService.ts","../../../../libs/shared/src/hooks/UseAlerts.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\n/**\n * Hook to retrieve an instance from InstanceManager.\n * It handles releasing the instance in the cleanup function.\n * @param instanceName \n */\nexport function useInstance<T>(instanceName: string): T {\n const instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}\n\n/**\n * Can be used to conditionally get an instance safely. Passing in a falsey value\n * will not return an instance, and will also not error\n */\nexport function useInstanceSafe<T>(instanceName: string): T {\n let instance: T = null;\n\n if (instanceName)\n instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}\n","import { BaseService } from 'libs/common/backbone/core/BaseService';\n\nimport { useInstance } from './UseInstance';\n\nexport function useService<T extends BaseService>(serviceName: string): T {\n const service = useInstance<T>(serviceName);\n\n return service;\n}\n","import { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { AlertType, BaseAlert, BaseAlertOptions, BaseAlertService, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nexport interface Alerts {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void;\n error(alertContent: string | BaseAlert | BaseAlertOptions): void;\n warning(alertContent: string): void;\n info(heading: string, message: string): void;\n}\n\nexport function useAlerts(): Alerts {\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\n\n return {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.success(alertContent)();\n },\n error(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.error(alertContent)();\n },\n warning(alertContent: string): void {\n alertService.createAlert({\n type: AlertType.Warning,\n heading: DefaultAlertHeading.Warning,\n message: alertContent\n });\n },\n info(heading: string, message: string): void {\n alertService.createAlert({\n heading,\n message,\n type: AlertType.Info\n });\n }\n };\n}\n"],"mappings":"oJASA,SAAgB,EAAe,EAAyB,CACtD,IAAM,EAAW,EAAgB,YAAe,EAAa,CAM7D,OAJA,EAAM,kBACS,CAAE,EAAgB,gBAAgB,EAAa,EAC5D,CAEK,ECZT,SAAgB,EAAkC,EAAwB,CAGxE,OAFgB,EAAe,EAAY,CCM7C,SAAgB,GAAoB,CAClC,IAAM,EAAe,EAA6B,EAAe,MAAM,CAEvE,MAAO,CACL,QAAQ,EAA2D,CACjE,EAAa,QAAQ,EAAa,EAAE,EAEtC,MAAM,EAA2D,CAC/D,EAAa,MAAM,EAAa,EAAE,EAEpC,QAAQ,EAA4B,CAClC,EAAa,YAAY,CACvB,KAAM,EAAU,QAChB,QAAS,EAAoB,QAC7B,QAAS,EACV,CAAC,EAEJ,KAAK,EAAiB,EAAuB,CAC3C,EAAa,YAAY,CACvB,UACA,UACA,KAAM,EAAU,KACjB,CAAC,EAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,O as n,bt as r,fn as i}from"./B1i9atik.chunk.js";import{_ as a,r as o}from"./NpQVkKE2.chunk.js";import{d as s,l as c}from"./TJBzqR6k.chunk.js";import{t as l}from"./BG5Aor0J.chunk.js";import{t as u}from"./CzvVp9iC.chunk.js";import{t as d}from"./BBMcrXvX.chunk.js";import{t as f}from"./DzbIsgVg.chunk.js";import{t as p}from"./CrBD6Z4s.chunk.js";import{t as m}from"./DKbUI-vj.chunk.js";import{I as h,J as g,M as _,Q as v,U as y,Z as b,tt as x,z as S}from"./app-lnmpv5W4.js";import{t as C}from"./Cc0tSPhP2.chunk.js";import{i as w,n as ee,r as T,t as E}from"./mkasrghR2.chunk.js";import{t as D}from"./DXN-HToH2.chunk.js";import{t as te}from"./BU8rJI4_2.chunk.js";import{t as O}from"./DHV6S1fA2.chunk.js";import{t as k}from"./jErHNuXU2.chunk.js";import{t as ne}from"./s776Po8a2.chunk.js";import{t as A}from"./BEyI0jsC2.chunk.js";import{t as re}from"./dkfSCDWH2.chunk.js";import{t as j}from"./DM0JzOpR2.chunk.js";var M=C(),N=i(t());function P(e,t,n){if(d.isEqual(e.id,t))return[e,n];let r=e.children;if(!r||!r.length)return[null,null];for(let i=0;i<r.length;i++){let[a,o]=P(r[i],t,[...n,e]);if(a)return[a,o]}return[null,null]}var F={find(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[r]=P(e.children[n],t,[]);if(r)return r}},getPath(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[,r]=P(e.children[n],t,[]);if(r?.length)return r}},getParent(e,t){let n=F.getPath(e,t);return n?.length?n[n.length-1]:null},convertNestedObjectToTree(e){let t={...e.data,children:e.children};return t.children?.length&&(t.children=t.children.map(F.convertNestedObjectToTree)),t},findDepth(e,t,n=0){if(!e||e.length===0)return 0;let r=0;for(let i of e){if(i.data?.id?.toString()===t.toString())return n;let e=F.findDepth(i.children,t,n+1);if(e>0){r=e;break}}return r},findMaxChildDepth(e,t=0){if(!e||e.length===0)return t;let n=t;for(let r of e){let e=F.findMaxChildDepth(r.children,t+1);n=Math.max(n,e)}return n},findTargetNode(e,t){if(!e||e.length===0)return null;for(let n of e){if(n.data?.id?.toString()===t.toString())return n;let e=F.findTargetNode(n.children,t);if(e!==null)return e}return null},isMaxDepth(e,t,n,r=7){let i=F.findTargetNode(e,t);return F.findMaxChildDepth(i.children)+F.findDepth(e,n)>=r},flatten(e){if(!e)return[];let t=[];function r(e){t.push(n.omit(e,[`children`])),e.children.forEach(r)}return e.children.forEach(r),t}},I={tree:`_tree_u0qyb_1`,text:`_text_u0qyb_1`,chevron:`_chevron_u0qyb_4`,disabled:`_disabled_u0qyb_163`,root:`_root_u0qyb_166`,selected:`_selected_u0qyb_172`,actions:`_actions_u0qyb_175`,node:`_node_u0qyb_185`,noActions:`_noActions_u0qyb_188`},L=e();function R(e){function t(){let t=`${I.text} clamp-4`;return e.className&&(t+=` ${e.className}`),t}return e.isDisabled?(0,L.jsx)(o,{title:typeof e.disabledTooltip==`string`?e.disabledTooltip:e.disabledTooltip?.(e.tree),spanHack:!0,spanHackClassName:`d-inline-block flex-grow-1`,children:(0,L.jsx)(`span`,{className:`${t()} text-secondary ${I.disabled}`,children:e.text})}):(0,L.jsx)(`div`,{className:t(),children:e.text})}var z=`tree-actions`;B.defaultProps={selectedLinkClassName:I.selected};function B(e){let{tree:t,selectedIds:n,getAppLink:i,onSelect:o,isDisabled:s,isClickDisabled:c,actions:l,isDropdown:u}=e,f=N.useRef(null),p=N.useMemo(()=>n?.some(e=>F.find(t,e)),[t,n]),m=e.openDepth&&e.depth<e.openDepth,[h,g]=N.useState(p||m),_=n?.some(e=>d.isEqual(t.id,e)),v=!!t.children&&!!t.children.length;e.maxDisplayDepth&&v&&(v=e.depth<e.maxDisplayDepth),N.useEffect(()=>{if(!f.current||!u)return;let e=e=>{e.stopPropagation(),y()};return f.current.addEventListener(`click`,e),()=>{f.current&&f.current.removeEventListener(`click`,e)}},[f.current,o]),N.useEffect(()=>{e.multiSelect||h&&(p||_||!e.selectedIds?.length&&s?.(e.tree)||m||g(!1))},[n]);function y(){if(!c?.(t)){if(e.multiSelect||g(!h),i){r.trigger(i(t));return}if(s?.(t)){o(null);return}o?.(t)}}function b(t){if(t.stopPropagation(),e.multiSelect){g(!h);return}y()}function x(){let t=`py-1 d-flex align-items-center w-100 position-relative ${I.node}`;return _&&(t+=` `+e.selectedLinkClassName),l?.length||(t+=` `+I.noActions),p&&e.multiSelect&&(t+=` text-underline fst-italic`),t}return e.maxDisplayDepth&&e.depth>e.maxDisplayDepth?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`li`,{className:`position-relative ${h?``:I.collapsed} ${e.isRoot?I.root:``}`,children:(0,L.jsxs)(`div`,{className:`position-relative`,children:[(0,L.jsxs)(a,{className:x(),onClick:u?null:y,ref:f,children:[v&&(0,L.jsx)(`div`,{className:I.chevron,onClick:b,children:(0,L.jsx)(te,{direction:h?`down`:`right`})}),(0,L.jsx)(R,{tree:t,text:t.name||t.description,isDisabled:s?.(t)||c?.(t),disabledTooltip:e.disabledTooltip})]}),!!e.actions&&(0,L.jsx)(D,{className:I.actions,actions:l?.map(e=>({...e,appLink:e.getAppLink(t)})),actionsDropdownClassName:`btn btn-light ${z} py-0`}),h&&(0,L.jsx)(V,{...e,isChild:!0,depth:e.depth+1},t.id)]})})}function V(e){let{tree:t,...n}=e;return!t||!t.children?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`ul`,{className:`m-0 p-0 list-unstyled ${I.tree}`,children:t.children.map((t,r)=>(0,L.jsx)(B,{tree:t,...n,isRoot:!e.isChild,depth:e.depth||0},r))})}var H=`libraries.addToLibraryForm`,U=u.encloseNamespace(H);function W(e){let t=T(),n=!t.values.library.canAddContent,r=e.videoLibraries?.find(e=>e.id===t.values.library.id),i=N.useMemo(()=>({children:e.getCategoryTree(t.values.library.id).map(F.convertNestedObjectToTree)}),[t.values.library.id]);return(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsx)(`div`,{className:`alert alert-info`,children:(0,L.jsx)(h,{namespace:H,phrase:`alreadyInLibrary`,options:{library:t.values.library.name}})}),n&&(0,L.jsx)(`p`,{children:(0,L.jsx)(h,{namespace:H,phrase:`sendLibraryRequest`,options:{video:e.video.name}})}),(0,L.jsxs)(S,{children:[e.libraries.length>1&&(0,L.jsx)(w,{as:`select`,label:U(`selectLibrary`),name:`library`,value:t.values.library?.id??``,className:t.values.library?.id?``:`text-secondary`,showRequiredStar:!0,onChange:n=>{t.setFieldValue(`folder`,null);let r=n.target.value;t.setFieldValue(`library`,e.libraries.find(e=>e.id.toString()===r.toString()))},children:e.libraries.map(e=>(0,L.jsx)(`option`,{value:e.id,className:`text-dark`,children:e.name},e.id))}),(0,L.jsx)(w,{label:U(`selectFolder`),name:`folder`,showRequiredStar:!0,disabled:!t.values.library,children:()=>(0,L.jsx)(M.Scrollbars,{autoHeight:!0,autoHeightMax:300,className:`border rounded-3`,children:(0,L.jsx)(V,{tree:i,onSelect:e=>t.setFieldValue(`folder`,e),isDisabled:e.isFolderDisabled,disabledTooltip:u.getPhrase(H,`disabledFolder`),selectedIds:t.values.folder?.id?[t.values.folder.id]:void 0,selectedLinkClassName:`bg-light`})})}),!!t.values.folder&&(0,L.jsx)(`p`,{className:`mt-n2`,children:(0,L.jsx)(h,{namespace:H,phrase:n?`requestTo`:`addTo`,options:{folder:t.values.folder.name}})}),n&&(0,L.jsx)(w,{label:u.getPhrase(H,`comment`),as:`textarea`,name:`comment`,id:`comment`,placeholder:u.getPhrase(H,`commentPlaceholder`),value:t.values.comment}),(0,L.jsxs)(_,{children:[(0,L.jsx)(_.Cancel,{onClick:e.closePopup}),(0,L.jsx)(_.Submit,{variant:`dark`,text:U(`addToLibrary`)})]})]})]})}var G={sort(e){return e?.length?e.sort((e,t)=>{let n=e.isSharedLibrary?`shared_library`:e.type,r=t.isSharedLibrary?`shared_library`:t.type;return n===r?e.name.localeCompare(t.name):n===`custom_library`||n===`shared_library`&&r!==`custom_library`||n===`hosted_library`&&r!==`custom_library`&&r!==`shared_library`?-1:1}):[]},hasTwigOrTigtag(e,t){if(!t)return{hasTwig:!1,hasTigtag:!1};if(!t.isAuthenticated){let e=t.contentRegion===f.UK||t.contentRegion===f.SCOT;return{hasTwig:e,hasTigtag:e}}if(!e)return{hasTwig:!1,hasTigtag:!1};let n=!1,r=!1;for(let t of e)if(t.id.toString()===O.Libraries.TWIG?n=!0:t.id.toString()===O.Libraries.TIGTAG&&(r=!0),n&&r)break;return{hasTwig:n,hasTigtag:r}}},K=i(E()),q=`libraries.validation`,J=(0,K.object)().shape({comment:(0,K.string)().nullable().max(512,()=>u.getPhrase(q,`commentExceeds`)),library:(0,K.object)().required(()=>u.getPhrase(q,`libraryRequired`)).nullable(),folder:(0,K.object)().required(()=>u.getPhrase(q,`folderRequired`)).nullable()}),Y=function(e){return e[e.MasterVideo=1]=`MasterVideo`,e[e.MasterClip=2]=`MasterClip`,e[e.MasterInteractive=3]=`MasterInteractive`,e}({}),X=u.encloseNamespace(`shared.errorMessageHelper`),ie={"operation-not-allowed":`operationNotAllowed`,"library-not-supported":`libraryNotSupported`,"access-denied":`accessDenied`,"library-access-denied":`libraryAccessDenied`,"library-access-denied-create":`libraryAccessDeniedCreate`,"library-access-denied-fulfil":`libraryAccessDeniedFulfill`,"library-access-denied-not-authorized":`libraryAccessDeniedNotAuthorized`,"library-request-access-denied":`accessDenied`,"library-request-access-denied-create-request":`libraryRequestAccessDeniedCreateRequest`,"library-request-access-denied-process-comment":`libraryRequestAccessDeniedProcessComment`,"customer-not-found":`customerNotFound`,"customer-not-found-current-user":`customerNotFound`,"customer-not-found-library-owner":`customerNotFoundLibraryOwner`,"customer-not-found-destination-library-owner":`customerNotFoundLibraryOwner`,"user-not-found":`userNotFound`,"library-not-found":`libraryNotFound`,"video-not-found":`videoNotFound`,"category-not-found":`categoryNotFound`,"category-not-found-destination-not-provided":`categoryNotFoundDestinationNotProvided`,"category-not-found-not-in-library":`categoryNotFoundInLibrary`,"library-request-not-found":`libraryRequestNotFound`,"invalid-category-path":`invalidCategoryPath`,"library-api-error":`somethingWentWrong`,"content-not-playable":`contentNotPlayable`,"invalid-object":`invalidObject`,"same-request-existed":`sameRequestExisted`,"unknown-error":`somethingWentWrong`,"no-email":`noEmailError`},ae={"create-invitation-failed":`createInvitationFailed`,"invitation-resend-failed":`invitationResendFailed`,"failed-to-accept":`failedToAccept`,"invitee-not-found":`inviteeNotFound`,"invitation-not-found":`invitationNotFound`,"invitation-deleted":`invitationDeleted`,"too-many-emails":`tooManyEmails`},Z={libraryApiError(e){let t=ie[e?.responseJSON?.type];return X(t||`somethingWentWrong`)},inviteColleagueError(e){let t=ae[e?.responseJSON?.type];return X(t||`somethingWentWrong`)}},Q={buildOpenAppLinkUrl(e,t,n){return p.urlBuilder(`${e}/open`,{appLink:t,product:n})},buildOpenVideoUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`video:${t}`,n)},buildOpenClipUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`clip:${t}`,n)},buildOpenInteractiveUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`interactive:${t}`,n)},buildOpenTopicUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`topic:${t}`,n)},buildOpenSeriesUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`series:${t}`,n)},buildOpenPlaylistUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`playlist:${t}`,n)},buildOpenCategoryUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`category:${t}`,n)},buildOpenLibraryFolderUrl(e,t,n){let r=`library:${t.libraryId}:folder:${t.folderId}`;return Q.buildOpenAppLinkUrl(e,r,n)}},oe={[x.Video]:Y.MasterVideo,[x.Clip]:Y.MasterClip,[x.Interactive]:Y.MasterInteractive},$=u.encloseNamespace(`libraries.addToLibrary`);function se(e){let t=c(m.currentUser()),n=c(k.librariesWithCategories()),r=c(k.libraryRequestLibraries()),i=c(j.getVideoRequest(e.id,e.typeId)),a=(j.isClip(i.data)||j.isInteractive(i.data))&&i.data?._parentVideo,o=c(a&&ne.video(a.id)),{loading:u,handleGenerateReportError:f}=re(),p=c(b.config()),h=N.useMemo(()=>G.sort(r.data),[r.data]),_=s(),x=A(),S=!!t.data&&v.getOrSetSortType(t.data.id);function C(){let e=null,t=l.first(i.data?.libraries?.data)?.id;if(t&&i.data.categories.data?.length){let n=i.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}if(!t&&(t=l.first(o.data?.libraries?.data)?.id,t&&o.data.categories.data?.length)){let n=o.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}return{sourceLibraryId:t?+t:null,sourceCategoryId:e?+e:null}}function w(t,n){let{sourceLibraryId:r,sourceCategoryId:a}=C(),o={objectId:e.id.toString(),objectType:oe[e.typeId],message:t.comment,sourceLibraryId:r,destinationLibraryId:+t.library.id,metadata:{destinationCategoryId:+t.folder.id,sourceCategoryId:a}};_(k.addToLibrary(o,S)).then(()=>{t.library.canAddContent?x.success({type:g.Success,heading:``,message:$(`addToLibrarySuccess`,{folder:t.folder.name,video:i.data.name,escapeText:!0}),...e.folderAppLink?{appLink:{...e.folderAppLink,args:[t.library.id,t.folder.id,d.slugify(t.folder.name)]},appLinkText:$(`goToFolder`,{folder:t.folder.name}),appLinkClassName:`info-link`}:{extLink:Q.buildOpenLibraryFolderUrl(p.data.launchUrl,{libraryId:t.library.id,folderId:t.folder.id}),extLinkText:$(`goToFolder`,{folder:t.folder.name}),extLinkClassName:`info-link`}}):x.success({type:g.Pending,heading:$(`pendingApproval`),message:$(`libraryRequestSent`,{library:t.library.name,escapeText:!0})})}).catch(e=>{let t=Z.libraryApiError(e);f(e,t,t),n()}).finally(()=>{e.closePopup()})}function T(e){return n.data.find(t=>t.data.id.toString()===e.toString())?.children}function E(e){return!!i.data.categories?.data?.find(t=>t.id===e.id)}let D=r.data&&i.data&&n.data;return(0,L.jsx)(y,{title:$(`addToLibrary`),closePopup:e.closePopup,showLoadingSpinner:!D||u,children:D&&(0,L.jsx)(ee,{initialValues:{library:l.first(h),folder:null,comment:``},validationSchema:J,onSubmit:w,children:(0,L.jsx)(W,{libraries:h,closePopup:e.closePopup,isFolderDisabled:E,video:i.data,videoLibraries:i.data?.libraries?.data,getCategoryTree:T})})})}export{se as AddToLibraryView};
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,O as n,bt as r,fn as i}from"./B1i9atik.chunk.js";import{_ as a,r as o}from"./NpQVkKE2.chunk.js";import{d as s,l as c}from"./TJBzqR6k.chunk.js";import{t as l}from"./BG5Aor0J.chunk.js";import{t as u}from"./CzvVp9iC.chunk.js";import{t as d}from"./BBMcrXvX.chunk.js";import{t as f}from"./DzbIsgVg.chunk.js";import{t as p}from"./CrBD6Z4s.chunk.js";import{t as m}from"./DKbUI-vj.chunk.js";import{I as h,J as g,M as _,Q as v,U as y,Z as b,tt as x,z as S}from"./app-fNhmX-xT.js";import{t as C}from"./Cc0tSPhP2.chunk.js";import{i as w,n as ee,r as T,t as E}from"./BpzuiXcd2.chunk.js";import{t as D}from"./DXN-HToH2.chunk.js";import{t as te}from"./BU8rJI4_2.chunk.js";import{t as O}from"./BbaX1lfI2.chunk.js";import{t as k}from"./BU2ULxCS2.chunk.js";import{t as ne}from"./C9AjegY32.chunk.js";import{t as A}from"./Bswd1QrZ2.chunk.js";import{t as re}from"./B0CItJhp2.chunk.js";import{t as j}from"./ErGRzsV12.chunk.js";var M=C(),N=i(t());function P(e,t,n){if(d.isEqual(e.id,t))return[e,n];let r=e.children;if(!r||!r.length)return[null,null];for(let i=0;i<r.length;i++){let[a,o]=P(r[i],t,[...n,e]);if(a)return[a,o]}return[null,null]}var F={find(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[r]=P(e.children[n],t,[]);if(r)return r}},getPath(e,t){if(!(!e||!e.children||!e.children.length))for(let n=0;n<e.children.length;n++){let[,r]=P(e.children[n],t,[]);if(r?.length)return r}},getParent(e,t){let n=F.getPath(e,t);return n?.length?n[n.length-1]:null},convertNestedObjectToTree(e){let t={...e.data,children:e.children};return t.children?.length&&(t.children=t.children.map(F.convertNestedObjectToTree)),t},findDepth(e,t,n=0){if(!e||e.length===0)return 0;let r=0;for(let i of e){if(i.data?.id?.toString()===t.toString())return n;let e=F.findDepth(i.children,t,n+1);if(e>0){r=e;break}}return r},findMaxChildDepth(e,t=0){if(!e||e.length===0)return t;let n=t;for(let r of e){let e=F.findMaxChildDepth(r.children,t+1);n=Math.max(n,e)}return n},findTargetNode(e,t){if(!e||e.length===0)return null;for(let n of e){if(n.data?.id?.toString()===t.toString())return n;let e=F.findTargetNode(n.children,t);if(e!==null)return e}return null},isMaxDepth(e,t,n,r=7){let i=F.findTargetNode(e,t);return F.findMaxChildDepth(i.children)+F.findDepth(e,n)>=r},flatten(e){if(!e)return[];let t=[];function r(e){t.push(n.omit(e,[`children`])),e.children.forEach(r)}return e.children.forEach(r),t}},I={tree:`_tree_u0qyb_1`,text:`_text_u0qyb_1`,chevron:`_chevron_u0qyb_4`,disabled:`_disabled_u0qyb_163`,root:`_root_u0qyb_166`,selected:`_selected_u0qyb_172`,actions:`_actions_u0qyb_175`,node:`_node_u0qyb_185`,noActions:`_noActions_u0qyb_188`},L=e();function R(e){function t(){let t=`${I.text} clamp-4`;return e.className&&(t+=` ${e.className}`),t}return e.isDisabled?(0,L.jsx)(o,{title:typeof e.disabledTooltip==`string`?e.disabledTooltip:e.disabledTooltip?.(e.tree),spanHack:!0,spanHackClassName:`d-inline-block flex-grow-1`,children:(0,L.jsx)(`span`,{className:`${t()} text-secondary ${I.disabled}`,children:e.text})}):(0,L.jsx)(`div`,{className:t(),children:e.text})}var z=`tree-actions`;B.defaultProps={selectedLinkClassName:I.selected};function B(e){let{tree:t,selectedIds:n,getAppLink:i,onSelect:o,isDisabled:s,isClickDisabled:c,actions:l,isDropdown:u}=e,f=N.useRef(null),p=N.useMemo(()=>n?.some(e=>F.find(t,e)),[t,n]),m=e.openDepth&&e.depth<e.openDepth,[h,g]=N.useState(p||m),_=n?.some(e=>d.isEqual(t.id,e)),v=!!t.children&&!!t.children.length;e.maxDisplayDepth&&v&&(v=e.depth<e.maxDisplayDepth),N.useEffect(()=>{if(!f.current||!u)return;let e=e=>{e.stopPropagation(),y()};return f.current.addEventListener(`click`,e),()=>{f.current&&f.current.removeEventListener(`click`,e)}},[f.current,o]),N.useEffect(()=>{e.multiSelect||h&&(p||_||!e.selectedIds?.length&&s?.(e.tree)||m||g(!1))},[n]);function y(){if(!c?.(t)){if(e.multiSelect||g(!h),i){r.trigger(i(t));return}if(s?.(t)){o(null);return}o?.(t)}}function b(t){if(t.stopPropagation(),e.multiSelect){g(!h);return}y()}function x(){let t=`py-1 d-flex align-items-center w-100 position-relative ${I.node}`;return _&&(t+=` `+e.selectedLinkClassName),l?.length||(t+=` `+I.noActions),p&&e.multiSelect&&(t+=` text-underline fst-italic`),t}return e.maxDisplayDepth&&e.depth>e.maxDisplayDepth?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`li`,{className:`position-relative ${h?``:I.collapsed} ${e.isRoot?I.root:``}`,children:(0,L.jsxs)(`div`,{className:`position-relative`,children:[(0,L.jsxs)(a,{className:x(),onClick:u?null:y,ref:f,children:[v&&(0,L.jsx)(`div`,{className:I.chevron,onClick:b,children:(0,L.jsx)(te,{direction:h?`down`:`right`})}),(0,L.jsx)(R,{tree:t,text:t.name||t.description,isDisabled:s?.(t)||c?.(t),disabledTooltip:e.disabledTooltip})]}),!!e.actions&&(0,L.jsx)(D,{className:I.actions,actions:l?.map(e=>({...e,appLink:e.getAppLink(t)})),actionsDropdownClassName:`btn btn-light ${z} py-0`}),h&&(0,L.jsx)(V,{...e,isChild:!0,depth:e.depth+1},t.id)]})})}function V(e){let{tree:t,...n}=e;return!t||!t.children?(0,L.jsx)(L.Fragment,{}):(0,L.jsx)(`ul`,{className:`m-0 p-0 list-unstyled ${I.tree}`,children:t.children.map((t,r)=>(0,L.jsx)(B,{tree:t,...n,isRoot:!e.isChild,depth:e.depth||0},r))})}var H=`libraries.addToLibraryForm`,U=u.encloseNamespace(H);function W(e){let t=T(),n=!t.values.library.canAddContent,r=e.videoLibraries?.find(e=>e.id===t.values.library.id),i=N.useMemo(()=>({children:e.getCategoryTree(t.values.library.id).map(F.convertNestedObjectToTree)}),[t.values.library.id]);return(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsx)(`div`,{className:`alert alert-info`,children:(0,L.jsx)(h,{namespace:H,phrase:`alreadyInLibrary`,options:{library:t.values.library.name}})}),n&&(0,L.jsx)(`p`,{children:(0,L.jsx)(h,{namespace:H,phrase:`sendLibraryRequest`,options:{video:e.video.name}})}),(0,L.jsxs)(S,{children:[e.libraries.length>1&&(0,L.jsx)(w,{as:`select`,label:U(`selectLibrary`),name:`library`,value:t.values.library?.id??``,className:t.values.library?.id?``:`text-secondary`,showRequiredStar:!0,onChange:n=>{t.setFieldValue(`folder`,null);let r=n.target.value;t.setFieldValue(`library`,e.libraries.find(e=>e.id.toString()===r.toString()))},children:e.libraries.map(e=>(0,L.jsx)(`option`,{value:e.id,className:`text-dark`,children:e.name},e.id))}),(0,L.jsx)(w,{label:U(`selectFolder`),name:`folder`,showRequiredStar:!0,disabled:!t.values.library,children:()=>(0,L.jsx)(M.Scrollbars,{autoHeight:!0,autoHeightMax:300,className:`border rounded-3`,children:(0,L.jsx)(V,{tree:i,onSelect:e=>t.setFieldValue(`folder`,e),isDisabled:e.isFolderDisabled,disabledTooltip:u.getPhrase(H,`disabledFolder`),selectedIds:t.values.folder?.id?[t.values.folder.id]:void 0,selectedLinkClassName:`bg-light`})})}),!!t.values.folder&&(0,L.jsx)(`p`,{className:`mt-n2`,children:(0,L.jsx)(h,{namespace:H,phrase:n?`requestTo`:`addTo`,options:{folder:t.values.folder.name}})}),n&&(0,L.jsx)(w,{label:u.getPhrase(H,`comment`),as:`textarea`,name:`comment`,id:`comment`,placeholder:u.getPhrase(H,`commentPlaceholder`),value:t.values.comment}),(0,L.jsxs)(_,{children:[(0,L.jsx)(_.Cancel,{onClick:e.closePopup}),(0,L.jsx)(_.Submit,{variant:`dark`,text:U(`addToLibrary`)})]})]})]})}var G={sort(e){return e?.length?e.sort((e,t)=>{let n=e.isSharedLibrary?`shared_library`:e.type,r=t.isSharedLibrary?`shared_library`:t.type;return n===r?e.name.localeCompare(t.name):n===`custom_library`||n===`shared_library`&&r!==`custom_library`||n===`hosted_library`&&r!==`custom_library`&&r!==`shared_library`?-1:1}):[]},hasTwigOrTigtag(e,t){if(!t)return{hasTwig:!1,hasTigtag:!1};if(!t.isAuthenticated){let e=t.contentRegion===f.UK||t.contentRegion===f.SCOT;return{hasTwig:e,hasTigtag:e}}if(!e)return{hasTwig:!1,hasTigtag:!1};let n=!1,r=!1;for(let t of e)if(t.id.toString()===O.Libraries.TWIG?n=!0:t.id.toString()===O.Libraries.TIGTAG&&(r=!0),n&&r)break;return{hasTwig:n,hasTigtag:r}}},K=i(E()),q=`libraries.validation`,J=(0,K.object)().shape({comment:(0,K.string)().nullable().max(512,()=>u.getPhrase(q,`commentExceeds`)),library:(0,K.object)().required(()=>u.getPhrase(q,`libraryRequired`)).nullable(),folder:(0,K.object)().required(()=>u.getPhrase(q,`folderRequired`)).nullable()}),Y=function(e){return e[e.MasterVideo=1]=`MasterVideo`,e[e.MasterClip=2]=`MasterClip`,e[e.MasterInteractive=3]=`MasterInteractive`,e}({}),X=u.encloseNamespace(`shared.errorMessageHelper`),ie={"operation-not-allowed":`operationNotAllowed`,"library-not-supported":`libraryNotSupported`,"access-denied":`accessDenied`,"library-access-denied":`libraryAccessDenied`,"library-access-denied-create":`libraryAccessDeniedCreate`,"library-access-denied-fulfil":`libraryAccessDeniedFulfill`,"library-access-denied-not-authorized":`libraryAccessDeniedNotAuthorized`,"library-request-access-denied":`accessDenied`,"library-request-access-denied-create-request":`libraryRequestAccessDeniedCreateRequest`,"library-request-access-denied-process-comment":`libraryRequestAccessDeniedProcessComment`,"customer-not-found":`customerNotFound`,"customer-not-found-current-user":`customerNotFound`,"customer-not-found-library-owner":`customerNotFoundLibraryOwner`,"customer-not-found-destination-library-owner":`customerNotFoundLibraryOwner`,"user-not-found":`userNotFound`,"library-not-found":`libraryNotFound`,"video-not-found":`videoNotFound`,"category-not-found":`categoryNotFound`,"category-not-found-destination-not-provided":`categoryNotFoundDestinationNotProvided`,"category-not-found-not-in-library":`categoryNotFoundInLibrary`,"library-request-not-found":`libraryRequestNotFound`,"invalid-category-path":`invalidCategoryPath`,"library-api-error":`somethingWentWrong`,"content-not-playable":`contentNotPlayable`,"invalid-object":`invalidObject`,"same-request-existed":`sameRequestExisted`,"unknown-error":`somethingWentWrong`,"no-email":`noEmailError`},ae={"create-invitation-failed":`createInvitationFailed`,"invitation-resend-failed":`invitationResendFailed`,"failed-to-accept":`failedToAccept`,"invitee-not-found":`inviteeNotFound`,"invitation-not-found":`invitationNotFound`,"invitation-deleted":`invitationDeleted`,"too-many-emails":`tooManyEmails`},Z={libraryApiError(e){let t=ie[e?.responseJSON?.type];return X(t||`somethingWentWrong`)},inviteColleagueError(e){let t=ae[e?.responseJSON?.type];return X(t||`somethingWentWrong`)}},Q={buildOpenAppLinkUrl(e,t,n){return p.urlBuilder(`${e}/open`,{appLink:t,product:n})},buildOpenVideoUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`video:${t}`,n)},buildOpenClipUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`clip:${t}`,n)},buildOpenInteractiveUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`interactive:${t}`,n)},buildOpenTopicUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`topic:${t}`,n)},buildOpenSeriesUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`series:${t}`,n)},buildOpenPlaylistUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`playlist:${t}`,n)},buildOpenCategoryUrl(e,t,n){return Q.buildOpenAppLinkUrl(e,`category:${t}`,n)},buildOpenLibraryFolderUrl(e,t,n){let r=`library:${t.libraryId}:folder:${t.folderId}`;return Q.buildOpenAppLinkUrl(e,r,n)}},oe={[x.Video]:Y.MasterVideo,[x.Clip]:Y.MasterClip,[x.Interactive]:Y.MasterInteractive},$=u.encloseNamespace(`libraries.addToLibrary`);function se(e){let t=c(m.currentUser()),n=c(k.librariesWithCategories()),r=c(k.libraryRequestLibraries()),i=c(j.getVideoRequest(e.id,e.typeId)),a=(j.isClip(i.data)||j.isInteractive(i.data))&&i.data?._parentVideo,o=c(a&&ne.video(a.id)),{loading:u,handleGenerateReportError:f}=re(),p=c(b.config()),h=N.useMemo(()=>G.sort(r.data),[r.data]),_=s(),x=A(),S=!!t.data&&v.getOrSetSortType(t.data.id);function C(){let e=null,t=l.first(i.data?.libraries?.data)?.id;if(t&&i.data.categories.data?.length){let n=i.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}if(!t&&(t=l.first(o.data?.libraries?.data)?.id,t&&o.data.categories.data?.length)){let n=o.data.categories.data.find(e=>e.libraries?.data?.find(e=>e.id.toString()===t.toString()));n&&(e=n.id)}return{sourceLibraryId:t?+t:null,sourceCategoryId:e?+e:null}}function w(t,n){let{sourceLibraryId:r,sourceCategoryId:a}=C(),o={objectId:e.id.toString(),objectType:oe[e.typeId],message:t.comment,sourceLibraryId:r,destinationLibraryId:+t.library.id,metadata:{destinationCategoryId:+t.folder.id,sourceCategoryId:a}};_(k.addToLibrary(o,S)).then(()=>{t.library.canAddContent?x.success({type:g.Success,heading:``,message:$(`addToLibrarySuccess`,{folder:t.folder.name,video:i.data.name,escapeText:!0}),...e.folderAppLink?{appLink:{...e.folderAppLink,args:[t.library.id,t.folder.id,d.slugify(t.folder.name)]},appLinkText:$(`goToFolder`,{folder:t.folder.name}),appLinkClassName:`info-link`}:{extLink:Q.buildOpenLibraryFolderUrl(p.data.launchUrl,{libraryId:t.library.id,folderId:t.folder.id}),extLinkText:$(`goToFolder`,{folder:t.folder.name}),extLinkClassName:`info-link`}}):x.success({type:g.Pending,heading:$(`pendingApproval`),message:$(`libraryRequestSent`,{library:t.library.name,escapeText:!0})})}).catch(e=>{let t=Z.libraryApiError(e);f(e,t,t),n()}).finally(()=>{e.closePopup()})}function T(e){return n.data.find(t=>t.data.id.toString()===e.toString())?.children}function E(e){return!!i.data.categories?.data?.find(t=>t.id===e.id)}let D=r.data&&i.data&&n.data;return(0,L.jsx)(y,{title:$(`addToLibrary`),closePopup:e.closePopup,showLoadingSpinner:!D||u,children:D&&(0,L.jsx)(ee,{initialValues:{library:l.first(h),folder:null,comment:``},validationSchema:J,onSubmit:w,children:(0,L.jsx)(W,{libraries:h,closePopup:e.closePopup,isFolderDisabled:E,video:i.data,videoLibraries:i.data?.libraries?.data,getCategoryTree:T})})})}export{se as AddToLibraryView};
|
|
2
|
+
//# sourceMappingURL=ByC5ZDQ-2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaXT2aKo2.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/TreeHelper.ts","../../../../libs/shared/src/components/tree/tree.module.scss","../../../../libs/shared/src/components/tree/TreeNodeText.tsx","../../../../libs/shared/src/components/tree/TreeNode.tsx","../../../../libs/shared/src/components/tree/Tree.tsx","../../../../libs/shared/src/apps/libraries/components/add-to-library-form/AddToLibraryForm.tsx","../../../../libs/shared/src/apps/libraries/utils/LibraryHelper.ts","../../../../libs/shared/src/apps/libraries/validation/AddToLibraryValidationSchema.ts","../../../../libs/shared/src/enums/LibraryRequestObjectType.ts","../../../../libs/shared/src/utils/error-message-helper/ErrorMessageHelper.ts","../../../../libs/shared/src/utils/LaunchUrlHelper.ts","../../../../libs/shared/src/apps/libraries/views/add-to-library/AddToLibraryView.tsx"],"sourcesContent":["import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};\n","$chevron-container-size: $cv-svg-size;\n$chevron-visible-size: calc($chevron-container-size / 3); // The actual chevron is 1/3rd of the container size\n$chevron-root-padding: map-get($spacers, 1);\n$text-root-padding: $chevron-root-padding + $chevron-container-size;\n\n@mixin nestedFolderTree($from, $to) {\n :local .tree {\n .text {\n padding-left: $text-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n .chevron {\n right: auto;\n left: $chevron-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n @if $from != $to {\n @include nestedFolderTree($from + 1, $to)\n }\n }\n}\n\n@include nestedFolderTree(0, 20);\n\n:local {\n .chevron {\n display: inline-block;\n position: absolute;\n color: black;\n cursor: pointer;\n top: 50%;\n margin-top: -$cv-svg-size-sm*0.5;\n right: 100%;\n }\n\n .text {\n overflow-wrap: break-word;\n padding-right: $cv-svg-size;\n cursor: pointer;\n\n &.disabled {\n cursor: not-allowed;\n }\n }\n\n .root {\n .chevron {\n left: $chevron-root-padding;\n }\n\n .text {\n padding-left: $text-root-padding;\n }\n }\n\n .selected {\n font-weight: 600;\n }\n\n .actions {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: none !important;\n\n &:hover {\n display: flex !important;\n }\n }\n\n .node:hover {\n text-decoration: none;\n\n &.noActions {\n background-color: $light-blue;\n }\n\n :global(.dropdown) {\n display: block;\n }\n\n + .actions {\n display: block !important;\n }\n }\n}","import React from 'react';\n\nimport { BaseObject } from 'libs/analytics/interfaces';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport styles from './tree.module.scss';\n\ninterface TreeNodeTextProps<T extends BaseTree<BaseObject>> {\n tree: T;\n text: string;\n className?: string;\n isDisabled?: boolean;\n disabledTooltip?: string | ((tree: T) => string);\n}\n\nexport function TreeNodeText<T extends BaseTree<BaseObject>>(props: TreeNodeTextProps<T>): React.ReactElement {\n function getTextClass(): string {\n let textClassName = `${styles.text} clamp-4`;\n\n if (props.className)\n textClassName += ` ${props.className}`;\n\n return textClassName;\n }\n\n if (props.isDisabled) {\n const disabledToolTip = typeof props.disabledTooltip === 'string' ?\n props.disabledTooltip :\n props.disabledTooltip?.(props.tree);\n\n return (\n <Tooltip title={disabledToolTip} spanHack spanHackClassName='d-inline-block flex-grow-1'>\n <span className={`${getTextClass()} text-secondary ${styles.disabled}`}>\n {props.text}\n </span>\n </Tooltip>\n );\n }\n\n return (\n <div className={getTextClass()}>\n {props.text}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Tree } from './Tree';\nimport { TreeNodeText } from './TreeNodeText';\n\nimport styles from './tree.module.scss';\n\nconst TREE_ACTIONS_CLASS = 'tree-actions';\n\nexport interface TreeNodeAction<T extends BaseTree<BaseObject>> {\n label: string;\n getAppLink: (node: T) => Core.AppLink;\n className?: string;\n}\n\ninterface TreeNodeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isRoot?: boolean;\n isDropdown?: boolean;\n multiSelect?: boolean;\n depth: number;\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nTreeNode.defaultProps = {\n selectedLinkClassName: styles.selected\n};\n\nexport function TreeNode<T extends BaseTree<BaseObject>>(props: TreeNodeProps<T>): React.ReactElement {\n const { tree, selectedIds, getAppLink, onSelect, isDisabled, isClickDisabled, actions, isDropdown } = props;\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n // If one of our children is selected\n const isParentOfSelected = React.useMemo(() => {\n return selectedIds?.some(id => TreeHelper.find(tree, id));\n }, [ tree, selectedIds ]);\n\n // Or we are below the initial open depth\n const initiallyOpen = props.openDepth && props.depth < props.openDepth;\n\n // We render expanded initially\n const [ isExpanded, setIsExpanded ] = React.useState(isParentOfSelected || initiallyOpen);\n\n const isSelected = selectedIds?.some(id => TextHelper.isEqual(tree.id, id));\n let hasChildren = !!tree.children && !!tree.children.length;\n\n if (props.maxDisplayDepth && hasChildren)\n hasChildren = props.depth < props.maxDisplayDepth;\n\n /**\n * We need to stop propagation of our event if our tree is rendered\n * inside of a bootstrap dropdown - Sha\n */\n React.useEffect(() => {\n if (!ref.current || !isDropdown)\n return;\n\n const onClick = (e: Event) => {\n e.stopPropagation();\n onSelectNode();\n };\n\n ref.current.addEventListener('click', onClick);\n return () => {\n if (!ref.current)\n return;\n\n ref.current.removeEventListener('click', onClick);\n };\n }, [ ref.current, onSelect ]);\n\n /**\n * Check if an expanded item should actually be collapsed\n */\n React.useEffect(() => {\n // Don't do auto collapsing for trees that support multiple selections\n if (props.multiSelect)\n return;\n\n // Skip item if it's already collapsed\n if (!isExpanded)\n return;\n\n // Parents of a selected item should remain expanded\n if (isParentOfSelected)\n return;\n\n // Selected items should remain expanded\n if (isSelected)\n return;\n\n // Disabled items can be expanded if nothing has been selected\n if (!props.selectedIds?.length && isDisabled?.(props.tree))\n return;\n\n // If we want it to be initially open\n if (initiallyOpen)\n return;\n\n setIsExpanded(false);\n }, [selectedIds]);\n\n function onSelectNode(): void {\n if (isClickDisabled?.(tree))\n return;\n\n if (!props.multiSelect)\n setIsExpanded(!isExpanded);\n\n if (getAppLink) {\n Core.AppLinkHelper.trigger(getAppLink(tree));\n return;\n }\n\n if (isDisabled?.(tree)) {\n onSelect(null);\n return;\n }\n\n onSelect?.(tree);\n }\n\n function onClickCaret(e: any): void {\n e.stopPropagation();\n\n if (props.multiSelect) {\n setIsExpanded(!isExpanded);\n return;\n }\n\n onSelectNode();\n }\n\n function getNodeClass(): string {\n let className = `py-1 d-flex align-items-center w-100 position-relative ${styles.node}`;\n\n if (isSelected)\n className += ' ' + props.selectedLinkClassName;\n\n if (!actions?.length)\n className += ' ' + styles.noActions;\n\n if (isParentOfSelected && props.multiSelect)\n className += ' text-underline fst-italic';\n\n return className;\n }\n\n if (props.maxDisplayDepth && (props.depth > props.maxDisplayDepth))\n return <></>;\n\n return (\n <li className={`position-relative ${isExpanded ? '' : styles.collapsed} ${props.isRoot ? styles.root : ''}`}>\n <div className='position-relative'>\n <DivButton\n className={getNodeClass()}\n onClick={isDropdown ? null : onSelectNode}\n ref={ref}\n >\n {hasChildren && (\n <div className={styles.chevron} onClick={onClickCaret}>\n <Caret direction={isExpanded ? 'down' : 'right'} />\n </div>\n )}\n\n <TreeNodeText\n tree={tree}\n // Always prefer name over description\n text={tree.name || tree.description}\n isDisabled={isDisabled?.(tree) || isClickDisabled?.(tree)}\n disabledTooltip={props.disabledTooltip}\n />\n </DivButton>\n\n {!!props.actions && (\n <Actions\n className={styles.actions}\n actions={actions?.map(a => ({ ...a, appLink: a.getAppLink(tree) }))}\n actionsDropdownClassName={`btn btn-light ${TREE_ACTIONS_CLASS} py-0`}\n />\n )}\n\n {isExpanded && <Tree key={tree.id} {...props} isChild depth={props.depth + 1} />}\n </div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport { TreeNode, TreeNodeAction } from './TreeNode';\n\nimport styles from './tree.module.scss';\n\nexport interface TreeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isChild?: boolean;\n depth?: number;\n multiSelect?: boolean;\n /**\n * Set to true if you are using this component inside of\n * a bootstrap dropdown menu and don't want it to close\n * on click events - Sha\n */\n isDropdown?: boolean;\n /**\n * If you want to initially render open to a certain depth\n */\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nexport function Tree<T extends BaseTree<BaseObject>>(props: TreeProps<T>): React.ReactElement {\n const { tree, ...childProps } = props;\n\n if (!tree || !tree.children)\n return <></>;\n\n return (\n <ul className={`m-0 p-0 list-unstyled ${styles.tree}`}>\n {tree.children.map((child, key) => (\n <TreeNode key={key} tree={child} {...childProps} isRoot={!props.isChild} depth={props.depth || 0} />\n ))}\n </ul>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AddToLibraryFormValues } from 'libs/shared/apps/libraries/views/add-to-library/AddToLibraryView';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tree } from 'libs/shared/components/tree/Tree';\nimport { BaseTree, Folder, Library, LibraryTree, PopupViewProps, VideoTypes } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'libraries.addToLibraryForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryFormProps extends PopupViewProps {\n libraries: Library[];\n isFolderDisabled: (folder: BaseTree<Folder>) => boolean;\n video: VideoTypes;\n videoLibraries?: Library[];\n getCategoryTree: (libraryId: string) => LibraryTree[];\n}\n\nexport function AddToLibraryForm(props: AddToLibraryFormProps): JSX.Element {\n const formikProps = useFormikContextWrapper<AddToLibraryFormValues>();\n\n const isMakingLibraryRequest = !formikProps.values.library.canAddContent;\n const isAlreadyInLibrary = props.videoLibraries?.find(l => l.id === formikProps.values.library.id);\n\n const tree = React.useMemo(() => {\n const categoryTree = props.getCategoryTree(formikProps.values.library.id);\n\n const rootBranches = categoryTree.map(TreeHelper.convertNestedObjectToTree);\n\n return {\n children: rootBranches\n } as BaseTree<Library>;\n }, [formikProps.values.library.id]);\n\n return (\n <>\n {isAlreadyInLibrary && (\n <div className='alert alert-info'>\n <Text namespace={namespace} phrase='alreadyInLibrary' options={{ library: formikProps.values.library.name }} />\n </div>\n )}\n\n {isMakingLibraryRequest && (\n <p>\n <Text namespace={namespace} phrase='sendLibraryRequest' options={{ video: props.video.name }} />\n </p>\n )}\n\n <Form>\n {props.libraries.length > 1 && (\n <FormField\n as='select'\n label={getPhrase('selectLibrary')}\n name='library'\n value={formikProps.values.library?.id ?? ''}\n className={!formikProps.values.library?.id ? 'text-secondary' : ''}\n showRequiredStar\n onChange={(e: any) => {\n formikProps.setFieldValue('folder', null);\n\n const libraryId = e.target.value;\n\n formikProps.setFieldValue('library', props.libraries.find(l => l.id.toString() === libraryId.toString()));\n }}\n >\n {props.libraries.map(library => (\n <option key={library.id} value={library.id} className='text-dark'>\n {library.name}\n </option>\n ))}\n </FormField>\n )}\n\n <FormField\n label={getPhrase('selectFolder')}\n name='folder'\n showRequiredStar\n disabled={!formikProps.values.library}\n >\n {() => (\n <Scrollbars autoHeight autoHeightMax={300} className='border rounded-3'>\n <Tree\n tree={tree}\n onSelect={(folder: Folder) => formikProps.setFieldValue('folder', folder)}\n isDisabled={props.isFolderDisabled}\n disabledTooltip={LanguageService.getPhrase(namespace, 'disabledFolder')}\n selectedIds={formikProps.values.folder?.id ? [formikProps.values.folder.id] : undefined}\n selectedLinkClassName='bg-light'\n />\n </Scrollbars>\n )}\n </FormField>\n \n {!!formikProps.values.folder && (\n <p className='mt-n2'>\n <Text\n namespace={namespace}\n phrase={isMakingLibraryRequest ? 'requestTo' : 'addTo'}\n options={{ folder: formikProps.values.folder.name }}\n />\n </p>\n )}\n\n {isMakingLibraryRequest && (\n <FormField\n label={LanguageService.getPhrase(namespace, 'comment')}\n as='textarea'\n name='comment'\n id='comment'\n placeholder={LanguageService.getPhrase(namespace, 'commentPlaceholder')}\n value={formikProps.values.comment}\n />\n )}\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text={getPhrase('addToLibrary')} />\n </PopupButtons>\n </Form>\n </>\n );\n}\n","import { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\ntype LibraryTypes = Library['type'] | 'shared_library';\n\nexport const LibraryHelper = {\n /**\n * Orders libraries by type (custom -> shared -> hosted).\n * Also orders libraries of same type alphabetically.\n */\n sort(libraries: Library[]): Library[] {\n if (!libraries?.length)\n return [];\n\n return libraries.sort((a: Library, b: Library) => {\n // This is required because shared libraries have a type of `custom_library`\n const aType: LibraryTypes = a.isSharedLibrary ? 'shared_library' : a.type;\n const bType: LibraryTypes = b.isSharedLibrary ? 'shared_library' : b.type;\n \n if (aType === bType)\n return a.name.localeCompare(b.name);\n \n if (aType === 'custom_library')\n return -1;\n \n if (aType === 'shared_library' && bType !== 'custom_library')\n return -1;\n\n if (aType === 'hosted_library' && bType !== 'custom_library' && bType !== 'shared_library')\n return -1;\n \n return 1;\n });\n },\n\n hasTwigOrTigtag(libraries: Library[], currentUser: CurrentUser) {\n if (!currentUser)\n return { hasTwig: false, hasTigtag: false };\n\n // Anon users can see Twig/Tigtag if they're in England.\n if (!currentUser.isAuthenticated) {\n const hasAnonAccess = (\n currentUser.contentRegion === ContentRegion.UK ||\n currentUser.contentRegion === ContentRegion.SCOT\n );\n\n return {\n hasTwig: hasAnonAccess,\n hasTigtag: hasAnonAccess\n };\n }\n\n if (!libraries)\n return { hasTwig: false, hasTigtag: false };\n \n let hasTwig = false;\n let hasTigtag = false;\n\n for (const lib of libraries) {\n if (lib.id.toString() === HardCoded.Libraries.TWIG)\n hasTwig = true;\n else if (lib.id.toString() === HardCoded.Libraries.TIGTAG)\n hasTigtag = true;\n\n // If both are true we don't need to keep searching\n if (hasTwig && hasTigtag)\n break;\n }\n\n return { hasTwig, hasTigtag };\n }\n};\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'libraries.validation';\n\nexport const AddToLibraryValidationSchema = object().shape({\n comment: string()\n .nullable()\n .max(512, () => LanguageService.getPhrase(namespace, 'commentExceeds')),\n library: object()\n .required(() => LanguageService.getPhrase(namespace, 'libraryRequired'))\n .nullable(),\n folder: object()\n .required(() => LanguageService.getPhrase(namespace, 'folderRequired'))\n .nullable()\n});\n","export enum LibraryRequestObjectType {\n MasterVideo = 1,\n MasterClip = 2,\n MasterInteractive = 3\n}\n","import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { InviteColleagueXhr, LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.errorMessageHelper');\n\nconst LIBRARY_ERROR_PHRASE_MAPPING = {\n 'operation-not-allowed': 'operationNotAllowed',\n 'library-not-supported': 'libraryNotSupported',\n 'access-denied': 'accessDenied',\n 'library-access-denied': 'libraryAccessDenied',\n 'library-access-denied-create': 'libraryAccessDeniedCreate',\n 'library-access-denied-fulfil': 'libraryAccessDeniedFulfill',\n 'library-access-denied-not-authorized': 'libraryAccessDeniedNotAuthorized',\n 'library-request-access-denied': 'accessDenied',\n 'library-request-access-denied-create-request': 'libraryRequestAccessDeniedCreateRequest',\n 'library-request-access-denied-process-comment': 'libraryRequestAccessDeniedProcessComment',\n 'customer-not-found': 'customerNotFound',\n 'customer-not-found-current-user': 'customerNotFound',\n 'customer-not-found-library-owner': 'customerNotFoundLibraryOwner',\n 'customer-not-found-destination-library-owner': 'customerNotFoundLibraryOwner',\n 'user-not-found': 'userNotFound',\n 'library-not-found': 'libraryNotFound',\n 'video-not-found': 'videoNotFound',\n 'category-not-found': 'categoryNotFound',\n 'category-not-found-destination-not-provided': 'categoryNotFoundDestinationNotProvided',\n 'category-not-found-not-in-library': 'categoryNotFoundInLibrary',\n 'library-request-not-found': 'libraryRequestNotFound',\n 'invalid-category-path': 'invalidCategoryPath',\n 'library-api-error': 'somethingWentWrong',\n 'content-not-playable': 'contentNotPlayable',\n 'invalid-object': 'invalidObject',\n 'same-request-existed': 'sameRequestExisted',\n 'unknown-error': 'somethingWentWrong',\n 'no-email': 'noEmailError'\n};\n\nconst INVITE_COLLEAGUE_PHRASE_MAPPING = {\n 'create-invitation-failed': 'createInvitationFailed',\n 'invitation-resend-failed': 'invitationResendFailed',\n 'failed-to-accept': 'failedToAccept',\n 'invitee-not-found': 'inviteeNotFound',\n 'invitation-not-found': 'invitationNotFound',\n 'invitation-deleted': 'invitationDeleted',\n 'too-many-emails': 'tooManyEmails'\n};\n\nexport const ErrorMessageHelper = {\n libraryApiError(xhr: LibraryApiXhr): string {\n const phrase = LIBRARY_ERROR_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n },\n inviteColleagueError(xhr: InviteColleagueXhr): string {\n const phrase = INVITE_COLLEAGUE_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n }\n};\n\nexport const ErrorMessageHelperValidation = {\n libraryApiErrors(): void {\n Object.values(LIBRARY_ERROR_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n },\n inviteColleagueErrors(): void {\n Object.values(INVITE_COLLEAGUE_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n }\n};\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\ninterface OpenLibraryFolderParams {\n libraryId: string;\n folderId: string;\n}\n\nexport const LaunchUrlHelper = {\n buildOpenAppLinkUrl(baseLaunchUrl: string, appLink: string, product?: string): string {\n return UrlHelper.urlBuilder(`${baseLaunchUrl}/open`, { appLink, product });\n },\n\n buildOpenVideoUrl(baseLaunchUrl: string, videoId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `video:${videoId}`, product);\n },\n\n buildOpenClipUrl(baseLaunchUrl: string, clipId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `clip:${clipId}`, product);\n },\n\n buildOpenInteractiveUrl(baseLaunchUrl: string, interactiveId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `interactive:${interactiveId}`, product);\n },\n\n buildOpenTopicUrl(baseLaunchUrl: string, topicId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `topic:${topicId}`, product);\n },\n\n buildOpenSeriesUrl(baseLaunchUrl: string, seriesId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `series:${seriesId}`, product);\n },\n\n buildOpenPlaylistUrl(baseLaunchUrl: string, playlistId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `playlist:${playlistId}`, product);\n },\n\n buildOpenCategoryUrl(baseLaunchUrl: string, categoryId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `category:${categoryId}`, product);\n },\n\n buildOpenLibraryFolderUrl(baseLaunchUrl: string, params: OpenLibraryFolderParams, product?: string): string {\n const appLink = `library:${params.libraryId}:folder:${params.folderId}`;\n \n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, appLink, product);\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AddToLibraryForm } from 'libs/shared/apps/libraries/components/add-to-library-form/AddToLibraryForm';\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { AddToLibraryValidationSchema } from 'libs/shared/apps/libraries/validation/AddToLibraryValidationSchema';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { LibraryRequestObjectType } from 'libs/shared/enums/LibraryRequestObjectType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { BaseTree, Clip, Config, CurrentUser, Folder, InteractiveMetadata, Library, LibraryTree, PopupViewProps, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { AddToLibraryRequest } from 'libs/shared/interfaces/requests/AddToLibraryRequest';\nimport { LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\nimport { ErrorMessageHelper } from 'libs/shared/utils/error-message-helper/ErrorMessageHelper';\nimport { LaunchUrlHelper } from 'libs/shared/utils/LaunchUrlHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nexport interface AddToLibraryFormValues {\n library: Library;\n folder: Folder;\n comment?: string;\n}\n\ntype LibraryObjectType = MasterType.Video | MasterType.Clip | MasterType.Interactive;\n\ntype ObjectTypeMap = {\n [K in LibraryObjectType]: LibraryRequestObjectType;\n};\n\nconst OBJECT_TYPE_MAP: ObjectTypeMap = {\n [MasterType.Video]: LibraryRequestObjectType.MasterVideo,\n [MasterType.Clip]: LibraryRequestObjectType.MasterClip,\n [MasterType.Interactive]: LibraryRequestObjectType.MasterInteractive\n};\n\nconst namespace = 'libraries.addToLibrary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryViewProps extends PopupViewProps {\n id: string;\n typeId: MasterType;\n folderAppLink?: Core.AppLink;\n}\n\nexport function AddToLibraryView(props: AddToLibraryViewProps): JSX.Element {\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const librariesWithCategories = Flight.useBasicFetch<LibraryTree[]>(LibraryRequests.librariesWithCategories());\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.libraryRequestLibraries());\n\n const videoRequest = VideoHelper.getVideoRequest(props.id, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const isClipOrInteractive = VideoHelper.isClip(video.data) || VideoHelper.isInteractive(video.data);\n const parentVideo = isClipOrInteractive && (video.data as Clip | InteractiveMetadata)?._parentVideo;\n const parentVideoDetails = Flight.useBasicFetch<Video>(\n parentVideo && VideoRequests.video(parentVideo.id)\n );\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const sortedLibraries = React.useMemo(() => LibraryHelper.sort(libraries.data), [libraries.data]);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n const sort = !!user.data && VideoSortHelper.getOrSetSortType(user.data.id);\n\n /**\n * We try to pull the library and category id off the video/clip/interactive.\n * If we can't, then we try to get them off the _parentVideo. \n */\n function getSourceIds() {\n let sourceCategoryId: string = null;\n let sourceLibraryId = ArrayHelper.first(video.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && video.data.categories.data?.length) {\n const category = video.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n\n if (category)\n sourceCategoryId = category.id;\n }\n\n if (!sourceLibraryId) {\n sourceLibraryId = ArrayHelper.first(parentVideoDetails.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && parentVideoDetails.data.categories.data?.length) {\n const category = parentVideoDetails.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n \n if (category)\n sourceCategoryId = category.id;\n }\n }\n\n return {\n sourceLibraryId: sourceLibraryId ? +sourceLibraryId : null,\n sourceCategoryId: sourceCategoryId ? +sourceCategoryId : null\n };\n }\n\n function addToLibrary(data: AddToLibraryFormValues, onDone: () => void): void {\n const { sourceLibraryId, sourceCategoryId } = getSourceIds();\n\n const request: AddToLibraryRequest = {\n objectId: props.id.toString(),\n objectType: OBJECT_TYPE_MAP[props.typeId as LibraryObjectType],\n message: data.comment,\n sourceLibraryId,\n destinationLibraryId: +data.library.id,\n metadata: {\n destinationCategoryId: +data.folder.id,\n sourceCategoryId\n }\n };\n\n fetchAsync(LibraryRequests.addToLibrary(request, sort))\n .then(() => {\n if (!data.library.canAddContent) {\n alerts.success({\n type: AlertType.Pending,\n heading: getPhrase('pendingApproval'),\n message: getPhrase('libraryRequestSent', { library: data.library.name, escapeText: true })\n });\n } else {\n alerts.success({\n type: AlertType.Success,\n heading: '',\n message: getPhrase('addToLibrarySuccess', { folder: data.folder.name, video: video.data.name, escapeText: true }),\n ...(props.folderAppLink ? {\n appLink: {\n ...props.folderAppLink,\n args: [ data.library.id, data.folder.id, TextHelper.slugify(data.folder.name) ]\n },\n appLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n appLinkClassName: 'info-link'\n } : {\n extLink: LaunchUrlHelper.buildOpenLibraryFolderUrl(config.data.launchUrl, {\n libraryId: data.library.id,\n folderId: data.folder.id\n }),\n extLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n extLinkClassName: 'info-link'\n })\n });\n }\n })\n .catch((xhr: LibraryApiXhr) => {\n const errorMessage = ErrorMessageHelper.libraryApiError(xhr);\n handleGenerateReportError(xhr, errorMessage, errorMessage);\n onDone();\n })\n .finally(() => {\n props.closePopup();\n });\n }\n\n function getCategoryTree(libraryId: string): LibraryTree[] {\n return librariesWithCategories.data.find(l => l.data.id.toString() === libraryId.toString())?.children;\n }\n\n function isFolderDisabled(folder: BaseTree<Folder>): boolean {\n return !!video.data.categories?.data?.find(category => category.id === folder.id);\n }\n\n const dataLoaded = (\n libraries.data &&\n video.data &&\n librariesWithCategories.data\n );\n\n return (\n <Popup title={getPhrase('addToLibrary')} closePopup={props.closePopup} showLoadingSpinner={!dataLoaded || loading}>\n {dataLoaded && (\n <FormWrapper<AddToLibraryFormValues>\n initialValues={{\n library: ArrayHelper.first(sortedLibraries),\n folder: null,\n comment: ''\n }}\n validationSchema={AddToLibraryValidationSchema}\n onSubmit={addToLibrary}\n >\n <AddToLibraryForm\n libraries={sortedLibraries}\n closePopup={props.closePopup}\n isFolderDisabled={isFolderDisabled}\n video={video.data}\n videoLibraries={video.data?.libraries?.data}\n getCategoryTree={getCategoryTree}\n />\n </FormWrapper>\n )}\n </Popup>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ByC5ZDQ-2.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/TreeHelper.ts","../../../../libs/shared/src/components/tree/tree.module.scss","../../../../libs/shared/src/components/tree/TreeNodeText.tsx","../../../../libs/shared/src/components/tree/TreeNode.tsx","../../../../libs/shared/src/components/tree/Tree.tsx","../../../../libs/shared/src/apps/libraries/components/add-to-library-form/AddToLibraryForm.tsx","../../../../libs/shared/src/apps/libraries/utils/LibraryHelper.ts","../../../../libs/shared/src/apps/libraries/validation/AddToLibraryValidationSchema.ts","../../../../libs/shared/src/enums/LibraryRequestObjectType.ts","../../../../libs/shared/src/utils/error-message-helper/ErrorMessageHelper.ts","../../../../libs/shared/src/utils/LaunchUrlHelper.ts","../../../../libs/shared/src/apps/libraries/views/add-to-library/AddToLibraryView.tsx"],"sourcesContent":["import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};\n","$chevron-container-size: $cv-svg-size;\n$chevron-visible-size: calc($chevron-container-size / 3); // The actual chevron is 1/3rd of the container size\n$chevron-root-padding: map-get($spacers, 1);\n$text-root-padding: $chevron-root-padding + $chevron-container-size;\n\n@mixin nestedFolderTree($from, $to) {\n :local .tree {\n .text {\n padding-left: $text-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n .chevron {\n right: auto;\n left: $chevron-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n @if $from != $to {\n @include nestedFolderTree($from + 1, $to)\n }\n }\n}\n\n@include nestedFolderTree(0, 20);\n\n:local {\n .chevron {\n display: inline-block;\n position: absolute;\n color: black;\n cursor: pointer;\n top: 50%;\n margin-top: -$cv-svg-size-sm*0.5;\n right: 100%;\n }\n\n .text {\n overflow-wrap: break-word;\n padding-right: $cv-svg-size;\n cursor: pointer;\n\n &.disabled {\n cursor: not-allowed;\n }\n }\n\n .root {\n .chevron {\n left: $chevron-root-padding;\n }\n\n .text {\n padding-left: $text-root-padding;\n }\n }\n\n .selected {\n font-weight: 600;\n }\n\n .actions {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: none !important;\n\n &:hover {\n display: flex !important;\n }\n }\n\n .node:hover {\n text-decoration: none;\n\n &.noActions {\n background-color: $light-blue;\n }\n\n :global(.dropdown) {\n display: block;\n }\n\n + .actions {\n display: block !important;\n }\n }\n}","import React from 'react';\n\nimport { BaseObject } from 'libs/analytics/interfaces';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport styles from './tree.module.scss';\n\ninterface TreeNodeTextProps<T extends BaseTree<BaseObject>> {\n tree: T;\n text: string;\n className?: string;\n isDisabled?: boolean;\n disabledTooltip?: string | ((tree: T) => string);\n}\n\nexport function TreeNodeText<T extends BaseTree<BaseObject>>(props: TreeNodeTextProps<T>): React.ReactElement {\n function getTextClass(): string {\n let textClassName = `${styles.text} clamp-4`;\n\n if (props.className)\n textClassName += ` ${props.className}`;\n\n return textClassName;\n }\n\n if (props.isDisabled) {\n const disabledToolTip = typeof props.disabledTooltip === 'string' ?\n props.disabledTooltip :\n props.disabledTooltip?.(props.tree);\n\n return (\n <Tooltip title={disabledToolTip} spanHack spanHackClassName='d-inline-block flex-grow-1'>\n <span className={`${getTextClass()} text-secondary ${styles.disabled}`}>\n {props.text}\n </span>\n </Tooltip>\n );\n }\n\n return (\n <div className={getTextClass()}>\n {props.text}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Tree } from './Tree';\nimport { TreeNodeText } from './TreeNodeText';\n\nimport styles from './tree.module.scss';\n\nconst TREE_ACTIONS_CLASS = 'tree-actions';\n\nexport interface TreeNodeAction<T extends BaseTree<BaseObject>> {\n label: string;\n getAppLink: (node: T) => Core.AppLink;\n className?: string;\n}\n\ninterface TreeNodeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isRoot?: boolean;\n isDropdown?: boolean;\n multiSelect?: boolean;\n depth: number;\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nTreeNode.defaultProps = {\n selectedLinkClassName: styles.selected\n};\n\nexport function TreeNode<T extends BaseTree<BaseObject>>(props: TreeNodeProps<T>): React.ReactElement {\n const { tree, selectedIds, getAppLink, onSelect, isDisabled, isClickDisabled, actions, isDropdown } = props;\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n // If one of our children is selected\n const isParentOfSelected = React.useMemo(() => {\n return selectedIds?.some(id => TreeHelper.find(tree, id));\n }, [ tree, selectedIds ]);\n\n // Or we are below the initial open depth\n const initiallyOpen = props.openDepth && props.depth < props.openDepth;\n\n // We render expanded initially\n const [ isExpanded, setIsExpanded ] = React.useState(isParentOfSelected || initiallyOpen);\n\n const isSelected = selectedIds?.some(id => TextHelper.isEqual(tree.id, id));\n let hasChildren = !!tree.children && !!tree.children.length;\n\n if (props.maxDisplayDepth && hasChildren)\n hasChildren = props.depth < props.maxDisplayDepth;\n\n /**\n * We need to stop propagation of our event if our tree is rendered\n * inside of a bootstrap dropdown - Sha\n */\n React.useEffect(() => {\n if (!ref.current || !isDropdown)\n return;\n\n const onClick = (e: Event) => {\n e.stopPropagation();\n onSelectNode();\n };\n\n ref.current.addEventListener('click', onClick);\n return () => {\n if (!ref.current)\n return;\n\n ref.current.removeEventListener('click', onClick);\n };\n }, [ ref.current, onSelect ]);\n\n /**\n * Check if an expanded item should actually be collapsed\n */\n React.useEffect(() => {\n // Don't do auto collapsing for trees that support multiple selections\n if (props.multiSelect)\n return;\n\n // Skip item if it's already collapsed\n if (!isExpanded)\n return;\n\n // Parents of a selected item should remain expanded\n if (isParentOfSelected)\n return;\n\n // Selected items should remain expanded\n if (isSelected)\n return;\n\n // Disabled items can be expanded if nothing has been selected\n if (!props.selectedIds?.length && isDisabled?.(props.tree))\n return;\n\n // If we want it to be initially open\n if (initiallyOpen)\n return;\n\n setIsExpanded(false);\n }, [selectedIds]);\n\n function onSelectNode(): void {\n if (isClickDisabled?.(tree))\n return;\n\n if (!props.multiSelect)\n setIsExpanded(!isExpanded);\n\n if (getAppLink) {\n Core.AppLinkHelper.trigger(getAppLink(tree));\n return;\n }\n\n if (isDisabled?.(tree)) {\n onSelect(null);\n return;\n }\n\n onSelect?.(tree);\n }\n\n function onClickCaret(e: any): void {\n e.stopPropagation();\n\n if (props.multiSelect) {\n setIsExpanded(!isExpanded);\n return;\n }\n\n onSelectNode();\n }\n\n function getNodeClass(): string {\n let className = `py-1 d-flex align-items-center w-100 position-relative ${styles.node}`;\n\n if (isSelected)\n className += ' ' + props.selectedLinkClassName;\n\n if (!actions?.length)\n className += ' ' + styles.noActions;\n\n if (isParentOfSelected && props.multiSelect)\n className += ' text-underline fst-italic';\n\n return className;\n }\n\n if (props.maxDisplayDepth && (props.depth > props.maxDisplayDepth))\n return <></>;\n\n return (\n <li className={`position-relative ${isExpanded ? '' : styles.collapsed} ${props.isRoot ? styles.root : ''}`}>\n <div className='position-relative'>\n <DivButton\n className={getNodeClass()}\n onClick={isDropdown ? null : onSelectNode}\n ref={ref}\n >\n {hasChildren && (\n <div className={styles.chevron} onClick={onClickCaret}>\n <Caret direction={isExpanded ? 'down' : 'right'} />\n </div>\n )}\n\n <TreeNodeText\n tree={tree}\n // Always prefer name over description\n text={tree.name || tree.description}\n isDisabled={isDisabled?.(tree) || isClickDisabled?.(tree)}\n disabledTooltip={props.disabledTooltip}\n />\n </DivButton>\n\n {!!props.actions && (\n <Actions\n className={styles.actions}\n actions={actions?.map(a => ({ ...a, appLink: a.getAppLink(tree) }))}\n actionsDropdownClassName={`btn btn-light ${TREE_ACTIONS_CLASS} py-0`}\n />\n )}\n\n {isExpanded && <Tree key={tree.id} {...props} isChild depth={props.depth + 1} />}\n </div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport { TreeNode, TreeNodeAction } from './TreeNode';\n\nimport styles from './tree.module.scss';\n\nexport interface TreeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isChild?: boolean;\n depth?: number;\n multiSelect?: boolean;\n /**\n * Set to true if you are using this component inside of\n * a bootstrap dropdown menu and don't want it to close\n * on click events - Sha\n */\n isDropdown?: boolean;\n /**\n * If you want to initially render open to a certain depth\n */\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nexport function Tree<T extends BaseTree<BaseObject>>(props: TreeProps<T>): React.ReactElement {\n const { tree, ...childProps } = props;\n\n if (!tree || !tree.children)\n return <></>;\n\n return (\n <ul className={`m-0 p-0 list-unstyled ${styles.tree}`}>\n {tree.children.map((child, key) => (\n <TreeNode key={key} tree={child} {...childProps} isRoot={!props.isChild} depth={props.depth || 0} />\n ))}\n </ul>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AddToLibraryFormValues } from 'libs/shared/apps/libraries/views/add-to-library/AddToLibraryView';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tree } from 'libs/shared/components/tree/Tree';\nimport { BaseTree, Folder, Library, LibraryTree, PopupViewProps, VideoTypes } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'libraries.addToLibraryForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryFormProps extends PopupViewProps {\n libraries: Library[];\n isFolderDisabled: (folder: BaseTree<Folder>) => boolean;\n video: VideoTypes;\n videoLibraries?: Library[];\n getCategoryTree: (libraryId: string) => LibraryTree[];\n}\n\nexport function AddToLibraryForm(props: AddToLibraryFormProps): JSX.Element {\n const formikProps = useFormikContextWrapper<AddToLibraryFormValues>();\n\n const isMakingLibraryRequest = !formikProps.values.library.canAddContent;\n const isAlreadyInLibrary = props.videoLibraries?.find(l => l.id === formikProps.values.library.id);\n\n const tree = React.useMemo(() => {\n const categoryTree = props.getCategoryTree(formikProps.values.library.id);\n\n const rootBranches = categoryTree.map(TreeHelper.convertNestedObjectToTree);\n\n return {\n children: rootBranches\n } as BaseTree<Library>;\n }, [formikProps.values.library.id]);\n\n return (\n <>\n {isAlreadyInLibrary && (\n <div className='alert alert-info'>\n <Text namespace={namespace} phrase='alreadyInLibrary' options={{ library: formikProps.values.library.name }} />\n </div>\n )}\n\n {isMakingLibraryRequest && (\n <p>\n <Text namespace={namespace} phrase='sendLibraryRequest' options={{ video: props.video.name }} />\n </p>\n )}\n\n <Form>\n {props.libraries.length > 1 && (\n <FormField\n as='select'\n label={getPhrase('selectLibrary')}\n name='library'\n value={formikProps.values.library?.id ?? ''}\n className={!formikProps.values.library?.id ? 'text-secondary' : ''}\n showRequiredStar\n onChange={(e: any) => {\n formikProps.setFieldValue('folder', null);\n\n const libraryId = e.target.value;\n\n formikProps.setFieldValue('library', props.libraries.find(l => l.id.toString() === libraryId.toString()));\n }}\n >\n {props.libraries.map(library => (\n <option key={library.id} value={library.id} className='text-dark'>\n {library.name}\n </option>\n ))}\n </FormField>\n )}\n\n <FormField\n label={getPhrase('selectFolder')}\n name='folder'\n showRequiredStar\n disabled={!formikProps.values.library}\n >\n {() => (\n <Scrollbars autoHeight autoHeightMax={300} className='border rounded-3'>\n <Tree\n tree={tree}\n onSelect={(folder: Folder) => formikProps.setFieldValue('folder', folder)}\n isDisabled={props.isFolderDisabled}\n disabledTooltip={LanguageService.getPhrase(namespace, 'disabledFolder')}\n selectedIds={formikProps.values.folder?.id ? [formikProps.values.folder.id] : undefined}\n selectedLinkClassName='bg-light'\n />\n </Scrollbars>\n )}\n </FormField>\n \n {!!formikProps.values.folder && (\n <p className='mt-n2'>\n <Text\n namespace={namespace}\n phrase={isMakingLibraryRequest ? 'requestTo' : 'addTo'}\n options={{ folder: formikProps.values.folder.name }}\n />\n </p>\n )}\n\n {isMakingLibraryRequest && (\n <FormField\n label={LanguageService.getPhrase(namespace, 'comment')}\n as='textarea'\n name='comment'\n id='comment'\n placeholder={LanguageService.getPhrase(namespace, 'commentPlaceholder')}\n value={formikProps.values.comment}\n />\n )}\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text={getPhrase('addToLibrary')} />\n </PopupButtons>\n </Form>\n </>\n );\n}\n","import { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\ntype LibraryTypes = Library['type'] | 'shared_library';\n\nexport const LibraryHelper = {\n /**\n * Orders libraries by type (custom -> shared -> hosted).\n * Also orders libraries of same type alphabetically.\n */\n sort(libraries: Library[]): Library[] {\n if (!libraries?.length)\n return [];\n\n return libraries.sort((a: Library, b: Library) => {\n // This is required because shared libraries have a type of `custom_library`\n const aType: LibraryTypes = a.isSharedLibrary ? 'shared_library' : a.type;\n const bType: LibraryTypes = b.isSharedLibrary ? 'shared_library' : b.type;\n \n if (aType === bType)\n return a.name.localeCompare(b.name);\n \n if (aType === 'custom_library')\n return -1;\n \n if (aType === 'shared_library' && bType !== 'custom_library')\n return -1;\n\n if (aType === 'hosted_library' && bType !== 'custom_library' && bType !== 'shared_library')\n return -1;\n \n return 1;\n });\n },\n\n hasTwigOrTigtag(libraries: Library[], currentUser: CurrentUser) {\n if (!currentUser)\n return { hasTwig: false, hasTigtag: false };\n\n // Anon users can see Twig/Tigtag if they're in England.\n if (!currentUser.isAuthenticated) {\n const hasAnonAccess = (\n currentUser.contentRegion === ContentRegion.UK ||\n currentUser.contentRegion === ContentRegion.SCOT\n );\n\n return {\n hasTwig: hasAnonAccess,\n hasTigtag: hasAnonAccess\n };\n }\n\n if (!libraries)\n return { hasTwig: false, hasTigtag: false };\n \n let hasTwig = false;\n let hasTigtag = false;\n\n for (const lib of libraries) {\n if (lib.id.toString() === HardCoded.Libraries.TWIG)\n hasTwig = true;\n else if (lib.id.toString() === HardCoded.Libraries.TIGTAG)\n hasTigtag = true;\n\n // If both are true we don't need to keep searching\n if (hasTwig && hasTigtag)\n break;\n }\n\n return { hasTwig, hasTigtag };\n }\n};\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'libraries.validation';\n\nexport const AddToLibraryValidationSchema = object().shape({\n comment: string()\n .nullable()\n .max(512, () => LanguageService.getPhrase(namespace, 'commentExceeds')),\n library: object()\n .required(() => LanguageService.getPhrase(namespace, 'libraryRequired'))\n .nullable(),\n folder: object()\n .required(() => LanguageService.getPhrase(namespace, 'folderRequired'))\n .nullable()\n});\n","export enum LibraryRequestObjectType {\n MasterVideo = 1,\n MasterClip = 2,\n MasterInteractive = 3\n}\n","import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { InviteColleagueXhr, LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.errorMessageHelper');\n\nconst LIBRARY_ERROR_PHRASE_MAPPING = {\n 'operation-not-allowed': 'operationNotAllowed',\n 'library-not-supported': 'libraryNotSupported',\n 'access-denied': 'accessDenied',\n 'library-access-denied': 'libraryAccessDenied',\n 'library-access-denied-create': 'libraryAccessDeniedCreate',\n 'library-access-denied-fulfil': 'libraryAccessDeniedFulfill',\n 'library-access-denied-not-authorized': 'libraryAccessDeniedNotAuthorized',\n 'library-request-access-denied': 'accessDenied',\n 'library-request-access-denied-create-request': 'libraryRequestAccessDeniedCreateRequest',\n 'library-request-access-denied-process-comment': 'libraryRequestAccessDeniedProcessComment',\n 'customer-not-found': 'customerNotFound',\n 'customer-not-found-current-user': 'customerNotFound',\n 'customer-not-found-library-owner': 'customerNotFoundLibraryOwner',\n 'customer-not-found-destination-library-owner': 'customerNotFoundLibraryOwner',\n 'user-not-found': 'userNotFound',\n 'library-not-found': 'libraryNotFound',\n 'video-not-found': 'videoNotFound',\n 'category-not-found': 'categoryNotFound',\n 'category-not-found-destination-not-provided': 'categoryNotFoundDestinationNotProvided',\n 'category-not-found-not-in-library': 'categoryNotFoundInLibrary',\n 'library-request-not-found': 'libraryRequestNotFound',\n 'invalid-category-path': 'invalidCategoryPath',\n 'library-api-error': 'somethingWentWrong',\n 'content-not-playable': 'contentNotPlayable',\n 'invalid-object': 'invalidObject',\n 'same-request-existed': 'sameRequestExisted',\n 'unknown-error': 'somethingWentWrong',\n 'no-email': 'noEmailError'\n};\n\nconst INVITE_COLLEAGUE_PHRASE_MAPPING = {\n 'create-invitation-failed': 'createInvitationFailed',\n 'invitation-resend-failed': 'invitationResendFailed',\n 'failed-to-accept': 'failedToAccept',\n 'invitee-not-found': 'inviteeNotFound',\n 'invitation-not-found': 'invitationNotFound',\n 'invitation-deleted': 'invitationDeleted',\n 'too-many-emails': 'tooManyEmails'\n};\n\nexport const ErrorMessageHelper = {\n libraryApiError(xhr: LibraryApiXhr): string {\n const phrase = LIBRARY_ERROR_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n },\n inviteColleagueError(xhr: InviteColleagueXhr): string {\n const phrase = INVITE_COLLEAGUE_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n }\n};\n\nexport const ErrorMessageHelperValidation = {\n libraryApiErrors(): void {\n Object.values(LIBRARY_ERROR_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n },\n inviteColleagueErrors(): void {\n Object.values(INVITE_COLLEAGUE_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n }\n};\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\ninterface OpenLibraryFolderParams {\n libraryId: string;\n folderId: string;\n}\n\nexport const LaunchUrlHelper = {\n buildOpenAppLinkUrl(baseLaunchUrl: string, appLink: string, product?: string): string {\n return UrlHelper.urlBuilder(`${baseLaunchUrl}/open`, { appLink, product });\n },\n\n buildOpenVideoUrl(baseLaunchUrl: string, videoId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `video:${videoId}`, product);\n },\n\n buildOpenClipUrl(baseLaunchUrl: string, clipId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `clip:${clipId}`, product);\n },\n\n buildOpenInteractiveUrl(baseLaunchUrl: string, interactiveId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `interactive:${interactiveId}`, product);\n },\n\n buildOpenTopicUrl(baseLaunchUrl: string, topicId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `topic:${topicId}`, product);\n },\n\n buildOpenSeriesUrl(baseLaunchUrl: string, seriesId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `series:${seriesId}`, product);\n },\n\n buildOpenPlaylistUrl(baseLaunchUrl: string, playlistId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `playlist:${playlistId}`, product);\n },\n\n buildOpenCategoryUrl(baseLaunchUrl: string, categoryId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `category:${categoryId}`, product);\n },\n\n buildOpenLibraryFolderUrl(baseLaunchUrl: string, params: OpenLibraryFolderParams, product?: string): string {\n const appLink = `library:${params.libraryId}:folder:${params.folderId}`;\n \n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, appLink, product);\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AddToLibraryForm } from 'libs/shared/apps/libraries/components/add-to-library-form/AddToLibraryForm';\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { AddToLibraryValidationSchema } from 'libs/shared/apps/libraries/validation/AddToLibraryValidationSchema';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { LibraryRequestObjectType } from 'libs/shared/enums/LibraryRequestObjectType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { BaseTree, Clip, Config, CurrentUser, Folder, InteractiveMetadata, Library, LibraryTree, PopupViewProps, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { AddToLibraryRequest } from 'libs/shared/interfaces/requests/AddToLibraryRequest';\nimport { LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\nimport { ErrorMessageHelper } from 'libs/shared/utils/error-message-helper/ErrorMessageHelper';\nimport { LaunchUrlHelper } from 'libs/shared/utils/LaunchUrlHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nexport interface AddToLibraryFormValues {\n library: Library;\n folder: Folder;\n comment?: string;\n}\n\ntype LibraryObjectType = MasterType.Video | MasterType.Clip | MasterType.Interactive;\n\ntype ObjectTypeMap = {\n [K in LibraryObjectType]: LibraryRequestObjectType;\n};\n\nconst OBJECT_TYPE_MAP: ObjectTypeMap = {\n [MasterType.Video]: LibraryRequestObjectType.MasterVideo,\n [MasterType.Clip]: LibraryRequestObjectType.MasterClip,\n [MasterType.Interactive]: LibraryRequestObjectType.MasterInteractive\n};\n\nconst namespace = 'libraries.addToLibrary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryViewProps extends PopupViewProps {\n id: string;\n typeId: MasterType;\n folderAppLink?: Core.AppLink;\n}\n\nexport function AddToLibraryView(props: AddToLibraryViewProps): JSX.Element {\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const librariesWithCategories = Flight.useBasicFetch<LibraryTree[]>(LibraryRequests.librariesWithCategories());\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.libraryRequestLibraries());\n\n const videoRequest = VideoHelper.getVideoRequest(props.id, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const isClipOrInteractive = VideoHelper.isClip(video.data) || VideoHelper.isInteractive(video.data);\n const parentVideo = isClipOrInteractive && (video.data as Clip | InteractiveMetadata)?._parentVideo;\n const parentVideoDetails = Flight.useBasicFetch<Video>(\n parentVideo && VideoRequests.video(parentVideo.id)\n );\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const sortedLibraries = React.useMemo(() => LibraryHelper.sort(libraries.data), [libraries.data]);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n const sort = !!user.data && VideoSortHelper.getOrSetSortType(user.data.id);\n\n /**\n * We try to pull the library and category id off the video/clip/interactive.\n * If we can't, then we try to get them off the _parentVideo. \n */\n function getSourceIds() {\n let sourceCategoryId: string = null;\n let sourceLibraryId = ArrayHelper.first(video.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && video.data.categories.data?.length) {\n const category = video.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n\n if (category)\n sourceCategoryId = category.id;\n }\n\n if (!sourceLibraryId) {\n sourceLibraryId = ArrayHelper.first(parentVideoDetails.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && parentVideoDetails.data.categories.data?.length) {\n const category = parentVideoDetails.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n \n if (category)\n sourceCategoryId = category.id;\n }\n }\n\n return {\n sourceLibraryId: sourceLibraryId ? +sourceLibraryId : null,\n sourceCategoryId: sourceCategoryId ? +sourceCategoryId : null\n };\n }\n\n function addToLibrary(data: AddToLibraryFormValues, onDone: () => void): void {\n const { sourceLibraryId, sourceCategoryId } = getSourceIds();\n\n const request: AddToLibraryRequest = {\n objectId: props.id.toString(),\n objectType: OBJECT_TYPE_MAP[props.typeId as LibraryObjectType],\n message: data.comment,\n sourceLibraryId,\n destinationLibraryId: +data.library.id,\n metadata: {\n destinationCategoryId: +data.folder.id,\n sourceCategoryId\n }\n };\n\n fetchAsync(LibraryRequests.addToLibrary(request, sort))\n .then(() => {\n if (!data.library.canAddContent) {\n alerts.success({\n type: AlertType.Pending,\n heading: getPhrase('pendingApproval'),\n message: getPhrase('libraryRequestSent', { library: data.library.name, escapeText: true })\n });\n } else {\n alerts.success({\n type: AlertType.Success,\n heading: '',\n message: getPhrase('addToLibrarySuccess', { folder: data.folder.name, video: video.data.name, escapeText: true }),\n ...(props.folderAppLink ? {\n appLink: {\n ...props.folderAppLink,\n args: [ data.library.id, data.folder.id, TextHelper.slugify(data.folder.name) ]\n },\n appLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n appLinkClassName: 'info-link'\n } : {\n extLink: LaunchUrlHelper.buildOpenLibraryFolderUrl(config.data.launchUrl, {\n libraryId: data.library.id,\n folderId: data.folder.id\n }),\n extLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n extLinkClassName: 'info-link'\n })\n });\n }\n })\n .catch((xhr: LibraryApiXhr) => {\n const errorMessage = ErrorMessageHelper.libraryApiError(xhr);\n handleGenerateReportError(xhr, errorMessage, errorMessage);\n onDone();\n })\n .finally(() => {\n props.closePopup();\n });\n }\n\n function getCategoryTree(libraryId: string): LibraryTree[] {\n return librariesWithCategories.data.find(l => l.data.id.toString() === libraryId.toString())?.children;\n }\n\n function isFolderDisabled(folder: BaseTree<Folder>): boolean {\n return !!video.data.categories?.data?.find(category => category.id === folder.id);\n }\n\n const dataLoaded = (\n libraries.data &&\n video.data &&\n librariesWithCategories.data\n );\n\n return (\n <Popup title={getPhrase('addToLibrary')} closePopup={props.closePopup} showLoadingSpinner={!dataLoaded || loading}>\n {dataLoaded && (\n <FormWrapper<AddToLibraryFormValues>\n initialValues={{\n library: ArrayHelper.first(sortedLibraries),\n folder: null,\n comment: ''\n }}\n validationSchema={AddToLibraryValidationSchema}\n onSubmit={addToLibrary}\n >\n <AddToLibraryForm\n libraries={sortedLibraries}\n closePopup={props.closePopup}\n isFolderDisabled={isFolderDisabled}\n video={video.data}\n videoLibraries={video.data?.libraries?.data}\n getCategoryTree={getCategoryTree}\n />\n </FormWrapper>\n )}\n </Popup>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_t as e,ht as t}from"./B1i9atik.chunk.js";import{t as n}from"./CzvVp9iC.chunk.js";import{it as r,ot as i,st as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{_t as e,ht as t}from"./B1i9atik.chunk.js";import{t as n}from"./CzvVp9iC.chunk.js";import{it as r,ot as i,st as a}from"./app-fNhmX-xT.js";var o=`shared.privateResourceError`,s=class extends a{constructor(){super(n.getPhrase(o,`title`))}get name(){return`PrivateResourceError`}get heading(){return n.getPhrase(o,`heading`)}get description(){return n.getPhrase(o,`description`)}},c=`shared.regionLockedResourceError`,l={notFound:r,forbidden:{rating:s,yearLevel:s,region:class extends a{constructor(){super(n.getPhrase(c,`title`))}get name(){return`RegionLockedResourceError`}get heading(){return n.getPhrase(c,`heading`)}get description(){return n.getPhrase(c,`description`)}},privacy:s},badRequest:i,internalServerError:i};function u(n,r={},a={}){if(!n)return;let o;o=typeof n==`number`?n:n.status;let s={...l,...r};if(o&&t.isStatusCodeError(o)){if(o===e.InternalServer){a.internalServerError||t.throw(new i);return}if(o===e.NotFound){a.notFound||t.throw(new s.notFound);return}if(o===e.Forbidden){a.forbidden||t.throw(new s.forbidden.privacy);return}a.badRequest||t.throw(new s.badRequest)}}export{u as t};
|
|
2
|
+
//# sourceMappingURL=C-jHArp-.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"C-jHArp-.chunk.js","names":[],"sources":["../../../../libs/shared/src/errors/general/private-resource/PrivateResourceError.ts","../../../../libs/shared/src/errors/general/region-locked-resource/RegionLockedResourceError.ts","../../../../libs/shared/src/errors/handlers/HttpErrorHandlers.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.privateResourceError';\n\nexport class PrivateResourceError extends ErrorPageError {\n constructor() {\n super(LanguageService.getPhrase(namespace, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'PrivateResourceError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.regionLockedResourceError';\n\nexport class RegionLockedResourceError extends ErrorPageError {\n constructor() {\n super(LanguageService.getPhrase(namespace, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'RegionLockedResourceError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}\n","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError,\n yearLevel?: new (description: string) => BaseError,\n region?: new () => BaseError,\n privacy?: new (video?: VideoTypes) => BaseError\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}\n"],"mappings":"gJAIA,IAAM,EAAY,8BAEL,EAAb,cAA0C,CAAe,CACvD,aAAc,CACZ,MAAM,EAAgB,UAAU,EAAW,QAAQ,CAAC,CAItD,IAAW,MAAe,CACxB,MAAO,uBAIT,IAAW,SAAkB,CAC3B,OAAO,EAAgB,UAAU,EAAW,UAAU,CAIxD,IAAW,aAAsB,CAC/B,OAAO,EAAgB,UAAU,EAAW,cAAc,GCnBxD,EAAY,mCCuBZ,EAA8B,CAClC,SAAU,EACV,UAAW,CACT,OAAQ,EACR,UAAW,EACX,OD1BJ,cAA+C,CAAe,CAC5D,aAAc,CACZ,MAAM,EAAgB,UAAU,EAAW,QAAQ,CAAC,CAItD,IAAW,MAAe,CACxB,MAAO,4BAIT,IAAW,SAAkB,CAC3B,OAAO,EAAgB,UAAU,EAAW,UAAU,CAIxD,IAAW,aAAsB,CAC/B,OAAO,EAAgB,UAAU,EAAW,cAAc,GCU1D,QAAS,EACV,CACD,WAAY,EACZ,oBAAqB,EACtB,CAED,SAAgB,EACd,EACA,EAA+B,EAAE,CAKjC,EAAgC,EAAE,CAC5B,CACN,GAAI,CAAC,EACH,OAEF,IAAI,EAEJ,AAGE,EAHE,OAAO,GAAU,SACN,EAEA,EAAK,OAGpB,IAAM,EAAW,CACf,GAAG,EACH,GAAG,EACJ,CAEI,MAGD,EAAkB,kBAAkB,EAAW,CAGnD,IAAI,IAAe,EAAW,eAAgB,CACvC,EAAU,qBACb,EAAiB,MAAM,IAAI,EAAmB,CAChD,OAGF,GAAI,IAAe,EAAW,SAAU,CACjC,EAAU,UACb,EAAiB,MAAM,IAAI,EAAS,SAAW,CACjD,OAGF,GAAI,IAAe,EAAW,UAAW,CAKlC,EAAU,WACb,EAAiB,MAAM,IAAI,EAAS,UAAU,QAAU,CAC1D,OAGG,EAAU,YACb,EAAiB,MAAM,IAAI,EAAS,WAAa"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s}from"./B1i9atik.chunk.js";import{l as c,y as l}from"./TJBzqR6k.chunk.js";import{Z as u}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s}from"./B1i9atik.chunk.js";import{l as c,y as l}from"./TJBzqR6k.chunk.js";import{Z as u}from"./app-fNhmX-xT.js";import{t as d}from"./BJyhVVFW2.chunk.js";var f=a(t()),p={createDownloadToken(e){return{url:`/api/downloadproxy/api/tokens`,key:`download:token:${e}`,data:{objectId:e},type:l.POST,normalize:!1}}},m=e();function h(e){let t=f.useRef(null),a=c(u.config()),l=c(p.createDownloadToken(e.id)),h=!!a.data&&!!l.data;return f.useEffect(()=>{if(!h||!t.current)return;let c=d.getVideoDownloadUrl(a.data.downloadProxy,l.data.token);t.current.src=c,s.logUserAction({id:e.id},{actionType:r.Download,location:i.Popup,entity:o.Video,workflowPhase:n.Complete})},[h,t.current]),(0,m.jsx)(`iframe`,{ref:t})}export{h as DownloadVideoView};
|
|
2
|
+
//# sourceMappingURL=C3cl5FmM.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"C3cl5FmM.chunk.js","names":[],"sources":["../../src/shared/flight-requests/DownloadRequests.ts","../../src/shared/views/download-video/DownloadVideoView.tsx"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nexport const DownloadRequests = {\n createDownloadToken(videoId: string): Flight.Request {\n return {\n url: '/api/downloadproxy/api/tokens',\n key: `download:token:${videoId}`,\n data: { objectId: videoId },\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { DownloadRequests } from 'shared/flight-requests/DownloadRequests';\n\ninterface DownloadVideoViewProps {\n id: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function DownloadVideoView(props: DownloadVideoViewProps): JSX.Element {\n const ref = React.useRef(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const downloadToken = Flight.useBasicFetch<HashObject>(DownloadRequests.createDownloadToken(props.id));\n\n const dataLoaded = !!config.data && !!downloadToken.data;\n\n React.useEffect(() => {\n if (!dataLoaded || !ref.current)\n return;\n\n const url = DownloadHelper.getVideoDownloadUrl(config.data.downloadProxy, downloadToken.data.token);\n ref.current.src = url;\n\n AnalyticsHelper.logUserAction({\n id: props.id\n }, {\n actionType: UserAction.Download,\n location: LocationContext.Popup,\n entity: EntityType.Video,\n workflowPhase: WorkflowPhase.Complete\n });\n }, [ dataLoaded, ref.current ]);\n\n return (\n <iframe ref={ref} />\n );\n}\n"],"mappings":"qOAGA,EAAA,CAAA,oBAAA,EAAA,CAEI,MAAA,mHCcJ,SAAgB,EAAkB,EAA4C,CAC5E,IAAM,EAAA,EAAY,OAAO,KAAK,CAExB,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAC9D,EAAgB,EAAiC,EAAiB,oBAAoB,EAAM,GAAG,CAAC,CAEhG,EAAa,CAAC,CAAC,EAAO,MAAQ,CAAC,CAAC,EAAc,KAmBpD,OAjBA,EAAM,cAAgB,CACpB,GAAI,CAAC,GAAc,CAAC,EAAI,QACtB,OAEF,IAAM,EAAM,EAAe,oBAAoB,EAAO,KAAK,cAAe,EAAc,KAAK,MAAM,CACnG,EAAI,QAAQ,IAAM,EAElB,EAAgB,cAAc,CAC5B,GAAI,EAAM,GACX,CAAE,CACD,WAAY,EAAW,SACvB,SAAU,EAAgB,MAC1B,OAAQ,EAAW,MACnB,cAAe,EAAc,SAC9B,CAAC,EACD,CAAE,EAAY,EAAI,QAAS,CAAC,EAG7B,EAAA,EAAA,KAAC,SAAD,CAAa,MAAO,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./Bu67yET_.chunk.js";import{et as t}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{t as e}from"./Bu67yET_.chunk.js";import{et as t}from"./app-fNhmX-xT.js";function n(n,r){let[i,a]=e(`exchange:preview:${n}`,r?t.getPreviousRoute():void 0);return{previewContext:i,clearPreviewContext:()=>a(void 0)}}export{n as t};
|
|
2
|
+
//# sourceMappingURL=C4hd6q9D.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"C4hd6q9D.chunk.js","names":[],"sources":["../../src/apps/exchange/hooks/usePreviewContext.ts"],"sourcesContent":["import { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface ContentViewModel {\n appLink: Core.AppLink;\n}\n\nexport function usePreviewContext(videoId: string, init: boolean) {\n const [ previewContext, setViewModel ] = useViewModel<ContentViewModel>(\n `exchange:preview:${videoId}`,\n init ? ContextService.getPreviousRoute() : undefined\n );\n\n return {\n previewContext,\n clearPreviewContext: () => setViewModel(undefined)\n };\n}\n"],"mappings":"+EASA,SAAgB,EAAkB,EAAiB,EAAe,CAChE,GAAM,CAAE,EAAgB,GAAiB,EACvC,oBAAoB,IACpB,EAAO,EAAe,kBAAkB,CAAG,IAAA,GAC5C,CAED,MAAO,CACL,iBACA,wBAA2B,EAAa,IAAA,GAAA,CACzC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{l as e}from"./TJBzqR6k.chunk.js";import{i as t}from"./BIhfRmDn.chunk.js";import{t as n}from"./Bu67yET_.chunk.js";import{D as r}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{l as e}from"./TJBzqR6k.chunk.js";import{i as t}from"./BIhfRmDn.chunk.js";import{t as n}from"./Bu67yET_.chunk.js";import{D as r}from"./app-fNhmX-xT.js";import{t as i}from"./CfCxi56P.chunk.js";import{t as a}from"./DWVn5hOy2.chunk.js";function o(){let o=e(a.regions());i(o);let{tvRegion:s,isLoadingSettings:c}=r(null),[l,u]=n(`tv:region`,{region:null},{storage:t.LocalStorage});function d(e){u({region:e.code})}return!o.data?.length||c?{isLoading:!0,region:null,setRegion:d}:l.region&&o.data.find(e=>e.code.toLowerCase()===l.region.toLowerCase())?{isLoading:!1,region:l.region.toUpperCase(),setRegion:d}:s&&o.data.find(e=>e.code.toLowerCase()===s.toLowerCase())?{isLoading:!1,region:s.toUpperCase(),setRegion:d}:{isLoading:!1,region:o.data[0].code,setRegion:d}}export{o as t};
|
|
2
|
+
//# sourceMappingURL=C8dtRvC52.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"C8dtRvC52.chunk.js","names":[],"sources":["../../src/apps/tv/hooks/useSelectedRegion.ts"],"sourcesContent":["import { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nexport function useSelectedRegion() {\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n\n useHandleObjectError(regions);\n\n const { tvRegion: customerRegion, isLoadingSettings } = useSettings(null);\n\n const [ regionViewModel, setRegionViewModel ] = useViewModel('tv:region', { region: null }, { storage: StorageType.LocalStorage });\n\n function setRegion(newRegion: TvRegion): void {\n setRegionViewModel({ region: newRegion.code });\n }\n\n if (!regions.data?.length || isLoadingSettings)\n return { isLoading: true, region: null, setRegion };\n\n if (regionViewModel.region && regions.data.find(r => r.code.toLowerCase() === regionViewModel.region.toLowerCase()))\n return { isLoading: false, region: regionViewModel.region.toUpperCase(), setRegion };\n \n if (customerRegion && regions.data.find(r => r.code.toLowerCase() === customerRegion.toLowerCase()))\n return { isLoading: false, region: customerRegion.toUpperCase(), setRegion };\n\n return { isLoading: false, region: regions.data[0].code, setRegion };\n}\n"],"mappings":"+OAUA,SAAgB,GAAoB,CAClC,IAAM,EAAU,EAAiC,EAAW,SAAS,CAAC,CAEtE,EAAqB,EAAQ,CAE7B,GAAM,CAAE,SAAU,EAAgB,qBAAsB,EAAY,KAAK,CAEnE,CAAE,EAAiB,GAAuB,EAAa,YAAa,CAAE,OAAQ,KAAM,CAAE,CAAE,QAAS,EAAY,aAAc,CAAC,CAElI,SAAS,EAAU,EAA2B,CAC5C,EAAmB,CAAE,OAAQ,EAAU,KAAM,CAAC,CAYhD,MATI,CAAC,EAAQ,MAAM,QAAU,EACpB,CAAE,UAAW,GAAM,OAAQ,KAAM,YAAW,CAEjD,EAAgB,QAAU,EAAQ,KAAK,KAAK,GAAK,EAAE,KAAK,aAAa,GAAK,EAAgB,OAAO,aAAa,CAAC,CAC1G,CAAE,UAAW,GAAO,OAAQ,EAAgB,OAAO,aAAa,CAAE,YAAW,CAElF,GAAkB,EAAQ,KAAK,KAAK,GAAK,EAAE,KAAK,aAAa,GAAK,EAAe,aAAa,CAAC,CAC1F,CAAE,UAAW,GAAO,OAAQ,EAAe,aAAa,CAAE,YAAW,CAEvE,CAAE,UAAW,GAAO,OAAQ,EAAQ,KAAK,GAAG,KAAM,YAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{t as e}from"./YhCzLJGK.chunk.js";var t={"AUS Eastern Standard Time":`Australia/Sydney`,"W. Australia Standard Time":`Australia/Perth`,"E. Australia Standard Time":`Australia/Brisbane`,"Cen. Australia Standard Time":`Australia/Adelaide`,"New Zealand Standard Time":`Pacific/Auckland`,"GMT Standard Time":`Europe/London`};function n(n,r){return e.getUtcTimeByTimezone(n,`YYYY-MM-DDTHH:mm:ss`,t[r])}export{n as t};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=C8lms6Rf2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"C8lms6Rf2.chunk.js","names":[],"sources":["../../src/apps/tv/utils/toLocalTime.ts"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\n/**\n * A fully fleshed out Windows to IANA mapping library\n * can be absolutely huge, so instead we're just taking the \n * windows timezones that we know our system can have\n * and are mapping them ourselves here.\n */\nconst WINDOWS_TO_IANA: HashObject = {\n 'AUS Eastern Standard Time': 'Australia/Sydney',\n 'W. Australia Standard Time': 'Australia/Perth',\n 'E. Australia Standard Time': 'Australia/Brisbane',\n 'Cen. Australia Standard Time': 'Australia/Adelaide',\n 'New Zealand Standard Time': 'Pacific/Auckland',\n 'GMT Standard Time': 'Europe/London'\n};\n\n/**\n * When we replace moment with dayjs, we're going to have to import the timezone plugin for dayjs\n * https://day.js.org/docs/en/plugin/timezone\n * in order to support time conversion here - Sha\n */\nexport function toLocalTime(time: string | Date, timezone: string): string {\n /**\n * If for whatever reason we hit a timezone that we don't have a mapping for,\n * just use UTC. This is less than ideal, but any mapping library for mapping\n * windows to IANA times is about 1mb in size - Sha\n */\n const localTime = DateHelper.getUtcTimeByTimezone(time, 'YYYY-MM-DDTHH:mm:ss', WINDOWS_TO_IANA[timezone]);\n \n return localTime;\n}\n"],"mappings":"wCASA,IAAM,EAA8B,CAClC,4BAA6B,mBAC7B,6BAA8B,kBAC9B,6BAA8B,qBAC9B,+BAAgC,qBAChC,4BAA6B,mBAC7B,oBAAqB,gBACtB,CAOD,SAAgB,EAAY,EAAqB,EAA0B,CAQzE,OAFkB,EAAW,qBAAqB,EAAM,sBAAuB,EAAgB,GAAU"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{y as e}from"./TJBzqR6k.chunk.js";import{t}from"./CrBD6Z4s.chunk.js";import{Q as n,c as r,s as i,tt as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{y as e}from"./TJBzqR6k.chunk.js";import{t}from"./CrBD6Z4s.chunk.js";import{Q as n,c as r,s as i,tt as a}from"./app-fNhmX-xT.js";import{t as o}from"./CTTruW3_2.chunk.js";import{t as s}from"./D2DuwJJH2.chunk.js";var c=function(e){return e.Series=`series`,e.Playlist=`playlist`,e.Widget=`widget`,e.Folder=`category`,e.CategoryTree=`categoryTree`,e}({}),l={sharedVideo:(e,n)=>t.urlBuilder(`/api/objects/${e}`,{shareId:n,query:r.VIDEO}),publicVideo:(e,n)=>t.urlBuilder(`/api/objects/${e}`,{query:`thumbnail,_canBeConsumed,series,season,_rating,libraries{typeId:[17]}`,permissionFilterOption:s.StripMetadata,shareId:n}),getVideosById:e=>t.urlBuilder(`{gateway}/v1/objects`,{"query.video":r.VIDEO_COLLECTION,"query.clip":r.CLIP_COLLECTION,"query.interactive":r.INTERACTIVE_COLLECTION,id:e}),relatedVideos:e=>{let{videoId:n,context:i,collectionId:a,moviesAndTv:o,limit:s}=e,l={videoId:n,limit:s,query:r.VIDEO_COLLECTION};return i&&(i===c.Widget?l[`context.widgetId`]=a:(l[`context.collectionType`]=i,l[`context.collectionId`]=a)),o&&(l[`context.moviesAndTv`]=!0),t.urlBuilder(`{gateway}/v1/suggestions/related-videos`,l)}},u={video(e,n){return{url:t.urlBuilder(`{gateway}/v1/objects/${e}`,{query:r.VIDEO,permissionFilterOption:n}),publicUrl:t.urlBuilder(`/api/objects/${e}`,{query:i.VIDEO,permissionFilterOption:n}),key:`videos:${e}:${n}`}},publicVideo(e,t,n,r){return{url:l.publicVideo(e,t),key:`videos:${e}:public:${t}`,bootstrapName:`shared:object:${e}`,success:n,error:r}},sharedVideo(e,t,n,r){return{url:l.sharedVideo(e,t),key:`shared:video:${e}`,success:n,error:r}},myVideos(e,n){let{VIDEO_COLLECTION:i,CLIP_COLLECTION:c,INTERACTIVE:l}=r,u={query:`(${`videos[${i}]{libraries.typeid:${a.WorkspaceCollection}}`}|${`clips[${c}]`}|${`interactives[${l}]{status:[${o.Published},${o.Draft}]}`}){orderbydesc:id}`,permissionFilterOption:s.StripMetadata};return n&&(u.cursor=n),{url:t.urlBuilder(`{gateway}/v1/objects/${e}/members`,u),key:`my:videos:${n}`}},videos(e,t){return{url:l.getVideosById(e),key:`videos:by:id:${e.join(`,`)}`,success:t}},watchHistoryVideos(e,t){return{url:l.getVideosById(e),key:`watch:history:videos:by:id:${e.join(`,`)}`,success:t}},updateVideo(t,n,r,i,a){return{key:`update:video:${t}`,url:`{gateway}/v1/objects/${t}`,type:e.PUT,data:n,success:r,error:i,always:a}},videoRatings(e,t){let n=e.map(e=>`id=${e}`);if(n.length)return{url:`/api/domain/v2/objects?query=rating&${n.join(`&`)}`,key:`video:ratings:by:id:${e.join(`,`)}`,normalizeOptions:{namespace:t}}},videoMixinAssocs(e,n){if(e.map(e=>`id=${e}`).length)return{url:t.urlBuilder(`{gateway}/v1/objects`,{query:`interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks`,id:e}),publicUrl:t.urlBuilder(`/api/objects`,{query:`interactives{limit:100},resources{limit:100},links{limit:100},_hasCurriculumLinks`,id:e}),key:`video:mixin:assocs:${e.join(`,`)}`,normalizeOptions:{namespace:n}}},getRestrictions(e){let t=e.slice().sort();return{url:`/api/domain/v1/restrictedobjects?objectTypeId=${a.Video}${t.map(e=>`&objectId=${e}`).join(``)}`,key:`restrictions:${t.join(`,`)}`,normalizeOptions:{namespace:`domain`,idAttribute:`objectId`}}},delete(t,n,r){return{url:`{gateway}/v1/objects/${t}`,key:`delete:video:${t}`,type:e.DELETE,success:n,error:r,invalidationKeys:[`videos`,`search`]}},deleteBulk(t,n,r,i,a){let o=t.map(e=>`videoIds=${e}`).join(`&`);return{url:`/api/domain/v1/libraries/${n}/videos?${[`categoryId=${r}`,`${o}`].join(`&`)}`,key:`delete:bulk:video:${t.join(`:`)}:${n}:${r}`,type:e.DELETE,success:i,error:a,invalidationKeys:[`videos`,`search`]}},relatedVideos(e){let{videoId:t,context:n,collectionId:r,moviesAndTv:i}=e;return{url:l.relatedVideos(e),key:`related:videos:${t}:${n}:${r}:${i}`}},collectionVideos(e,i,a,c,l,u){let d=n.getVideoSortParam(i),{VIDEO_COLLECTION:f,CLIP_COLLECTION:p,INTERACTIVE:m}=r,h={query:`(${`videos[${f}]`}|${`clips[${p}]`}|${`interactives[${m}]{status:[${o.Published},${o.Draft}]}`})${d?`{${d}}`:``}`,permissionFilterOption:s.FilterOut,...a?{cursor:a}:{}},g=[`folder`,`videos`,e,a,i].filter(e=>!!e).join(`:`);return{url:t.urlBuilder(`{gateway}/v1/objects/${e}/members`,h),key:g,success:c,error:l,always:u}},pointsOfInterest(e,n,r,i,a){let o={query:`{limit:100}`,cursor:n};return{url:t.urlBuilder(`{gateway}/v1/objects/${e}/pointsofinterest`,o),publicUrl:t.urlBuilder(`/api/objects/${e}/pointsofinterest`,o),key:`pointsofinterest:${e}${n?`:${n}`:``}`,success:r,error:i,always:a}},regionAlternatives(e,t,n,r){return{url:`/api/objects/videos/${e}/region-alternatives`,publicUrl:`/api/objects/videos/${e}/region-alternatives`,key:`video:regionAlternatives:${e}`,normalize:!1,success:t,error:n,always:r}}};export{u as t};
|
|
2
|
+
//# sourceMappingURL=C9AjegY32.chunk.js.map
|