@clickview/exchange 0.56.0 → 0.56.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{PswrCgft.chunk.js → 044iq0d1.chunk.js} +2 -2
- package/dist/scripts/{PswrCgft.chunk.js.map → 044iq0d1.chunk.js.map} +1 -1
- package/dist/scripts/{CoBxE0Ze.chunk.js → 6ucD94id.chunk.js} +2 -2
- package/dist/scripts/{CoBxE0Ze.chunk.js.map → 6ucD94id.chunk.js.map} +1 -1
- package/dist/scripts/{Bf33xjOw.chunk.js → B-PNdHqp.chunk.js} +2 -2
- package/dist/scripts/{Bf33xjOw.chunk.js.map → B-PNdHqp.chunk.js.map} +1 -1
- package/dist/scripts/{BsN5hGdn.chunk.js → B2zOyhnx.chunk.js} +2 -2
- package/dist/scripts/{BsN5hGdn.chunk.js.map → B2zOyhnx.chunk.js.map} +1 -1
- package/dist/scripts/{D36WobW6.chunk.js → B3cy6PVV.chunk.js} +2 -2
- package/dist/scripts/{D36WobW6.chunk.js.map → B3cy6PVV.chunk.js.map} +1 -1
- package/dist/scripts/{DaLZ0a8R.chunk.js → B3e4NkXy.chunk.js} +2 -2
- package/dist/scripts/{DaLZ0a8R.chunk.js.map → B3e4NkXy.chunk.js.map} +1 -1
- package/dist/scripts/{CucQidno.chunk.js → B4mwlW3k.chunk.js} +2 -2
- package/dist/scripts/{CucQidno.chunk.js.map → B4mwlW3k.chunk.js.map} +1 -1
- package/dist/scripts/{BrWxbCy6.chunk.js → BC8oIL4t.chunk.js} +2 -2
- package/dist/scripts/{BrWxbCy6.chunk.js.map → BC8oIL4t.chunk.js.map} +1 -1
- package/dist/scripts/{BolzEYoc.chunk.js → BDoSZnIa.chunk.js} +2 -2
- package/dist/scripts/{BolzEYoc.chunk.js.map → BDoSZnIa.chunk.js.map} +1 -1
- package/dist/scripts/{dZRQM-hv.chunk.js → BGg12SDH.chunk.js} +2 -2
- package/dist/scripts/{dZRQM-hv.chunk.js.map → BGg12SDH.chunk.js.map} +1 -1
- package/dist/scripts/{DiCC-7dB.chunk.js → BI6c50Jh.chunk.js} +2 -2
- package/dist/scripts/{DiCC-7dB.chunk.js.map → BI6c50Jh.chunk.js.map} +1 -1
- package/dist/scripts/{BDLmm9HB.chunk.js → BSIHfhEC.chunk.js} +2 -2
- package/dist/scripts/{BDLmm9HB.chunk.js.map → BSIHfhEC.chunk.js.map} +1 -1
- package/dist/scripts/BWIFX-Ik.chunk.js +2 -0
- package/dist/scripts/{zNwtPBUz.chunk.js.map → BWIFX-Ik.chunk.js.map} +1 -1
- package/dist/scripts/{DSFKTxPl.chunk.js → BWnE7KAO.chunk.js} +2 -2
- package/dist/scripts/{DSFKTxPl.chunk.js.map → BWnE7KAO.chunk.js.map} +1 -1
- package/dist/scripts/{De7o0fUe.chunk.js → Be3-ohNT.chunk.js} +3 -3
- package/dist/scripts/{De7o0fUe.chunk.js.map → Be3-ohNT.chunk.js.map} +1 -1
- package/dist/scripts/BlQxOSJi.chunk.js +2 -0
- package/dist/scripts/{BDys2rrG.chunk.js.map → BlQxOSJi.chunk.js.map} +1 -1
- package/dist/scripts/{D1uhKPP8.chunk.js → BoCG3rE6.chunk.js} +2 -2
- package/dist/scripts/{D1uhKPP8.chunk.js.map → BoCG3rE6.chunk.js.map} +1 -1
- package/dist/scripts/{BUlwG-06.chunk.js → BpW5Hw5z.chunk.js} +2 -2
- package/dist/scripts/{BUlwG-06.chunk.js.map → BpW5Hw5z.chunk.js.map} +1 -1
- package/dist/scripts/{Bj3FQ5Ya.chunk.js → BtTTlrnZ.chunk.js} +2 -2
- package/dist/scripts/{Bj3FQ5Ya.chunk.js.map → BtTTlrnZ.chunk.js.map} +1 -1
- package/dist/scripts/{B1tVxL6y.chunk.js → ButpMiJ1.chunk.js} +2 -2
- package/dist/scripts/{B1tVxL6y.chunk.js.map → ButpMiJ1.chunk.js.map} +1 -1
- package/dist/scripts/{C4ROYls7.chunk.js → By50Y4fi.chunk.js} +2 -2
- package/dist/scripts/{C4ROYls7.chunk.js.map → By50Y4fi.chunk.js.map} +1 -1
- package/dist/scripts/{Ddk3CuwQ.chunk.js → C3YXHQU-.chunk.js} +2 -2
- package/dist/scripts/{Ddk3CuwQ.chunk.js.map → C3YXHQU-.chunk.js.map} +1 -1
- package/dist/scripts/{C7toqgJ9.chunk.js → C3jPyokw.chunk.js} +2 -2
- package/dist/scripts/{C7toqgJ9.chunk.js.map → C3jPyokw.chunk.js.map} +1 -1
- package/dist/scripts/{UxXf3AJv.chunk.js → C5DBZwej.chunk.js} +2 -2
- package/dist/scripts/{UxXf3AJv.chunk.js.map → C5DBZwej.chunk.js.map} +1 -1
- package/dist/scripts/{C4F_pZyv.chunk.js → C6BGhDq3.chunk.js} +2 -2
- package/dist/scripts/{C4F_pZyv.chunk.js.map → C6BGhDq3.chunk.js.map} +1 -1
- package/dist/scripts/C6x-ZqLl.chunk.js +2 -0
- package/dist/scripts/{0mGPhW9k.chunk.js.map → C6x-ZqLl.chunk.js.map} +1 -1
- package/dist/scripts/{Bt6iO6Kj.chunk.js → CFa8QduK.chunk.js} +2 -2
- package/dist/scripts/{Bt6iO6Kj.chunk.js.map → CFa8QduK.chunk.js.map} +1 -1
- package/dist/scripts/{C3oO96po.chunk.js → CG6eaNuu.chunk.js} +2 -2
- package/dist/scripts/{C3oO96po.chunk.js.map → CG6eaNuu.chunk.js.map} +1 -1
- package/dist/scripts/{h9ujBzqa.chunk.js → CHFINytM.chunk.js} +2 -2
- package/dist/scripts/{h9ujBzqa.chunk.js.map → CHFINytM.chunk.js.map} +1 -1
- package/dist/scripts/{CWrjr29e.chunk.js → CHzv4hsQ.chunk.js} +2 -2
- package/dist/scripts/{CWrjr29e.chunk.js.map → CHzv4hsQ.chunk.js.map} +1 -1
- package/dist/scripts/{Cn9Jwmkc.chunk.js → CV6qoMzB.chunk.js} +2 -2
- package/dist/scripts/{Cn9Jwmkc.chunk.js.map → CV6qoMzB.chunk.js.map} +1 -1
- package/dist/scripts/{EAS5-0G3.chunk.js → CVca5RIC.chunk.js} +2 -2
- package/dist/scripts/{EAS5-0G3.chunk.js.map → CVca5RIC.chunk.js.map} +1 -1
- package/dist/scripts/CWRjbtTx.chunk.js +2 -0
- package/dist/scripts/{Cfw5zASx.chunk.js.map → CWRjbtTx.chunk.js.map} +1 -1
- package/dist/scripts/{B86gu8do.chunk.js → CX1XQ05a.chunk.js} +2 -2
- package/dist/scripts/{B86gu8do.chunk.js.map → CX1XQ05a.chunk.js.map} +1 -1
- package/dist/scripts/{BoyiBqIK.chunk.js → CYrSeREi.chunk.js} +2 -2
- package/dist/scripts/{BoyiBqIK.chunk.js.map → CYrSeREi.chunk.js.map} +1 -1
- package/dist/scripts/{CA2wPtyp.chunk.js → C_AYa87x.chunk.js} +2 -2
- package/dist/scripts/{CA2wPtyp.chunk.js.map → C_AYa87x.chunk.js.map} +1 -1
- package/dist/scripts/{B0OGvFw2.chunk.js → CbOOCRVJ.chunk.js} +2 -2
- package/dist/scripts/{B0OGvFw2.chunk.js.map → CbOOCRVJ.chunk.js.map} +1 -1
- package/dist/scripts/{9xHo2Cwe.chunk.js → CinRjwth.chunk.js} +2 -2
- package/dist/scripts/{9xHo2Cwe.chunk.js.map → CinRjwth.chunk.js.map} +1 -1
- package/dist/scripts/{oxlQycmi.chunk.js → CjXJ8oFf.chunk.js} +2 -2
- package/dist/scripts/{oxlQycmi.chunk.js.map → CjXJ8oFf.chunk.js.map} +1 -1
- package/dist/scripts/{C_hVa7Ra.chunk.js → CkEsSdbO.chunk.js} +2 -2
- package/dist/scripts/{C_hVa7Ra.chunk.js.map → CkEsSdbO.chunk.js.map} +1 -1
- package/dist/scripts/{BzaGFUjc.chunk.js → CmWKgt7c.chunk.js} +2 -2
- package/dist/scripts/{BzaGFUjc.chunk.js.map → CmWKgt7c.chunk.js.map} +1 -1
- package/dist/scripts/{BRCI_rEH.chunk.js → Co6EjRu3.chunk.js} +2 -2
- package/dist/scripts/{BRCI_rEH.chunk.js.map → Co6EjRu3.chunk.js.map} +1 -1
- package/dist/scripts/{D2RVG0Pu.chunk.js → Cqky1Knl.chunk.js} +2 -2
- package/dist/scripts/{D2RVG0Pu.chunk.js.map → Cqky1Knl.chunk.js.map} +1 -1
- package/dist/scripts/{C0CSgPvj.chunk.js → CsaYiq-6.chunk.js} +2 -2
- package/dist/scripts/{C0CSgPvj.chunk.js.map → CsaYiq-6.chunk.js.map} +1 -1
- package/dist/scripts/{DqAsIeVB.chunk.js → Ct-hl94f.chunk.js} +2 -2
- package/dist/scripts/{DqAsIeVB.chunk.js.map → Ct-hl94f.chunk.js.map} +1 -1
- package/dist/scripts/{kpU1ILSr.chunk.js → CwuTuPLO.chunk.js} +2 -2
- package/dist/scripts/{kpU1ILSr.chunk.js.map → CwuTuPLO.chunk.js.map} +1 -1
- package/dist/scripts/{-hO5xjbU.chunk.js → Cy191NLr.chunk.js} +2 -2
- package/dist/scripts/{-hO5xjbU.chunk.js.map → Cy191NLr.chunk.js.map} +1 -1
- package/dist/scripts/{BswE1yhG.chunk.js → CzBvFLUu.chunk.js} +2 -2
- package/dist/scripts/{BswE1yhG.chunk.js.map → CzBvFLUu.chunk.js.map} +1 -1
- package/dist/scripts/{BZnDGuzQ.chunk.js → DCGOcoWo.chunk.js} +2 -2
- package/dist/scripts/{BZnDGuzQ.chunk.js.map → DCGOcoWo.chunk.js.map} +1 -1
- package/dist/scripts/{DIFawdym.chunk.js → DEfSuFug.chunk.js} +2 -2
- package/dist/scripts/{DIFawdym.chunk.js.map → DEfSuFug.chunk.js.map} +1 -1
- package/dist/scripts/{B67qUxbj.chunk.js → DFNZXjHy.chunk.js} +2 -2
- package/dist/scripts/{B67qUxbj.chunk.js.map → DFNZXjHy.chunk.js.map} +1 -1
- package/dist/scripts/{Cliq624L.chunk.js → DGDSZYW9.chunk.js} +2 -2
- package/dist/scripts/{Cliq624L.chunk.js.map → DGDSZYW9.chunk.js.map} +1 -1
- package/dist/scripts/{W3L3GnYz.chunk.js → DLxCyfTf.chunk.js} +2 -2
- package/dist/scripts/{W3L3GnYz.chunk.js.map → DLxCyfTf.chunk.js.map} +1 -1
- package/dist/scripts/{DeC-NkSi.chunk.js → DQ7Osv3q.chunk.js} +2 -2
- package/dist/scripts/{DeC-NkSi.chunk.js.map → DQ7Osv3q.chunk.js.map} +1 -1
- package/dist/scripts/{mj8E03dO.chunk.js → DRDYq9ZL.chunk.js} +2 -2
- package/dist/scripts/{mj8E03dO.chunk.js.map → DRDYq9ZL.chunk.js.map} +1 -1
- package/dist/scripts/{oWzYOkEl.chunk.js → DSQI-Jdp.chunk.js} +2 -2
- package/dist/scripts/{oWzYOkEl.chunk.js.map → DSQI-Jdp.chunk.js.map} +1 -1
- package/dist/scripts/{CMoQks36.chunk.js → DSwVduDL.chunk.js} +2 -2
- package/dist/scripts/{CMoQks36.chunk.js.map → DSwVduDL.chunk.js.map} +1 -1
- package/dist/scripts/{Bn31qbi-.chunk.js → DUmKCSoR.chunk.js} +2 -2
- package/dist/scripts/{Bn31qbi-.chunk.js.map → DUmKCSoR.chunk.js.map} +1 -1
- package/dist/scripts/{B2pkApo6.chunk.js → DVisFoDC.chunk.js} +2 -2
- package/dist/scripts/{B2pkApo6.chunk.js.map → DVisFoDC.chunk.js.map} +1 -1
- package/dist/scripts/{aYbKmndA.chunk.js → DWtr2GDr.chunk.js} +2 -2
- package/dist/scripts/{aYbKmndA.chunk.js.map → DWtr2GDr.chunk.js.map} +1 -1
- package/dist/scripts/{CKJlxYxE.chunk.js → DXeWv8xM.chunk.js} +2 -2
- package/dist/scripts/{CKJlxYxE.chunk.js.map → DXeWv8xM.chunk.js.map} +1 -1
- package/dist/scripts/{CD7xQQSj.chunk.js → DZZlWrzc.chunk.js} +2 -2
- package/dist/scripts/{CD7xQQSj.chunk.js.map → DZZlWrzc.chunk.js.map} +1 -1
- package/dist/scripts/D_yZCyl0.chunk.js +2 -0
- package/dist/scripts/{nYKnuiKr.chunk.js.map → D_yZCyl0.chunk.js.map} +1 -1
- package/dist/scripts/{Dbdf7QGx.chunk.js → Da9-cwkH.chunk.js} +2 -2
- package/dist/scripts/{Dbdf7QGx.chunk.js.map → Da9-cwkH.chunk.js.map} +1 -1
- package/dist/scripts/{B9Zy84TP.chunk.js → DdJUaS75.chunk.js} +2 -2
- package/dist/scripts/{B9Zy84TP.chunk.js.map → DdJUaS75.chunk.js.map} +1 -1
- package/dist/scripts/{DVd5A_3v.chunk.js → DhNUjn7p.chunk.js} +2 -2
- package/dist/scripts/{DVd5A_3v.chunk.js.map → DhNUjn7p.chunk.js.map} +1 -1
- package/dist/scripts/{C6_0NPy2.chunk.js → Dhpe3VD3.chunk.js} +2 -2
- package/dist/scripts/{C6_0NPy2.chunk.js.map → Dhpe3VD3.chunk.js.map} +1 -1
- package/dist/scripts/DiJ1txP6.chunk.js +2 -0
- package/dist/scripts/{VBw4HYiM.chunk.js.map → DiJ1txP6.chunk.js.map} +1 -1
- package/dist/scripts/{C5UlFqqr.chunk.js → DjeFO5jj.chunk.js} +2 -2
- package/dist/scripts/{C5UlFqqr.chunk.js.map → DjeFO5jj.chunk.js.map} +1 -1
- package/dist/scripts/{C37FAa5c.chunk.js → Dn7S7HZe.chunk.js} +2 -2
- package/dist/scripts/{C37FAa5c.chunk.js.map → Dn7S7HZe.chunk.js.map} +1 -1
- package/dist/scripts/{BQEr0IGt.chunk.js → Duy0OOKL.chunk.js} +2 -2
- package/dist/scripts/{BQEr0IGt.chunk.js.map → Duy0OOKL.chunk.js.map} +1 -1
- package/dist/scripts/{DEvwqrCo.chunk.js → DxLg_mEO.chunk.js} +2 -2
- package/dist/scripts/{DEvwqrCo.chunk.js.map → DxLg_mEO.chunk.js.map} +1 -1
- package/dist/scripts/{D9ECiiu8.chunk.js → HYIMjXwZ.chunk.js} +2 -2
- package/dist/scripts/{D9ECiiu8.chunk.js.map → HYIMjXwZ.chunk.js.map} +1 -1
- package/dist/scripts/{9gPNCjBk.chunk.js → J651bFfk.chunk.js} +2 -2
- package/dist/scripts/{9gPNCjBk.chunk.js.map → J651bFfk.chunk.js.map} +1 -1
- package/dist/scripts/{Y40qqQUW.chunk.js → JZmjeIJo.chunk.js} +2 -2
- package/dist/scripts/{Y40qqQUW.chunk.js.map → JZmjeIJo.chunk.js.map} +1 -1
- package/dist/scripts/{BJG50MLZ.chunk.js → SI_6LGjL.chunk.js} +2 -2
- package/dist/scripts/{BJG50MLZ.chunk.js.map → SI_6LGjL.chunk.js.map} +1 -1
- package/dist/scripts/{CiXtVo-A.chunk.js → Wfuxh2YT.chunk.js} +2 -2
- package/dist/scripts/Wfuxh2YT.chunk.js.map +1 -0
- package/dist/scripts/{BvfTundg.chunk.js → Y2CHWdPG.chunk.js} +2 -2
- package/dist/scripts/{BvfTundg.chunk.js.map → Y2CHWdPG.chunk.js.map} +1 -1
- package/dist/scripts/{B57_c_CS.chunk.js → Y5a0i_3c.chunk.js} +2 -2
- package/dist/scripts/{B57_c_CS.chunk.js.map → Y5a0i_3c.chunk.js.map} +1 -1
- package/dist/scripts/{app-BwZTeN0O.js → app-cabh1nNK.js} +3 -3
- package/dist/scripts/{app-BwZTeN0O.js.map → app-cabh1nNK.js.map} +1 -1
- package/dist/scripts/{CW89a4Mj.chunk.js → b-AUm3ni.chunk.js} +2 -2
- package/dist/scripts/{CW89a4Mj.chunk.js.map → b-AUm3ni.chunk.js.map} +1 -1
- package/dist/scripts/{DToTQA1H.chunk.js → fqbX9HRm.chunk.js} +2 -2
- package/dist/scripts/{DToTQA1H.chunk.js.map → fqbX9HRm.chunk.js.map} +1 -1
- package/dist/scripts/{DLQTbn-d.chunk.js → oVMIGZTl.chunk.js} +2 -2
- package/dist/scripts/{DLQTbn-d.chunk.js.map → oVMIGZTl.chunk.js.map} +1 -1
- package/dist/scripts/{D9BoZZhI.chunk.js → tbYGeGLS.chunk.js} +2 -2
- package/dist/scripts/{D9BoZZhI.chunk.js.map → tbYGeGLS.chunk.js.map} +1 -1
- package/dist/scripts/{xWtPEEJC.chunk.js → uGV8Ulpl.chunk.js} +2 -2
- package/dist/scripts/{xWtPEEJC.chunk.js.map → uGV8Ulpl.chunk.js.map} +1 -1
- package/dist/scripts/{CNiWunhi.chunk.js → uyrSls2s.chunk.js} +2 -2
- package/dist/scripts/{CNiWunhi.chunk.js.map → uyrSls2s.chunk.js.map} +1 -1
- package/dist/scripts/{DXtSLojN.chunk.js → vJWLdqFY.chunk.js} +2 -2
- package/dist/scripts/{DXtSLojN.chunk.js.map → vJWLdqFY.chunk.js.map} +1 -1
- package/dist/scripts/{4sHzAWaU.chunk.js → wlWC_CCa.chunk.js} +2 -2
- package/dist/scripts/{4sHzAWaU.chunk.js.map → wlWC_CCa.chunk.js.map} +1 -1
- package/dist/scripts/wmclIpxx.chunk.js +2 -0
- package/dist/scripts/{JVT9lUoz.chunk.js.map → wmclIpxx.chunk.js.map} +1 -1
- package/dist/scripts/{o-4-XLY2.chunk.js → zBOmHm2e.chunk.js} +2 -2
- package/dist/scripts/{o-4-XLY2.chunk.js.map → zBOmHm2e.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/0mGPhW9k.chunk.js +0 -2
- package/dist/scripts/BDys2rrG.chunk.js +0 -2
- package/dist/scripts/Cfw5zASx.chunk.js +0 -2
- package/dist/scripts/CiXtVo-A.chunk.js.map +0 -1
- package/dist/scripts/JVT9lUoz.chunk.js +0 -2
- package/dist/scripts/VBw4HYiM.chunk.js +0 -2
- package/dist/scripts/nYKnuiKr.chunk.js +0 -2
- package/dist/scripts/zNwtPBUz.chunk.js +0 -2
- package/vite.config.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CjXJ8oFf.chunk.js","sources":["../../src/apps/tv/components/tv-region-select/partial-loading/PartialTvRegionSelect.tsx","../../src/apps/tv/components/tv-region-select/TvRegionSelect.tsx","../../src/apps/tv/components/tv-search-bar/TvSearchBar.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './partial-tv-region-select.module.scss';\n\nexport function PartialTvRegionSelect() {\n return (\n <div className={`${styles.regionSelect} partial-loading-background d-flex rounded mb-3`}>\n <div className='svg-container std'></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, TvDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\n\nimport { PartialTvRegionSelect } from 'apps/tv/components/tv-region-select/partial-loading/PartialTvRegionSelect';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nimport styles from './tv-region-select.module.scss';\n\ninterface TvRegionSelectProps {\n currentRegion: TvRegion;\n regions: TvRegion[];\n appLink: Core.AppLink;\n onClick: (region: TvRegion) => void;\n}\n\nexport function TvRegionSelect(props: TvRegionSelectProps): JSX.Element {\n const { currentRegion, regions, appLink } = props;\n\n if (!currentRegion || !regions)\n return <PartialTvRegionSelect />;\n\n if (regions.length <= 1)\n return <></>;\n\n return (\n <div className='d-flex align-items-center mb-3'>\n <span>Region: </span>\n <div className='dropdown'>\n <a\n className={`${styles.select} d-flex align-items-center btn btn-outline-dark ms-3`}\n id='region-select'\n type='button'\n data-bs-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n >\n <span>{currentRegion.stateFull}</span>\n <SvgContainer svg={ChevronDownSvg} />\n </a>\n <div\n className='dropdown-menu dropdown-menu-end'\n aria-labelledby='region-select'\n >\n {regions.map((region, index) => {\n if (region.id === currentRegion.id)\n return <React.Fragment key={index} />;\n\n return (\n <AppLink\n key={index}\n className='dropdown-item'\n appLink={{\n ...appLink,\n args: [region.code]\n }}\n analyticsData={{ region: currentRegion.code }}\n analyticsOptions={{\n actionType: UserAction.Select,\n entity: EntityType.Region,\n location: LocationContext.Dropdown,\n descriptor: TvDescriptor.RegionSelect\n }}\n onClick={() => props.onClick(region)}\n >\n {region.stateFull}\n </AppLink>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nimport styles from './tv-search-bar.module.scss';\n\ninterface TvSearchBarProps {\n region: TvRegion;\n query?: string;\n}\n\nexport function TvSearchBar(props: TvSearchBarProps): JSX.Element {\n const [ query, setQuery ] = React.useState(props.query ?? '');\n\n function onSubmit(event: React.FormEvent): void {\n event.preventDefault();\n\n if (!query)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.SEARCH,\n args: [props.region?.code],\n params: { query }\n });\n }\n\n return (\n <form onSubmit={onSubmit}>\n <div className={`${styles.searchBar} d-flex border border-dark rounded align-items-center mb-3`}>\n <SvgContainer svg={SearchSvg} />\n <input\n type='text'\n className='form-control h-100 w-100 py-0 border-0 shadow-none'\n placeholder='Search for programs on ClickView TV'\n value={query}\n onChange={e => setQuery(e.target.value)}\n autoComplete='off'\n />\n </div>\n </form>\n );\n}"],"names":["PartialTvRegionSelect","jsx","styles","TvRegionSelect","props","currentRegion","regions","appLink","Fragment","jsxs","SvgContainer","ChevronDownSvg","region","index","React","AppLink","UserAction","EntityType","LocationContext","TvDescriptor","TvSearchBar","query","setQuery","onSubmit","event","Core.AppLinkHelper","AppChannels","Actions","_a","SearchSvg","e"],"mappings":"oPAIO,SAASA,GAAwB,CACtC,OACEC,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGC,EAAO,YAAY,kDACpC,SAAAD,EAAAA,IAAC,MAAA,CAAI,UAAU,mBAAA,CAAoB,EACrC,CAEJ,wCCYO,SAASE,EAAeC,EAAyC,CACtE,KAAM,CAAE,cAAAC,EAAe,QAAAC,EAAS,QAAAC,CAAA,EAAYH,EAE5C,MAAI,CAACC,GAAiB,CAACC,QACbN,EAAA,EAAsB,EAE5BM,EAAQ,QAAU,EACbL,EAAAA,IAAAO,EAAAA,SAAA,EAAE,EAGTC,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAR,EAAAA,IAAC,QAAK,SAAA,UAAA,CAAQ,EACdQ,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CACC,UAAW,GAAGP,EAAO,MAAM,uDAC3B,GAAG,gBACH,KAAK,SACL,iBAAe,WACf,gBAAc,OACd,gBAAc,QAEd,SAAA,CAAAD,EAAAA,IAAC,OAAA,CAAM,WAAc,SAAA,CAAU,EAC/BA,EAAAA,IAACS,EAAA,CAAa,IAAKC,CAAA,CAAgB,CAAA,CAAA,CAAA,EAErCV,EAAAA,IAAC,MAAA,CACC,UAAU,kCACV,kBAAgB,gBAEf,SAAAK,EAAQ,IAAI,CAACM,EAAQC,IAChBD,EAAO,KAAOP,EAAc,GACvBJ,EAAAA,IAACa,EAAM,SAAN,CAAA,EAAoBD,CAAO,EAGnCZ,EAAAA,IAACc,EAAA,CAEC,UAAU,gBACV,QAAS,CACP,GAAGR,EACH,KAAM,CAACK,EAAO,IAAI,CAAA,EAEpB,cAAe,CAAE,OAAQP,EAAc,IAAA,EACvC,iBAAkB,CAChB,WAAYW,EAAW,OACvB,OAAQC,EAAW,OACnB,SAAUC,EAAgB,SAC1B,WAAYC,EAAa,YAAA,EAE3B,QAAS,IAAMf,EAAM,QAAQQ,CAAM,EAElC,SAAAA,EAAO,SAAA,EAfHC,CAAA,CAkBV,CAAA,CAAA,CACH,CAAA,CACF,CAAA,EACF,CAEJ,8CC5DO,SAASO,EAAYhB,EAAsC,CAChE,KAAM,CAAEiB,EAAOC,CAAS,EAAIR,EAAM,SAASV,EAAM,OAAS,EAAE,EAE5D,SAASmB,EAASC,EAA8B,OAC9CA,EAAM,eAAA,EAEDH,GAGLI,EAAmB,QAAQ,CACzB,YAAaC,EAAY,GACzB,OAAQC,EAAQ,GAAG,OACnB,KAAM,EAACC,EAAAxB,EAAM,SAAN,YAAAwB,EAAc,IAAI,EACzB,OAAQ,CAAE,MAAAP,CAAA,CAAM,CACjB,CACH,CAEA,OACEpB,EAAAA,IAAC,QAAK,SAAAsB,EACJ,SAAAd,EAAAA,KAAC,OAAI,UAAW,GAAGP,EAAO,SAAS,6DACjC,SAAA,CAAAD,EAAAA,IAACS,EAAA,CAAa,IAAKmB,CAAA,CAAW,EAC9B5B,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,qDACV,YAAY,sCACZ,MAAOoB,EACP,SAAUS,GAAKR,EAASQ,EAAE,OAAO,KAAK,EACtC,aAAa,KAAA,CAAA,CACf,CAAA,CACF,CAAA,CACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,ak as q,al as x,am as P,B as y,R as E,aB as S,a as N,b as B,ar as V,aq as I,aj as M,a3 as b,aU as O,l as D,ad as U,ae as W}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as e,ak as q,al as x,am as P,B as y,R as E,aB as S,a as N,b as B,ar as V,aq as I,aj as M,a3 as b,aU as O,l as D,ad as U,ae as W}from"./app-cabh1nNK.js";import{F,S as $}from"./CwuTuPLO.chunk.js";import{u as G,I as Q,P as Z}from"./ButpMiJ1.chunk.js";import{h as w}from"./C3YXHQU-.chunk.js";import{u as z}from"./DXeWv8xM.chunk.js";import{u as J}from"./D_yZCyl0.chunk.js";import{T as K,a as X}from"./CjXJ8oFf.chunk.js";import{T as f}from"./DGDSZYW9.chunk.js";import{u as Y}from"./C6BGhDq3.chunk.js";import{u as ee}from"./wmclIpxx.chunk.js";import{u as te}from"./uGV8Ulpl.chunk.js";import{A as ae}from"./CFa8QduK.chunk.js";import{B as se,a as re}from"./BSIHfhEC.chunk.js";import{B as ie}from"./C_AYa87x.chunk.js";import{B as ne}from"./JZmjeIJo.chunk.js";import{I as oe,a as le}from"./DRDYq9ZL.chunk.js";import{T as me}from"./DxLg_mEO.chunk.js";import{T as ce}from"./CinRjwth.chunk.js";import{T as de}from"./DWtr2GDr.chunk.js";import{t as A}from"./DZZlWrzc.chunk.js";import"./tbYGeGLS.chunk.js";import"./BC8oIL4t.chunk.js";import"./DhNUjn7p.chunk.js";import"./Kj832An8.chunk.js";import"./J651bFfk.chunk.js";import"./DUmKCSoR.chunk.js";import"./BtTTlrnZ.chunk.js";import"./B3e4NkXy.chunk.js";import"./Dn7S7HZe.chunk.js";import"./Ct-hl94f.chunk.js";import"./_sYSSSUN.chunk.js";import"./B3cy6PVV.chunk.js";import"./Duy0OOKL.chunk.js";import"./BlDVEZsX.chunk.js";import"./wlWC_CCa.chunk.js";const pe="tv.searchResultsEmptyState";function he(i){return e.jsx(q.Provider,{value:pe,children:e.jsxs(x,{children:[e.jsx(x.Image,{src:P.EmptyStates.SEARCH}),e.jsx(x.Heading,{children:i.query?e.jsx(y,{phrase:"headingWithQuery",options:{query:i.query}}):e.jsx(y,{phrase:"headingWithoutQuery"})}),e.jsx(x.Info,{children:e.jsx(y,{phrase:"info"})})]})})}const ue="_highlight_107l1_1",ge="_badgeOverlay_107l1_8",H={highlight:ue,badgeOverlay:ge};function R(i,t){const r=new RegExp(t,"gi");return i.replace(r,c=>`<span class=${H.highlight}>${c}</span>`)}function xe(i){var l,g,p;const{program:t,query:r,region:c,getVideoActions:j}=i,[a,d]=E.useState(!1),n={application:B.TV,action:N.Tv.PREVIEW,args:[c.code,t.id]},u=A(t.startTime,t.timeZone),o=A(t.stopTime,t.timeZone),T=Math.abs(S.diffBetween(u,o,"milliseconds"));return e.jsxs("div",{className:"row gx-3 mb-3",children:[e.jsx("div",{className:"col-3 flex-column align-items-flex-start pe-2",children:e.jsx("div",{className:"rounded rounded-3 overflow-hidden",children:e.jsxs(ne,{imageType:V.Thumbnails,data:t.thumbnailUrl,appLink:n,children:[e.jsx(oe,{type:le.Video}),e.jsx("div",{className:H.badgeOverlay,children:e.jsx(se,{type:re.DurationApproximate,data:T})})]})})}),e.jsxs("div",{className:"col-9 pb-2",children:[e.jsx(ae,{actions:j(t),className:"float-end mt-n1",actionsDropdownClassName:"btn btn-link ms-1"}),e.jsx(I,{appLink:n,children:e.jsx("h5",{className:"h4 mb-1 align-middle text-dark text-truncate",title:t.title??"",children:e.jsx("span",{dangerouslySetInnerHTML:{__html:R(t.title,r)}})})}),e.jsxs(ie,{className:"mb-1",children:[t.channelLogoUrl&&e.jsx(ce,{logoUrl:t.channelLogoUrl,className:"me-1",small:!0}),e.jsx(de,{program:t,className:"me-1",showDate:!0,showEndTime:!0}),t.hasAdsFree&&e.jsx(me,{small:!0})]}),e.jsx("div",{className:"mb-1",children:e.jsx("span",{dangerouslySetInnerHTML:{__html:R(t.description,r)}})}),!!((l=t.subtitleHits)!=null&&l.length)&&e.jsxs("div",{children:[(g=t.subtitleHits)==null?void 0:g.map(((m,h)=>!a&&h>1?e.jsx(E.Fragment,{},h):e.jsxs(I,{appLink:{...n,args:[...n.args],params:{currentTime:m.hitStartTime/1e3}},className:"d-block text-dark",children:[e.jsxs("span",{className:"fw-semibold",children:["[",S.format(S.add(u,m.hitStartTime,"milliseconds"),"h:mm:ss a"),"]"]})," ",e.jsx("span",{dangerouslySetInnerHTML:{__html:R(m.srtFragment,r)}})]},h))),!a&&((p=t.subtitleHits)==null?void 0:p.length)>2&&e.jsx("div",{className:"text-info cursor-pointer",onClick:()=>d(!0),children:"Show more"})]})]})]})}fe.defaultProps={queryParams:{}};function fe(i){var L;const{queryParams:t}=i,{query:r}=t,c=M(),j=z(),a=b(f.region(i.region)),d=b(f.regions()),n=b(a.data&&f.channels(a.data.code));a.hasCompleted&&!a.data&&w(O.BadRequest);const{setRegion:u}=te();ee(a),J([d,n]),D({title:r??""});const{items:o,hasMore:T,isFetching:l,nextCursor:g}=G(a.data&&p,m,h,s=>s.results,s=>s.page*25>s.totalNumber?null:(s.page+1).toString());function p(s){return f.search(a.data.code,t,+s)}function m(s){return c(p(s))}function h(s,v){if(s===1)return w(v);j.error("Something went wrong")}const k=Y("video-list",a.data),C=a.hasCompleted&&d.hasCompleted&&n.hasCompleted,_=[F.TvChannel(n.data),F.TvDateBroadcast(),F.TvFields()];return e.jsxs(e.Fragment,{children:[e.jsx(K,{query:r,region:a.data}),e.jsxs("div",{className:"d-flex justify-content-between mb-2",children:[e.jsx($,{queryParams:t,mainFilters:_,analyticsOptions:{entity:W.SearchResults,location:U.SearchFilters},appLink:{application:B.TV,action:N.Tv.SEARCH,args:[(L=a.data)==null?void 0:L.code]},hideDivider:!0,isFetchingOptions:!C}),e.jsx(X,{currentRegion:a.data,regions:d.data,appLink:{application:B.TV,action:N.Tv.SEARCH,params:{query:r}},onClick:u})]}),C&&e.jsx(e.Fragment,{children:o!=null&&o.length?e.jsxs(e.Fragment,{children:[o.map((s,v)=>e.jsx(xe,{program:s,query:r,region:a.data,getVideoActions:k},v)),(T||l)&&e.jsx(Q,{isFetching:l,fetchNext:m,nextCursor:g})]}):e.jsx(e.Fragment,{children:l?e.jsx("div",{className:"m-n2",children:e.jsx(Z,{})}):e.jsx(he,{query:r})})})]})}export{fe as TvSearchResultsView};
|
|
2
|
+
//# sourceMappingURL=CkEsSdbO.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C_hVa7Ra.chunk.js","sources":["../../src/apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState.tsx","../../src/apps/tv/views/tv-search-results/components/tv-search-result-item/TvSearchResultItem.tsx","../../src/apps/tv/views/tv-search-results/TvSearchResultsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\n\nconst namespace = 'tv.searchResultsEmptyState';\n\ninterface TvSearchResultsStateProps {\n query?: string;\n}\n\nexport function TvSearchResultsState(props: TvSearchResultsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.SEARCH} />\n\n <EmptyState.Heading>\n {props.query\n ? <Text phrase='headingWithQuery' options={{ query: props.query }} />\n : <Text phrase='headingWithoutQuery' />\n }\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions, Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvChannelBadge } from 'apps/tv/components/tv-channel-badge/TvChannelBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport styles from './tv-search-result-item.module.scss';\n\nfunction highlightText(text: string, query: string): string {\n const regex = new RegExp(query, 'gi');\n return text.replace(regex, match => `<span class=${styles.highlight}>${match}</span>`);\n}\n\ninterface TvSearchResultItemProps {\n query: string;\n program: TvSearchResult;\n region: TvRegion;\n getVideoActions: (video: TvProgram) => ActionOptions[];\n}\n\nexport function TvSearchResultItem(props: TvSearchResultItemProps): JSX.Element {\n const { program, query, region, getVideoActions } = props;\n\n const [ showMore, setShowMore ] = React.useState(false);\n\n const appLink = {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region.code, program.id ]\n };\n\n const startTime = toLocalTime(program.startTime, program.timeZone);\n const stopTime = toLocalTime(program.stopTime, program.timeZone);\n const diff = Math.abs(DateHelper.diffBetween(startTime, stopTime, 'milliseconds'));\n\n return (\n <div className='row gx-3 mb-3'>\n <div className='col-3 flex-column align-items-flex-start pe-2'>\n <div className='rounded rounded-3 overflow-hidden'>\n <BaseImage\n imageType={ImageType.Thumbnails}\n data={program.thumbnailUrl}\n appLink={appLink}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n\n <div className={styles.badgeOverlay}>\n <Badge\n type={BadgeType.DurationApproximate}\n data={diff}\n />\n </div>\n </BaseImage>\n </div>\n </div>\n <div className='col-9 pb-2'>\n <ActionsComponent\n actions={getVideoActions(program as TvProgram)}\n className='float-end mt-n1'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n <AppLink appLink={appLink}>\n <h5 className='h4 mb-1 align-middle text-dark text-truncate' title={program.title ?? ''}>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.title, query)\n }}></span>\n </h5>\n </AppLink>\n <BadgeListContainer className='mb-1'>\n {program.channelLogoUrl && <TvChannelBadge logoUrl={program.channelLogoUrl} className='me-1' small />}\n <TvProgramTimeBadge program={program as TvProgram} className='me-1' showDate showEndTime />\n {program.hasAdsFree && <TvAdFreeBadge small />}\n </BadgeListContainer>\n <div className='mb-1'>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.description, query)\n }}></span>\n </div>\n {!!program.subtitleHits?.length &&\n <div>\n {program.subtitleHits?.map(((hit, index) => {\n if (!showMore && index > 1)\n return <React.Fragment key={index} />;\n\n return (\n <AppLink\n key={index}\n appLink={{\n ...appLink,\n args: [...appLink.args],\n params: {\n currentTime: hit.hitStartTime / 1000\n }\n }}\n className='d-block text-dark'\n >\n <span className='fw-semibold'>\n [{DateHelper.format(DateHelper.add(startTime, hit.hitStartTime, 'milliseconds'), 'h:mm:ss a')}]\n </span>\n \n <span dangerouslySetInnerHTML={{\n __html: highlightText(hit.srtFragment, query)\n }}></span>\n </AppLink>\n );\n }))}\n {!showMore && program.subtitleHits?.length > 2 && <div className='text-info cursor-pointer' onClick={() => setShowMore(true)}>Show more</div>}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { TvSearchResponse } from 'apps/tv/interfaces/responses/TvSearchResponse';\nimport { TvSearchResultsState } from 'apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState';\n\nimport { TvSearchResultItem } from './components/tv-search-result-item/TvSearchResultItem';\n\ninterface TvSearchResultsViewProps {\n region: string;\n queryParams: HashObject;\n}\n\nTvSearchResultsView.defaultProps = {\n queryParams: {}\n};\n\nexport function TvSearchResultsView(props: TvSearchResultsViewProps): JSX.Element {\n const { queryParams } = props;\n const { query } = queryParams;\n\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n if (region.hasCompleted && !region.data) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n const { setRegion } = useSelectedRegion();\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels ]);\n\n useSetPageMetadata({ title: query ?? '' });\n\n const {\n items: programs,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<TvSearchResult, TvSearchResponse>(\n region.data && getRequest,\n fetchNext,\n onError,\n response => response.results,\n response => {\n if (response.page * 25 > response.totalNumber)\n return null;\n\n return (response.page + 1).toString();\n }\n );\n\n function getRequest(cursor?: string): Flight.Request {\n return TvRequests.search(\n region.data.code,\n queryParams,\n +cursor\n );\n }\n\n function fetchNext(cursor?: string): void {\n return fetch(getRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error('Something went wrong');\n }\n\n const getVideoActions = useGetTvActions('video-list', region.data);\n\n const dataLoaded = region.hasCompleted && regions.hasCompleted && channels.hasCompleted;\n\n const mainFilters = [\n Filters.TvChannel(channels.data),\n Filters.TvDateBroadcast(),\n Filters.TvFields()\n ];\n\n return (\n <>\n <TvSearchBar query={query} region={region.data} />\n\n <div className='d-flex justify-content-between mb-2'>\n <SearchFilters\n queryParams={queryParams}\n mainFilters={mainFilters}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.SearchFilters\n }}\n appLink={{ application: AppChannels.TV, action: Actions.Tv.SEARCH, args: [region.data?.code]}}\n hideDivider\n isFetchingOptions={!dataLoaded}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.SEARCH,\n params: { query: query }\n }}\n onClick={setRegion}\n />\n </div>\n\n {dataLoaded && (\n <>\n {programs?.length ? (\n <>\n {programs.map((program, index) => {\n return (\n <TvSearchResultItem\n key={index}\n program={program}\n query={query}\n region={region.data}\n getVideoActions={getVideoActions}\n />\n );\n })}\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n ) : (\n <>\n {isFetching ? (\n <div className='m-n2'>\n <PartialVideoList />\n </div>\n ) : <TvSearchResultsState query={query} />}\n </>\n )}\n </>\n )}\n </>\n );\n}"],"names":["namespace","TvSearchResultsState","props","LanguageNamespaceContext","EmptyState","jsx","ImageUrls","Text","highlightText","text","query","regex","match","styles","TvSearchResultItem","program","region","getVideoActions","showMore","setShowMore","React","appLink","AppChannels","Actions","startTime","toLocalTime","stopTime","diff","DateHelper","jsxs","BaseImage","ImageType","ImageFallback","ImageFallbackType","Badge","BadgeType","ActionsComponent","AppLink","BadgeListContainer","TvChannelBadge","TvProgramTimeBadge","TvAdFreeBadge","_a","_b","hit","index","_c","TvSearchResultsView","queryParams","fetch","Flight.useGetFetch","alerts","useAlerts","Flight.useBasicFetch","TvRequests","regions","channels","handleHttpError","HttpStatus","setRegion","useSelectedRegion","useHandleRegionError","useHandleObjectError","useSetPageMetadata","programs","hasMore","isFetching","nextCursor","useInfiniteList","getRequest","fetchNext","onError","response","cursor","pageNumber","httpStatus","useGetTvActions","dataLoaded","mainFilters","Filters","Fragment","TvSearchBar","SearchFilters","EntityType","LocationContext","TvRegionSelect","InfiniteScrollFooter","PartialVideoList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CkEsSdbO.chunk.js","sources":["../../src/apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState.tsx","../../src/apps/tv/views/tv-search-results/components/tv-search-result-item/TvSearchResultItem.tsx","../../src/apps/tv/views/tv-search-results/TvSearchResultsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\n\nconst namespace = 'tv.searchResultsEmptyState';\n\ninterface TvSearchResultsStateProps {\n query?: string;\n}\n\nexport function TvSearchResultsState(props: TvSearchResultsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.SEARCH} />\n\n <EmptyState.Heading>\n {props.query\n ? <Text phrase='headingWithQuery' options={{ query: props.query }} />\n : <Text phrase='headingWithoutQuery' />\n }\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions, Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvChannelBadge } from 'apps/tv/components/tv-channel-badge/TvChannelBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport styles from './tv-search-result-item.module.scss';\n\nfunction highlightText(text: string, query: string): string {\n const regex = new RegExp(query, 'gi');\n return text.replace(regex, match => `<span class=${styles.highlight}>${match}</span>`);\n}\n\ninterface TvSearchResultItemProps {\n query: string;\n program: TvSearchResult;\n region: TvRegion;\n getVideoActions: (video: TvProgram) => ActionOptions[];\n}\n\nexport function TvSearchResultItem(props: TvSearchResultItemProps): JSX.Element {\n const { program, query, region, getVideoActions } = props;\n\n const [ showMore, setShowMore ] = React.useState(false);\n\n const appLink = {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region.code, program.id ]\n };\n\n const startTime = toLocalTime(program.startTime, program.timeZone);\n const stopTime = toLocalTime(program.stopTime, program.timeZone);\n const diff = Math.abs(DateHelper.diffBetween(startTime, stopTime, 'milliseconds'));\n\n return (\n <div className='row gx-3 mb-3'>\n <div className='col-3 flex-column align-items-flex-start pe-2'>\n <div className='rounded rounded-3 overflow-hidden'>\n <BaseImage\n imageType={ImageType.Thumbnails}\n data={program.thumbnailUrl}\n appLink={appLink}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n\n <div className={styles.badgeOverlay}>\n <Badge\n type={BadgeType.DurationApproximate}\n data={diff}\n />\n </div>\n </BaseImage>\n </div>\n </div>\n <div className='col-9 pb-2'>\n <ActionsComponent\n actions={getVideoActions(program as TvProgram)}\n className='float-end mt-n1'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n <AppLink appLink={appLink}>\n <h5 className='h4 mb-1 align-middle text-dark text-truncate' title={program.title ?? ''}>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.title, query)\n }}></span>\n </h5>\n </AppLink>\n <BadgeListContainer className='mb-1'>\n {program.channelLogoUrl && <TvChannelBadge logoUrl={program.channelLogoUrl} className='me-1' small />}\n <TvProgramTimeBadge program={program as TvProgram} className='me-1' showDate showEndTime />\n {program.hasAdsFree && <TvAdFreeBadge small />}\n </BadgeListContainer>\n <div className='mb-1'>\n <span dangerouslySetInnerHTML={{\n __html: highlightText(program.description, query)\n }}></span>\n </div>\n {!!program.subtitleHits?.length &&\n <div>\n {program.subtitleHits?.map(((hit, index) => {\n if (!showMore && index > 1)\n return <React.Fragment key={index} />;\n\n return (\n <AppLink\n key={index}\n appLink={{\n ...appLink,\n args: [...appLink.args],\n params: {\n currentTime: hit.hitStartTime / 1000\n }\n }}\n className='d-block text-dark'\n >\n <span className='fw-semibold'>\n [{DateHelper.format(DateHelper.add(startTime, hit.hitStartTime, 'milliseconds'), 'h:mm:ss a')}]\n </span>\n \n <span dangerouslySetInnerHTML={{\n __html: highlightText(hit.srtFragment, query)\n }}></span>\n </AppLink>\n );\n }))}\n {!showMore && program.subtitleHits?.length > 2 && <div className='text-info cursor-pointer' onClick={() => setShowMore(true)}>Show more</div>}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useGetTvActions } from 'apps/tv/hooks/useGetTvActions';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { TvSearchResult } from 'apps/tv/interfaces/models/TvSearchResult';\nimport { TvSearchResponse } from 'apps/tv/interfaces/responses/TvSearchResponse';\nimport { TvSearchResultsState } from 'apps/tv/views/tv-search-results/empty-state/TvSearchEmptyState';\n\nimport { TvSearchResultItem } from './components/tv-search-result-item/TvSearchResultItem';\n\ninterface TvSearchResultsViewProps {\n region: string;\n queryParams: HashObject;\n}\n\nTvSearchResultsView.defaultProps = {\n queryParams: {}\n};\n\nexport function TvSearchResultsView(props: TvSearchResultsViewProps): JSX.Element {\n const { queryParams } = props;\n const { query } = queryParams;\n\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n if (region.hasCompleted && !region.data) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n const { setRegion } = useSelectedRegion();\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels ]);\n\n useSetPageMetadata({ title: query ?? '' });\n\n const {\n items: programs,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<TvSearchResult, TvSearchResponse>(\n region.data && getRequest,\n fetchNext,\n onError,\n response => response.results,\n response => {\n if (response.page * 25 > response.totalNumber)\n return null;\n\n return (response.page + 1).toString();\n }\n );\n\n function getRequest(cursor?: string): Flight.Request {\n return TvRequests.search(\n region.data.code,\n queryParams,\n +cursor\n );\n }\n\n function fetchNext(cursor?: string): void {\n return fetch(getRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error('Something went wrong');\n }\n\n const getVideoActions = useGetTvActions('video-list', region.data);\n\n const dataLoaded = region.hasCompleted && regions.hasCompleted && channels.hasCompleted;\n\n const mainFilters = [\n Filters.TvChannel(channels.data),\n Filters.TvDateBroadcast(),\n Filters.TvFields()\n ];\n\n return (\n <>\n <TvSearchBar query={query} region={region.data} />\n\n <div className='d-flex justify-content-between mb-2'>\n <SearchFilters\n queryParams={queryParams}\n mainFilters={mainFilters}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.SearchFilters\n }}\n appLink={{ application: AppChannels.TV, action: Actions.Tv.SEARCH, args: [region.data?.code]}}\n hideDivider\n isFetchingOptions={!dataLoaded}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.SEARCH,\n params: { query: query }\n }}\n onClick={setRegion}\n />\n </div>\n\n {dataLoaded && (\n <>\n {programs?.length ? (\n <>\n {programs.map((program, index) => {\n return (\n <TvSearchResultItem\n key={index}\n program={program}\n query={query}\n region={region.data}\n getVideoActions={getVideoActions}\n />\n );\n })}\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n ) : (\n <>\n {isFetching ? (\n <div className='m-n2'>\n <PartialVideoList />\n </div>\n ) : <TvSearchResultsState query={query} />}\n </>\n )}\n </>\n )}\n </>\n );\n}"],"names":["namespace","TvSearchResultsState","props","LanguageNamespaceContext","EmptyState","jsx","ImageUrls","Text","highlightText","text","query","regex","match","styles","TvSearchResultItem","program","region","getVideoActions","showMore","setShowMore","React","appLink","AppChannels","Actions","startTime","toLocalTime","stopTime","diff","DateHelper","jsxs","BaseImage","ImageType","ImageFallback","ImageFallbackType","Badge","BadgeType","ActionsComponent","AppLink","BadgeListContainer","TvChannelBadge","TvProgramTimeBadge","TvAdFreeBadge","_a","_b","hit","index","_c","TvSearchResultsView","queryParams","fetch","Flight.useGetFetch","alerts","useAlerts","Flight.useBasicFetch","TvRequests","regions","channels","handleHttpError","HttpStatus","setRegion","useSelectedRegion","useHandleRegionError","useHandleObjectError","useSetPageMetadata","programs","hasMore","isFetching","nextCursor","useInfiniteList","getRequest","fetchNext","onError","response","cursor","pageNumber","httpStatus","useGetTvActions","dataLoaded","mainFilters","Filters","Fragment","TvSearchBar","SearchFilters","EntityType","LocationContext","TvRegionSelect","InfiniteScrollFooter","PartialVideoList"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as h,U as g,L as u,a3 as d,a5 as m,aa as f,aD as p,q as E,a6 as P}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{D as h,U as g,L as u,a3 as d,a5 as m,aa as f,aD as p,q as E,a6 as P}from"./app-cabh1nNK.js";import{u as U}from"./DXeWv8xM.chunk.js";const c="shared.verifiedEmailError";class q extends h{constructor(e,r,s){super("VerifiedEmailRequiredError"),this.message=e,this.liteUrl=r,this.hasLite=s}get name(){return"VerifiedEmailRequiredError"}get dialogOptions(){const e=g.safeUrlConcat(this.liteUrl,"settings/account");return{title:u.getPhrase(c,"heading"),text:this.hasLite?`${this.message} ${u.getPhrase(c,"visitSettings",{href:e})}`:this.message,buttons:[{text:u.getPhrase(c,"close"),className:"btn btn-dark",success:!0}]}}}const R=()=>{var a;const t=d(m.currentUser()),e=d(((a=t.data)==null?void 0:a.isAuthenticated)&&f.userProducts()),r=!e.hasCompleted;return{hasProduct:i=>{var o;return r||e.hasError||!((o=e.data)!=null&&o.length)?!1:e.data.some(n=>n.id===i)},products:e,isLoadingProducts:r}};function S(){const t=U(),{hasProduct:e,isLoadingProducts:r}=R(),s=d(p.config());function a(i,o,n){var l;if(!i.responseJSON||((l=i.responseJSON)==null?void 0:l.type)!=="no-email"){t.error(o);return}E.throw(new q(n,s.data.liteUrl,e(P.Primary)))}return{handleGenerateReportError:a,loading:!s.hasCompleted||r}}export{S as u};
|
|
2
|
+
//# sourceMappingURL=CmWKgt7c.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CmWKgt7c.chunk.js","sources":["../../../../libs/shared/src/errors/general/verified-email/VerifiedEmailRequiredError.ts","../../../../libs/shared/src/hooks/UseProducts.ts","../../../../libs/shared/src/hooks/useVerifiedEmailRequiredErrorHandler.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.verifiedEmailError';\n\nexport class VerifiedEmailRequiredError extends DialogError {\n public message: string;\n public liteUrl: string;\n public hasLite: boolean;\n\n constructor(message: string, liteUrl: string, hasLite: boolean) {\n super('VerifiedEmailRequiredError');\n\n this.message = message;\n this.liteUrl = liteUrl;\n this.hasLite = hasLite;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'VerifiedEmailRequiredError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n const href = UrlHelper.safeUrlConcat(this.liteUrl, 'settings/account');\n\n return {\n title: LanguageService.getPhrase(namespace, 'heading'),\n text: this.hasLite\n ? `${this.message} ${LanguageService.getPhrase(namespace, 'visitSettings', { href })}`\n : this.message,\n buttons: [{\n text: LanguageService.getPhrase(namespace, 'close'),\n className: 'btn btn-dark',\n success: true\n }]\n };\n }\n}","import { Flight } from 'libs/common/flight';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, Product } from 'libs/shared/interfaces';\n\nexport type HasProductFunc = (productId: ProductId) => boolean;\n\nexport interface UseProductsResponse {\n hasProduct: (product: ProductId) => boolean;\n products: Flight.Response<Product[]>;\n isLoadingProducts: boolean;\n}\n\nexport const useProducts = (): UseProductsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const products = Flight.useBasicFetch<Product[]>(currentUser.data?.isAuthenticated && ProductRequests.userProducts());\n const isLoadingProducts = !products.hasCompleted;\n\n const hasProduct = (productId: ProductId) => {\n if (isLoadingProducts || products.hasError)\n return false;\n\n if (!products.data?.length)\n return false;\n\n return products.data.some(product => product.id === productId);\n };\n\n return {\n hasProduct,\n products,\n isLoadingProducts\n };\n};","import { Core } from 'libs/common/backbone/index';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { VerifiedEmailRequiredError } from 'libs/shared/errors/general/verified-email/VerifiedEmailRequiredError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { Config } from 'libs/shared/interfaces';\n\nexport function useVerifiedEmailRequiredErrorHandler() {\n const alerts = useAlerts();\n const { hasProduct, isLoadingProducts } = useProducts();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function handleGenerateReportError(xhr: Xhr, message: string, noEmailError: string) {\n if (!xhr.responseJSON || xhr.responseJSON?.type !== 'no-email') {\n alerts.error(message);\n return;\n }\n\n Core.ErrorHelper.throw(\n new VerifiedEmailRequiredError(noEmailError, config.data.liteUrl, hasProduct(ProductId.Primary))\n );\n }\n\n return {\n handleGenerateReportError,\n loading: !config.hasCompleted || isLoadingProducts\n };\n}"],"names":["namespace","VerifiedEmailRequiredError","DialogError","message","liteUrl","hasLite","href","UrlHelper","LanguageService","useProducts","currentUser","Flight.useBasicFetch","UserRequests","products","_a","ProductRequests","isLoadingProducts","productId","product","useVerifiedEmailRequiredErrorHandler","alerts","useAlerts","hasProduct","config","ConfigRequests","handleGenerateReportError","xhr","noEmailError","Core.ErrorHelper","ProductId"],"mappings":"2IAMA,MAAMA,EAAY,4BAEX,MAAMC,UAAmCC,CAAY,CAK1D,YAAYC,EAAiBC,EAAiBC,EAAkB,CAC9D,MAAM,4BAA4B,EAElC,KAAK,QAAUF,EACf,KAAK,QAAUC,EACf,KAAK,QAAUC,CACjB,CAGA,IAAW,MAAe,CACxB,MAAO,4BACT,CAGA,IAAW,eAA+B,CACxC,MAAMC,EAAOC,EAAU,cAAc,KAAK,QAAS,kBAAkB,EAErE,MAAO,CACL,MAAOC,EAAgB,UAAUR,EAAW,SAAS,EACrD,KAAM,KAAK,QACP,GAAG,KAAK,OAAO,IAAIQ,EAAgB,UAAUR,EAAW,gBAAiB,CAAE,KAAAM,CAAA,CAAM,CAAC,GAClF,KAAK,QACT,QAAS,CAAC,CACR,KAAME,EAAgB,UAAUR,EAAW,OAAO,EAClD,UAAW,eACX,QAAS,EAAA,CACV,CAAA,CAEL,CACF,CC3BO,MAAMS,EAAc,IAA2B,OACpD,MAAMC,EAAcC,EAAkCC,EAAa,aAAa,EAC1EC,EAAWF,IAAgCG,EAAAJ,EAAY,OAAZ,YAAAI,EAAkB,kBAAmBC,EAAgB,cAAc,EAC9GC,EAAoB,CAACH,EAAS,aAYpC,MAAO,CACL,WAXkBI,GAAyB,OAI3C,OAHID,GAAqBH,EAAS,UAG9B,GAACC,EAAAD,EAAS,OAAT,MAAAC,EAAe,QACX,GAEFD,EAAS,KAAK,KAAKK,GAAWA,EAAQ,KAAOD,CAAS,CAC/D,EAIE,SAAAJ,EACA,kBAAAG,CAAA,CAEJ,ECxBO,SAASG,GAAuC,CACrD,MAAMC,EAASC,EAAA,EACT,CAAE,WAAAC,EAAY,kBAAAN,CAAA,EAAsBP,EAAA,EACpCc,EAASZ,EAA6Ba,EAAe,QAAQ,EAEnE,SAASC,EAA0BC,EAAUvB,EAAiBwB,EAAsB,OAClF,GAAI,CAACD,EAAI,gBAAgBZ,EAAAY,EAAI,eAAJ,YAAAZ,EAAkB,QAAS,WAAY,CAC9DM,EAAO,MAAMjB,CAAO,EACpB,MACF,CAEAyB,EAAiB,MACf,IAAI3B,EAA2B0B,EAAcJ,EAAO,KAAK,QAASD,EAAWO,EAAU,OAAO,CAAC,CAAA,CAEnG,CAEA,MAAO,CACL,0BAAAJ,EACA,QAAS,CAACF,EAAO,cAAgBP,CAAA,CAErC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as e}from"./app-cabh1nNK.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=Co6EjRu3.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Co6EjRu3.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{r as i,a0 as j,j as e,L as r,aq as S,G as A,Q as E,F as M,ao as o}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{r as i,a0 as j,j as e,L as r,aq as S,G as A,Q as E,F as M,ao as o}from"./app-cabh1nNK.js";import{M as y}from"./_sYSSSUN.chunk.js";import{P as C,C as F}from"./Dn7S7HZe.chunk.js";const R="shared.breadcrumbComponent",B=r.encloseNamespace(R),O=64,f=48,u=i.forwardRef((t,a)=>{const{breadcrumb:{name:s,appLink:n,active:h},withBackIcon:p,linkClassName:g}=t;let c=s,d=null;return c.length>f&&(c=s.slice(0,f)+"...",d=s),e.jsx("li",{className:`breadcrumb-item${h?" active":""}`,title:d,children:h?e.jsx("strong",{children:c}):e.jsxs(S,{appLink:n,ref:a,className:n?g:"",children:[p&&e.jsx(A,{svg:F,size:E.Small}),e.jsx("span",{className:p?"ms-2":"",children:c})]})})}),Q=({breadcrumbs:t,linkClassName:a})=>{const s=j(y.XS),n=(t==null?void 0:t.length)||0,[h,p]=i.useState(!1),[g,c]=i.useState(!1),d=i.useRef(null);i.useEffect(()=>{const m=(t==null?void 0:t.reduce((x,T)=>x+T.name.length,0))??0;n>4&&m>O&&p(!0)},[t==null?void 0:t.length]),i.useLayoutEffect(()=>{var m;g&&((m=d.current)==null||m.focus())},[d.current,g]);function v(){p(!1),c(!0)}if(!n||s&&n<2)return e.jsx(e.Fragment,{});if(s)return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:e.jsx(u,{breadcrumb:t[n-2],withBackIcon:!0,linkClassName:a})})});const N=e.jsx(u,{breadcrumb:t[0],linkClassName:a}),P=n>2?e.jsx(u,{breadcrumb:t[1],linkClassName:a}):e.jsx(e.Fragment,{}),b=n>3?e.jsx(u,{breadcrumb:t[n-2],linkClassName:a}):e.jsx(e.Fragment,{}),L=n>1?e.jsx(u,{breadcrumb:t[n-1],linkClassName:a}):e.jsx(e.Fragment,{}),w=t.slice(2,n-2);return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsxs("ol",{className:"breadcrumb m-0 p-0",children:[N,P,h?e.jsx("li",{className:"breadcrumb-item",children:e.jsx("button",{className:"btn-link",onClick:v,"aria-label":B("expand"),children:"..."})}):w.map((m,x)=>e.jsx(u,{breadcrumb:m,ref:x===0?d:null,linkClassName:a},x)),b,L]})})},V=i.memo(function({numItems:t=3}){return j(y.XS)?e.jsx("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:C.getPartialLoadingItems({numItems:t}).map(({width:s},n)=>e.jsx("li",{className:"breadcrumb-item",children:e.jsx("span",{className:"d-inline-block partial-loading-background",style:{width:s},dangerouslySetInnerHTML:{__html:" "}})},n))})})}),l="shared.videoSortSelect",_=M.memoize(()=>({[o.RecentlyAdded]:{name:r.getPhrase(l,"recentlyAdded")},[o.AtoZ]:{name:r.getPhrase(l,"atoz")},[o.ZtoA]:{name:r.getPhrase(l,"ztoa")},[o.Newest]:{name:r.getPhrase(l,"newest")},[o.Oldest]:{name:r.getPhrase(l,"oldest")},[o.Series]:{name:r.getPhrase(l,"series")}}));function k(t){let a=_();return t&&(a={[o.ProductionYear]:{name:r.getPhrase(l,"productionYear")},...a}),a}z.defaultProps={variant:"light"};function z(t){const a=t.sortTypes||k(t.includeProductionYear);return e.jsxs("div",{className:"dropdown",children:[e.jsx("button",{className:`btn btn-${t.variant} ms-2 dropdown-toggle`,type:"button",id:"sort-select","data-bs-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",children:a[t.type].name}),e.jsx("ul",{className:"dropdown-menu dropdown-menu-end","aria-labelledby":"sort-select",children:Object.keys(a).map(s=>{let n="dropdown-item";return s===t.type&&(n+=" active"),e.jsx("li",{children:e.jsx(S,{className:n,appLink:t.getSortAppLink(s),analyticsData:{sort:a[s].name},analyticsOptions:t.analyticsOptions,children:a[s].name})},s)})})]})}export{Q as B,V as P,z as V};
|
|
2
|
+
//# sourceMappingURL=Cqky1Knl.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D2RVG0Pu.chunk.js","sources":["../../../../libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","../../../../libs/shared/src/components/video-sort-select/VideoSortSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n linkClassName?: string;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon, linkClassName } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref} className={appLink ? linkClassName : ''}>\n {withBackIcon && <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n linkClassName?: string;\n}\n\nexport const Breadcrumbs = ({ breadcrumbs, linkClassName }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon linkClassName={linkClassName} />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} linkClassName={linkClassName} />;\n const second = length > 2\n ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} linkClassName={linkClassName} />\n : <></>;\n const secondLast = length > 3\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} linkClassName={linkClassName} />\n : <></>;\n const last = length > 1\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} linkClassName={linkClassName} />\n : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n linkClassName={linkClassName}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\n\nconst namespace = 'shared.videoSortSelect';\n\ntype SortTypes = {[sort: string]: { name: string }};\n\nconst getDefaultSortTypes: () => SortTypes = FunctionHelper.memoize(() => {\n return {\n [VideoSortType.RecentlyAdded]: {\n name: LanguageService.getPhrase(namespace, 'recentlyAdded')\n },\n [VideoSortType.AtoZ]: {\n name: LanguageService.getPhrase(namespace, 'atoz')\n },\n [VideoSortType.ZtoA]: {\n name: LanguageService.getPhrase(namespace, 'ztoa')\n },\n [VideoSortType.Newest]: {\n name: LanguageService.getPhrase(namespace, 'newest')\n },\n [VideoSortType.Oldest]: {\n name: LanguageService.getPhrase(namespace, 'oldest')\n },\n [VideoSortType.Series]: {\n name: LanguageService.getPhrase(namespace, 'series')\n }\n };\n});\n\nfunction getSortTypes(productionYear: boolean): SortTypes {\n let defaultSortTypes = getDefaultSortTypes();\n\n if (productionYear) {\n defaultSortTypes = {\n [VideoSortType.ProductionYear]: {\n name: LanguageService.getPhrase(namespace, 'productionYear')\n },\n ...defaultSortTypes\n };\n }\n \n return defaultSortTypes;\n}\n\ninterface VideoSortSelectProps {\n type: VideoSortType;\n getSortAppLink: (sort: string) => Core.AppLink;\n variant?: ButtonProps['variant'];\n sortTypes?: SortTypes;\n analyticsOptions: AnalyticsOptions;\n includeProductionYear?: boolean;\n}\n\nVideoSortSelect.defaultProps = {\n variant: 'light'\n};\n\nexport function VideoSortSelect(props: VideoSortSelectProps): JSX.Element {\n const sortTypes = props.sortTypes || getSortTypes(props.includeProductionYear);\n\n return (\n <div className='dropdown'>\n <button className={`btn btn-${props.variant} ms-2 dropdown-toggle`} type='button' id='sort-select' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>\n {sortTypes[props.type].name}\n </button>\n <ul className='dropdown-menu dropdown-menu-end' aria-labelledby='sort-select'>\n {Object.keys(sortTypes).map(k => {\n let className = 'dropdown-item';\n\n if (k === props.type)\n className += ' active';\n\n return (\n <li key={k}>\n <AppLink\n className={className}\n appLink={props.getSortAppLink(k)}\n analyticsData={{\n sort: sortTypes[k].name\n }}\n analyticsOptions={props.analyticsOptions}\n >\n {sortTypes[k].name}\n </AppLink>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","COLLAPSE_CHARACTER_COUNT","MAX_SEGMENT_LENGTH","BreadcrumbItem","React.forwardRef","props","ref","name","appLink","active","withBackIcon","linkClassName","trimmedName","title","jsx","jsxs","AppLink","SvgContainer","ChevronLeftSvg","SvgContainerSize","Breadcrumbs","breadcrumbs","isMobile","useMediaQuery","MediaQueryStrings","length","collapse","setCollapse","React.useState","shouldFocus","setShouldFocus","expandRef","React.useRef","React.useEffect","characterLength","prev","next","React.useLayoutEffect","_a","onClickExpand","Fragment","first","second","secondLast","last","rest","breadcrumb","idx","PartialBreadcrumbs","React.memo","numItems","PartialLoadingHelper","width","getDefaultSortTypes","FunctionHelper","VideoSortType","getSortTypes","productionYear","defaultSortTypes","VideoSortSelect","sortTypes","k","className"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Cqky1Knl.chunk.js","sources":["../../../../libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","../../../../libs/shared/src/components/video-sort-select/VideoSortSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n linkClassName?: string;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon, linkClassName } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref} className={appLink ? linkClassName : ''}>\n {withBackIcon && <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n linkClassName?: string;\n}\n\nexport const Breadcrumbs = ({ breadcrumbs, linkClassName }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon linkClassName={linkClassName} />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} linkClassName={linkClassName} />;\n const second = length > 2\n ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} linkClassName={linkClassName} />\n : <></>;\n const secondLast = length > 3\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} linkClassName={linkClassName} />\n : <></>;\n const last = length > 1\n ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} linkClassName={linkClassName} />\n : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n linkClassName={linkClassName}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\n\nconst namespace = 'shared.videoSortSelect';\n\ntype SortTypes = {[sort: string]: { name: string }};\n\nconst getDefaultSortTypes: () => SortTypes = FunctionHelper.memoize(() => {\n return {\n [VideoSortType.RecentlyAdded]: {\n name: LanguageService.getPhrase(namespace, 'recentlyAdded')\n },\n [VideoSortType.AtoZ]: {\n name: LanguageService.getPhrase(namespace, 'atoz')\n },\n [VideoSortType.ZtoA]: {\n name: LanguageService.getPhrase(namespace, 'ztoa')\n },\n [VideoSortType.Newest]: {\n name: LanguageService.getPhrase(namespace, 'newest')\n },\n [VideoSortType.Oldest]: {\n name: LanguageService.getPhrase(namespace, 'oldest')\n },\n [VideoSortType.Series]: {\n name: LanguageService.getPhrase(namespace, 'series')\n }\n };\n});\n\nfunction getSortTypes(productionYear: boolean): SortTypes {\n let defaultSortTypes = getDefaultSortTypes();\n\n if (productionYear) {\n defaultSortTypes = {\n [VideoSortType.ProductionYear]: {\n name: LanguageService.getPhrase(namespace, 'productionYear')\n },\n ...defaultSortTypes\n };\n }\n \n return defaultSortTypes;\n}\n\ninterface VideoSortSelectProps {\n type: VideoSortType;\n getSortAppLink: (sort: string) => Core.AppLink;\n variant?: ButtonProps['variant'];\n sortTypes?: SortTypes;\n analyticsOptions: AnalyticsOptions;\n includeProductionYear?: boolean;\n}\n\nVideoSortSelect.defaultProps = {\n variant: 'light'\n};\n\nexport function VideoSortSelect(props: VideoSortSelectProps): JSX.Element {\n const sortTypes = props.sortTypes || getSortTypes(props.includeProductionYear);\n\n return (\n <div className='dropdown'>\n <button className={`btn btn-${props.variant} ms-2 dropdown-toggle`} type='button' id='sort-select' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>\n {sortTypes[props.type].name}\n </button>\n <ul className='dropdown-menu dropdown-menu-end' aria-labelledby='sort-select'>\n {Object.keys(sortTypes).map(k => {\n let className = 'dropdown-item';\n\n if (k === props.type)\n className += ' active';\n\n return (\n <li key={k}>\n <AppLink\n className={className}\n appLink={props.getSortAppLink(k)}\n analyticsData={{\n sort: sortTypes[k].name\n }}\n analyticsOptions={props.analyticsOptions}\n >\n {sortTypes[k].name}\n </AppLink>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","COLLAPSE_CHARACTER_COUNT","MAX_SEGMENT_LENGTH","BreadcrumbItem","React.forwardRef","props","ref","name","appLink","active","withBackIcon","linkClassName","trimmedName","title","jsx","jsxs","AppLink","SvgContainer","ChevronLeftSvg","SvgContainerSize","Breadcrumbs","breadcrumbs","isMobile","useMediaQuery","MediaQueryStrings","length","collapse","setCollapse","React.useState","shouldFocus","setShouldFocus","expandRef","React.useRef","React.useEffect","characterLength","prev","next","React.useLayoutEffect","_a","onClickExpand","Fragment","first","second","secondLast","last","rest","breadcrumb","idx","PartialBreadcrumbs","React.memo","numItems","PartialLoadingHelper","width","getDefaultSortTypes","FunctionHelper","VideoSortType","getSortTypes","productionYear","defaultSortTypes","VideoSortSelect","sortTypes","k","className"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{an as b,U as o,m as L,S as l,j as s,aj as A,a3 as f,l as k,ao as N,a as w,b as C,L as I,ac as q,af as B,ae as O,ad as U,a5 as R}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{an as b,U as o,m as L,S as l,j as s,aj as A,a3 as f,l as k,ao as N,a as w,b as C,L as I,ac as q,af as B,ae as O,ad as U,a5 as R}from"./app-cabh1nNK.js";import{P as T,B as W,V as F}from"./Cqky1Knl.chunk.js";import{P as S,u as H,I as G}from"./ButpMiJ1.chunk.js";import{u as _,a as D,V as M}from"./DjeFO5jj.chunk.js";import{h as X}from"./C3YXHQU-.chunk.js";import{u as Y}from"./DXeWv8xM.chunk.js";import{u as Q}from"./D_yZCyl0.chunk.js";import{E as z}from"./BoCG3rE6.chunk.js";import{a as J}from"./BI6c50Jh.chunk.js";import{b as K,a as Z}from"./DdJUaS75.chunk.js";import"./_sYSSSUN.chunk.js";import"./Dn7S7HZe.chunk.js";import"./DRDYq9ZL.chunk.js";import"./BtTTlrnZ.chunk.js";import"./Ct-hl94f.chunk.js";import"./B3cy6PVV.chunk.js";import"./6ucD94id.chunk.js";import"./C6x-ZqLl.chunk.js";import"./B2zOyhnx.chunk.js";import"./BlDVEZsX.chunk.js";import"./wlWC_CCa.chunk.js";import"./pkzD5BEm.chunk.js";import"./HYIMjXwZ.chunk.js";import"./BSIHfhEC.chunk.js";import"./C_AYa87x.chunk.js";import"./JZmjeIJo.chunk.js";import"./Wfuxh2YT.chunk.js";import"./tbYGeGLS.chunk.js";import"./BDoSZnIa.chunk.js";import"./CFa8QduK.chunk.js";import"./Kj832An8.chunk.js";import"./B3e4NkXy.chunk.js";import"./Dhpe3VD3.chunk.js";const j={sharedSeries:(e,t)=>o.urlBuilder(`/api/objects/${e}`,{query:l.SERIES,shareId:t}),seriesWithVideos:(e,t=3)=>`{gateway}/v1/objects/${e}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${t}}`},ee={series(e){const t={query:l.SERIES};return{url:o.urlBuilder(`{gateway}/v1/objects/${e}`,t),publicUrl:o.urlBuilder(`/api/objects/${e}`,t),key:`series:${e}`}},sharedSeries(e,t){return{url:j.sharedSeries(e,t),key:`shared:series:${e}:${t}`}},seriesWithVideos(e,t=3){return{url:j.seriesWithVideos(e,t),key:`series:${e}:with:videos:${t}`}},seriesWithThumbnailAndCount(e){return{url:`{gateway}/v1/objects/${e}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,key:`series:${e}:thumbnail:count`}},seriesVideos(e,t,n,r){const a=b.getVideoSortParam(n),u=["series",e,"videos",r,n].filter(c=>!!c).join(":");return{url:o.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:`{${a}}${l.VIDEO_COLLECTION}`,cursor:r}),publicUrl:o.urlBuilder(`/api/objects/collections/${e}/videos`,{query:`{${a}}${L.VIDEO_COLLECTION}`,cursor:r}),key:u}}};function se(){return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"partial-loading-background pb-4 mb-3 w-50"}),s.jsx("div",{className:"d-flex align-items-center justify-content-between mb-2",children:s.jsx(T,{})}),s.jsx("div",{className:"mx-n2",children:s.jsx(S,{})})]})}const te="exchange.exchangeSeries",g=I.encloseNamespace(te);function Oe(e){var x;const t=A(),n=Y(),r=f(ee.series(e.seriesId)),a=f(R.currentUser());k({title:(x=r.data)==null?void 0:x.name}),Q(r);const{commonVideoProps:u}=_(),c=!!a.data&&b.getOrSetSortType(a.data.id,e.sort,N.ProductionYear,"series"),{items:d,hasMore:y,isFetching:m,nextCursor:v}=H(p,h,V);function p(i){return z.seriesVideos(e.seriesId,c,i)}function h(i){return t(p(i))}function V(i,$){if(i===1)return X($);n.error(g("error"))}const E=J("video-list"),P=r.data?[{name:g("exchangeArchive"),appLink:{application:C.EXCHANGE,action:w.Exchange.INDEX}},{name:r.data.name,active:!0}]:[];return!r.data||m?s.jsx(se,{}):s.jsxs(D.Provider,{value:E,children:[s.jsx("h1",{className:"h2",children:r.data.name}),s.jsxs("div",{className:"d-flex justify-content-between align-items-center",children:[s.jsx(W,{breadcrumbs:P}),s.jsx(F,{variant:"outline-dark",type:c,getSortAppLink:i=>K(r.data,i),analyticsOptions:{location:U.VideoListHeader,entity:O.Video,actionType:B.Sort,workflowPhase:q.Complete},includeProductionYear:!0})]}),s.jsxs("div",{className:"pb-3",children:[d?s.jsx(M,{videos:d,getVideoAppLink:Z,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:u}):s.jsx("div",{className:"mx-n2",children:s.jsx(S,{})}),(y||m)&&s.jsx(G,{isFetching:m,fetchNext:h,nextCursor:v})]})]})}export{Oe as ExchangeSeriesView};
|
|
2
|
+
//# sourceMappingURL=CsaYiq-6.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C0CSgPvj.chunk.js","sources":["../../../../libs/shared/src/flight-requests/SeriesRequests.ts","../../src/apps/exchange/views/exchange-series/partial-loading/PartialExchangeSeries.tsx","../../src/apps/exchange/views/exchange-series/ExchangeSeriesView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedSeries: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: SharedWithStatements.SERIES,\n shareId\n }),\n seriesWithVideos: (id: string, videoCount: number = 3) => {\n return `{gateway}/v1/objects/${id}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${videoCount}}`;\n }\n};\n\nexport const SeriesRequests = {\n series(id: string): Flight.PublicRequest {\n const queryStringObj = { query: SharedWithStatements.SERIES };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, queryStringObj),\n key: `series:${id}`\n };\n },\n sharedSeries(id: string, shareId: string): Flight.Request {\n return {\n url: endpoints.sharedSeries(id, shareId),\n key: `shared:series:${id}:${shareId}`\n };\n },\n seriesWithVideos(id: string, videoCount: number = 3): Flight.Request {\n return {\n url: endpoints.seriesWithVideos(id, videoCount),\n key: `series:${id}:with:videos:${videoCount}`\n };\n },\n seriesWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,\n key: `series:${id}:thumbnail:count`\n };\n },\n seriesVideos(id: string, userId?: string, sort?: VideoSortType, cursor?: string): Flight.PublicRequest {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const key = [ 'series', id, 'videos', cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/collections/${id}/videos`, {\n query: `{${sortFilter}}${SharedWithStatements.VIDEO_COLLECTION}`,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/collections/${id}/videos`, {\n query: `{${sortFilter}}${PublicWithStatement.VIDEO_COLLECTION}`,\n cursor\n }),\n key\n };\n }\n};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialExchangeSeries() {\n return (\n <>\n <div\n className='partial-loading-background pb-4 mb-3 w-50'\n ></div>\n\n <div className='d-flex align-items-center justify-content-between mb-2'>\n <PartialBreadcrumbs />\n </div>\n \n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Series, Video } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getSeriesAppLink, getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nimport { PartialExchangeSeries } from './partial-loading/PartialExchangeSeries';\n\nconst namespace = 'exchange.exchangeSeries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSeriesViewProps {\n seriesId: string;\n sort: VideoSortType;\n}\n\nexport function ExchangeSeriesView(props: ExchangeSeriesViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useSetPageMetadata({ title: series.data?.name });\n useHandleObjectError(series);\n\n const { commonVideoProps } = useCommonVideoProps();\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data\n && VideoSortHelper.getOrSetSortType(currentUser.data.id, props.sort, VideoSortType.ProductionYear, 'series');\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.seriesVideos(props.seriesId, sort, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n const videoActions = useGetExchangeActions('video-list');\n\n const breadcrumbs = series.data ? [{\n name: getPhrase('exchangeArchive'),\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n }\n }, {\n name: series.data.name,\n active: true\n }] : [];\n\n if (!series.data || isFetching)\n return <PartialExchangeSeries />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <h1 className='h2'>{series.data.name}</h1>\n\n <div className='d-flex justify-content-between align-items-center'>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n getSortAppLink={sort => getSeriesAppLink(series.data, sort)}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n includeProductionYear\n />\n </div>\n\n <div className='pb-3'>\n {videos ? (\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={commonVideoProps}\n />) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n />\n )}\n </div>\n </VideoActionsContext.Provider>\n );\n}"],"names":["endpoints","id","shareId","UrlHelper","SharedWithStatements","videoCount","SeriesRequests","queryStringObj","userId","sort","cursor","sortFilter","VideoSortHelper","key","k","PublicWithStatement","PartialExchangeSeries","jsxs","Fragment","jsx","PartialBreadcrumbs","PartialVideoList","namespace","getPhrase","LanguageService","ExchangeSeriesView","props","fetch","Flight.useGetFetch","alerts","useAlerts","series","Flight.useBasicFetch","currentUser","UserRequests","useSetPageMetadata","_a","useHandleObjectError","commonVideoProps","useCommonVideoProps","VideoSortType","videos","hasMore","isFetching","nextCursor","useInfiniteList","getVideosRequest","fetchNextVideos","onError","ExchangeRequests","pageNumber","httpStatus","handleHttpError","videoActions","useGetExchangeActions","breadcrumbs","AppChannels","Actions","VideoActionsContext","Breadcrumbs","VideoSortSelect","getSeriesAppLink","LocationContext","EntityType","UserAction","WorkflowPhase","VideoList","getVideoAppLink","InfiniteScrollFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CsaYiq-6.chunk.js","sources":["../../../../libs/shared/src/flight-requests/SeriesRequests.ts","../../src/apps/exchange/views/exchange-series/partial-loading/PartialExchangeSeries.tsx","../../src/apps/exchange/views/exchange-series/ExchangeSeriesView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedSeries: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: SharedWithStatements.SERIES,\n shareId\n }),\n seriesWithVideos: (id: string, videoCount: number = 3) => {\n return `{gateway}/v1/objects/${id}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${videoCount}}`;\n }\n};\n\nexport const SeriesRequests = {\n series(id: string): Flight.PublicRequest {\n const queryStringObj = { query: SharedWithStatements.SERIES };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, queryStringObj),\n key: `series:${id}`\n };\n },\n sharedSeries(id: string, shareId: string): Flight.Request {\n return {\n url: endpoints.sharedSeries(id, shareId),\n key: `shared:series:${id}:${shareId}`\n };\n },\n seriesWithVideos(id: string, videoCount: number = 3): Flight.Request {\n return {\n url: endpoints.seriesWithVideos(id, videoCount),\n key: `series:${id}:with:videos:${videoCount}`\n };\n },\n seriesWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,\n key: `series:${id}:thumbnail:count`\n };\n },\n seriesVideos(id: string, userId?: string, sort?: VideoSortType, cursor?: string): Flight.PublicRequest {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const key = [ 'series', id, 'videos', cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/collections/${id}/videos`, {\n query: `{${sortFilter}}${SharedWithStatements.VIDEO_COLLECTION}`,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/collections/${id}/videos`, {\n query: `{${sortFilter}}${PublicWithStatement.VIDEO_COLLECTION}`,\n cursor\n }),\n key\n };\n }\n};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialExchangeSeries() {\n return (\n <>\n <div\n className='partial-loading-background pb-4 mb-3 w-50'\n ></div>\n\n <div className='d-flex align-items-center justify-content-between mb-2'>\n <PartialBreadcrumbs />\n </div>\n \n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Series, Video } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getSeriesAppLink, getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nimport { PartialExchangeSeries } from './partial-loading/PartialExchangeSeries';\n\nconst namespace = 'exchange.exchangeSeries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSeriesViewProps {\n seriesId: string;\n sort: VideoSortType;\n}\n\nexport function ExchangeSeriesView(props: ExchangeSeriesViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useSetPageMetadata({ title: series.data?.name });\n useHandleObjectError(series);\n\n const { commonVideoProps } = useCommonVideoProps();\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data\n && VideoSortHelper.getOrSetSortType(currentUser.data.id, props.sort, VideoSortType.ProductionYear, 'series');\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.seriesVideos(props.seriesId, sort, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n const videoActions = useGetExchangeActions('video-list');\n\n const breadcrumbs = series.data ? [{\n name: getPhrase('exchangeArchive'),\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n }\n }, {\n name: series.data.name,\n active: true\n }] : [];\n\n if (!series.data || isFetching)\n return <PartialExchangeSeries />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <h1 className='h2'>{series.data.name}</h1>\n\n <div className='d-flex justify-content-between align-items-center'>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n getSortAppLink={sort => getSeriesAppLink(series.data, sort)}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n includeProductionYear\n />\n </div>\n\n <div className='pb-3'>\n {videos ? (\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={commonVideoProps}\n />) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n />\n )}\n </div>\n </VideoActionsContext.Provider>\n );\n}"],"names":["endpoints","id","shareId","UrlHelper","SharedWithStatements","videoCount","SeriesRequests","queryStringObj","userId","sort","cursor","sortFilter","VideoSortHelper","key","k","PublicWithStatement","PartialExchangeSeries","jsxs","Fragment","jsx","PartialBreadcrumbs","PartialVideoList","namespace","getPhrase","LanguageService","ExchangeSeriesView","props","fetch","Flight.useGetFetch","alerts","useAlerts","series","Flight.useBasicFetch","currentUser","UserRequests","useSetPageMetadata","_a","useHandleObjectError","commonVideoProps","useCommonVideoProps","VideoSortType","videos","hasMore","isFetching","nextCursor","useInfiniteList","getVideosRequest","fetchNextVideos","onError","ExchangeRequests","pageNumber","httpStatus","handleHttpError","videoActions","useGetExchangeActions","breadcrumbs","AppChannels","Actions","VideoActionsContext","Breadcrumbs","VideoSortSelect","getSeriesAppLink","LocationContext","EntityType","UserAction","WorkflowPhase","VideoList","getVideoAppLink","InfiniteScrollFooter"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as d,j as h}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{r as d,j as h}from"./app-cabh1nNK.js";var I=new Map,R=new WeakMap,y=0,L=void 0;function O(e){return e?(R.has(e)||(y+=1,R.set(e,y.toString())),R.get(e)):"0"}function _(e){return Object.keys(e).sort().filter(r=>e[r]!==void 0).map(r=>`${r}_${r==="root"?O(e.root):e[r]}`).toString()}function $(e){const r=_(e);let s=I.get(r);if(!s){const n=new Map;let a;const i=new IntersectionObserver(o=>{o.forEach(t=>{var c;const g=t.isIntersecting&&a.some(u=>t.intersectionRatio>=u);e.trackVisibility&&typeof t.isVisible>"u"&&(t.isVisible=g),(c=n.get(t.target))==null||c.forEach(u=>{u(g,t)})})},e);a=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),s={id:r,observer:i,elements:n},I.set(r,s)}return s}function j(e,r,s={},n=L){if(typeof window.IntersectionObserver>"u"&&n!==void 0){const c=e.getBoundingClientRect();return r(n,{isIntersecting:n,target:e,intersectionRatio:typeof s.threshold=="number"?s.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),()=>{}}const{id:a,observer:i,elements:o}=$(s),t=o.get(e)||[];return o.has(e)||o.set(e,t),t.push(r),i.observe(e),function(){t.splice(t.indexOf(r),1),t.length===0&&(o.delete(e),i.unobserve(e)),o.size===0&&(i.disconnect(),I.delete(a))}}function D({threshold:e,delay:r,trackVisibility:s,rootMargin:n,root:a,triggerOnce:i,skip:o,initialInView:t,fallbackInView:c,onChange:g}={}){var u;const[f,p]=d.useState(null),m=d.useRef(),[A,l]=d.useState({inView:!!t,entry:void 0});m.current=g,d.useEffect(()=>{if(o||!f)return;let b;return b=j(f,(x,E)=>{l({inView:x,entry:E}),m.current&&m.current(x,E),E.isIntersecting&&i&&b&&(b(),b=void 0)},{root:a,rootMargin:n,threshold:e,trackVisibility:s,delay:r},c),()=>{b&&b()}},[Array.isArray(e)?e.toString():e,f,a,n,i,o,s,c,r]);const w=(u=A.entry)==null?void 0:u.target,S=d.useRef();!f&&w&&!i&&!o&&S.current!==w&&(S.current=w,l({inView:!!t,entry:void 0}));const v=[p,A.inView,A.entry];return v.ref=v[0],v.inView=v[1],v.entry=v[2],v}function V(e={}){const{prevent:r,rootMargin:s,triggerOnce:n=!0}=e;let[a,i,o]=D({triggerOnce:n,rootMargin:s});return(r===!0||typeof window.IntersectionObserver>"u")&&(i=!0,a=null),{ref:a,inView:i,initialized:!!o}}const M="_image_pp6me_1",C={image:M},z="500px",B="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",T=d.memo(function(e){const{forceLoad:r,extraClasses:s="",errorFallbackImageSrc:n,preventLoad:a=!1,errorFallbackImageClassName:i,src:o,alt:t,...c}=e,{ref:g,inView:u}=V({rootMargin:z}),[f,p]=d.useState(!1);d.useEffect(()=>{if(!r&&!u||a)return;const l=new Image;return l.onerror=()=>{p(!0),n&&(l.src=n)},l.src=o,()=>l.onerror=null},[u,a]);function m(){return f&&n?n:e.src}if(f&&!n)return h.jsx(h.Fragment,{});if(!g)return h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,alt:t,src:m(),...c});const A={alt:t,...c,...(u||r)&&!a?{src:m()}:{src:B}};return r||(A.ref=g),h.jsx("img",{className:`${C.image} ${s} ${f&&i||""}`,...A})});export{T as L,D as a,V as u};
|
|
2
|
+
//# sourceMappingURL=Ct-hl94f.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DqAsIeVB.chunk.js","sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});"],"names":["observerMap","RootIds","rootId","unsupportedValue","getRootId","root","optionsToId","options","key","createObserver","id","instance","elements","thresholds","observer","entries","entry","_a","inView","threshold","callback","observe","element","fallbackInView","bounds","callbacks","useInView","delay","trackVisibility","rootMargin","triggerOnce","skip","initialInView","onChange","ref","setRef","React2.useState","React2.useRef","state","setState","React2.useEffect","unobserve","entryTarget","previousEntryTarget","result","useLazyLoad","prevent","PRELOAD_DISTANCE","PLACEHOLDER_SRC","LazyImage","React.memo","props","forceLoad","extraClasses","errorFallbackImageSrc","preventLoad","errorFallbackImageClassName","src","alt","propsWithoutSrc","error","setError","React.useState","React.useEffect","img","getSrc","jsx","Fragment","styles","imgProps"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Ct-hl94f.chunk.js","sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});"],"names":["observerMap","RootIds","rootId","unsupportedValue","getRootId","root","optionsToId","options","key","createObserver","id","instance","elements","thresholds","observer","entries","entry","_a","inView","threshold","callback","observe","element","fallbackInView","bounds","callbacks","useInView","delay","trackVisibility","rootMargin","triggerOnce","skip","initialInView","onChange","ref","setRef","React2.useState","React2.useRef","state","setState","React2.useEffect","unobserve","entryTarget","previousEntryTarget","result","useLazyLoad","prevent","PRELOAD_DISTANCE","PLACEHOLDER_SRC","LazyImage","React.memo","props","forceLoad","extraClasses","errorFallbackImageSrc","preventLoad","errorFallbackImageClassName","src","alt","propsWithoutSrc","error","setError","React.useState","React.useEffect","img","getSrc","jsx","Fragment","styles","imgProps"],"mappings":"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","x_google_ignoreList":[0]}
|