@clickview/exchange 0.53.0-rc.2 → 0.53.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{DYfp6qN2.chunk.js → 5GUueKJF.chunk.js} +2 -2
- package/dist/scripts/{DYfp6qN2.chunk.js.map → 5GUueKJF.chunk.js.map} +1 -1
- package/dist/scripts/{Co_iS0bj.chunk.js → 6a3imca3.chunk.js} +2 -2
- package/dist/scripts/{Co_iS0bj.chunk.js.map → 6a3imca3.chunk.js.map} +1 -1
- package/dist/scripts/{C2RRkDlH.chunk.js → 8LCfkX3v.chunk.js} +2 -2
- package/dist/scripts/{C2RRkDlH.chunk.js.map → 8LCfkX3v.chunk.js.map} +1 -1
- package/dist/scripts/{D94KYGFe.chunk.js → 8VNRK8kQ.chunk.js} +2 -2
- package/dist/scripts/{D94KYGFe.chunk.js.map → 8VNRK8kQ.chunk.js.map} +1 -1
- package/dist/scripts/{IqKMNgAo.chunk.js → An2pqf2H.chunk.js} +2 -2
- package/dist/scripts/{IqKMNgAo.chunk.js.map → An2pqf2H.chunk.js.map} +1 -1
- package/dist/scripts/{Da5Jh4ka.chunk.js → B2N_hio2.chunk.js} +2 -2
- package/dist/scripts/{Da5Jh4ka.chunk.js.map → B2N_hio2.chunk.js.map} +1 -1
- package/dist/scripts/{BDJ3lqh6.chunk.js → B2noU3Ys.chunk.js} +2 -2
- package/dist/scripts/{BDJ3lqh6.chunk.js.map → B2noU3Ys.chunk.js.map} +1 -1
- package/dist/scripts/{ClAFGXub.chunk.js → B6XPihYg.chunk.js} +2 -2
- package/dist/scripts/{ClAFGXub.chunk.js.map → B6XPihYg.chunk.js.map} +1 -1
- package/dist/scripts/B6lOCBlR.chunk.js +2 -0
- package/dist/scripts/{DADu9kRW.chunk.js.map → B6lOCBlR.chunk.js.map} +1 -1
- package/dist/scripts/{CBbVIYIX.chunk.js → B83zQU6s.chunk.js} +2 -2
- package/dist/scripts/{CBbVIYIX.chunk.js.map → B83zQU6s.chunk.js.map} +1 -1
- package/dist/scripts/{CL_sQPNd.chunk.js → BEGjWnPj.chunk.js} +2 -2
- package/dist/scripts/{CL_sQPNd.chunk.js.map → BEGjWnPj.chunk.js.map} +1 -1
- package/dist/scripts/{DFm9lfdG.chunk.js → BFHjGFiY.chunk.js} +2 -2
- package/dist/scripts/{DFm9lfdG.chunk.js.map → BFHjGFiY.chunk.js.map} +1 -1
- package/dist/scripts/{D3ZScl6b.chunk.js → BKjwB_St.chunk.js} +2 -2
- package/dist/scripts/{D3ZScl6b.chunk.js.map → BKjwB_St.chunk.js.map} +1 -1
- package/dist/scripts/{Dai_iWJd.chunk.js → BMWm1pN1.chunk.js} +2 -2
- package/dist/scripts/{Dai_iWJd.chunk.js.map → BMWm1pN1.chunk.js.map} +1 -1
- package/dist/scripts/BNoOPqTl.chunk.js +2 -0
- package/dist/scripts/{0l0N-xl4.chunk.js.map → BNoOPqTl.chunk.js.map} +1 -1
- package/dist/scripts/{BJy6bi_f.chunk.js → BSTOTvRj.chunk.js} +2 -2
- package/dist/scripts/{BJy6bi_f.chunk.js.map → BSTOTvRj.chunk.js.map} +1 -1
- package/dist/scripts/{CzoJAXkI.chunk.js → BUa_jfSW.chunk.js} +2 -2
- package/dist/scripts/{CzoJAXkI.chunk.js.map → BUa_jfSW.chunk.js.map} +1 -1
- package/dist/scripts/{BqzK1HZp.chunk.js → BZpkTfVs.chunk.js} +2 -2
- package/dist/scripts/{BqzK1HZp.chunk.js.map → BZpkTfVs.chunk.js.map} +1 -1
- package/dist/scripts/BaIci_F5.chunk.js +2 -0
- package/dist/scripts/{CpOQf5WX.chunk.js.map → BaIci_F5.chunk.js.map} +1 -1
- package/dist/scripts/{CL0AqQPL.chunk.js → BcPl4b_u.chunk.js} +2 -2
- package/dist/scripts/{CL0AqQPL.chunk.js.map → BcPl4b_u.chunk.js.map} +1 -1
- package/dist/scripts/{CG9hOZ8J.chunk.js → BdNTkb7P.chunk.js} +2 -2
- package/dist/scripts/{CG9hOZ8J.chunk.js.map → BdNTkb7P.chunk.js.map} +1 -1
- package/dist/scripts/{Bcnaqlik.chunk.js → Bfe5ljlE.chunk.js} +2 -2
- package/dist/scripts/{Bcnaqlik.chunk.js.map → Bfe5ljlE.chunk.js.map} +1 -1
- package/dist/scripts/BjOBVQha.chunk.js +2 -0
- package/dist/scripts/{C_l_6pBR.chunk.js.map → BjOBVQha.chunk.js.map} +1 -1
- package/dist/scripts/{jNYdSQcK.chunk.js → Bmmwb7k_.chunk.js} +2 -2
- package/dist/scripts/{jNYdSQcK.chunk.js.map → Bmmwb7k_.chunk.js.map} +1 -1
- package/dist/scripts/{D3l9DF6j.chunk.js → BqRp5o8i.chunk.js} +2 -2
- package/dist/scripts/{D3l9DF6j.chunk.js.map → BqRp5o8i.chunk.js.map} +1 -1
- package/dist/scripts/{CwMe9YbU.chunk.js → BsR7WkQ3.chunk.js} +2 -2
- package/dist/scripts/{CwMe9YbU.chunk.js.map → BsR7WkQ3.chunk.js.map} +1 -1
- package/dist/scripts/{BB4BMfoF.chunk.js → BstEXc3S.chunk.js} +2 -2
- package/dist/scripts/{BB4BMfoF.chunk.js.map → BstEXc3S.chunk.js.map} +1 -1
- package/dist/scripts/{UKh27rvb.chunk.js → BywIfJt2.chunk.js} +2 -2
- package/dist/scripts/{UKh27rvb.chunk.js.map → BywIfJt2.chunk.js.map} +1 -1
- package/dist/scripts/{DnnefRY8.chunk.js → C-LPkfPE.chunk.js} +2 -2
- package/dist/scripts/{DnnefRY8.chunk.js.map → C-LPkfPE.chunk.js.map} +1 -1
- package/dist/scripts/{DTbWcpBu.chunk.js → C1Qw3n1d.chunk.js} +2 -2
- package/dist/scripts/{DTbWcpBu.chunk.js.map → C1Qw3n1d.chunk.js.map} +1 -1
- package/dist/scripts/{B1T8c6eo.chunk.js → C3mFDLV3.chunk.js} +2 -2
- package/dist/scripts/{B1T8c6eo.chunk.js.map → C3mFDLV3.chunk.js.map} +1 -1
- package/dist/scripts/{DS5mdrnT.chunk.js → C6fO3h1r.chunk.js} +2 -2
- package/dist/scripts/{DS5mdrnT.chunk.js.map → C6fO3h1r.chunk.js.map} +1 -1
- package/dist/scripts/{ZQHAaDA4.chunk.js → CCMRIPPt.chunk.js} +2 -2
- package/dist/scripts/{ZQHAaDA4.chunk.js.map → CCMRIPPt.chunk.js.map} +1 -1
- package/dist/scripts/{BTcJz7pn.chunk.js → CChgvLUa.chunk.js} +2 -2
- package/dist/scripts/{BTcJz7pn.chunk.js.map → CChgvLUa.chunk.js.map} +1 -1
- package/dist/scripts/{ntpj3L_6.chunk.js → CFW_ZII3.chunk.js} +2 -2
- package/dist/scripts/{ntpj3L_6.chunk.js.map → CFW_ZII3.chunk.js.map} +1 -1
- package/dist/scripts/{BrnEZwBv.chunk.js → CK--g-b2.chunk.js} +2 -2
- package/dist/scripts/{BrnEZwBv.chunk.js.map → CK--g-b2.chunk.js.map} +1 -1
- package/dist/scripts/{BUa-w0OB.chunk.js → CLHdZVLk.chunk.js} +2 -2
- package/dist/scripts/{BUa-w0OB.chunk.js.map → CLHdZVLk.chunk.js.map} +1 -1
- package/dist/scripts/{DZfmH_sm.chunk.js → CPh1-eHt.chunk.js} +2 -2
- package/dist/scripts/{DZfmH_sm.chunk.js.map → CPh1-eHt.chunk.js.map} +1 -1
- package/dist/scripts/{Do_JksC6.chunk.js → CR5m94hr.chunk.js} +2 -2
- package/dist/scripts/{Do_JksC6.chunk.js.map → CR5m94hr.chunk.js.map} +1 -1
- package/dist/scripts/{AqddT7uG.chunk.js → CRLSpEeB.chunk.js} +2 -2
- package/dist/scripts/{AqddT7uG.chunk.js.map → CRLSpEeB.chunk.js.map} +1 -1
- package/dist/scripts/{B12bgIDA.chunk.js → CRucttfI.chunk.js} +2 -2
- package/dist/scripts/{B12bgIDA.chunk.js.map → CRucttfI.chunk.js.map} +1 -1
- package/dist/scripts/{BQzfQiXW.chunk.js → CShgo4dC.chunk.js} +2 -2
- package/dist/scripts/{BQzfQiXW.chunk.js.map → CShgo4dC.chunk.js.map} +1 -1
- package/dist/scripts/{ZubgjRBI.chunk.js → CUzXnfFV.chunk.js} +2 -2
- package/dist/scripts/{ZubgjRBI.chunk.js.map → CUzXnfFV.chunk.js.map} +1 -1
- package/dist/scripts/CYOWjQoo.chunk.js +2 -0
- package/dist/scripts/{DtSsOmYM.chunk.js.map → CYOWjQoo.chunk.js.map} +1 -1
- package/dist/scripts/{By-zFi71.chunk.js → CfBC-dR0.chunk.js} +2 -2
- package/dist/scripts/{By-zFi71.chunk.js.map → CfBC-dR0.chunk.js.map} +1 -1
- package/dist/scripts/{CCNNRpT4.chunk.js → CkIeXG6b.chunk.js} +3 -3
- package/dist/scripts/{CCNNRpT4.chunk.js.map → CkIeXG6b.chunk.js.map} +1 -1
- package/dist/scripts/{dkeoKe44.chunk.js → Cl6iPpcm.chunk.js} +2 -2
- package/dist/scripts/{dkeoKe44.chunk.js.map → Cl6iPpcm.chunk.js.map} +1 -1
- package/dist/scripts/{C4g2BzSP.chunk.js → ClUsbA9Y.chunk.js} +2 -2
- package/dist/scripts/{C4g2BzSP.chunk.js.map → ClUsbA9Y.chunk.js.map} +1 -1
- package/dist/scripts/{CqLsOdMW.chunk.js → CmOtOw_r.chunk.js} +2 -2
- package/dist/scripts/{CqLsOdMW.chunk.js.map → CmOtOw_r.chunk.js.map} +1 -1
- package/dist/scripts/{7kGPLcjV.chunk.js → CnY4exCI.chunk.js} +2 -2
- package/dist/scripts/{7kGPLcjV.chunk.js.map → CnY4exCI.chunk.js.map} +1 -1
- package/dist/scripts/CsQeMool.chunk.js +2 -0
- package/dist/scripts/{Cd3-y22Z.chunk.js.map → CsQeMool.chunk.js.map} +1 -1
- package/dist/scripts/CvG9Rmqs.chunk.js +2 -0
- package/dist/scripts/{B8wmZM8_.chunk.js.map → CvG9Rmqs.chunk.js.map} +1 -1
- package/dist/scripts/{BaT3mEZj.chunk.js → CxC74ItP.chunk.js} +2 -2
- package/dist/scripts/{BaT3mEZj.chunk.js.map → CxC74ItP.chunk.js.map} +1 -1
- package/dist/scripts/{CNPIxxmg.chunk.js → Cy7IUYF-.chunk.js} +2 -2
- package/dist/scripts/{CNPIxxmg.chunk.js.map → Cy7IUYF-.chunk.js.map} +1 -1
- package/dist/scripts/{U--YIgy7.chunk.js → D0ez9lcb.chunk.js} +2 -2
- package/dist/scripts/{U--YIgy7.chunk.js.map → D0ez9lcb.chunk.js.map} +1 -1
- package/dist/scripts/{Be7jUiN-.chunk.js → D4mm5Ivp.chunk.js} +2 -2
- package/dist/scripts/{Be7jUiN-.chunk.js.map → D4mm5Ivp.chunk.js.map} +1 -1
- package/dist/scripts/{DEle-NIZ.chunk.js → D8qOjT5-.chunk.js} +2 -2
- package/dist/scripts/{DEle-NIZ.chunk.js.map → D8qOjT5-.chunk.js.map} +1 -1
- package/dist/scripts/{CTRlFXGF.chunk.js → DAQLTaLS.chunk.js} +2 -2
- package/dist/scripts/{CTRlFXGF.chunk.js.map → DAQLTaLS.chunk.js.map} +1 -1
- package/dist/scripts/{DcF9nran.chunk.js → DBXJjLCV.chunk.js} +2 -2
- package/dist/scripts/{DcF9nran.chunk.js.map → DBXJjLCV.chunk.js.map} +1 -1
- package/dist/scripts/{rXZnQHdQ.chunk.js → DEZb99RP.chunk.js} +2 -2
- package/dist/scripts/{rXZnQHdQ.chunk.js.map → DEZb99RP.chunk.js.map} +1 -1
- package/dist/scripts/{WFbXX0u1.chunk.js → DHRuhDvn.chunk.js} +2 -2
- package/dist/scripts/{WFbXX0u1.chunk.js.map → DHRuhDvn.chunk.js.map} +1 -1
- package/dist/scripts/{B3s6jAFl.chunk.js → DK6DK5bG.chunk.js} +2 -2
- package/dist/scripts/{B3s6jAFl.chunk.js.map → DK6DK5bG.chunk.js.map} +1 -1
- package/dist/scripts/{B8lGJWZL.chunk.js → DKKFbyeH.chunk.js} +2 -2
- package/dist/scripts/{B8lGJWZL.chunk.js.map → DKKFbyeH.chunk.js.map} +1 -1
- package/dist/scripts/{4pboFAH2.chunk.js → DOaducO2.chunk.js} +2 -2
- package/dist/scripts/{4pboFAH2.chunk.js.map → DOaducO2.chunk.js.map} +1 -1
- package/dist/scripts/{tDL65UQp.chunk.js → DOiD6is_.chunk.js} +2 -2
- package/dist/scripts/{tDL65UQp.chunk.js.map → DOiD6is_.chunk.js.map} +1 -1
- package/dist/scripts/{8ED1-ESq.chunk.js → DTK-qxAt.chunk.js} +2 -2
- package/dist/scripts/{8ED1-ESq.chunk.js.map → DTK-qxAt.chunk.js.map} +1 -1
- package/dist/scripts/{Dqn_DM3j.chunk.js → DUBTSAcY.chunk.js} +2 -2
- package/dist/scripts/{Dqn_DM3j.chunk.js.map → DUBTSAcY.chunk.js.map} +1 -1
- package/dist/scripts/{CyDCS7Ld.chunk.js → D_LdmZHS.chunk.js} +2 -2
- package/dist/scripts/{CyDCS7Ld.chunk.js.map → D_LdmZHS.chunk.js.map} +1 -1
- package/dist/scripts/{p02rVyN7.chunk.js → DclQzF2e.chunk.js} +2 -2
- package/dist/scripts/{p02rVyN7.chunk.js.map → DclQzF2e.chunk.js.map} +1 -1
- package/dist/scripts/{DcCFRClj.chunk.js → DdtN_4m8.chunk.js} +2 -2
- package/dist/scripts/{DcCFRClj.chunk.js.map → DdtN_4m8.chunk.js.map} +1 -1
- package/dist/scripts/{CErthkSN.chunk.js → Dl3gfAlJ.chunk.js} +2 -2
- package/dist/scripts/{CErthkSN.chunk.js.map → Dl3gfAlJ.chunk.js.map} +1 -1
- package/dist/scripts/{DjBZy08c.chunk.js → DmRO_2e4.chunk.js} +2 -2
- package/dist/scripts/{DjBZy08c.chunk.js.map → DmRO_2e4.chunk.js.map} +1 -1
- package/dist/scripts/{Cvd9v1E1.chunk.js → DmokEdyU.chunk.js} +2 -2
- package/dist/scripts/{Cvd9v1E1.chunk.js.map → DmokEdyU.chunk.js.map} +1 -1
- package/dist/scripts/DmspKarQ.chunk.js +2 -0
- package/dist/scripts/{2CBDy9LJ.chunk.js.map → DmspKarQ.chunk.js.map} +1 -1
- package/dist/scripts/{FNG4Y7Lo.chunk.js → Dp5BFZBL.chunk.js} +2 -2
- package/dist/scripts/{FNG4Y7Lo.chunk.js.map → Dp5BFZBL.chunk.js.map} +1 -1
- package/dist/scripts/{BfXH3uXe.chunk.js → Dq6x6nwc.chunk.js} +2 -2
- package/dist/scripts/{BfXH3uXe.chunk.js.map → Dq6x6nwc.chunk.js.map} +1 -1
- package/dist/scripts/{B4yjmogh.chunk.js → DqA_gGV1.chunk.js} +2 -2
- package/dist/scripts/{B4yjmogh.chunk.js.map → DqA_gGV1.chunk.js.map} +1 -1
- package/dist/scripts/{CrO_Xwqt.chunk.js → EuVY33AH.chunk.js} +2 -2
- package/dist/scripts/{CrO_Xwqt.chunk.js.map → EuVY33AH.chunk.js.map} +1 -1
- package/dist/scripts/{BI-Q7Pp8.chunk.js → Gydr0_mB.chunk.js} +2 -2
- package/dist/scripts/{BI-Q7Pp8.chunk.js.map → Gydr0_mB.chunk.js.map} +1 -1
- package/dist/scripts/{BSl_jK0D.chunk.js → Gz6brJ7U.chunk.js} +2 -2
- package/dist/scripts/{BSl_jK0D.chunk.js.map → Gz6brJ7U.chunk.js.map} +1 -1
- package/dist/scripts/{C09aCK-h.chunk.js → LLIxc2ur.chunk.js} +2 -2
- package/dist/scripts/{C09aCK-h.chunk.js.map → LLIxc2ur.chunk.js.map} +1 -1
- package/dist/scripts/{BtGKm2NN.chunk.js → RTHvayT_.chunk.js} +2 -2
- package/dist/scripts/{BtGKm2NN.chunk.js.map → RTHvayT_.chunk.js.map} +1 -1
- package/dist/scripts/{BIjZARsn.chunk.js → S3PkirNo.chunk.js} +2 -2
- package/dist/scripts/{BIjZARsn.chunk.js.map → S3PkirNo.chunk.js.map} +1 -1
- package/dist/scripts/{CPqMEQCO.chunk.js → Ui4fzBVF.chunk.js} +2 -2
- package/dist/scripts/{CPqMEQCO.chunk.js.map → Ui4fzBVF.chunk.js.map} +1 -1
- package/dist/scripts/{b5m_EArj.chunk.js → aKxmsW8B.chunk.js} +2 -2
- package/dist/scripts/{b5m_EArj.chunk.js.map → aKxmsW8B.chunk.js.map} +1 -1
- package/dist/scripts/{Bdc13avs.chunk.js → aNB3gltW.chunk.js} +2 -2
- package/dist/scripts/{Bdc13avs.chunk.js.map → aNB3gltW.chunk.js.map} +1 -1
- package/dist/scripts/{app-C2tLApiH.js → app-BPynVn5M.js} +3 -3
- package/dist/scripts/{app-C2tLApiH.js.map → app-BPynVn5M.js.map} +1 -1
- package/dist/scripts/{D_MsBVo0.chunk.js → kUEqukPF.chunk.js} +2 -2
- package/dist/scripts/{D_MsBVo0.chunk.js.map → kUEqukPF.chunk.js.map} +1 -1
- package/dist/scripts/{nRcKatki.chunk.js → lHEf7Dbp.chunk.js} +2 -2
- package/dist/scripts/{nRcKatki.chunk.js.map → lHEf7Dbp.chunk.js.map} +1 -1
- package/dist/scripts/{CeF-ZKL3.chunk.js → m2GRn15O.chunk.js} +2 -2
- package/dist/scripts/{CeF-ZKL3.chunk.js.map → m2GRn15O.chunk.js.map} +1 -1
- package/dist/scripts/{CHSGgiBB.chunk.js → wrAdddK5.chunk.js} +2 -2
- package/dist/scripts/{CHSGgiBB.chunk.js.map → wrAdddK5.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/0l0N-xl4.chunk.js +0 -2
- package/dist/scripts/2CBDy9LJ.chunk.js +0 -2
- package/dist/scripts/B8wmZM8_.chunk.js +0 -2
- package/dist/scripts/C_l_6pBR.chunk.js +0 -2
- package/dist/scripts/Cd3-y22Z.chunk.js +0 -2
- package/dist/scripts/CpOQf5WX.chunk.js +0 -2
- package/dist/scripts/DADu9kRW.chunk.js +0 -2
- package/dist/scripts/DtSsOmYM.chunk.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as e}from"./app-BPynVn5M.js";var x={exports:{}},o;function u(){return o||(o=1,(function(r){function s(){return r.exports=s=Object.assign?Object.assign.bind():function(i){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(i[a]=n[a])}return i},r.exports.__esModule=!0,r.exports.default=r.exports,s.apply(null,arguments)}r.exports=s,r.exports.__esModule=!0,r.exports.default=r.exports})(x)),x.exports}function f(r){return e.jsxs("svg",{...r,children:[e.jsx("defs",{children:e.jsx("path",{id:"a",d:"M3 12c0-2.44 4.5-6.025 9.003-6C16.494 6.025 21 9.614 21 12c0 2.45-4.504 6-9 6-4.466 0-9-3.586-9-6m1 0c0 1.804 4.042 5 8 5 3.989 0 8-3.161 8-5 0-1.778-4.017-4.977-8.003-5C8.006 6.978 4 10.17 4 12m8 4a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6",fill:"currentColor"})}),e.jsx("use",{xlinkHref:"#a",fill:"#333"})]})}export{f as V,u as r};
|
|
2
|
+
//# sourceMappingURL=DTK-qxAt.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"DTK-qxAt.chunk.js","sources":["../../../../../node_modules/@babel/runtime/helpers/extends.js","../../../../libs/shared/src/images/svg/actions/VisibleOnSvg.tsx"],"sourcesContent":["function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import React from 'react';\n\nexport function VisibleOnSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <defs>\n <path\n id='a'\n d='M3 12c0-2.44 4.5-6.025 9.003-6C16.494 6.025 21 9.614 21 12c0 2.45-4.504 6-9 6-4.466 0-9-3.586-9-6m1 0c0 1.804 4.042 5 8 5 3.989 0 8-3.161 8-5 0-1.778-4.017-4.977-8.003-5C8.006 6.978 4 10.17 4 12m8 4a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6'\n fill='currentColor'\n />\n </defs>\n <use xlinkHref='#a' fill='#333' />\n </svg>\n );\n}\n"],"names":["_extends","module","n","e","t","r","VisibleOnSvg","props","jsxs","jsx"],"mappings":"oGAAA,SAASA,GAAW,CAClB,OAAOC,EAAA,QAAiBD,EAAW,OAAO,OAAS,OAAO,OAAO,OAAS,SAAUE,EAAG,CACrF,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAI,UAAUD,CAAC,EACnB,QAASE,KAAKD,GAAI,CAAA,GAAI,eAAe,KAAKA,EAAGC,CAAC,IAAMH,EAAEG,CAAC,EAAID,EAAEC,CAAC,EACpE,CACI,OAAOH,CACX,EAAKD,qBAA4B,GAAMA,EAAO,QAAQ,QAAaA,EAAO,QAASD,EAAS,MAAM,KAAM,SAAS,CACjH,CACAC,EAAA,QAAiBD,EAAUC,EAAA,QAAA,WAA4B,GAAMA,EAAO,QAAQ,QAAaA,EAAO,wBCPzF,SAASK,EAAaC,EAAsC,CACjE,OACEC,EAAAA,KAAC,MAAA,CAAK,GAAGD,EACP,SAAA,CAAAE,MAAC,OAAA,CACC,SAAAA,EAAAA,IAAC,OAAA,CACC,GAAG,IACH,EAAE,qQACF,KAAK,cAAA,CAAA,EAET,EACAA,EAAAA,IAAC,MAAA,CAAI,UAAU,KAAK,KAAK,MAAA,CAAO,CAAA,EAClC,CAEJ","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Z as me,T as te,j as n,K as be,r as I,w as ge,A as pe,R as ue,B,a1 as ye,L as v,x as G,aQ as le,U as ve,a3 as N,a2 as xe,an as Te,P as Le,c as J,a5 as Ne,aR as de,M as z,aD as Ae}from"./app-C2tLApiH.js";import{l as Ce}from"./BI-Q7Pp8.chunk.js";import{u as Se,F as K,l as M,a as _e}from"./ZubgjRBI.chunk.js";import{A as je}from"./BIjZARsn.chunk.js";import{C as Pe}from"./DEle-NIZ.chunk.js";import{H as ce}from"./Kj832An8.chunk.js";import{L as Y}from"./BtGKm2NN.chunk.js";import{V as ke}from"./ClAFGXub.chunk.js";import{u as Fe}from"./BQzfQiXW.chunk.js";import{u as Ee}from"./C4g2BzSP.chunk.js";import{V as Q}from"./nRcKatki.chunk.js";import"./8ED1-ESq.chunk.js";import"./BlDVEZsX.chunk.js";import"./pkzD5BEm.chunk.js";import"./Bdc13avs.chunk.js";function ee(e,t,r){if(te.isEqual(e.id,t))return[e,r];const i=e.children;if(!i||!i.length)return[null,null];for(let a=0;a<i.length;a++){const[o,c]=ee(i[a],t,[...r,e]);if(o)return[o,c]}return[null,null]}const qe=7,m={find(e,t){if(!(!e||!e.children||!e.children.length))for(let r=0;r<e.children.length;r++){const[i]=ee(e.children[r],t,[]);if(i)return i}},getPath(e,t){if(!(!e||!e.children||!e.children.length))for(let r=0;r<e.children.length;r++){const[,i]=ee(e.children[r],t,[]);if(i!=null&&i.length)return i}},getParent(e,t){const r=m.getPath(e,t);return r!=null&&r.length?r[r.length-1]:null},convertNestedObjectToTree(e){var r;const t={...e.data,children:e.children};return(r=t.children)!=null&&r.length&&(t.children=t.children.map(m.convertNestedObjectToTree)),t},findDepth(e,t,r=0){var a,o;if(!e||e.length===0)return 0;let i=0;for(const c of e){if(((o=(a=c.data)==null?void 0:a.id)==null?void 0:o.toString())===t.toString())return r;const f=m.findDepth(c.children,t,r+1);if(f>0){i=f;break}}return i},findMaxChildDepth(e,t=0){if(!e||e.length===0)return t;let r=t;for(const i of e){const a=m.findMaxChildDepth(i.children,t+1);r=Math.max(r,a)}return r},findTargetNode(e,t){var r,i;if(!e||e.length===0)return null;for(const a of e){if(((i=(r=a.data)==null?void 0:r.id)==null?void 0:i.toString())===t.toString())return a;const o=m.findTargetNode(a.children,t);if(o!==null)return o}return null},isMaxDepth(e,t,r,i=qe){const a=m.findTargetNode(e,t),o=m.findMaxChildDepth(a.children),c=m.findDepth(e,r);return o+c>=i},flatten(e){if(!e)return[];const t=[];function r(i){t.push(me.omit(i,["children"])),i.children.forEach(r)}return e.children.forEach(r),t}},Ie="_tree_u0qyb_1",Re="_text_u0qyb_1",Oe="_chevron_u0qyb_4",De="_disabled_u0qyb_163",Me="_root_u0qyb_166",Ue="_selected_u0qyb_172",$e="_actions_u0qyb_175",we="_node_u0qyb_185",He="_noActions_u0qyb_188",b={tree:Ie,text:Re,chevron:Oe,disabled:De,root:Me,selected:Ue,actions:$e,node:we,noActions:He};function Ve(e){var r;function t(){let i=`${b.text} clamp-4`;return e.className&&(i+=` ${e.className}`),i}if(e.isDisabled){const i=typeof e.disabledTooltip=="string"?e.disabledTooltip:(r=e.disabledTooltip)==null?void 0:r.call(e,e.tree);return n.jsx(be,{title:i,spanHack:!0,spanHackClassName:"d-inline-block flex-grow-1",children:n.jsx("span",{className:`${t()} text-secondary ${b.disabled}`,children:e.text})})}return n.jsx("div",{className:t(),children:e.text})}const We="tree-actions";fe.defaultProps={selectedLinkClassName:b.selected};function fe(e){const{tree:t,selectedIds:r,getAppLink:i,onSelect:a,isDisabled:o,isClickDisabled:c,actions:f,isDropdown:d}=e,h=I.useRef(null),x=I.useMemo(()=>r==null?void 0:r.some(l=>m.find(t,l)),[t,r]),R=e.openDepth&&e.depth<e.openDepth,[g,C]=I.useState(x||R),S=r==null?void 0:r.some(l=>te.isEqual(t.id,l));let _=!!t.children&&!!t.children.length;e.maxDisplayDepth&&_&&(_=e.depth<e.maxDisplayDepth),I.useEffect(()=>{if(!h.current||!d)return;const l=O=>{O.stopPropagation(),j()};return h.current.addEventListener("click",l),()=>{h.current&&h.current.removeEventListener("click",l)}},[h.current,a]),I.useEffect(()=>{var l;e.multiSelect||g&&(x||S||!((l=e.selectedIds)!=null&&l.length)&&(o!=null&&o(e.tree))||R||C(!1))},[r]);function j(){if(!(c!=null&&c(t))){if(e.multiSelect||C(!g),i){pe.trigger(i(t));return}if(o!=null&&o(t)){a(null);return}a==null||a(t)}}function w(l){if(l.stopPropagation(),e.multiSelect){C(!g);return}j()}function H(){let l=`py-1 d-flex align-items-center w-100 position-relative ${b.node}`;return S&&(l+=" "+e.selectedLinkClassName),f!=null&&f.length||(l+=" "+b.noActions),x&&e.multiSelect&&(l+=" text-underline fst-italic"),l}return e.maxDisplayDepth&&e.depth>e.maxDisplayDepth?n.jsx(n.Fragment,{}):n.jsx("li",{className:`position-relative ${g?"":b.collapsed} ${e.isRoot?b.root:""}`,children:n.jsxs("div",{className:"position-relative",children:[n.jsxs(ge,{className:H(),onClick:d?null:j,ref:h,children:[_&&n.jsx("div",{className:b.chevron,onClick:w,children:n.jsx(Pe,{direction:g?"down":"right"})}),n.jsx(Ve,{tree:t,text:t.name||t.description,isDisabled:(o==null?void 0:o(t))||(c==null?void 0:c(t)),disabledTooltip:e.disabledTooltip})]}),!!e.actions&&n.jsx(je,{className:b.actions,actions:f==null?void 0:f.map(l=>({...l,appLink:l.getAppLink(t)})),actionsDropdownClassName:`btn btn-light ${We} py-0`}),g&&n.jsx(he,{...e,isChild:!0,depth:e.depth+1},t.id)]})})}function he(e){const{tree:t,...r}=e;return!t||!t.children?n.jsx(n.Fragment,{}):n.jsx("ul",{className:`m-0 p-0 list-unstyled ${b.tree}`,children:t.children.map((i,a)=>n.jsx(fe,{tree:i,...r,isRoot:!e.isChild,depth:e.depth||0},a))})}const T="libraries.addToLibraryForm",X=v.encloseNamespace(T);function Be(e){var o,c,f;const t=Se(),r=!t.values.library.canAddContent,i=(o=e.videoLibraries)==null?void 0:o.find(d=>d.id===t.values.library.id),a=ue.useMemo(()=>({children:e.getCategoryTree(t.values.library.id).map(m.convertNestedObjectToTree)}),[t.values.library.id]);return n.jsxs(n.Fragment,{children:[i&&n.jsx("div",{className:"alert alert-info",children:n.jsx(B,{namespace:T,phrase:"alreadyInLibrary",options:{library:t.values.library.name}})}),r&&n.jsx("p",{children:n.jsx(B,{namespace:T,phrase:"sendLibraryRequest",options:{video:e.video.name}})}),n.jsxs(ye,{children:[e.libraries.length>1&&n.jsx(K,{as:"select",label:X("selectLibrary"),name:"library",value:((c=t.values.library)==null?void 0:c.id)??"",className:(f=t.values.library)!=null&&f.id?"":"text-secondary",showRequiredStar:!0,onChange:d=>{t.setFieldValue("folder",null);const h=d.target.value;t.setFieldValue("library",e.libraries.find(x=>x.id.toString()===h.toString()))},children:e.libraries.map(d=>n.jsx("option",{value:d.id,className:"text-dark",children:d.name},d.id))}),n.jsx(K,{label:X("selectFolder"),name:"folder",showRequiredStar:!0,disabled:!t.values.library,children:()=>{var d;return n.jsx(Ce.Scrollbars,{autoHeight:!0,autoHeightMax:300,className:"border rounded-3",children:n.jsx(he,{tree:a,onSelect:h=>t.setFieldValue("folder",h),isDisabled:e.isFolderDisabled,disabledTooltip:v.getPhrase(T,"disabledFolder"),selectedIds:(d=t.values.folder)!=null&&d.id?[t.values.folder.id]:void 0,selectedLinkClassName:"bg-light"})})}}),!!t.values.folder&&n.jsx("p",{className:"mt-n2",children:n.jsx(B,{namespace:T,phrase:r?"requestTo":"addTo",options:{folder:t.values.folder.name}})}),r&&n.jsx(K,{label:v.getPhrase(T,"comment"),as:"textarea",name:"comment",id:"comment",placeholder:v.getPhrase(T,"commentPlaceholder"),value:t.values.comment}),n.jsxs(G,{children:[n.jsx(G.Cancel,{onClick:e.closePopup}),n.jsx(G.Submit,{variant:"dark",text:X("addToLibrary")})]})]})]})}const Ge={sort(e){return e!=null&&e.length?e.sort((t,r)=>{const i=t.isSharedLibrary?"shared_library":t.type,a=r.isSharedLibrary?"shared_library":r.type;return i===a?t.name.localeCompare(r.name):i==="custom_library"||i==="shared_library"&&a!=="custom_library"||i==="hosted_library"&&a!=="custom_library"&&a!=="shared_library"?-1:1}):[]},hasTwigOrTigtag(e,t){if(!t)return{hasTwig:!1,hasTigtag:!1};if(!t.isAuthenticated){const a=t.contentRegion===le.UK||t.contentRegion===le.SCOT;return{hasTwig:a,hasTigtag:a}}if(!e)return{hasTwig:!1,hasTigtag:!1};let r=!1,i=!1;for(const a of e)if(a.id.toString()===ce.Libraries.TWIG?r=!0:a.id.toString()===ce.Libraries.TIGTAG&&(i=!0),r&&i)break;return{hasTwig:r,hasTigtag:i}}},Z="libraries.validation",Je=M.object().shape({comment:M.string().nullable().max(512,()=>v.getPhrase(Z,"commentExceeds")),library:M.object().required(()=>v.getPhrase(Z,"libraryRequired")).nullable(),folder:M.object().required(()=>v.getPhrase(Z,"folderRequired")).nullable()});var $=(e=>(e[e.MasterVideo=1]="MasterVideo",e[e.MasterClip=2]="MasterClip",e[e.MasterInteractive=3]="MasterInteractive",e))($||{});const U=v.encloseNamespace("shared.errorMessageHelper"),ze={"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"},Ke={"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"},Ye={libraryApiError(e){var r;const t=ze[(r=e==null?void 0:e.responseJSON)==null?void 0:r.type];return U(t||"somethingWentWrong")},inviteColleagueError(e){var r;const t=Ke[(r=e==null?void 0:e.responseJSON)==null?void 0:r.type];return U(t||"somethingWentWrong")}},y={buildOpenAppLinkUrl(e,t,r){return ve.urlBuilder(`${e}/open`,{appLink:t,product:r})},buildOpenVideoUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`video:${t}`,r)},buildOpenClipUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`clip:${t}`,r)},buildOpenInteractiveUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`interactive:${t}`,r)},buildOpenTopicUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`topic:${t}`,r)},buildOpenSeriesUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`series:${t}`,r)},buildOpenPlaylistUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`playlist:${t}`,r)},buildOpenCategoryUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`category:${t}`,r)},buildOpenLibraryFolderUrl(e,t,r){const i=`library:${t.libraryId}:folder:${t.folderId}`;return y.buildOpenAppLinkUrl(e,i,r)}},Qe={[z.Video]:$.MasterVideo,[z.Clip]:$.MasterClip,[z.Interactive]:$.MasterInteractive},Xe="libraries.addToLibrary",A=v.encloseNamespace(Xe);function mt(e){var re,ie,ne;const t=N(Ne.currentUser()),r=N(Y.librariesWithCategories()),i=N(Y.libraryRequestLibraries()),a=Q.getVideoRequest(e.id,e.typeId),o=N(a),f=(Q.isClip(o.data)||Q.isInteractive(o.data))&&((re=o.data)==null?void 0:re._parentVideo),d=N(f&&ke.video(f.id)),{loading:h,handleGenerateReportError:x}=Ee(),R=N(Ae.config()),g=ue.useMemo(()=>Ge.sort(i.data),[i.data]),C=xe(),S=Fe(),_=!!t.data&&Te.getOrSetSortType(t.data.id);function j(){var p,L,D,P,k,ae,oe,se;let s=null,u=(D=J.first((L=(p=o.data)==null?void 0:p.libraries)==null?void 0:L.data))==null?void 0:D.id;if(u&&((P=o.data.categories.data)!=null&&P.length)){const F=o.data.categories.data.find(V=>{var E,q;return(q=(E=V.libraries)==null?void 0:E.data)==null?void 0:q.find(W=>W.id.toString()===u.toString())});F&&(s=F.id)}if(!u&&(u=(oe=J.first((ae=(k=d.data)==null?void 0:k.libraries)==null?void 0:ae.data))==null?void 0:oe.id,u&&((se=d.data.categories.data)!=null&&se.length))){const F=d.data.categories.data.find(V=>{var E,q;return(q=(E=V.libraries)==null?void 0:E.data)==null?void 0:q.find(W=>W.id.toString()===u.toString())});F&&(s=F.id)}return{sourceLibraryId:u?+u:null,sourceCategoryId:s?+s:null}}function w(s,u){const{sourceLibraryId:p,sourceCategoryId:L}=j(),D={objectId:e.id.toString(),objectType:Qe[e.typeId],message:s.comment,sourceLibraryId:p,destinationLibraryId:+s.library.id,metadata:{destinationCategoryId:+s.folder.id,sourceCategoryId:L}};C(Y.addToLibrary(D,_)).then(()=>{s.library.canAddContent?S.success({type:de.Success,heading:"",message:A("addToLibrarySuccess",{folder:s.folder.name,video:o.data.name,escapeText:!0}),...e.folderAppLink?{appLink:{...e.folderAppLink,args:[s.library.id,s.folder.id,te.slugify(s.folder.name)]},appLinkText:A("goToFolder",{folder:s.folder.name}),appLinkClassName:"info-link"}:{extLink:y.buildOpenLibraryFolderUrl(R.data.launchUrl,{libraryId:s.library.id,folderId:s.folder.id}),extLinkText:A("goToFolder",{folder:s.folder.name}),extLinkClassName:"info-link"}}):S.success({type:de.Pending,heading:A("pendingApproval"),message:A("libraryRequestSent",{library:s.library.name,escapeText:!0})})}).catch(P=>{const k=Ye.libraryApiError(P);x(P,k,k),u()}).finally(()=>{e.closePopup()})}function H(s){var u;return(u=r.data.find(p=>p.data.id.toString()===s.toString()))==null?void 0:u.children}function l(s){var u,p;return!!((p=(u=o.data.categories)==null?void 0:u.data)!=null&&p.find(L=>L.id===s.id))}const O=i.data&&o.data&&r.data;return n.jsx(Le,{title:A("addToLibrary"),closePopup:e.closePopup,showLoadingSpinner:!O||h,children:O&&n.jsx(_e,{initialValues:{library:J.first(g),folder:null,comment:""},validationSchema:Je,onSubmit:w,children:n.jsx(Be,{libraries:g,closePopup:e.closePopup,isFolderDisabled:l,video:o.data,videoLibraries:(ne=(ie=o.data)==null?void 0:ie.libraries)==null?void 0:ne.data,getCategoryTree:H})})})}export{mt as AddToLibraryView};
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{Z as me,T as te,j as n,K as be,r as I,w as ge,A as pe,R as ue,B,a1 as ye,L as v,x as G,aQ as le,U as ve,a3 as N,a2 as xe,an as Te,P as Le,c as J,a5 as Ne,aR as de,M as z,aD as Ae}from"./app-BPynVn5M.js";import{l as Ce}from"./Gydr0_mB.chunk.js";import{u as Se,F as K,l as M,a as _e}from"./CUzXnfFV.chunk.js";import{A as je}from"./S3PkirNo.chunk.js";import{C as Pe}from"./D8qOjT5-.chunk.js";import{H as ce}from"./Kj832An8.chunk.js";import{L as Y}from"./RTHvayT_.chunk.js";import{V as ke}from"./B6XPihYg.chunk.js";import{u as Fe}from"./CShgo4dC.chunk.js";import{u as Ee}from"./ClUsbA9Y.chunk.js";import{V as Q}from"./lHEf7Dbp.chunk.js";import"./DTK-qxAt.chunk.js";import"./BlDVEZsX.chunk.js";import"./pkzD5BEm.chunk.js";import"./aNB3gltW.chunk.js";function ee(e,t,r){if(te.isEqual(e.id,t))return[e,r];const i=e.children;if(!i||!i.length)return[null,null];for(let a=0;a<i.length;a++){const[o,c]=ee(i[a],t,[...r,e]);if(o)return[o,c]}return[null,null]}const qe=7,m={find(e,t){if(!(!e||!e.children||!e.children.length))for(let r=0;r<e.children.length;r++){const[i]=ee(e.children[r],t,[]);if(i)return i}},getPath(e,t){if(!(!e||!e.children||!e.children.length))for(let r=0;r<e.children.length;r++){const[,i]=ee(e.children[r],t,[]);if(i!=null&&i.length)return i}},getParent(e,t){const r=m.getPath(e,t);return r!=null&&r.length?r[r.length-1]:null},convertNestedObjectToTree(e){var r;const t={...e.data,children:e.children};return(r=t.children)!=null&&r.length&&(t.children=t.children.map(m.convertNestedObjectToTree)),t},findDepth(e,t,r=0){var a,o;if(!e||e.length===0)return 0;let i=0;for(const c of e){if(((o=(a=c.data)==null?void 0:a.id)==null?void 0:o.toString())===t.toString())return r;const f=m.findDepth(c.children,t,r+1);if(f>0){i=f;break}}return i},findMaxChildDepth(e,t=0){if(!e||e.length===0)return t;let r=t;for(const i of e){const a=m.findMaxChildDepth(i.children,t+1);r=Math.max(r,a)}return r},findTargetNode(e,t){var r,i;if(!e||e.length===0)return null;for(const a of e){if(((i=(r=a.data)==null?void 0:r.id)==null?void 0:i.toString())===t.toString())return a;const o=m.findTargetNode(a.children,t);if(o!==null)return o}return null},isMaxDepth(e,t,r,i=qe){const a=m.findTargetNode(e,t),o=m.findMaxChildDepth(a.children),c=m.findDepth(e,r);return o+c>=i},flatten(e){if(!e)return[];const t=[];function r(i){t.push(me.omit(i,["children"])),i.children.forEach(r)}return e.children.forEach(r),t}},Ie="_tree_u0qyb_1",Re="_text_u0qyb_1",Oe="_chevron_u0qyb_4",De="_disabled_u0qyb_163",Me="_root_u0qyb_166",Ue="_selected_u0qyb_172",$e="_actions_u0qyb_175",we="_node_u0qyb_185",He="_noActions_u0qyb_188",b={tree:Ie,text:Re,chevron:Oe,disabled:De,root:Me,selected:Ue,actions:$e,node:we,noActions:He};function Ve(e){var r;function t(){let i=`${b.text} clamp-4`;return e.className&&(i+=` ${e.className}`),i}if(e.isDisabled){const i=typeof e.disabledTooltip=="string"?e.disabledTooltip:(r=e.disabledTooltip)==null?void 0:r.call(e,e.tree);return n.jsx(be,{title:i,spanHack:!0,spanHackClassName:"d-inline-block flex-grow-1",children:n.jsx("span",{className:`${t()} text-secondary ${b.disabled}`,children:e.text})})}return n.jsx("div",{className:t(),children:e.text})}const We="tree-actions";fe.defaultProps={selectedLinkClassName:b.selected};function fe(e){const{tree:t,selectedIds:r,getAppLink:i,onSelect:a,isDisabled:o,isClickDisabled:c,actions:f,isDropdown:d}=e,h=I.useRef(null),x=I.useMemo(()=>r==null?void 0:r.some(l=>m.find(t,l)),[t,r]),R=e.openDepth&&e.depth<e.openDepth,[g,C]=I.useState(x||R),S=r==null?void 0:r.some(l=>te.isEqual(t.id,l));let _=!!t.children&&!!t.children.length;e.maxDisplayDepth&&_&&(_=e.depth<e.maxDisplayDepth),I.useEffect(()=>{if(!h.current||!d)return;const l=O=>{O.stopPropagation(),j()};return h.current.addEventListener("click",l),()=>{h.current&&h.current.removeEventListener("click",l)}},[h.current,a]),I.useEffect(()=>{var l;e.multiSelect||g&&(x||S||!((l=e.selectedIds)!=null&&l.length)&&(o!=null&&o(e.tree))||R||C(!1))},[r]);function j(){if(!(c!=null&&c(t))){if(e.multiSelect||C(!g),i){pe.trigger(i(t));return}if(o!=null&&o(t)){a(null);return}a==null||a(t)}}function w(l){if(l.stopPropagation(),e.multiSelect){C(!g);return}j()}function H(){let l=`py-1 d-flex align-items-center w-100 position-relative ${b.node}`;return S&&(l+=" "+e.selectedLinkClassName),f!=null&&f.length||(l+=" "+b.noActions),x&&e.multiSelect&&(l+=" text-underline fst-italic"),l}return e.maxDisplayDepth&&e.depth>e.maxDisplayDepth?n.jsx(n.Fragment,{}):n.jsx("li",{className:`position-relative ${g?"":b.collapsed} ${e.isRoot?b.root:""}`,children:n.jsxs("div",{className:"position-relative",children:[n.jsxs(ge,{className:H(),onClick:d?null:j,ref:h,children:[_&&n.jsx("div",{className:b.chevron,onClick:w,children:n.jsx(Pe,{direction:g?"down":"right"})}),n.jsx(Ve,{tree:t,text:t.name||t.description,isDisabled:(o==null?void 0:o(t))||(c==null?void 0:c(t)),disabledTooltip:e.disabledTooltip})]}),!!e.actions&&n.jsx(je,{className:b.actions,actions:f==null?void 0:f.map(l=>({...l,appLink:l.getAppLink(t)})),actionsDropdownClassName:`btn btn-light ${We} py-0`}),g&&n.jsx(he,{...e,isChild:!0,depth:e.depth+1},t.id)]})})}function he(e){const{tree:t,...r}=e;return!t||!t.children?n.jsx(n.Fragment,{}):n.jsx("ul",{className:`m-0 p-0 list-unstyled ${b.tree}`,children:t.children.map((i,a)=>n.jsx(fe,{tree:i,...r,isRoot:!e.isChild,depth:e.depth||0},a))})}const T="libraries.addToLibraryForm",X=v.encloseNamespace(T);function Be(e){var o,c,f;const t=Se(),r=!t.values.library.canAddContent,i=(o=e.videoLibraries)==null?void 0:o.find(d=>d.id===t.values.library.id),a=ue.useMemo(()=>({children:e.getCategoryTree(t.values.library.id).map(m.convertNestedObjectToTree)}),[t.values.library.id]);return n.jsxs(n.Fragment,{children:[i&&n.jsx("div",{className:"alert alert-info",children:n.jsx(B,{namespace:T,phrase:"alreadyInLibrary",options:{library:t.values.library.name}})}),r&&n.jsx("p",{children:n.jsx(B,{namespace:T,phrase:"sendLibraryRequest",options:{video:e.video.name}})}),n.jsxs(ye,{children:[e.libraries.length>1&&n.jsx(K,{as:"select",label:X("selectLibrary"),name:"library",value:((c=t.values.library)==null?void 0:c.id)??"",className:(f=t.values.library)!=null&&f.id?"":"text-secondary",showRequiredStar:!0,onChange:d=>{t.setFieldValue("folder",null);const h=d.target.value;t.setFieldValue("library",e.libraries.find(x=>x.id.toString()===h.toString()))},children:e.libraries.map(d=>n.jsx("option",{value:d.id,className:"text-dark",children:d.name},d.id))}),n.jsx(K,{label:X("selectFolder"),name:"folder",showRequiredStar:!0,disabled:!t.values.library,children:()=>{var d;return n.jsx(Ce.Scrollbars,{autoHeight:!0,autoHeightMax:300,className:"border rounded-3",children:n.jsx(he,{tree:a,onSelect:h=>t.setFieldValue("folder",h),isDisabled:e.isFolderDisabled,disabledTooltip:v.getPhrase(T,"disabledFolder"),selectedIds:(d=t.values.folder)!=null&&d.id?[t.values.folder.id]:void 0,selectedLinkClassName:"bg-light"})})}}),!!t.values.folder&&n.jsx("p",{className:"mt-n2",children:n.jsx(B,{namespace:T,phrase:r?"requestTo":"addTo",options:{folder:t.values.folder.name}})}),r&&n.jsx(K,{label:v.getPhrase(T,"comment"),as:"textarea",name:"comment",id:"comment",placeholder:v.getPhrase(T,"commentPlaceholder"),value:t.values.comment}),n.jsxs(G,{children:[n.jsx(G.Cancel,{onClick:e.closePopup}),n.jsx(G.Submit,{variant:"dark",text:X("addToLibrary")})]})]})]})}const Ge={sort(e){return e!=null&&e.length?e.sort((t,r)=>{const i=t.isSharedLibrary?"shared_library":t.type,a=r.isSharedLibrary?"shared_library":r.type;return i===a?t.name.localeCompare(r.name):i==="custom_library"||i==="shared_library"&&a!=="custom_library"||i==="hosted_library"&&a!=="custom_library"&&a!=="shared_library"?-1:1}):[]},hasTwigOrTigtag(e,t){if(!t)return{hasTwig:!1,hasTigtag:!1};if(!t.isAuthenticated){const a=t.contentRegion===le.UK||t.contentRegion===le.SCOT;return{hasTwig:a,hasTigtag:a}}if(!e)return{hasTwig:!1,hasTigtag:!1};let r=!1,i=!1;for(const a of e)if(a.id.toString()===ce.Libraries.TWIG?r=!0:a.id.toString()===ce.Libraries.TIGTAG&&(i=!0),r&&i)break;return{hasTwig:r,hasTigtag:i}}},Z="libraries.validation",Je=M.object().shape({comment:M.string().nullable().max(512,()=>v.getPhrase(Z,"commentExceeds")),library:M.object().required(()=>v.getPhrase(Z,"libraryRequired")).nullable(),folder:M.object().required(()=>v.getPhrase(Z,"folderRequired")).nullable()});var $=(e=>(e[e.MasterVideo=1]="MasterVideo",e[e.MasterClip=2]="MasterClip",e[e.MasterInteractive=3]="MasterInteractive",e))($||{});const U=v.encloseNamespace("shared.errorMessageHelper"),ze={"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"},Ke={"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"},Ye={libraryApiError(e){var r;const t=ze[(r=e==null?void 0:e.responseJSON)==null?void 0:r.type];return U(t||"somethingWentWrong")},inviteColleagueError(e){var r;const t=Ke[(r=e==null?void 0:e.responseJSON)==null?void 0:r.type];return U(t||"somethingWentWrong")}},y={buildOpenAppLinkUrl(e,t,r){return ve.urlBuilder(`${e}/open`,{appLink:t,product:r})},buildOpenVideoUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`video:${t}`,r)},buildOpenClipUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`clip:${t}`,r)},buildOpenInteractiveUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`interactive:${t}`,r)},buildOpenTopicUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`topic:${t}`,r)},buildOpenSeriesUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`series:${t}`,r)},buildOpenPlaylistUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`playlist:${t}`,r)},buildOpenCategoryUrl(e,t,r){return y.buildOpenAppLinkUrl(e,`category:${t}`,r)},buildOpenLibraryFolderUrl(e,t,r){const i=`library:${t.libraryId}:folder:${t.folderId}`;return y.buildOpenAppLinkUrl(e,i,r)}},Qe={[z.Video]:$.MasterVideo,[z.Clip]:$.MasterClip,[z.Interactive]:$.MasterInteractive},Xe="libraries.addToLibrary",A=v.encloseNamespace(Xe);function mt(e){var re,ie,ne;const t=N(Ne.currentUser()),r=N(Y.librariesWithCategories()),i=N(Y.libraryRequestLibraries()),a=Q.getVideoRequest(e.id,e.typeId),o=N(a),f=(Q.isClip(o.data)||Q.isInteractive(o.data))&&((re=o.data)==null?void 0:re._parentVideo),d=N(f&&ke.video(f.id)),{loading:h,handleGenerateReportError:x}=Ee(),R=N(Ae.config()),g=ue.useMemo(()=>Ge.sort(i.data),[i.data]),C=xe(),S=Fe(),_=!!t.data&&Te.getOrSetSortType(t.data.id);function j(){var p,L,D,P,k,ae,oe,se;let s=null,u=(D=J.first((L=(p=o.data)==null?void 0:p.libraries)==null?void 0:L.data))==null?void 0:D.id;if(u&&((P=o.data.categories.data)!=null&&P.length)){const F=o.data.categories.data.find(V=>{var E,q;return(q=(E=V.libraries)==null?void 0:E.data)==null?void 0:q.find(W=>W.id.toString()===u.toString())});F&&(s=F.id)}if(!u&&(u=(oe=J.first((ae=(k=d.data)==null?void 0:k.libraries)==null?void 0:ae.data))==null?void 0:oe.id,u&&((se=d.data.categories.data)!=null&&se.length))){const F=d.data.categories.data.find(V=>{var E,q;return(q=(E=V.libraries)==null?void 0:E.data)==null?void 0:q.find(W=>W.id.toString()===u.toString())});F&&(s=F.id)}return{sourceLibraryId:u?+u:null,sourceCategoryId:s?+s:null}}function w(s,u){const{sourceLibraryId:p,sourceCategoryId:L}=j(),D={objectId:e.id.toString(),objectType:Qe[e.typeId],message:s.comment,sourceLibraryId:p,destinationLibraryId:+s.library.id,metadata:{destinationCategoryId:+s.folder.id,sourceCategoryId:L}};C(Y.addToLibrary(D,_)).then(()=>{s.library.canAddContent?S.success({type:de.Success,heading:"",message:A("addToLibrarySuccess",{folder:s.folder.name,video:o.data.name,escapeText:!0}),...e.folderAppLink?{appLink:{...e.folderAppLink,args:[s.library.id,s.folder.id,te.slugify(s.folder.name)]},appLinkText:A("goToFolder",{folder:s.folder.name}),appLinkClassName:"info-link"}:{extLink:y.buildOpenLibraryFolderUrl(R.data.launchUrl,{libraryId:s.library.id,folderId:s.folder.id}),extLinkText:A("goToFolder",{folder:s.folder.name}),extLinkClassName:"info-link"}}):S.success({type:de.Pending,heading:A("pendingApproval"),message:A("libraryRequestSent",{library:s.library.name,escapeText:!0})})}).catch(P=>{const k=Ye.libraryApiError(P);x(P,k,k),u()}).finally(()=>{e.closePopup()})}function H(s){var u;return(u=r.data.find(p=>p.data.id.toString()===s.toString()))==null?void 0:u.children}function l(s){var u,p;return!!((p=(u=o.data.categories)==null?void 0:u.data)!=null&&p.find(L=>L.id===s.id))}const O=i.data&&o.data&&r.data;return n.jsx(Le,{title:A("addToLibrary"),closePopup:e.closePopup,showLoadingSpinner:!O||h,children:O&&n.jsx(_e,{initialValues:{library:J.first(g),folder:null,comment:""},validationSchema:Je,onSubmit:w,children:n.jsx(Be,{libraries:g,closePopup:e.closePopup,isFolderDisabled:l,video:o.data,videoLibraries:(ne=(ie=o.data)==null?void 0:ie.libraries)==null?void 0:ne.data,getCategoryTree:H})})})}export{mt as AddToLibraryView};
|
|
2
|
+
//# sourceMappingURL=DUBTSAcY.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dqn_DM3j.chunk.js","sources":["../../../../libs/shared/src/utils/TreeHelper.ts","../../../../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};","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}","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}","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}","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}","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};","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});","export enum LibraryRequestObjectType {\n MasterVideo = 1,\n MasterClip = 2,\n MasterInteractive = 3\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};","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};","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}"],"names":["_find","node","id","parents","TextHelper","children","i","child","foundParents","DEFAULT_MAX_DEPTH","TreeHelper","tree","j","path","nestedObject","_a","nodes","targetId","currentDepth","depth","_b","childDepth","deepestLevel","childLevel","result","sourceId","maxDepth","sourceTree","maxChildDepth","targetDepth","pushNode","ObjectHelper","TreeNodeText","props","getTextClass","textClassName","styles","disabledToolTip","jsx","Tooltip","TREE_ACTIONS_CLASS","TreeNode","selectedIds","getAppLink","onSelect","isDisabled","isClickDisabled","actions","isDropdown","ref","React.useRef","isParentOfSelected","React.useMemo","initiallyOpen","isExpanded","setIsExpanded","React.useState","isSelected","hasChildren","React.useEffect","onClick","e","onSelectNode","Core.AppLinkHelper","onClickCaret","getNodeClass","className","Fragment","jsxs","DivButton","Caret","Actions","a","Tree","childProps","key","namespace","getPhrase","LanguageService","AddToLibraryForm","formikProps","useFormikContextWrapper","isMakingLibraryRequest","isAlreadyInLibrary","l","React","Text","Form","FormField","_c","libraryId","library","Scrollbars","folder","PopupButtons","LibraryHelper","libraries","b","aType","bType","currentUser","hasAnonAccess","ContentRegion","hasTwig","hasTigtag","lib","HardCoded","AddToLibraryValidationSchema","object","string","LibraryRequestObjectType","LIBRARY_ERROR_PHRASE_MAPPING","INVITE_COLLEAGUE_PHRASE_MAPPING","ErrorMessageHelper","xhr","phrase","LaunchUrlHelper","baseLaunchUrl","appLink","product","UrlHelper","videoId","clipId","interactiveId","topicId","seriesId","playlistId","categoryId","params","OBJECT_TYPE_MAP","MasterType","AddToLibraryView","user","Flight.useBasicFetch","UserRequests","librariesWithCategories","LibraryRequests","videoRequest","VideoHelper","video","parentVideo","parentVideoDetails","VideoRequests","loading","handleGenerateReportError","useVerifiedEmailRequiredErrorHandler","config","ConfigRequests","sortedLibraries","fetchAsync","Flight.useGetFetchAsync","alerts","useAlerts","sort","VideoSortHelper","getSourceIds","sourceCategoryId","sourceLibraryId","ArrayHelper","_d","category","_g","_f","_e","_h","addToLibrary","data","onDone","request","AlertType","errorMessage","getCategoryTree","isFolderDisabled","dataLoaded","Popup","FormWrapper"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DUBTSAcY.chunk.js","sources":["../../../../libs/shared/src/utils/TreeHelper.ts","../../../../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};","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}","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}","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}","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}","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};","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});","export enum LibraryRequestObjectType {\n MasterVideo = 1,\n MasterClip = 2,\n MasterInteractive = 3\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};","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};","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}"],"names":["_find","node","id","parents","TextHelper","children","i","child","foundParents","DEFAULT_MAX_DEPTH","TreeHelper","tree","j","path","nestedObject","_a","nodes","targetId","currentDepth","depth","_b","childDepth","deepestLevel","childLevel","result","sourceId","maxDepth","sourceTree","maxChildDepth","targetDepth","pushNode","ObjectHelper","TreeNodeText","props","getTextClass","textClassName","styles","disabledToolTip","jsx","Tooltip","TREE_ACTIONS_CLASS","TreeNode","selectedIds","getAppLink","onSelect","isDisabled","isClickDisabled","actions","isDropdown","ref","React.useRef","isParentOfSelected","React.useMemo","initiallyOpen","isExpanded","setIsExpanded","React.useState","isSelected","hasChildren","React.useEffect","onClick","e","onSelectNode","Core.AppLinkHelper","onClickCaret","getNodeClass","className","Fragment","jsxs","DivButton","Caret","Actions","a","Tree","childProps","key","namespace","getPhrase","LanguageService","AddToLibraryForm","formikProps","useFormikContextWrapper","isMakingLibraryRequest","isAlreadyInLibrary","l","React","Text","Form","FormField","_c","libraryId","library","Scrollbars","folder","PopupButtons","LibraryHelper","libraries","b","aType","bType","currentUser","hasAnonAccess","ContentRegion","hasTwig","hasTigtag","lib","HardCoded","AddToLibraryValidationSchema","object","string","LibraryRequestObjectType","LIBRARY_ERROR_PHRASE_MAPPING","INVITE_COLLEAGUE_PHRASE_MAPPING","ErrorMessageHelper","xhr","phrase","LaunchUrlHelper","baseLaunchUrl","appLink","product","UrlHelper","videoId","clipId","interactiveId","topicId","seriesId","playlistId","categoryId","params","OBJECT_TYPE_MAP","MasterType","AddToLibraryView","user","Flight.useBasicFetch","UserRequests","librariesWithCategories","LibraryRequests","videoRequest","VideoHelper","video","parentVideo","parentVideoDetails","VideoRequests","loading","handleGenerateReportError","useVerifiedEmailRequiredErrorHandler","config","ConfigRequests","sortedLibraries","fetchAsync","Flight.useGetFetchAsync","alerts","useAlerts","sort","VideoSortHelper","getSourceIds","sourceCategoryId","sourceLibraryId","ArrayHelper","_d","category","_g","_f","_e","_h","addToLibrary","data","onDone","request","AlertType","errorMessage","getCategoryTree","isFolderDisabled","dataLoaded","Popup","FormWrapper"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,ad as U,ae as I,af as O,A as H,c as B,R,aB as L,aq as $,a as T,b as x,a3 as u,aT as V,aU as W,l as G,L as Y,aD as F}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as e,ad as U,ae as I,af as O,A as H,c as B,R,aB as L,aq as $,a as T,b as x,a3 as u,aT as V,aU as W,l as G,L as Y,aD as F}from"./app-BPynVn5M.js";import{P as q}from"./CmOtOw_r.chunk.js";import{h as K}from"./CnY4exCI.chunk.js";import{u as Z}from"./CYOWjQoo.chunk.js";import{P as _,A as S,a as z}from"./m2GRn15O.chunk.js";import{T as X,a as J}from"./8VNRK8kQ.chunk.js";import{T as Q,a as ee}from"./BdNTkb7P.chunk.js";import{T as f}from"./DOaducO2.chunk.js";import{u as te}from"./B6lOCBlR.chunk.js";import{u as ae}from"./BKjwB_St.chunk.js";import{t as ne}from"./DqA_gGV1.chunk.js";import{L as se}from"./Dl3gfAlJ.chunk.js";import{T as re}from"./DBXJjLCV.chunk.js";import"./BstEXc3S.chunk.js";import"./BlDVEZsX.chunk.js";import"./aNB3gltW.chunk.js";import"./BEGjWnPj.chunk.js";import"./D8qOjT5-.chunk.js";import"./Gz6brJ7U.chunk.js";import"./Bmmwb7k_.chunk.js";const oe="_pillTabSelector_1d8n6_1",ie={pillTabSelector:oe},A=["All","#","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],ce={"#":"0"},le={actionType:O.Click,entity:I.Url,location:U.MagicTabs};function de(t,s){if(!t)return;if(t==="0")return"#";const r=A.find(a=>a.toUpperCase()===t.toUpperCase());if(!(r==="All"&&!s))return r}function me(t){return A.map(s=>{if(s==="All"&&!t.showAll)return;const r=t.getItemAppLink(ce[s]??s);return{name:s,appLink:r,active:t.selected===s,analyticsData:{name:s,url:H.getHref(r)},analyticsOptions:le}}).filter(Boolean)}function pe(t){const s=de(t.selected,t.showAll),r=me({selected:s,showAll:t.showAll,getItemAppLink:t.getItemAppLink});return e.jsx("div",{className:"mb-3",children:e.jsx(q,{tabs:r,className:ie.pillTabSelector,enableSmallScreenSupport:t.enableSmallScreenSupport,formatDisplayText:t.formatDisplayText})})}const ge="_dateContainer_b9acj_1",ue="_hover_b9acj_4",he="_channelLogo_b9acj_7",fe="_channelLogoContainer_b9acj_10",Te="_programsContainer_b9acj_13",xe="_date_b9acj_1",je="_thumbnail_b9acj_27",p={dateContainer:ge,hover:ue,channelLogo:he,channelLogoContainer:fe,programsContainer:Te,date:xe,thumbnail:je};function ve(t){function s(r){const a=B.findWhere(t.channels,{name:r});return a==null?void 0:a.logoUrl}return e.jsx("div",{className:"mb-2",children:t.groupedPrograms.map(([r,a])=>e.jsxs("div",{className:"border-top d-flex pt-3 pb-2",children:[e.jsx("div",{className:`${p.channelLogoContainer} flex-shrink-0 mb-3`,children:e.jsx("img",{src:s(r),alt:r,className:`${p.channelLogo} ms-4`})}),e.jsx("div",{className:"w-100",children:a.map(([i,n])=>e.jsx(be,{date:i,programs:n,tvPreviewUrls:t.tvPreviewUrls},i))})]},r))})}function be(t){const[s,r]=R.useState();function a(n){switch(n.programType){case _.Video:return{application:x.TV,action:T.Tv.PREVIEW,args:[n.regionCode,n.id]};case _.Audio:return{application:x.TV,action:T.Tv.RADIO_DOWNLOAD,args:[n.id]}}}function i(n){const j=t.tvPreviewUrls[n.regionCode],m=n.globalId.split("-").join("");return`${j}/thumbnail/${m}.jpg`}return e.jsx("div",{className:`${p.dateContainer} ${s?p.hover:""} py-2 px-3 rounded`,children:e.jsxs("div",{className:"d-flex align-items-center",children:[e.jsx("div",{className:`${p.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`,children:e.jsx(se,{src:i(s||t.programs[0]),alt:L.format(t.date,"D MMM"),extraClasses:"w-100 rounded"})}),e.jsxs("p",{className:`${p.date} fw-semibold flex-shrink-0 mb-0`,children:[L.format(t.date,"D MMM"),":"]}),e.jsx("div",{className:`${p.programsContainer} d-flex flex-wrap`,children:t.programs.map(n=>e.jsx("div",{onMouseEnter:()=>r(n),onMouseLeave:()=>r(null),children:e.jsx($,{appLink:a(n),className:"text-decoration-none",children:e.jsx(re,{program:n,showEndTime:!0})},n.id)},n.id))})]},t.date)})}const Le="tv.programs",Ae=Y.encloseNamespace(Le),Pe=/^[a-zA-Z]/;function Fe(t){const s=t.startsWith||"A",r=u(F.config()),a=u(f.region(t.region)),i=u(f.regions()),n=u(f.dateRange(t.region)),j=u(a.data&&f.channels(a.data.code)),m=u(a.data&&n.data&&f.programsByLetter(a.data.code,s,n.data.startDate,n.data.endDate)),{setRegion:N}=ae(),{showTvGuide:w}=V(),y=R.useMemo(()=>{var C;if(!((C=m.data)!=null&&C.length))return[];const c={};m.data.forEach(o=>{t.startsWith==="0"&&Pe.test(o.title)||(c[o.title]||(c[o.title]=[]),c[o.title].push(o))});let l=Object.entries(c);return l=l.sort(([o],[v])=>o<v?-1:1),l.map(([o,v])=>{const M=v.reduce((d,g)=>{const h=g.channelName;d[h]||(d[h]={});const D=ne(g.startTime,g.timeZone),b=L.format(D,"YYYY-MM-DD");return d[h][b]||(d[h][b]=[]),d[h][b].push(g),d},{}),k=Object.entries(M).map((([d,g])=>[d,Object.entries(g)]));return[o,k]})},[m.data]);[...A,"0"].includes(s)||K(W.BadRequest),te(a),Z([i,m]),G({title:Ae("title")});const E=a.hasCompleted&&i.hasCompleted&&n.hasCompleted&&m.hasCompleted&&r.hasCompleted;return e.jsxs(e.Fragment,{children:[e.jsx(Q,{region:a.data}),e.jsxs("div",{className:"d-flex justify-content-between",children:[e.jsx(X,{active:"programs",currentRegion:a.data,showTvGuide:w}),e.jsx(ee,{currentRegion:a.data,regions:i.data,appLink:{application:x.TV,action:T.Tv.PROGRAMS,params:{startsWith:s}},onClick:N})]}),e.jsx(J,{dateRange:n.data,region:a.data}),e.jsx(pe,{selected:s,getItemAppLink:c=>{var l;return{application:x.TV,action:T.Tv.PROGRAMS,args:[(l=a.data)==null?void 0:l.code],params:{startsWith:c}}}}),E?e.jsx(e.Fragment,{children:e.jsx(S,{children:y.map(([c,l],P)=>e.jsx(S.Header,{title:c,children:e.jsx(ve,{groupedPrograms:l,channels:j.data,tvPreviewUrls:r.data.tvPreviewUrls})},P))})}):e.jsx(z,{})]})}export{Fe as TvProgramsView};
|
|
2
|
+
//# sourceMappingURL=D_LdmZHS.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CyDCS7Ld.chunk.js","sources":["../../../../libs/shared/src/components/letters-bar/LettersBar.tsx","../../src/apps/tv/views/tv-programs/components/program-selector/ProgramSelector.tsx","../../src/apps/tv/views/tv-programs/TvProgramsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './letters-bar.module.scss';\n\nexport const ALPHABET = [\n 'All',\n '#',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n] as const;\n\nconst LetterParamMap: {[key in typeof ALPHABET[number]]?: string} = {\n '#': '0'\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\nfunction getSelectedAlphabet(selected: string, showAll: boolean): typeof ALPHABET[number] | undefined {\n if (!selected)\n return;\n \n if (selected === '0')\n return '#';\n\n const alphabet = ALPHABET.find(letter => letter.toUpperCase() === selected.toUpperCase());\n\n if (alphabet === 'All' && !showAll)\n return;\n\n return alphabet;\n}\n\ninterface GenerateTabsOptions {\n selected: string;\n showAll: boolean;\n getItemAppLink: (letter: string) => Core.AppLink;\n}\n\nfunction generateTabs(options: GenerateTabsOptions): PillTab[] {\n return ALPHABET.map(letter => {\n if (letter === 'All' && !options.showAll)\n return;\n\n const appLink = options.getItemAppLink(LetterParamMap[letter] ?? letter);\n\n return {\n name: letter,\n appLink,\n active: options.selected === letter,\n analyticsData: {\n name: letter,\n url: Core.AppLinkHelper.getHref(appLink)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n };\n }).filter(Boolean);\n}\n\ninterface LettersBarProps {\n selected: string;\n getItemAppLink: (letter: string) => Core.AppLink;\n showAll?: boolean;\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n}\n\nexport function LettersBar(props: LettersBarProps): JSX.Element {\n const localSelected = getSelectedAlphabet(props.selected, props.showAll);\n\n const tabs = generateTabs({\n selected: localSelected,\n showAll: props.showAll,\n getItemAppLink: props.getItemAppLink\n });\n \n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTabSelector}\n enableSmallScreenSupport={props.enableSmallScreenSupport}\n formatDisplayText={props.formatDisplayText}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './program-selector.module.scss';\n\ninterface ProgramSelectorProps {\n groupedPrograms: [string, [string, TvProgram[]][]][];\n channels: TvChannel[];\n tvPreviewUrls: { [region: string]: string };\n}\n\nexport function ProgramSelector(props: ProgramSelectorProps) {\n function getChannelLogo(channel: string) {\n const matchingChannel = ArrayHelper.findWhere(props.channels, { name: channel });\n return matchingChannel?.logoUrl;\n }\n\n return (\n <div className='mb-2'>\n {props.groupedPrograms.map(([ channel, dates ]) => (\n <div className={`border-top d-flex pt-3 pb-2`} key={channel}>\n <div className={`${styles.channelLogoContainer} flex-shrink-0 mb-3`}>\n <img src={getChannelLogo(channel)} alt={channel} className={`${styles.channelLogo} ms-4`} />\n </div>\n\n <div className='w-100'>\n {dates.map(([ date, programs ]) => (\n <GroupedPrograms key={date} date={date} programs={programs} tvPreviewUrls={props.tvPreviewUrls} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\ninterface GroupedProgramsProps {\n date: string;\n programs: TvProgram[];\n tvPreviewUrls: { [region: string]: string };\n}\n\nexport function GroupedPrograms(props: GroupedProgramsProps) {\n const [ hoveredProgram, setHoveredProgram ] = React.useState<TvProgram>();\n\n function getProgramAppLink(program: TvProgram) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ program.regionCode, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [program.id]\n };\n }\n }\n\n function getThumbnailUrl(program: TvProgram) {\n const previewUrl = props.tvPreviewUrls[program.regionCode];\n const globalId = program.globalId.split('-').join('');\n return `${previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div\n className={`${styles.dateContainer} ${hoveredProgram ? styles.hover : ''} py-2 px-3 rounded`}\n >\n <div key={props.date} className={`d-flex align-items-center`}>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(hoveredProgram || props.programs[0])}\n alt={DateHelper.format(props.date, 'D MMM')}\n extraClasses='w-100 rounded'\n />\n </div>\n <p className={`${styles.date} fw-semibold flex-shrink-0 mb-0`}>{DateHelper.format(props.date, 'D MMM')}:</p>\n <div className={`${styles.programsContainer} d-flex flex-wrap`}>\n {props.programs.map((program: TvProgram) => (\n <div\n key={program.id}\n onMouseEnter={() => setHoveredProgram(program)}\n onMouseLeave={() => setHoveredProgram(null)}\n >\n <AppLink appLink={getProgramAppLink(program)} key={program.id} className='text-decoration-none'>\n <TvProgramTimeBadge program={program} showEndTime />\n </AppLink>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ALPHABET, LettersBar } from 'libs/shared/components/letters-bar/LettersBar';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLiteUpgrade } from 'libs/shared/hooks/UseLiteUpgrade';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { ProgramSelector } from 'apps/tv/views/tv-programs/components/program-selector/ProgramSelector';\n\nconst namespace = 'tv.programs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FIRST_LETTER_REGEX = /^[a-zA-Z]/;\n\ninterface TvProgramsViewProps {\n region: string;\n startsWith: string;\n}\n\nexport function TvProgramsView(props: TvProgramsViewProps): JSX.Element {\n const startsWith = props.startsWith || 'A';\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n dateRange.data &&\n TvRequests.programsByLetter(\n region.data.code,\n startsWith,\n dateRange.data.startDate,\n dateRange.data.endDate\n )\n );\n\n const { setRegion } = useSelectedRegion();\n const { showTvGuide } = useLiteUpgrade();\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [] as any[];\n\n const groups: HashObject<TvProgram[]> = {};\n\n programs.data.forEach(program => {\n if (props.startsWith === '0' && FIRST_LETTER_REGEX.test(program.title))\n return;\n\n if (!groups[program.title])\n groups[program.title] = [];\n\n groups[program.title].push(program);\n });\n\n let sorted = Object.entries(groups);\n\n sorted = sorted.sort(([keyA], [keyB]) => (keyA < keyB ? -1 : 1));\n\n const groupedPrograms = sorted.map(([ title, data ]) => {\n const groupedProgram = data.reduce((acc: { [channel: string]: { [date: string]: TvProgram[]} }, program) => {\n const channelKey = program.channelName;\n if (!acc[channelKey]) {\n acc[channelKey] = {};\n }\n \n const startTime = toLocalTime(program.startTime, program.timeZone);\n const dateKey = DateHelper.format(startTime, 'YYYY-MM-DD');\n if (!acc[channelKey][dateKey]) {\n acc[channelKey][dateKey] = [];\n }\n\n acc[channelKey][dateKey].push(program);\n return acc;\n }, {});\n\n const groupedProgramEntries =\n Object\n .entries(groupedProgram)\n .map((([ channel, programs ]) => [ channel, Object.entries(programs) ]));\n \n return [ title, groupedProgramEntries ];\n });\n\n return groupedPrograms as [string, [string, TvProgram[]]];\n }, [programs.data]);\n\n const matchesLetters = [ ...ALPHABET, '0' ].includes(startsWith);\n if (!matchesLetters) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, programs ]);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const dataLoaded = (\n region.hasCompleted &&\n regions.hasCompleted &&\n dateRange.hasCompleted &&\n programs.hasCompleted &&\n config.hasCompleted\n );\n\n return (\n <>\n <TvSearchBar region={region.data} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='programs'\n currentRegion={region.data}\n showTvGuide={showTvGuide}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n params: { startsWith }\n }}\n onClick={setRegion}\n />\n </div>\n\n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n <LettersBar\n selected={startsWith}\n getItemAppLink={letter => ({\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n args: [region.data?.code],\n params: { startsWith: letter }\n })}\n />\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ title, programs ], index) => (\n <AccordionList.Header key={index} title={title}>\n <ProgramSelector\n groupedPrograms={programs}\n channels={channels.data}\n tvPreviewUrls={config.data.tvPreviewUrls}\n />\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}"],"names":["ALPHABET","LetterParamMap","ANALYTICS_OPTIONS","UserAction","EntityType","LocationContext","getSelectedAlphabet","selected","showAll","alphabet","letter","generateTabs","options","appLink","Core.AppLinkHelper","LettersBar","props","localSelected","tabs","jsx","PillTabSelector","styles","ProgramSelector","getChannelLogo","channel","matchingChannel","ArrayHelper","dates","jsxs","date","programs","GroupedPrograms","hoveredProgram","setHoveredProgram","React","getProgramAppLink","program","ProgramType","AppChannels","Actions","getThumbnailUrl","previewUrl","globalId","LazyImage","DateHelper","AppLink","TvProgramTimeBadge","namespace","getPhrase","LanguageService","FIRST_LETTER_REGEX","TvProgramsView","startsWith","config","Flight.useBasicFetch","ConfigRequests","region","TvRequests","regions","dateRange","channels","setRegion","useSelectedRegion","showTvGuide","useLiteUpgrade","grouped","_a","groups","sorted","keyA","keyB","title","data","groupedProgram","acc","channelKey","startTime","toLocalTime","dateKey","groupedProgramEntries","handleHttpError","HttpStatus","useHandleRegionError","useHandleObjectError","useSetPageMetadata","dataLoaded","Fragment","TvSearchBar","TvTabs","TvRegionSelect","TvInfoAlert","AccordionList","index","PartialAccordionList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"D_LdmZHS.chunk.js","sources":["../../../../libs/shared/src/components/letters-bar/LettersBar.tsx","../../src/apps/tv/views/tv-programs/components/program-selector/ProgramSelector.tsx","../../src/apps/tv/views/tv-programs/TvProgramsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './letters-bar.module.scss';\n\nexport const ALPHABET = [\n 'All',\n '#',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n] as const;\n\nconst LetterParamMap: {[key in typeof ALPHABET[number]]?: string} = {\n '#': '0'\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\nfunction getSelectedAlphabet(selected: string, showAll: boolean): typeof ALPHABET[number] | undefined {\n if (!selected)\n return;\n \n if (selected === '0')\n return '#';\n\n const alphabet = ALPHABET.find(letter => letter.toUpperCase() === selected.toUpperCase());\n\n if (alphabet === 'All' && !showAll)\n return;\n\n return alphabet;\n}\n\ninterface GenerateTabsOptions {\n selected: string;\n showAll: boolean;\n getItemAppLink: (letter: string) => Core.AppLink;\n}\n\nfunction generateTabs(options: GenerateTabsOptions): PillTab[] {\n return ALPHABET.map(letter => {\n if (letter === 'All' && !options.showAll)\n return;\n\n const appLink = options.getItemAppLink(LetterParamMap[letter] ?? letter);\n\n return {\n name: letter,\n appLink,\n active: options.selected === letter,\n analyticsData: {\n name: letter,\n url: Core.AppLinkHelper.getHref(appLink)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n };\n }).filter(Boolean);\n}\n\ninterface LettersBarProps {\n selected: string;\n getItemAppLink: (letter: string) => Core.AppLink;\n showAll?: boolean;\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n}\n\nexport function LettersBar(props: LettersBarProps): JSX.Element {\n const localSelected = getSelectedAlphabet(props.selected, props.showAll);\n\n const tabs = generateTabs({\n selected: localSelected,\n showAll: props.showAll,\n getItemAppLink: props.getItemAppLink\n });\n \n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTabSelector}\n enableSmallScreenSupport={props.enableSmallScreenSupport}\n formatDisplayText={props.formatDisplayText}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './program-selector.module.scss';\n\ninterface ProgramSelectorProps {\n groupedPrograms: [string, [string, TvProgram[]][]][];\n channels: TvChannel[];\n tvPreviewUrls: { [region: string]: string };\n}\n\nexport function ProgramSelector(props: ProgramSelectorProps) {\n function getChannelLogo(channel: string) {\n const matchingChannel = ArrayHelper.findWhere(props.channels, { name: channel });\n return matchingChannel?.logoUrl;\n }\n\n return (\n <div className='mb-2'>\n {props.groupedPrograms.map(([ channel, dates ]) => (\n <div className={`border-top d-flex pt-3 pb-2`} key={channel}>\n <div className={`${styles.channelLogoContainer} flex-shrink-0 mb-3`}>\n <img src={getChannelLogo(channel)} alt={channel} className={`${styles.channelLogo} ms-4`} />\n </div>\n\n <div className='w-100'>\n {dates.map(([ date, programs ]) => (\n <GroupedPrograms key={date} date={date} programs={programs} tvPreviewUrls={props.tvPreviewUrls} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\ninterface GroupedProgramsProps {\n date: string;\n programs: TvProgram[];\n tvPreviewUrls: { [region: string]: string };\n}\n\nexport function GroupedPrograms(props: GroupedProgramsProps) {\n const [ hoveredProgram, setHoveredProgram ] = React.useState<TvProgram>();\n\n function getProgramAppLink(program: TvProgram) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ program.regionCode, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [program.id]\n };\n }\n }\n\n function getThumbnailUrl(program: TvProgram) {\n const previewUrl = props.tvPreviewUrls[program.regionCode];\n const globalId = program.globalId.split('-').join('');\n return `${previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div\n className={`${styles.dateContainer} ${hoveredProgram ? styles.hover : ''} py-2 px-3 rounded`}\n >\n <div key={props.date} className={`d-flex align-items-center`}>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(hoveredProgram || props.programs[0])}\n alt={DateHelper.format(props.date, 'D MMM')}\n extraClasses='w-100 rounded'\n />\n </div>\n <p className={`${styles.date} fw-semibold flex-shrink-0 mb-0`}>{DateHelper.format(props.date, 'D MMM')}:</p>\n <div className={`${styles.programsContainer} d-flex flex-wrap`}>\n {props.programs.map((program: TvProgram) => (\n <div\n key={program.id}\n onMouseEnter={() => setHoveredProgram(program)}\n onMouseLeave={() => setHoveredProgram(null)}\n >\n <AppLink appLink={getProgramAppLink(program)} key={program.id} className='text-decoration-none'>\n <TvProgramTimeBadge program={program} showEndTime />\n </AppLink>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ALPHABET, LettersBar } from 'libs/shared/components/letters-bar/LettersBar';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLiteUpgrade } from 'libs/shared/hooks/UseLiteUpgrade';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { ProgramSelector } from 'apps/tv/views/tv-programs/components/program-selector/ProgramSelector';\n\nconst namespace = 'tv.programs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FIRST_LETTER_REGEX = /^[a-zA-Z]/;\n\ninterface TvProgramsViewProps {\n region: string;\n startsWith: string;\n}\n\nexport function TvProgramsView(props: TvProgramsViewProps): JSX.Element {\n const startsWith = props.startsWith || 'A';\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n dateRange.data &&\n TvRequests.programsByLetter(\n region.data.code,\n startsWith,\n dateRange.data.startDate,\n dateRange.data.endDate\n )\n );\n\n const { setRegion } = useSelectedRegion();\n const { showTvGuide } = useLiteUpgrade();\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [] as any[];\n\n const groups: HashObject<TvProgram[]> = {};\n\n programs.data.forEach(program => {\n if (props.startsWith === '0' && FIRST_LETTER_REGEX.test(program.title))\n return;\n\n if (!groups[program.title])\n groups[program.title] = [];\n\n groups[program.title].push(program);\n });\n\n let sorted = Object.entries(groups);\n\n sorted = sorted.sort(([keyA], [keyB]) => (keyA < keyB ? -1 : 1));\n\n const groupedPrograms = sorted.map(([ title, data ]) => {\n const groupedProgram = data.reduce((acc: { [channel: string]: { [date: string]: TvProgram[]} }, program) => {\n const channelKey = program.channelName;\n if (!acc[channelKey]) {\n acc[channelKey] = {};\n }\n \n const startTime = toLocalTime(program.startTime, program.timeZone);\n const dateKey = DateHelper.format(startTime, 'YYYY-MM-DD');\n if (!acc[channelKey][dateKey]) {\n acc[channelKey][dateKey] = [];\n }\n\n acc[channelKey][dateKey].push(program);\n return acc;\n }, {});\n\n const groupedProgramEntries =\n Object\n .entries(groupedProgram)\n .map((([ channel, programs ]) => [ channel, Object.entries(programs) ]));\n \n return [ title, groupedProgramEntries ];\n });\n\n return groupedPrograms as [string, [string, TvProgram[]]];\n }, [programs.data]);\n\n const matchesLetters = [ ...ALPHABET, '0' ].includes(startsWith);\n if (!matchesLetters) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, programs ]);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const dataLoaded = (\n region.hasCompleted &&\n regions.hasCompleted &&\n dateRange.hasCompleted &&\n programs.hasCompleted &&\n config.hasCompleted\n );\n\n return (\n <>\n <TvSearchBar region={region.data} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='programs'\n currentRegion={region.data}\n showTvGuide={showTvGuide}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n params: { startsWith }\n }}\n onClick={setRegion}\n />\n </div>\n\n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n <LettersBar\n selected={startsWith}\n getItemAppLink={letter => ({\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n args: [region.data?.code],\n params: { startsWith: letter }\n })}\n />\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ title, programs ], index) => (\n <AccordionList.Header key={index} title={title}>\n <ProgramSelector\n groupedPrograms={programs}\n channels={channels.data}\n tvPreviewUrls={config.data.tvPreviewUrls}\n />\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}"],"names":["ALPHABET","LetterParamMap","ANALYTICS_OPTIONS","UserAction","EntityType","LocationContext","getSelectedAlphabet","selected","showAll","alphabet","letter","generateTabs","options","appLink","Core.AppLinkHelper","LettersBar","props","localSelected","tabs","jsx","PillTabSelector","styles","ProgramSelector","getChannelLogo","channel","matchingChannel","ArrayHelper","dates","jsxs","date","programs","GroupedPrograms","hoveredProgram","setHoveredProgram","React","getProgramAppLink","program","ProgramType","AppChannels","Actions","getThumbnailUrl","previewUrl","globalId","LazyImage","DateHelper","AppLink","TvProgramTimeBadge","namespace","getPhrase","LanguageService","FIRST_LETTER_REGEX","TvProgramsView","startsWith","config","Flight.useBasicFetch","ConfigRequests","region","TvRequests","regions","dateRange","channels","setRegion","useSelectedRegion","showTvGuide","useLiteUpgrade","grouped","_a","groups","sorted","keyA","keyB","title","data","groupedProgram","acc","channelKey","startTime","toLocalTime","dateKey","groupedProgramEntries","handleHttpError","HttpStatus","useHandleRegionError","useHandleObjectError","useSetPageMetadata","dataLoaded","Fragment","TvSearchBar","TvTabs","TvRegionSelect","TvInfoAlert","AccordionList","index","PartialAccordionList"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as i,R as J,j as B}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{r as i,R as J,j as B}from"./app-BPynVn5M.js";function be(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return i.useMemo(()=>r=>{t.forEach(a=>a(r))},t)}const Q=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Z(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function K(e){return"nodeType"in e}function q(e){var t,n;return e?Z(e)?e:K(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}const E=Q?i.useLayoutEffect:i.useEffect;function V(e){const t=i.useRef(e);return E(()=>{t.current=e}),i.useCallback(function(){for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t.current==null?void 0:t.current(...r)},[])}function N(e,t){t===void 0&&(t=[e]);const n=i.useRef(e);return E(()=>{n.current!==e&&(n.current=e)},t),n}function M(e){const t=V(e),n=i.useRef(null),r=i.useCallback(a=>{a!==n.current&&(t==null||t(a,n.current)),n.current=a},[]);return[n,r]}let k={};function H(e,t){return i.useMemo(()=>{const n=k[e]==null?0:k[e]+1;return k[e]=n,e+"-"+n},[e,t])}function ve(e){if(!e)return!1;const{KeyboardEvent:t}=q(e.target);return t&&e instanceof t}const W=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[W.Translate.toString(e),W.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}});var x;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(x||(x={}));function X(){}const _=Object.freeze({x:0,y:0});function ee(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function te(e,t,n){const r=ee(t);if(!r)return e;const{scaleX:a,scaleY:o,x:d,y:c}=r,l=e.left-d-(1-a)*parseFloat(n),g=e.top-c-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),u=a?e.width/a:e.width,s=o?e.height/o:e.height;return{width:u,height:s,top:g,right:l+u,bottom:g+s,left:l}}const ne={ignoreTransform:!1};function we(e,t){t===void 0&&(t=ne);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{getComputedStyle:g}=q(e),{transform:u,transformOrigin:s}=g(e);u&&(n=te(n,u,s))}const{top:r,left:a,width:o,height:d,bottom:c,right:l}=n;return{top:r,left:a,width:o,height:d,bottom:c,right:l}}var p;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(p||(p={}));var U;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(U||(U={}));var h;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"})(h||(h={}));h.Space,h.Enter,h.Esc,h.Space,h.Enter;var A;(function(e){e[e.RightClick=2]="RightClick"})(A||(A={}));var Y;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(Y||(Y={}));var L;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(L||(L={}));p.Backward+"",p.Forward+"",p.Backward+"",p.Forward+"";var j;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(j||(j={}));var F;(function(e){e.Optimized="optimized"})(F||(F={}));function re(e){let{callback:t,disabled:n}=e;const r=V(t),a=i.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return i.useEffect(()=>()=>a==null?void 0:a.disconnect(),[a]),a}function ae(e,t){return i.useMemo(()=>e.reduce((n,r)=>{let{eventName:a,handler:o}=r;return n[a]=d=>{o(d,t)},n},{}),[e,t])}j.WhileDragging,F.Optimized;const ie={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:X,draggableNodes:new Map,over:null,measureDroppableContainers:X},G=i.createContext(ie),se=i.createContext({..._,scaleX:1,scaleY:1});var $;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})($||($={}));const oe=i.createContext(null),P="button",ce="Droppable";function le(e){let{id:t,data:n,disabled:r=!1,attributes:a}=e;const o=H(ce),{activators:d,activatorEvent:c,active:l,activeNodeRect:g,ariaDescribedById:u,draggableNodes:s,over:b}=i.useContext(G),{role:f=P,roleDescription:w="draggable",tabIndex:m=0}=a??{},D=(l==null?void 0:l.id)===t,y=i.useContext(D?se:oe),[z,v]=M(),[I,R]=M(),S=ae(d,t),T=N(n);E(()=>(s.set(t,{id:t,key:o,node:z,activatorNode:I,data:T}),()=>{const C=s.get(t);C&&C.key===o&&s.delete(t)}),[s,t]);const O=i.useMemo(()=>({role:f,tabIndex:m,"aria-disabled":r,"aria-pressed":D&&f===P?!0:void 0,"aria-roledescription":w,"aria-describedby":u.draggable}),[r,f,m,D,w,u.draggable]);return{active:l,activatorEvent:c,activeNodeRect:g,attributes:O,isDragging:D,listeners:r?void 0:S,node:z,over:b,setNodeRef:v,setActivatorNodeRef:R,transform:y}}const ue="Droppable",de={timeout:25};function fe(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:a}=e;const o=H(ue),{active:d,dispatch:c,over:l,measureDroppableContainers:g}=i.useContext(G),u=i.useRef({disabled:n}),s=i.useRef(!1),b=i.useRef(null),f=i.useRef(null),{disabled:w,updateMeasurementsFor:m,timeout:D}={...de,...a},y=N(m??r),z=i.useCallback(()=>{if(!s.current){s.current=!0;return}f.current!=null&&clearTimeout(f.current),f.current=setTimeout(()=>{g(Array.isArray(y.current)?y.current:[y.current]),f.current=null},D)},[D]),v=re({callback:z,disabled:w||!d}),I=i.useCallback((O,C)=>{v&&(C&&(v.unobserve(C),s.current=!1),O&&v.observe(O))},[v]),[R,S]=M(I),T=N(t);return i.useEffect(()=>{!v||!R.current||(v.disconnect(),s.current=!1,v.observe(R.current))},[R,v]),E(()=>(c({type:x.RegisterDroppable,element:{id:r,key:o,disabled:n,node:R,rect:b,data:T}}),()=>c({type:x.UnregisterDroppable,key:o,id:r})),[r]),i.useEffect(()=>{n!==u.current.disabled&&(c({type:x.SetDroppableDisabled,id:r,key:o,disabled:n}),u.current.disabled=n)},[r,o,n,c]),{active:d,rect:b,isOver:(l==null?void 0:l.id)===r,node:R,over:l,setNodeRef:S}}function De(e){const{active:t,isDragging:n,attributes:r,listeners:a,setNodeRef:o}=le({...e.draggable,disabled:!e.draggable,attributes:{role:"drag",tabIndex:-1}}),{isOver:d,over:c,active:l,setNodeRef:g}=fe({...e.droppable,disabled:!e.droppable});J.useEffect(()=>{var b,f,w;const s=(b=e.draggable)==null?void 0:b.data;Array.isArray(s)&&(s!=null&&s.includes(t==null?void 0:t.id.toString()))?(f=e.setIsDragging)==null||f.call(e,n):(w=e.setIsDragging)==null||w.call(e,!1)},[n]);function u(){var b;const s=(b=e.draggable)==null?void 0:b.data;return Array.isArray(s)&&s.includes(e.draggable.id.toString())}return B.jsx("div",{ref:o,...a,...r,className:`${e.draggable?"cursor-grab":"cursor-default"} ${n&&t||e.isDragging&&u()?e.dragStyle:null}`,children:B.jsx("div",{ref:g,className:l&&d&&(t==null?void 0:t.id)!==(c==null?void 0:c.id)?e.dropStye:null,children:e.children})})}export{W as C,De as D,h as K,le as a,be as b,E as c,we as g,ve as i,fe as u};
|
|
2
|
+
//# sourceMappingURL=DclQzF2e.chunk.js.map
|