@clickview/exchange 0.63.0-rc.0 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +525 -525
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{XXzDL37Y.chunk.js → -x9MMtVv.chunk.js} +2 -2
- package/dist/scripts/{XXzDL37Y.chunk.js.map → -x9MMtVv.chunk.js.map} +1 -1
- package/dist/scripts/{BRJldyG42.chunk.js → 4oWF2EyV2.chunk.js} +2 -2
- package/dist/scripts/{BRJldyG42.chunk.js.map → 4oWF2EyV2.chunk.js.map} +1 -1
- package/dist/scripts/{Bbv7q795.chunk.js → 5Z0rGCy2.chunk.js} +2 -2
- package/dist/scripts/{Bbv7q795.chunk.js.map → 5Z0rGCy2.chunk.js.map} +1 -1
- package/dist/scripts/{Buz0cl_A2.chunk.js → 8vJGuJF-2.chunk.js} +2 -2
- package/dist/scripts/{Buz0cl_A2.chunk.js.map → 8vJGuJF-2.chunk.js.map} +1 -1
- package/dist/scripts/{DHyCd_bU2.chunk.js → B0jhFNam2.chunk.js} +3 -3
- package/dist/scripts/{DHyCd_bU2.chunk.js.map → B0jhFNam2.chunk.js.map} +1 -1
- package/dist/scripts/{C56J8vQn2.chunk.js → B3tq0EFi2.chunk.js} +2 -2
- package/dist/scripts/{C56J8vQn2.chunk.js.map → B3tq0EFi2.chunk.js.map} +1 -1
- package/dist/scripts/{z3xPIUA8.chunk.js → B6EmIhMh.chunk.js} +2 -2
- package/dist/scripts/{z3xPIUA8.chunk.js.map → B6EmIhMh.chunk.js.map} +1 -1
- package/dist/scripts/{CvGdC4sR2.chunk.js → BEgLlK2Z2.chunk.js} +2 -2
- package/dist/scripts/{CvGdC4sR2.chunk.js.map → BEgLlK2Z2.chunk.js.map} +1 -1
- package/dist/scripts/{DZzghMqE2.chunk.js → BEyI0jsC2.chunk.js} +2 -2
- package/dist/scripts/{DZzghMqE2.chunk.js.map → BEyI0jsC2.chunk.js.map} +1 -1
- package/dist/scripts/{hZmx1ZBr.chunk.js → BHzUOyzG.chunk.js} +2 -2
- package/dist/scripts/{hZmx1ZBr.chunk.js.map → BHzUOyzG.chunk.js.map} +1 -1
- package/dist/scripts/{CBskpS-O.chunk.js → BI2S4EFA.chunk.js} +2 -2
- package/dist/scripts/{CBskpS-O.chunk.js.map → BI2S4EFA.chunk.js.map} +1 -1
- package/dist/scripts/{_yGE4YHL2.chunk.js → BTsePUCN2.chunk.js} +2 -2
- package/dist/scripts/{_yGE4YHL2.chunk.js.map → BTsePUCN2.chunk.js.map} +1 -1
- package/dist/scripts/{CSI2paIO2.chunk.js → BaXT2aKo2.chunk.js} +2 -2
- package/dist/scripts/{CSI2paIO2.chunk.js.map → BaXT2aKo2.chunk.js.map} +1 -1
- package/dist/scripts/{CmvWR08f.chunk.js → BibFbDqs.chunk.js} +2 -2
- package/dist/scripts/{CmvWR08f.chunk.js.map → BibFbDqs.chunk.js.map} +1 -1
- package/dist/scripts/{DUcxhK9t.chunk.js → BjzONPz9.chunk.js} +2 -2
- package/dist/scripts/{DUcxhK9t.chunk.js.map → BjzONPz9.chunk.js.map} +1 -1
- package/dist/scripts/{DRwPcxvr.chunk.js → BnbM9YhY.chunk.js} +2 -2
- package/dist/scripts/{DRwPcxvr.chunk.js.map → BnbM9YhY.chunk.js.map} +1 -1
- package/dist/scripts/{l5SFnLQO.chunk.js → BrEvIvRP.chunk.js} +2 -2
- package/dist/scripts/{l5SFnLQO.chunk.js.map → BrEvIvRP.chunk.js.map} +1 -1
- package/dist/scripts/{CcQK2DGq2.chunk.js → C1guWVFU2.chunk.js} +2 -2
- package/dist/scripts/{CcQK2DGq2.chunk.js.map → C1guWVFU2.chunk.js.map} +1 -1
- package/dist/scripts/{BWVFXuZ42.chunk.js → C3K3VtRR2.chunk.js} +2 -2
- package/dist/scripts/{BWVFXuZ42.chunk.js.map → C3K3VtRR2.chunk.js.map} +1 -1
- package/dist/scripts/{lWeC_K_B.chunk.js → CAJOpkKZ.chunk.js} +2 -2
- package/dist/scripts/{lWeC_K_B.chunk.js.map → CAJOpkKZ.chunk.js.map} +1 -1
- package/dist/scripts/{feXppHqr.chunk.js → CAOBwDbU.chunk.js} +2 -2
- package/dist/scripts/{feXppHqr.chunk.js.map → CAOBwDbU.chunk.js.map} +1 -1
- package/dist/scripts/{BTP30DaC.chunk.js → CAQAUQMB.chunk.js} +2 -2
- package/dist/scripts/{BTP30DaC.chunk.js.map → CAQAUQMB.chunk.js.map} +1 -1
- package/dist/scripts/{4onqOCbS.chunk.js → CAoPaL8M.chunk.js} +2 -2
- package/dist/scripts/{4onqOCbS.chunk.js.map → CAoPaL8M.chunk.js.map} +1 -1
- package/dist/scripts/{YL1EBDd_.chunk.js → CCvXN2-C.chunk.js} +2 -2
- package/dist/scripts/{YL1EBDd_.chunk.js.map → CCvXN2-C.chunk.js.map} +1 -1
- package/dist/scripts/{D7MdAl-52.chunk.js → CDXcKno52.chunk.js} +2 -2
- package/dist/scripts/{D7MdAl-52.chunk.js.map → CDXcKno52.chunk.js.map} +1 -1
- package/dist/scripts/{B1_Y3iw-.chunk.js → CGLWqKaa.chunk.js} +2 -2
- package/dist/scripts/{B1_Y3iw-.chunk.js.map → CGLWqKaa.chunk.js.map} +1 -1
- package/dist/scripts/{BX4WdpiX.chunk.js → CHQN7xOX.chunk.js} +2 -2
- package/dist/scripts/{BX4WdpiX.chunk.js.map → CHQN7xOX.chunk.js.map} +1 -1
- package/dist/scripts/{3OI-aLOc.chunk.js → CSbvS-Cl.chunk.js} +2 -2
- package/dist/scripts/{3OI-aLOc.chunk.js.map → CSbvS-Cl.chunk.js.map} +1 -1
- package/dist/scripts/{CWY-sFVd.chunk.js → CYFRcx63.chunk.js} +2 -2
- package/dist/scripts/{CWY-sFVd.chunk.js.map → CYFRcx63.chunk.js.map} +1 -1
- package/dist/scripts/{DfMfBgzn2.chunk.js → CeeAb-HT2.chunk.js} +2 -2
- package/dist/scripts/{DfMfBgzn2.chunk.js.map → CeeAb-HT2.chunk.js.map} +1 -1
- package/dist/scripts/{DspWTyv22.chunk.js → Cllrumah2.chunk.js} +2 -2
- package/dist/scripts/{DspWTyv22.chunk.js.map → Cllrumah2.chunk.js.map} +1 -1
- package/dist/scripts/{CPzPIQB92.chunk.js → CoK2sqzN2.chunk.js} +2 -2
- package/dist/scripts/{CPzPIQB92.chunk.js.map → CoK2sqzN2.chunk.js.map} +1 -1
- package/dist/scripts/{DUVTdegJ.chunk.js → CsrTrVKj.chunk.js} +2 -2
- package/dist/scripts/{DUVTdegJ.chunk.js.map → CsrTrVKj.chunk.js.map} +1 -1
- package/dist/scripts/{C-mZmrh2.chunk.js → CuE3TVwa.chunk.js} +2 -2
- package/dist/scripts/{C-mZmrh2.chunk.js.map → CuE3TVwa.chunk.js.map} +1 -1
- package/dist/scripts/{D9yYpvIx.chunk.js → D-ivDlyL.chunk.js} +2 -2
- package/dist/scripts/{D9yYpvIx.chunk.js.map → D-ivDlyL.chunk.js.map} +1 -1
- package/dist/scripts/{ZgHZpHus2.chunk.js → D36Shrdb2.chunk.js} +2 -2
- package/dist/scripts/{ZgHZpHus2.chunk.js.map → D36Shrdb2.chunk.js.map} +1 -1
- package/dist/scripts/{DiivzK1E.chunk.js → D3Jgk2dT.chunk.js} +2 -2
- package/dist/scripts/{DiivzK1E.chunk.js.map → D3Jgk2dT.chunk.js.map} +1 -1
- package/dist/scripts/{DDU0lRB02.chunk.js → D6EZoO4S2.chunk.js} +2 -2
- package/dist/scripts/{DDU0lRB02.chunk.js.map → D6EZoO4S2.chunk.js.map} +1 -1
- package/dist/scripts/{Ca1aJXXk.chunk.js → DDO16-at.chunk.js} +2 -2
- package/dist/scripts/{Ca1aJXXk.chunk.js.map → DDO16-at.chunk.js.map} +1 -1
- package/dist/scripts/{DQhm12vh2.chunk.js → DGRBUJ6T2.chunk.js} +2 -2
- package/dist/scripts/{DQhm12vh2.chunk.js.map → DGRBUJ6T2.chunk.js.map} +1 -1
- package/dist/scripts/{PVFChK662.chunk.js → DGy73Ett2.chunk.js} +2 -2
- package/dist/scripts/{PVFChK662.chunk.js.map → DGy73Ett2.chunk.js.map} +1 -1
- package/dist/scripts/{BhygUKHG2.chunk.js → DHV6S1fA2.chunk.js} +2 -2
- package/dist/scripts/{BhygUKHG2.chunk.js.map → DHV6S1fA2.chunk.js.map} +1 -1
- package/dist/scripts/{ClJxBHin2.chunk.js → DM0JzOpR2.chunk.js} +2 -2
- package/dist/scripts/{ClJxBHin2.chunk.js.map → DM0JzOpR2.chunk.js.map} +1 -1
- package/dist/scripts/{Ovy1FgPr2.chunk.js → DOuiFwIH2.chunk.js} +2 -2
- package/dist/scripts/{Ovy1FgPr2.chunk.js.map → DOuiFwIH2.chunk.js.map} +1 -1
- package/dist/scripts/{C5zVzLiv.chunk.js → DRZvc_n5.chunk.js} +2 -2
- package/dist/scripts/{C5zVzLiv.chunk.js.map → DRZvc_n5.chunk.js.map} +1 -1
- package/dist/scripts/{e-cJ9kRJ.chunk.js → DUCTNoXj.chunk.js} +2 -2
- package/dist/scripts/{e-cJ9kRJ.chunk.js.map → DUCTNoXj.chunk.js.map} +1 -1
- package/dist/scripts/{MsShPjH12.chunk.js → Da2KHzN02.chunk.js} +2 -2
- package/dist/scripts/{MsShPjH12.chunk.js.map → Da2KHzN02.chunk.js.map} +1 -1
- package/dist/scripts/{VrblzwSV.chunk.js → DklryBsJ.chunk.js} +2 -2
- package/dist/scripts/{VrblzwSV.chunk.js.map → DklryBsJ.chunk.js.map} +1 -1
- package/dist/scripts/{V1sSszjJ.chunk.js → DsA2RTbF.chunk.js} +2 -2
- package/dist/scripts/{V1sSszjJ.chunk.js.map → DsA2RTbF.chunk.js.map} +1 -1
- package/dist/scripts/{kAq4UzUo.chunk.js → Dsmr6Wly.chunk.js} +2 -2
- package/dist/scripts/{kAq4UzUo.chunk.js.map → Dsmr6Wly.chunk.js.map} +1 -1
- package/dist/scripts/{PVKBLI-T2.chunk.js → DsolW3Wd2.chunk.js} +2 -2
- package/dist/scripts/{PVKBLI-T2.chunk.js.map → DsolW3Wd2.chunk.js.map} +1 -1
- package/dist/scripts/{C4y3yewN.chunk.js → UK8sD-oL.chunk.js} +2 -2
- package/dist/scripts/{C4y3yewN.chunk.js.map → UK8sD-oL.chunk.js.map} +1 -1
- package/dist/scripts/{C79TzhHV.chunk.js → aXgcldgY.chunk.js} +2 -2
- package/dist/scripts/{C79TzhHV.chunk.js.map → aXgcldgY.chunk.js.map} +1 -1
- package/dist/scripts/{app-DddMB3QD.js → app-lnmpv5W4.js} +3 -3
- package/dist/scripts/app-lnmpv5W4.js.map +1 -0
- package/dist/scripts/{CRtOlUhH.chunk.js → c2oA1XgG.chunk.js} +2 -2
- package/dist/scripts/{CRtOlUhH.chunk.js.map → c2oA1XgG.chunk.js.map} +1 -1
- package/dist/scripts/{CKC7r8Ck2.chunk.js → dkfSCDWH2.chunk.js} +2 -2
- package/dist/scripts/{CKC7r8Ck2.chunk.js.map → dkfSCDWH2.chunk.js.map} +1 -1
- package/dist/scripts/{Dwhojt8g2.chunk.js → jErHNuXU2.chunk.js} +2 -2
- package/dist/scripts/{Dwhojt8g2.chunk.js.map → jErHNuXU2.chunk.js.map} +1 -1
- package/dist/scripts/{BXh_8LxI2.chunk.js → mkasrghR2.chunk.js} +2 -2
- package/dist/scripts/{BXh_8LxI2.chunk.js.map → mkasrghR2.chunk.js.map} +1 -1
- package/dist/scripts/{D2D0ku9V2.chunk.js → s776Po8a2.chunk.js} +2 -2
- package/dist/scripts/{D2D0ku9V2.chunk.js.map → s776Po8a2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/app-DddMB3QD.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DUcxhK9t.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/letters-bar/letters-bar.module.scss","../../../../libs/shared/src/components/letters-bar/LettersBar.tsx","../../src/apps/tv/views/tv-programs/components/program-selector/program-selector.module.scss","../../src/apps/tv/views/tv-programs/components/program-selector/ProgramSelector.tsx","../../src/apps/tv/views/tv-programs/TvProgramsView.tsx"],"sourcesContent":[":local {\n .pillTabSelector {\n ul {\n width: 100%;\n display: flex!important;\n }\n\n li {\n min-width: 0!important;\n flex-grow: 1;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './letters-bar.module.scss';\n\nexport const CUSTOM_LETTER_TEMPLATE = 'Custom';\n\nexport const ALPHABET = [\n CUSTOM_LETTER_TEMPLATE,\n '#',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n] as const;\n\ntype LetterBarOptions = typeof ALPHABET[number];\n\nconst LetterParamMap: {[key in LetterBarOptions]?: string } = {\n '#': '0'\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\nfunction getSelectedAlphabet(selected: string, showCustom: boolean): LetterBarOptions | undefined {\n if (!selected)\n return;\n \n if (selected === '0')\n return '#';\n\n const alphabet = ALPHABET.find(letter => letter.toUpperCase() === selected.toUpperCase());\n\n if (alphabet === CUSTOM_LETTER_TEMPLATE && !showCustom)\n return;\n\n return alphabet;\n}\n\ninterface GenerateTabsOptions {\n selected: string;\n showCustom: boolean;\n getItemAppLink: (letter: string) => Core.AppLink;\n}\n\nfunction generateTabs(options: GenerateTabsOptions): PillTab[] {\n return ALPHABET.map(letter => {\n if (letter === CUSTOM_LETTER_TEMPLATE && !options.showCustom)\n return;\n\n const appLink = options.getItemAppLink(LetterParamMap[letter] ?? letter);\n\n return {\n name: letter,\n appLink,\n active: options.selected === letter,\n analyticsData: {\n name: letter,\n url: Core.AppLinkHelper.getHref(appLink)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n };\n }).filter(Boolean);\n}\n\ninterface LettersBarProps {\n selected: string;\n getItemAppLink: (letter: string) => Core.AppLink;\n showCustom?: boolean;\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n className?: string;\n noMarginBottom?: boolean;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function LettersBar(props: LettersBarProps): JSX.Element {\n const localSelected = getSelectedAlphabet(props.selected, props.showCustom);\n\n const tabs = generateTabs({\n selected: localSelected,\n showCustom: props.showCustom,\n getItemAppLink: props.getItemAppLink\n });\n \n return (\n <div className={classNames(props.noMarginBottom ? 'mb-0' : 'mb-3', props.className)}>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTabSelector}\n enableSmallScreenSupport={props.enableSmallScreenSupport}\n formatDisplayText={props.formatDisplayText}\n forceSmallScreenDropdown={props.forceSmallScreenDropdown}\n />\n </div>\n );\n}\n",":local {\n .dateContainer {\n transition: background-color 0.25s ease-in-out;\n &.hover {\n background-color: $light-blue;\n }\n }\n\n .channelLogo {\n max-width: 4rem;\n }\n\n .channelLogoContainer {\n width: 8rem;\n }\n\n .programsContainer {\n gap: map-get($spacers, 2);\n }\n\n .date {\n width: 4.5rem;\n }\n\n .itemContainer {\n &:hover {\n background: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n width: 4rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './program-selector.module.scss';\n\ninterface ProgramSelectorProps {\n groupedPrograms: [string, [string, TvProgram[]][]][];\n channels: TvChannel[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function ProgramSelector(props: ProgramSelectorProps) {\n function getChannelLogo(channel: string) {\n const matchingChannel = ArrayHelper.findWhere(props.channels, { name: channel });\n return matchingChannel?.logoUrl;\n }\n\n return (\n <div className='mb-2'>\n {props.groupedPrograms.map(([ channel, dates ]) => (\n <div className='border-top d-flex pt-3 pb-2' key={channel}>\n <div className={`${styles.channelLogoContainer} flex-shrink-0 mb-3`}>\n <img src={getChannelLogo(channel)} alt={channel} className={`${styles.channelLogo} ms-4`} />\n </div>\n\n <div className='w-100'>\n {dates.map(([ date, programs ]) => (\n <GroupedPrograms key={date} date={date} programs={programs} tvPreviewUrls={props.tvPreviewUrls} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\ninterface GroupedProgramsProps {\n date: string;\n programs: TvProgram[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function GroupedPrograms(props: GroupedProgramsProps) {\n const [ hoveredProgram, setHoveredProgram ] = React.useState<TvProgram>();\n\n function getProgramAppLink(program: TvProgram) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ program.regionCode, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [program.id]\n };\n }\n }\n\n function getThumbnailUrl(program: TvProgram) {\n const previewUrl = props.tvPreviewUrls[program.regionCode];\n const globalId = program.globalId.split('-').join('');\n return `${previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div\n className={`${styles.dateContainer} ${hoveredProgram ? styles.hover : ''} py-2 px-3 rounded`}\n >\n <div key={props.date} className='d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(hoveredProgram || props.programs[0])}\n alt={DateHelper.format(props.date, 'D MMM')}\n extraClasses='w-100 rounded'\n />\n </div>\n <p className={`${styles.date} fw-semibold flex-shrink-0 mb-0`}>{DateHelper.format(props.date, 'D MMM')}:</p>\n <div className={`${styles.programsContainer} d-flex flex-wrap`}>\n {props.programs.map((program: TvProgram) => (\n <div\n key={program.id}\n onMouseEnter={() => setHoveredProgram(program)}\n onMouseLeave={() => setHoveredProgram(null)}\n >\n <AppLink appLink={getProgramAppLink(program)} key={program.id} className='text-decoration-none'>\n <TvProgramTimeBadge program={program} showEndTime />\n </AppLink>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ALPHABET, LettersBar } from 'libs/shared/components/letters-bar/LettersBar';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { ProgramSelector } from 'apps/tv/views/tv-programs/components/program-selector/ProgramSelector';\n\nconst namespace = 'tv.programs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FIRST_LETTER_REGEX = /^[a-zA-Z]/;\n\ninterface TvProgramsViewProps {\n region: string;\n startsWith: string;\n}\n\nexport function TvProgramsView(props: TvProgramsViewProps): JSX.Element {\n const startsWith = props.startsWith || 'A';\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n dateRange.data &&\n TvRequests.programsByLetter(\n region.data.code,\n startsWith,\n dateRange.data.startDate,\n dateRange.data.endDate\n )\n );\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [] as any[];\n\n const groups: HashObject<TvProgram[]> = {};\n\n programs.data.forEach(program => {\n if (props.startsWith === '0' && FIRST_LETTER_REGEX.test(program.title))\n return;\n\n if (!groups[program.title])\n groups[program.title] = [];\n\n groups[program.title].push(program);\n });\n\n let sorted = Object.entries(groups);\n\n sorted = sorted.sort(([keyA], [keyB]) => (keyA < keyB ? -1 : 1));\n\n const groupedPrograms = sorted.map(([ title, data ]) => {\n const groupedProgram = data.reduce((acc: {[channel: string]: {[date: string]: TvProgram[] } }, program) => {\n const channelKey = program.channelName;\n if (!acc[channelKey]) {\n acc[channelKey] = {};\n }\n \n const startTime = toLocalTime(program.startTime, program.timeZone);\n const dateKey = DateHelper.format(startTime, 'YYYY-MM-DD');\n if (!acc[channelKey][dateKey]) {\n acc[channelKey][dateKey] = [];\n }\n\n acc[channelKey][dateKey].push(program);\n return acc;\n }, {});\n\n const groupedProgramEntries =\n Object\n .entries(groupedProgram)\n .map((([ channel, programs ]) => [ channel, Object.entries(programs) ]));\n \n return [ title, groupedProgramEntries ];\n });\n\n return groupedPrograms as [string, [string, TvProgram[]]];\n }, [programs.data]);\n\n const matchesLetters = [ ...ALPHABET, '0' ].includes(startsWith);\n if (!matchesLetters) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, programs ]);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const dataLoaded = (\n region.hasCompleted &&\n regions.hasCompleted &&\n dateRange.hasCompleted &&\n programs.hasCompleted &&\n config.hasCompleted\n );\n\n return (\n <>\n <TvSearchBar region={region.data} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='programs'\n currentRegion={region.data}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n params: { startsWith }\n }}\n onClick={setRegion}\n />\n </div>\n\n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n <LettersBar\n selected={startsWith}\n getItemAppLink={letter => ({\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n args: [region.data?.code],\n params: { startsWith: letter }\n })}\n />\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ title, programs ], index) => (\n <AccordionList.Header key={index} title={title}>\n <ProgramSelector\n groupedPrograms={programs}\n channels={channels.data}\n tvPreviewUrls={config.data.tvPreviewUrls}\n />\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BjzONPz9.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/letters-bar/letters-bar.module.scss","../../../../libs/shared/src/components/letters-bar/LettersBar.tsx","../../src/apps/tv/views/tv-programs/components/program-selector/program-selector.module.scss","../../src/apps/tv/views/tv-programs/components/program-selector/ProgramSelector.tsx","../../src/apps/tv/views/tv-programs/TvProgramsView.tsx"],"sourcesContent":[":local {\n .pillTabSelector {\n ul {\n width: 100%;\n display: flex!important;\n }\n\n li {\n min-width: 0!important;\n flex-grow: 1;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './letters-bar.module.scss';\n\nexport const CUSTOM_LETTER_TEMPLATE = 'Custom';\n\nexport const ALPHABET = [\n CUSTOM_LETTER_TEMPLATE,\n '#',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n] as const;\n\ntype LetterBarOptions = typeof ALPHABET[number];\n\nconst LetterParamMap: {[key in LetterBarOptions]?: string } = {\n '#': '0'\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\nfunction getSelectedAlphabet(selected: string, showCustom: boolean): LetterBarOptions | undefined {\n if (!selected)\n return;\n \n if (selected === '0')\n return '#';\n\n const alphabet = ALPHABET.find(letter => letter.toUpperCase() === selected.toUpperCase());\n\n if (alphabet === CUSTOM_LETTER_TEMPLATE && !showCustom)\n return;\n\n return alphabet;\n}\n\ninterface GenerateTabsOptions {\n selected: string;\n showCustom: boolean;\n getItemAppLink: (letter: string) => Core.AppLink;\n}\n\nfunction generateTabs(options: GenerateTabsOptions): PillTab[] {\n return ALPHABET.map(letter => {\n if (letter === CUSTOM_LETTER_TEMPLATE && !options.showCustom)\n return;\n\n const appLink = options.getItemAppLink(LetterParamMap[letter] ?? letter);\n\n return {\n name: letter,\n appLink,\n active: options.selected === letter,\n analyticsData: {\n name: letter,\n url: Core.AppLinkHelper.getHref(appLink)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n };\n }).filter(Boolean);\n}\n\ninterface LettersBarProps {\n selected: string;\n getItemAppLink: (letter: string) => Core.AppLink;\n showCustom?: boolean;\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n className?: string;\n noMarginBottom?: boolean;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function LettersBar(props: LettersBarProps): JSX.Element {\n const localSelected = getSelectedAlphabet(props.selected, props.showCustom);\n\n const tabs = generateTabs({\n selected: localSelected,\n showCustom: props.showCustom,\n getItemAppLink: props.getItemAppLink\n });\n \n return (\n <div className={classNames(props.noMarginBottom ? 'mb-0' : 'mb-3', props.className)}>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTabSelector}\n enableSmallScreenSupport={props.enableSmallScreenSupport}\n formatDisplayText={props.formatDisplayText}\n forceSmallScreenDropdown={props.forceSmallScreenDropdown}\n />\n </div>\n );\n}\n",":local {\n .dateContainer {\n transition: background-color 0.25s ease-in-out;\n &.hover {\n background-color: $light-blue;\n }\n }\n\n .channelLogo {\n max-width: 4rem;\n }\n\n .channelLogoContainer {\n width: 8rem;\n }\n\n .programsContainer {\n gap: map-get($spacers, 2);\n }\n\n .date {\n width: 4.5rem;\n }\n\n .itemContainer {\n &:hover {\n background: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n width: 4rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './program-selector.module.scss';\n\ninterface ProgramSelectorProps {\n groupedPrograms: [string, [string, TvProgram[]][]][];\n channels: TvChannel[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function ProgramSelector(props: ProgramSelectorProps) {\n function getChannelLogo(channel: string) {\n const matchingChannel = ArrayHelper.findWhere(props.channels, { name: channel });\n return matchingChannel?.logoUrl;\n }\n\n return (\n <div className='mb-2'>\n {props.groupedPrograms.map(([ channel, dates ]) => (\n <div className='border-top d-flex pt-3 pb-2' key={channel}>\n <div className={`${styles.channelLogoContainer} flex-shrink-0 mb-3`}>\n <img src={getChannelLogo(channel)} alt={channel} className={`${styles.channelLogo} ms-4`} />\n </div>\n\n <div className='w-100'>\n {dates.map(([ date, programs ]) => (\n <GroupedPrograms key={date} date={date} programs={programs} tvPreviewUrls={props.tvPreviewUrls} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\ninterface GroupedProgramsProps {\n date: string;\n programs: TvProgram[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function GroupedPrograms(props: GroupedProgramsProps) {\n const [ hoveredProgram, setHoveredProgram ] = React.useState<TvProgram>();\n\n function getProgramAppLink(program: TvProgram) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ program.regionCode, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [program.id]\n };\n }\n }\n\n function getThumbnailUrl(program: TvProgram) {\n const previewUrl = props.tvPreviewUrls[program.regionCode];\n const globalId = program.globalId.split('-').join('');\n return `${previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div\n className={`${styles.dateContainer} ${hoveredProgram ? styles.hover : ''} py-2 px-3 rounded`}\n >\n <div key={props.date} className='d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(hoveredProgram || props.programs[0])}\n alt={DateHelper.format(props.date, 'D MMM')}\n extraClasses='w-100 rounded'\n />\n </div>\n <p className={`${styles.date} fw-semibold flex-shrink-0 mb-0`}>{DateHelper.format(props.date, 'D MMM')}:</p>\n <div className={`${styles.programsContainer} d-flex flex-wrap`}>\n {props.programs.map((program: TvProgram) => (\n <div\n key={program.id}\n onMouseEnter={() => setHoveredProgram(program)}\n onMouseLeave={() => setHoveredProgram(null)}\n >\n <AppLink appLink={getProgramAppLink(program)} key={program.id} className='text-decoration-none'>\n <TvProgramTimeBadge program={program} showEndTime />\n </AppLink>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ALPHABET, LettersBar } from 'libs/shared/components/letters-bar/LettersBar';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { ProgramSelector } from 'apps/tv/views/tv-programs/components/program-selector/ProgramSelector';\n\nconst namespace = 'tv.programs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FIRST_LETTER_REGEX = /^[a-zA-Z]/;\n\ninterface TvProgramsViewProps {\n region: string;\n startsWith: string;\n}\n\nexport function TvProgramsView(props: TvProgramsViewProps): JSX.Element {\n const startsWith = props.startsWith || 'A';\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n dateRange.data &&\n TvRequests.programsByLetter(\n region.data.code,\n startsWith,\n dateRange.data.startDate,\n dateRange.data.endDate\n )\n );\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [] as any[];\n\n const groups: HashObject<TvProgram[]> = {};\n\n programs.data.forEach(program => {\n if (props.startsWith === '0' && FIRST_LETTER_REGEX.test(program.title))\n return;\n\n if (!groups[program.title])\n groups[program.title] = [];\n\n groups[program.title].push(program);\n });\n\n let sorted = Object.entries(groups);\n\n sorted = sorted.sort(([keyA], [keyB]) => (keyA < keyB ? -1 : 1));\n\n const groupedPrograms = sorted.map(([ title, data ]) => {\n const groupedProgram = data.reduce((acc: {[channel: string]: {[date: string]: TvProgram[] } }, program) => {\n const channelKey = program.channelName;\n if (!acc[channelKey]) {\n acc[channelKey] = {};\n }\n \n const startTime = toLocalTime(program.startTime, program.timeZone);\n const dateKey = DateHelper.format(startTime, 'YYYY-MM-DD');\n if (!acc[channelKey][dateKey]) {\n acc[channelKey][dateKey] = [];\n }\n\n acc[channelKey][dateKey].push(program);\n return acc;\n }, {});\n\n const groupedProgramEntries =\n Object\n .entries(groupedProgram)\n .map((([ channel, programs ]) => [ channel, Object.entries(programs) ]));\n \n return [ title, groupedProgramEntries ];\n });\n\n return groupedPrograms as [string, [string, TvProgram[]]];\n }, [programs.data]);\n\n const matchesLetters = [ ...ALPHABET, '0' ].includes(startsWith);\n if (!matchesLetters) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, programs ]);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const dataLoaded = (\n region.hasCompleted &&\n regions.hasCompleted &&\n dateRange.hasCompleted &&\n programs.hasCompleted &&\n config.hasCompleted\n );\n\n return (\n <>\n <TvSearchBar region={region.data} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='programs'\n currentRegion={region.data}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n params: { startsWith }\n }}\n onClick={setRegion}\n />\n </div>\n\n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n <LettersBar\n selected={startsWith}\n getItemAppLink={letter => ({\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n args: [region.data?.code],\n params: { startsWith: letter }\n })}\n />\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ title, programs ], index) => (\n <AccordionList.Header key={index} title={title}>\n <ProgramSelector\n groupedPrograms={programs}\n channels={channels.data}\n tvPreviewUrls={config.data.tvPreviewUrls}\n />\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t}from"./B1i9atik.chunk.js";import{nt as n}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t}from"./B1i9atik.chunk.js";import{nt as n}from"./app-lnmpv5W4.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
|
|
2
|
+
//# sourceMappingURL=BnbM9YhY.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BnbM9YhY.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ExchangeNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ExchangeErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAS,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s}from"./B1i9atik.chunk.js";import{l as c,y as l}from"./TJBzqR6k.chunk.js";import{Z as u}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s}from"./B1i9atik.chunk.js";import{l as c,y as l}from"./TJBzqR6k.chunk.js";import{Z as u}from"./app-lnmpv5W4.js";import{t as d}from"./BJyhVVFW2.chunk.js";var f=a(t()),p={createDownloadToken(e){return{url:`/api/downloadproxy/api/tokens`,key:`download:token:${e}`,data:{objectId:e},type:l.POST,normalize:!1}}},m=e();function h(e){let t=f.useRef(null),a=c(u.config()),l=c(p.createDownloadToken(e.id)),h=!!a.data&&!!l.data;return f.useEffect(()=>{if(!h||!t.current)return;let c=d.getVideoDownloadUrl(a.data.downloadProxy,l.data.token);t.current.src=c,s.logUserAction({id:e.id},{actionType:r.Download,location:i.Popup,entity:o.Video,workflowPhase:n.Complete})},[h,t.current]),(0,m.jsx)(`iframe`,{ref:t})}export{h as DownloadVideoView};
|
|
2
|
+
//# sourceMappingURL=BrEvIvRP.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BrEvIvRP.chunk.js","names":[],"sources":["../../src/shared/flight-requests/DownloadRequests.ts","../../src/shared/views/download-video/DownloadVideoView.tsx"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nexport const DownloadRequests = {\n createDownloadToken(videoId: string): Flight.Request {\n return {\n url: '/api/downloadproxy/api/tokens',\n key: `download:token:${videoId}`,\n data: { objectId: videoId },\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { DownloadRequests } from 'shared/flight-requests/DownloadRequests';\n\ninterface DownloadVideoViewProps {\n id: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function DownloadVideoView(props: DownloadVideoViewProps): JSX.Element {\n const ref = React.useRef(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const downloadToken = Flight.useBasicFetch<HashObject>(DownloadRequests.createDownloadToken(props.id));\n\n const dataLoaded = !!config.data && !!downloadToken.data;\n\n React.useEffect(() => {\n if (!dataLoaded || !ref.current)\n return;\n\n const url = DownloadHelper.getVideoDownloadUrl(config.data.downloadProxy, downloadToken.data.token);\n ref.current.src = url;\n\n AnalyticsHelper.logUserAction({\n id: props.id\n }, {\n actionType: UserAction.Download,\n location: LocationContext.Popup,\n entity: EntityType.Video,\n workflowPhase: WorkflowPhase.Complete\n });\n }, [ dataLoaded, ref.current ]);\n\n return (\n <iframe ref={ref} />\n );\n}\n"],"mappings":"qOAGA,EAAA,CAAA,oBAAA,EAAA,CAEI,MAAA,mHCcJ,SAAgB,EAAkB,EAA4C,CAC5E,IAAM,EAAA,EAAY,OAAO,KAAK,CAExB,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAC9D,EAAgB,EAAiC,EAAiB,oBAAoB,EAAM,GAAG,CAAC,CAEhG,EAAa,CAAC,CAAC,EAAO,MAAQ,CAAC,CAAC,EAAc,KAmBpD,OAjBA,EAAM,cAAgB,CACpB,GAAI,CAAC,GAAc,CAAC,EAAI,QACtB,OAEF,IAAM,EAAM,EAAe,oBAAoB,EAAO,KAAK,cAAe,EAAc,KAAK,MAAM,CACnG,EAAI,QAAQ,IAAM,EAElB,EAAgB,cAAc,CAC5B,GAAI,EAAM,GACX,CAAE,CACD,WAAY,EAAW,SACvB,SAAU,EAAgB,MAC1B,OAAQ,EAAW,MACnB,cAAe,EAAc,SAC9B,CAAC,EACD,CAAE,EAAY,EAAI,QAAS,CAAC,EAG7B,EAAA,EAAA,KAAC,SAAD,CAAa,MAAO,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t}from"./B1i9atik.chunk.js";import{H as n,I as r,N as i,P as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t}from"./B1i9atik.chunk.js";import{H as n,I as r,N as i,P as a}from"./app-lnmpv5W4.js";t();var o=e(),s=`shared.formButtons`;function c(e){let t=n(),c=a(t);return(0,o.jsx)(i,{variant:e.variant||`primary`,type:`submit`,disabled:!c,size:e.size,className:e.className?e.className:``,showSpinner:t.isSubmitting,children:e.submitText?(0,o.jsx)(o.Fragment,{children:e.submitText}):(0,o.jsx)(r,{namespace:s,phrase:e.isNew?`create`:`save`})})}export{c as t};
|
|
2
|
+
//# sourceMappingURL=C1guWVFU2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"C1guWVFU2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/forms/form-buttons/FormButtons.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText ?\n <>{props.submitText}</> :\n <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n"],"mappings":"wHAWM,EAAY,qBAUlB,SAAgB,EAAuC,EAAsC,CAC3F,IAAM,EAAc,GAA0B,CAExC,EAAY,EAAiB,EAAY,CAE/C,OACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,EAAM,SAAW,UAC1B,KAAK,SACL,SAAU,CAAC,EACX,KAAM,EAAM,KACZ,UAAW,EAAM,UAAY,EAAM,UAAY,GAC/C,YAAa,EAAY,sBAExB,EAAM,YACL,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SAAG,EAAM,WAAc,CAAA,EACvB,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAQ,EAAM,MAAQ,SAAW,OAAU,CAAA,CAC3D,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,_t as n,fn as r}from"./B1i9atik.chunk.js";import{g as i}from"./NpQVkKE2.chunk.js";import{l as a}from"./TJBzqR6k.chunk.js";import{n as o,t as s}from"./Dn3hwC-o.chunk.js";import{t as c}from"./DgSFdSfV.chunk.js";import{t as l}from"./YhCzLJGK.chunk.js";import{D as u,Z as d}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,_t as n,fn as r}from"./B1i9atik.chunk.js";import{g as i}from"./NpQVkKE2.chunk.js";import{l as a}from"./TJBzqR6k.chunk.js";import{n as o,t as s}from"./Dn3hwC-o.chunk.js";import{t as c}from"./DgSFdSfV.chunk.js";import{t as l}from"./YhCzLJGK.chunk.js";import{D as u,Z as d}from"./app-lnmpv5W4.js";import{t as f}from"./DyUX82Kv.chunk.js";import{t as p}from"./D-ivDlyL.chunk.js";import{t as m}from"./CAJOpkKZ.chunk.js";import{t as h}from"./Da2KHzN02.chunk.js";import{t as g}from"./BmEexpMP2.chunk.js";import{t as _}from"./B7sWLg9v2.chunk.js";import{t as v}from"./BuSq2beZ2.chunk.js";import{t as y}from"./DGRBUJ6T2.chunk.js";import{n as b,r as x,t as S}from"./CYfnBEtT2.chunk.js";import{n as C,t as w}from"./CDXcKno52.chunk.js";import{n as T,t as E}from"./CjNkj1Q92.chunk.js";import{t as D}from"./DsolW3Wd2.chunk.js";var O=r(t()),k={itemContainer:`_itemContainer_84hxn_1`,badgeWrapper:`_badgeWrapper_84hxn_7`,thumbnail:`_thumbnail_84hxn_12`},A=e();function j(e){function t(e,t){switch(e.programType){case S.Video:return{application:o.TV,action:s.Tv.PREVIEW,args:[t,e.id]};case S.Audio:return{application:o.TV,action:s.Tv.RADIO_DOWNLOAD,args:[t,e.id]}}}function n(t){let n=t.globalId.split(`-`).join(``);return`${e.previewUrl}/thumbnail/${n}.jpg`}return(0,A.jsx)(`div`,{className:`${k.itemContainer} rounded mx-4 px-2`,children:(0,A.jsxs)(i,{appLink:t(e.program,e.region),className:`d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none`,children:[(0,A.jsxs)(`div`,{className:`w-50 d-flex align-items-center`,children:[(0,A.jsx)(`div`,{className:`${k.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`,children:(0,A.jsx)(f,{src:n(e.program),alt:e.program.title,extraClasses:`w-100 rounded`})}),(0,A.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,A.jsx)(`span`,{className:`me-1`,children:e.name}),e.program.hasAdsFree&&(0,A.jsx)(h,{small:!0})]})]}),(0,A.jsx)(_,{program:e.program,className:`pointer-events-none`,showEndTime:!0})]},e.program.id)})}function M(e){let{channel:t}=e;return(0,A.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,A.jsx)(`div`,{className:`d-flex align-items-center me-3`,style:{maxWidth:`7.5rem`},children:(0,A.jsx)(`img`,{className:`w-100`,src:t.logoUrl})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h1`,{className:`h3`,children:t.displayName}),(0,A.jsx)(`p`,{className:`mb-0`,children:t.description})]})]})}function N(){return(0,A.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,A.jsx)(`div`,{className:`partial-loading-background d-flex align-items-center me-3`,children:(0,A.jsx)(`div`,{style:{width:`7.5rem`}})}),(0,A.jsxs)(`div`,{className:`w-100`,children:[(0,A.jsx)(`div`,{className:`partial-loading-background w-25 h3`,children:`\xA0`}),(0,A.jsx)(`p`,{className:`partial-loading-background w-100 mb-0`,children:`\xA0`})]})]})}function P(e){let t=a(d.config()),r=a(v.region(e.region)),i=a(v.regions()),f=a(v.dateRange(e.region)),h=a(r.data&&v.channels(r.data.code)),_=O.useMemo(()=>h.data?.find(t=>t.id.toString()===e.channelId.toString()),[h.data]),{setRegion:S}=D(),{liteUpgradeTypeCustomer:k}=u(null),P=a(r.data&&_&&v.programsByChannel(r.data.code,_.name,_.startTime,_.stopTime)),F=O.useMemo(()=>P.data?[...P.data].sort((e,t)=>t.startTime.localeCompare(e.startTime)):[],[P.data]),I=O.useMemo(()=>{if(!P.data?.length)return[];let e={};return F.forEach(t=>{let n=l.format(g(t.startTime,t.timeZone),`dddd Do MMMM`);e[n]||(e[n]=[]),e[n].push(t)}),Object.entries(e).map(([e,t])=>[e,t.reverse()])},[P]);h.hasCompleted&&!_&&p(n.BadRequest),y(r),m([i,h,P]),c({title:_?.displayName});let L=r.hasCompleted&&i.hasCompleted&&h.hasCompleted&&_&&P.hasCompleted;function R(){return e.selectedRegion?i.data?.find(t=>t.code===e.selectedRegion):r.data}let z=R();return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(E,{region:z}),(0,A.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,A.jsx)(w,{active:`channels`,currentRegion:z,showTvGuide:!!k,config:t.data}),(0,A.jsx)(T,{currentRegion:z,regions:i.data,appLink:{application:o.TV,action:s.Tv.CHANNELS},onClick:S})]}),(0,A.jsx)(C,{dateRange:f.data,region:r.data}),_?(0,A.jsx)(M,{channel:_}):(0,A.jsx)(N,{}),L?(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(x,{children:I.map(([e,n],i)=>(0,A.jsx)(x.Header,{title:e,children:(0,A.jsx)(`div`,{className:`mt-2 pb-2`,children:n&&n.map(e=>(0,A.jsx)(j,{name:e.title,program:e,region:r.data.code,previewUrl:t.data?.tvPreviewUrls[r.data?.code]},e.id))})},i))})}):(0,A.jsx)(b,{})]})}export{P as TvChannelView};
|
|
2
|
+
//# sourceMappingURL=C3K3VtRR2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BWVFXuZ42.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-accordion-list-item/tv-accordion-list-item.module.scss","../../src/apps/tv/components/tv-accordion-list-item/TvAccordionListItem.tsx","../../src/apps/tv/views/tv-channel/components/tv-channel-header/TvChannelHeader.tsx","../../src/apps/tv/views/tv-channel/partial-loading/PartialTvChannelPrograms.tsx","../../src/apps/tv/views/tv-channel/TvChannelView.tsx"],"sourcesContent":[":local {\n .itemContainer {\n transition: background-color 0.25s ease-in-out;\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n height: 2rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './tv-accordion-list-item.module.scss';\n\ninterface TvAccordionListItemProps {\n name: string;\n program: TvProgram;\n region: string;\n showDate?: boolean;\n previewUrl: string;\n}\n\nexport function TvAccordionListItem(props: TvAccordionListItemProps) {\n function getProgramAppLink(program: TvProgram, region: string) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [ region, program.id ]\n };\n }\n }\n \n function getThumbnailUrl(program: TvProgram) {\n const globalId = program.globalId.split('-').join('');\n return `${props.previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div className={`${styles.itemContainer} rounded mx-4 px-2`}>\n <AppLink\n key={props.program.id}\n appLink={getProgramAppLink(props.program, props.region)}\n className='d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none'\n >\n <div className='w-50 d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(props.program)}\n alt={props.program.title}\n extraClasses='w-100 rounded'\n />\n </div>\n <div className='d-flex align-items-center'>\n <span className='me-1'>{props.name}</span>\n {props.program.hasAdsFree && <TvAdFreeBadge small />}\n </div>\n </div>\n <TvProgramTimeBadge program={props.program} className='pointer-events-none' showEndTime />\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\n\ninterface TvChannelHeaderProps {\n channel: TvChannel;\n}\n\nexport function TvChannelHeader(props: TvChannelHeaderProps): JSX.Element {\n const { channel } = props;\n\n return (\n <div className='d-flex mb-3'>\n <div\n className='d-flex align-items-center me-3'\n style={{ maxWidth: '7.5rem' }}>\n <img\n className='w-100'\n src={channel.logoUrl}\n />\n </div>\n <div>\n <h1 className='h3'>{channel.displayName}</h1>\n <p className='mb-0'>{channel.description}</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialTvChannel() {\n return (\n <div className='d-flex mb-3'>\n <div className='partial-loading-background d-flex align-items-center me-3'>\n <div style={{ width: '7.5rem' }}/>\n </div>\n <div className='w-100'>\n <div className='partial-loading-background w-25 h3'> </div>\n <p className='partial-loading-background w-100 mb-0'> </p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAccordionListItem } from 'apps/tv/components/tv-accordion-list-item/TvAccordionListItem';\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport { TvChannelHeader } from './components/tv-channel-header/TvChannelHeader';\nimport { PartialTvChannel } from './partial-loading/PartialTvChannelPrograms';\n\ninterface TvChannelViewProps {\n region: string;\n channelId: string;\n selectedRegion?: string;\n}\n\nexport function TvChannelView(props: TvChannelViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n const channel = React.useMemo(() => {\n return channels.data?.find(c => c.id.toString() === props.channelId.toString());\n }, [channels.data]);\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n channel &&\n TvRequests.programsByChannel(\n region.data.code,\n channel.name,\n channel.startTime,\n channel.stopTime\n )\n );\n\n const sortedPrograms = React.useMemo(() => {\n if (!programs.data) return [];\n return [...programs.data].sort((a, b) => b.startTime.localeCompare(a.startTime));\n }, [programs.data]);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [];\n\n const groups: HashObject<TvProgram[]> = {};\n\n sortedPrograms.forEach(program => {\n const startTime = DateHelper.format(toLocalTime(program.startTime, program.timeZone), 'dddd Do MMMM');\n\n if (!groups[startTime])\n groups[startTime] = [];\n\n groups[startTime].push(program);\n });\n const grouped = Object.entries(groups);\n return grouped.map(([ date, program ]) => [ date, program.reverse() ]);\n }, [programs]);\n\n if ((channels.hasCompleted && !channel)) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels, programs ]);\n\n useSetPageMetadata({ title: channel?.displayName });\n\n const dataLoaded =\n region.hasCompleted && regions.hasCompleted && channels.hasCompleted && channel && programs.hasCompleted;\n\n function getCurrentRegion(): TvRegion {\n if (!props.selectedRegion) return region.data;\n\n return regions.data?.find(region => region.code === props.selectedRegion);\n }\n\n const currentRegion = getCurrentRegion();\n\n return (\n <>\n <TvSearchBar region={currentRegion} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='channels'\n currentRegion={currentRegion}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n <TvRegionSelect\n currentRegion={currentRegion}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS\n }}\n onClick={setRegion}\n />\n </div>\n \n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n {channel ? <TvChannelHeader channel={channel} /> : <PartialTvChannel />}\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ date, programs ]: [string, TvProgram[]], index) => (\n <AccordionList.Header\n key={index}\n title={date}\n >\n <div className='mt-2 pb-2'>\n {programs && programs.map(program => (\n <TvAccordionListItem\n key={program.id}\n name={program.title}\n program={program}\n region={region.data.code}\n previewUrl={config.data?.tvPreviewUrls[region.data?.code]}\n />\n ))}\n </div>\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"C3K3VtRR2.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-accordion-list-item/tv-accordion-list-item.module.scss","../../src/apps/tv/components/tv-accordion-list-item/TvAccordionListItem.tsx","../../src/apps/tv/views/tv-channel/components/tv-channel-header/TvChannelHeader.tsx","../../src/apps/tv/views/tv-channel/partial-loading/PartialTvChannelPrograms.tsx","../../src/apps/tv/views/tv-channel/TvChannelView.tsx"],"sourcesContent":[":local {\n .itemContainer {\n transition: background-color 0.25s ease-in-out;\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n height: 2rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './tv-accordion-list-item.module.scss';\n\ninterface TvAccordionListItemProps {\n name: string;\n program: TvProgram;\n region: string;\n showDate?: boolean;\n previewUrl: string;\n}\n\nexport function TvAccordionListItem(props: TvAccordionListItemProps) {\n function getProgramAppLink(program: TvProgram, region: string) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [ region, program.id ]\n };\n }\n }\n \n function getThumbnailUrl(program: TvProgram) {\n const globalId = program.globalId.split('-').join('');\n return `${props.previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div className={`${styles.itemContainer} rounded mx-4 px-2`}>\n <AppLink\n key={props.program.id}\n appLink={getProgramAppLink(props.program, props.region)}\n className='d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none'\n >\n <div className='w-50 d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(props.program)}\n alt={props.program.title}\n extraClasses='w-100 rounded'\n />\n </div>\n <div className='d-flex align-items-center'>\n <span className='me-1'>{props.name}</span>\n {props.program.hasAdsFree && <TvAdFreeBadge small />}\n </div>\n </div>\n <TvProgramTimeBadge program={props.program} className='pointer-events-none' showEndTime />\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\n\ninterface TvChannelHeaderProps {\n channel: TvChannel;\n}\n\nexport function TvChannelHeader(props: TvChannelHeaderProps): JSX.Element {\n const { channel } = props;\n\n return (\n <div className='d-flex mb-3'>\n <div\n className='d-flex align-items-center me-3'\n style={{ maxWidth: '7.5rem' }}>\n <img\n className='w-100'\n src={channel.logoUrl}\n />\n </div>\n <div>\n <h1 className='h3'>{channel.displayName}</h1>\n <p className='mb-0'>{channel.description}</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialTvChannel() {\n return (\n <div className='d-flex mb-3'>\n <div className='partial-loading-background d-flex align-items-center me-3'>\n <div style={{ width: '7.5rem' }}/>\n </div>\n <div className='w-100'>\n <div className='partial-loading-background w-25 h3'> </div>\n <p className='partial-loading-background w-100 mb-0'> </p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAccordionListItem } from 'apps/tv/components/tv-accordion-list-item/TvAccordionListItem';\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport { TvChannelHeader } from './components/tv-channel-header/TvChannelHeader';\nimport { PartialTvChannel } from './partial-loading/PartialTvChannelPrograms';\n\ninterface TvChannelViewProps {\n region: string;\n channelId: string;\n selectedRegion?: string;\n}\n\nexport function TvChannelView(props: TvChannelViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n const channel = React.useMemo(() => {\n return channels.data?.find(c => c.id.toString() === props.channelId.toString());\n }, [channels.data]);\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n channel &&\n TvRequests.programsByChannel(\n region.data.code,\n channel.name,\n channel.startTime,\n channel.stopTime\n )\n );\n\n const sortedPrograms = React.useMemo(() => {\n if (!programs.data) return [];\n return [...programs.data].sort((a, b) => b.startTime.localeCompare(a.startTime));\n }, [programs.data]);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [];\n\n const groups: HashObject<TvProgram[]> = {};\n\n sortedPrograms.forEach(program => {\n const startTime = DateHelper.format(toLocalTime(program.startTime, program.timeZone), 'dddd Do MMMM');\n\n if (!groups[startTime])\n groups[startTime] = [];\n\n groups[startTime].push(program);\n });\n const grouped = Object.entries(groups);\n return grouped.map(([ date, program ]) => [ date, program.reverse() ]);\n }, [programs]);\n\n if ((channels.hasCompleted && !channel)) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels, programs ]);\n\n useSetPageMetadata({ title: channel?.displayName });\n\n const dataLoaded =\n region.hasCompleted && regions.hasCompleted && channels.hasCompleted && channel && programs.hasCompleted;\n\n function getCurrentRegion(): TvRegion {\n if (!props.selectedRegion) return region.data;\n\n return regions.data?.find(region => region.code === props.selectedRegion);\n }\n\n const currentRegion = getCurrentRegion();\n\n return (\n <>\n <TvSearchBar region={currentRegion} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='channels'\n currentRegion={currentRegion}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n <TvRegionSelect\n currentRegion={currentRegion}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS\n }}\n onClick={setRegion}\n />\n </div>\n \n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n {channel ? <TvChannelHeader channel={channel} /> : <PartialTvChannel />}\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ date, programs ]: [string, TvProgram[]], index) => (\n <AccordionList.Header\n key={index}\n title={date}\n >\n <div className='mt-2 pb-2'>\n {programs && programs.map(program => (\n <TvAccordionListItem\n key={program.id}\n name={program.title}\n program={program}\n region={region.data.code}\n previewUrl={config.data?.tvPreviewUrls[region.data?.code]}\n />\n ))}\n </div>\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as e,fn as t}from"./B1i9atik.chunk.js";import{t as n}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{D as e,fn as t}from"./B1i9atik.chunk.js";import{t as n}from"./D-ivDlyL.chunk.js";var r=t(e());function i(e){return e.map(e=>e.statusCode).join(`:`)}function a(e,t,a){let o=Array.isArray(e)?e:[e];(0,r.useEffect)(()=>{o.forEach(e=>{n(e.statusCode,t,a)})},[i(o),t,a])}export{a as t};
|
|
2
|
+
//# sourceMappingURL=CAJOpkKZ.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CAJOpkKZ.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseHandleObjectError.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}\n"],"mappings":"qGAMA,SAAS,EAAiB,EAAiD,CACzE,OAAO,EAAW,IAAI,GAAO,EAAI,WAAW,CAAC,KAAK,IAAI,CAIxD,SAAgB,EACd,EACA,EACA,EACM,CACN,IAAM,EAAa,MAAM,QAAQ,EAAY,CAAG,EAAc,CAAC,EAAY,EAE3E,EAAA,EAAA,eAAgB,CACd,EAAW,QAAQ,GAAO,CACxB,EAAgB,EAAI,WAAY,EAAc,EAAa,EAC3D,EACD,CAAE,EAAiB,EAAW,CAAE,EAAc,EAAc,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t}from"./B1i9atik.chunk.js";import{l as n,u as r}from"./TJBzqR6k.chunk.js";import{t as i}from"./CzvVp9iC.chunk.js";import{i as a,o,s}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t}from"./B1i9atik.chunk.js";import{l as n,u as r}from"./TJBzqR6k.chunk.js";import{t as i}from"./CzvVp9iC.chunk.js";import{i as a,o,s}from"./CYFRcx63.chunk.js";import{t as c}from"./DgSFdSfV.chunk.js";import{t as l}from"./BEyI0jsC2.chunk.js";import{h as u,m as d,t as f}from"./DRZvc_n5.chunk.js";import{t as p}from"./CCvXN2-C.chunk.js";import{t as m}from"./D-ivDlyL.chunk.js";import{t as h}from"./CGLWqKaa.chunk.js";import{t as g}from"./RNP3-R8c.chunk.js";import{t as _}from"./Dsmr6Wly.chunk.js";import{r as v}from"./DUCTNoXj.chunk.js";t();var y=e(),b=i.encloseNamespace(`exchange.mostRecent`);function x(){let e=r(),t=l(),i=n(p.exchange()),x=h(`video-list`),{commonVideoProps:S}=d();c({title:b(`title`)});let{items:C,hasMore:w,isFetching:T,nextCursor:E}=s(i.data&&D,O,k);function D(e){return p.mostRecentVideos(i.data.id,e)}function O(t){return e(D(t))}function k(e,n){if(e===1)return m(n);t.error(b(`error`))}return(0,y.jsxs)(u.Provider,{value:x,children:[(0,y.jsxs)(`div`,{className:`mb-2`,children:[(0,y.jsx)(g,{}),(0,y.jsx)(_,{active:`most-recent`})]}),C?(0,y.jsx)(f,{videos:C,getVideoAppLink:v,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:S}):(0,y.jsx)(`div`,{className:`mx-n2`,children:(0,y.jsx)(a,{})}),(w||T)&&(0,y.jsx)(o,{isFetching:T,fetchNext:O,nextCursor:E})]})}export{x as ExchangeMostRecentView};
|
|
2
|
+
//# sourceMappingURL=CAOBwDbU.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CAOBwDbU.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-most-recent/ExchangeMostRecentView.tsx"],"sourcesContent":["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 { 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 { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Library, Video } from 'libs/shared/interfaces';\n\nimport { ExchangeSearchBar } from 'apps/exchange/components/exchange-search-bar/ExchangeSearchBar';\nimport { ExchangeTabs } from 'apps/exchange/components/exchange-tabs/ExchangeTabs';\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nconst namespace = 'exchange.mostRecent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ExchangeMostRecentView() {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n \n const videoActions = useGetExchangeActions('video-list');\n\n const { commonVideoProps } = useCommonVideoProps();\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(exchange.data && getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.mostRecentVideos(exchange.data.id, 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 return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='mb-2'>\n <ExchangeSearchBar />\n <ExchangeTabs active='most-recent' />\n </div>\n\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 ) : (\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 </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"ujBAwBM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,GAAyB,CACvC,IAAM,EAAQ,GAAoB,CAC5B,EAAS,GAAW,CAEpB,EAAW,EAA8B,EAAiB,UAAU,CAAC,CAErE,EAAe,EAAsB,aAAa,CAElD,CAAE,oBAAqB,GAAqB,CAElD,EAAmB,CAAE,MAAO,EAAU,QAAQ,CAAE,CAAC,CAEjD,GAAM,CACJ,MAAO,EACP,UACA,aACA,cACE,EAAuB,EAAS,MAAQ,EAAkB,EAAiB,EAAQ,CAEvF,SAAS,EAAiB,EAAiC,CACzD,OAAO,EAAiB,iBAAiB,EAAS,KAAK,GAAI,EAAO,CAGpE,SAAS,EAAgB,EAAuB,CAC9C,OAAO,EAAM,EAAiB,EAAO,CAAC,CAGxC,SAAS,EAAQ,EAAoB,EAA8B,CACjE,GAAI,IAAe,EACjB,OAAO,EAAgB,EAAW,CAEpC,EAAO,MAAM,EAAU,QAAQ,CAAC,CAGlC,OACE,EAAA,EAAA,MAAC,EAAoB,SAArB,CAA8B,MAAO,WAArC,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAqB,CAAA,EACrB,EAAA,EAAA,KAAC,EAAD,CAAc,OAAO,cAAgB,CAAA,CACjC,GAEL,GACC,EAAA,EAAA,KAAC,EAAD,CACU,SACS,kBACjB,sBAAuB,KACvB,+BAAkC,KAClC,mBAAsB,GACtB,kBAAA,GACkB,mBAClB,CAAA,EAEF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,EAGN,GAAW,KACX,EAAA,EAAA,KAAC,EAAD,CACc,aACZ,UAAW,EACC,aACZ,CAAA,CAEyB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,b as n,bt as r,d as i,fn as a,s as o,t as s,x as c}from"./B1i9atik.chunk.js";import{d as l,l as u}from"./TJBzqR6k.chunk.js";import{t as d}from"./CzvVp9iC.chunk.js";import{t as f}from"./DRTfS6nN.chunk.js";import{I as p,M as m,U as h,Z as g}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,b as n,bt as r,d as i,fn as a,s as o,t as s,x as c}from"./B1i9atik.chunk.js";import{d as l,l as u}from"./TJBzqR6k.chunk.js";import{t as d}from"./CzvVp9iC.chunk.js";import{t as f}from"./DRTfS6nN.chunk.js";import{I as p,M as m,U as h,Z as g}from"./app-lnmpv5W4.js";import{t as _}from"./s776Po8a2.chunk.js";import{t as v}from"./BEyI0jsC2.chunk.js";import{t as y}from"./BwAvKeam.chunk.js";import{t as b}from"./CCvXN2-C.chunk.js";import{t as x}from"./c2oA1XgG.chunk.js";var S=a(t()),C=e(),w=`exchange.add`,T=d.encloseNamespace(w);function E(e){let t=v(),a=l(),d=u(g.config()),E=u(b.exchange()),D=u(_.video(e.id)),[O,k]=S.useState(!1),[A,j]=S.useState(!1),[M,N]=S.useState(null),{previewContext:P,clearPreviewContext:F}=x(e.id,!1);S.useEffect(()=>{!D.data||A||I()},[D.data?.id]);async function I(){j(!0);try{let e=await a(b.addVideo(E.data.id,D.data.id));k(!0),N(e.id),s.logUserAction({id:D.data.id,name:D.data.name},{actionType:n.Submit,descriptor:c.AddToWorkspace,location:i.Popup,entity:o.Video})}catch{t.error(T(`error`)),e.closePopup()}}function L(){e.closePopup(),P?.appLink&&(y.preventScrollTop(),r.trigger(P.appLink),F())}return(0,C.jsx)(h,{title:T(`title`),closePopup:L,showLoadingSpinner:!O,children:O&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`mx-auto w-75 mt-1 mb-2`,children:(0,C.jsx)(`img`,{src:f.General.CONFETTI,className:`img-fluid`,draggable:!1})}),(0,C.jsx)(`div`,{className:`text-center pb-3`,children:(0,C.jsx)(`h4`,{className:`mb-2`,children:(0,C.jsx)(p,{namespace:w,phrase:`added`})})}),(0,C.jsxs)(m,{children:[(0,C.jsx)(m.Cancel,{text:T(`close`),onClick:L,variant:`link`}),(0,C.jsx)(`a`,{href:`${d.data.liteUrl}/videos/${M}`,className:`btn btn-dark`,children:(0,C.jsx)(`span`,{className:`align-text-bottom me-1`,children:(0,C.jsx)(p,{namespace:w,phrase:`open`})})})]})]})})}export{E as ExchangeAddView};
|
|
2
|
+
//# sourceMappingURL=CAQAUQMB.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CAQAUQMB.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-add/ExchangeAddView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Config, Library, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\n\nconst namespace = 'exchange.add';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeAddViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ExchangeAddView(props: ExchangeAddViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const [ added, setAdded ] = React.useState<boolean>(false);\n const [ adding, setAdding ] = React.useState<boolean>(false);\n const [ newVideoId, setNewVideoId ] = React.useState<string>(null);\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.id, false);\n\n React.useEffect(() => {\n if (!video.data || adding)\n return;\n\n addVideo();\n }, [video.data?.id]);\n\n async function addVideo() {\n setAdding(true);\n\n try {\n const newVideo = await fetchAsync<Video>(ExchangeRequests.addVideo(\n exchange.data.id,\n video.data.id\n ));\n\n setAdded(true);\n setNewVideoId(newVideo.id);\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: LocationContext.Popup,\n entity: EntityType.Video\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={!added}\n >\n {added &&\n <>\n <div className='mx-auto w-75 mt-1 mb-2'>\n <img src={ImageUrls.General.CONFETTI} className='img-fluid' draggable={false} />\n </div>\n\n <div className='text-center pb-3'>\n <h4 className='mb-2'>\n <Text namespace={namespace} phrase='added' />\n </h4>\n </div>\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('close')}\n onClick={closePopup}\n variant='link'\n />\n <a href={`${config.data.liteUrl}/videos/${newVideoId}`} className='btn btn-dark'>\n <span className='align-text-bottom me-1'>\n <Text namespace={namespace} phrase='open' />\n </span>\n </a>\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"yfAuBM,EAAY,eACZ,EAAY,EAAgB,iBAAiB,EAAU,CAM7D,SAAgB,EAAgB,EAA0C,CACxE,IAAM,EAAS,GAAW,CACpB,EAAa,GAAyB,CAEtC,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAC9D,EAAW,EAA8B,EAAiB,UAAU,CAAC,CACrE,EAAQ,EAA4B,EAAc,MAAM,EAAM,GAAG,CAAC,CAElE,CAAE,EAAO,GAAA,EAAmB,SAAkB,GAAM,CACpD,CAAE,EAAQ,GAAA,EAAoB,SAAkB,GAAM,CACtD,CAAE,EAAY,GAAA,EAAwB,SAAiB,KAAK,CAE5D,CAAE,iBAAgB,uBAAwB,EAAkB,EAAM,GAAI,GAAM,CAElF,EAAM,cAAgB,CAChB,CAAC,EAAM,MAAQ,GAGnB,GAAU,EACT,CAAC,EAAM,MAAM,GAAG,CAAC,CAEpB,eAAe,GAAW,CACxB,EAAU,GAAK,CAEf,GAAI,CACF,IAAM,EAAW,MAAM,EAAkB,EAAiB,SACxD,EAAS,KAAK,GACd,EAAM,KAAK,GACZ,CAAC,CAEF,EAAS,GAAK,CACd,EAAc,EAAS,GAAG,CAE1B,EAAgB,cACd,CAAE,GAAI,EAAM,KAAK,GAAI,KAAM,EAAM,KAAK,KAAM,CAC5C,CACE,WAAY,EAAW,OACvB,WAAY,EAAsB,eAClC,SAAU,EAAgB,MAC1B,OAAQ,EAAW,MACpB,CACF,MACK,CACN,EAAO,MAAM,EAAU,QAAQ,CAAC,CAChC,EAAM,YAAY,EAStB,SAAS,GAAmB,CAC1B,EAAM,YAAY,CAEb,GAAgB,UAGrB,EAAa,kBAAkB,CAC/B,EAAmB,QAAQ,EAAe,QAAQ,CAClD,GAAqB,EAGvB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,QAAQ,CACb,aACZ,mBAAoB,CAAC,WAEpB,IACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mCACb,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAU,QAAQ,SAAU,UAAU,YAAY,UAAW,GAAS,CAAA,CAC5E,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,iBACZ,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,QAAU,CAAA,CAC1C,CAAA,CACD,CAAA,EAEN,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,KAAM,EAAU,QAAQ,CACxB,QAAS,EACT,QAAQ,OACR,CAAA,EACF,EAAA,EAAA,KAAC,IAAD,CAAG,KAAM,GAAG,EAAO,KAAK,QAAQ,UAAU,IAAc,UAAU,yBAChE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACd,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,OAAS,CAAA,CACvC,CAAA,CACL,CAAA,CACS,CAAA,CAAA,CACd,CAAA,CAAA,CAEC,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t}from"./B1i9atik.chunk.js";import{l as n}from"./TJBzqR6k.chunk.js";import{t as r}from"./CzvVp9iC.chunk.js";import{I as i,M as a,U as o,Z as s}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t}from"./B1i9atik.chunk.js";import{l as n}from"./TJBzqR6k.chunk.js";import{t as r}from"./CzvVp9iC.chunk.js";import{I as i,M as a,U as o,Z as s}from"./app-lnmpv5W4.js";import{t as c}from"./B7sWLg9v2.chunk.js";import{t as l}from"./BuSq2beZ2.chunk.js";t();var u=e(),d=`tv.radioDownload`,f=r.encloseNamespace(d);function p(e){let t=n(s.config()),r=n(l.program(e.id)),p=n(l.region(e.region));function m(){let e=r.data?.globalId.split(`-`).join(``);return`${t.data.tvPreviewUrls[p.data.code]}/audio/${e}.mp3`}return t.hasCompleted&&r.hasCompleted?(0,u.jsxs)(o,{title:f(`title`),closePopup:e.closePopup,showLoadingSpinner:!r.hasCompleted,children:[r.data&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`p`,{className:`fw-semibold mb-2`,children:r.data.title}),(0,u.jsx)(`div`,{className:`d-flex mb-2`,children:(0,u.jsx)(c,{program:r.data,showDate:!0,showEndTime:!0})}),(0,u.jsx)(`p`,{children:r.data.description})]}),(0,u.jsxs)(a,{children:[(0,u.jsx)(a.Cancel,{text:f(`cancel`),onClick:e.closePopup,variant:`link`}),(0,u.jsx)(`a`,{target:`_blank`,href:m(),className:`btn btn-dark`,children:(0,u.jsx)(i,{namespace:d,phrase:`download`})})]})]}):(0,u.jsx)(u.Fragment,{})}export{p as TvRadioDownloadView};
|
|
2
|
+
//# sourceMappingURL=CAoPaL8M.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CAoPaL8M.chunk.js","names":[],"sources":["../../src/apps/tv/views/tv-radio-download/TvRadioDownloadView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nconst namespace = 'tv.radioDownload';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TvRadioDownloadProps extends PopupProps {\n id: string;\n region: string;\n}\n\nexport function TvRadioDownloadView(props: TvRadioDownloadProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const program = Flight.useBasicFetch<TvProgram>(TvRequests.program(props.id));\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n\n function getDownloadLink() {\n const globalId = program.data?.globalId.split('-').join('');\n return `${config.data.tvPreviewUrls[region.data.code]}/audio/${globalId}.mp3`;\n }\n\n const hasLoaded = (config.hasCompleted && program.hasCompleted);\n\n if (!hasLoaded) {\n return <></>;\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!program.hasCompleted}\n >\n {program.data &&\n <>\n <p className='fw-semibold mb-2'>{program.data.title}</p>\n <div className='d-flex mb-2'>\n <TvProgramTimeBadge program={program.data} showDate showEndTime />\n </div>\n <p>{program.data.description}</p>\n </>\n }\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('cancel')}\n onClick={props.closePopup}\n variant='link'\n />\n <a target='_blank' href={getDownloadLink()} className='btn btn-dark'>\n <Text namespace={namespace} phrase='download' />\n </a>\n </PopupButtons>\n </Popup>\n );\n}\n"],"mappings":"0RAgBM,EAAY,mBACZ,EAAY,EAAgB,iBAAiB,EAAU,CAO7D,SAAgB,EAAoB,EAA6B,CAC/D,IAAM,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAC9D,EAAU,EAAgC,EAAW,QAAQ,EAAM,GAAG,CAAC,CACvE,EAAS,EAA+B,EAAW,OAAO,EAAM,OAAO,CAAC,CAE9E,SAAS,GAAkB,CACzB,IAAM,EAAW,EAAQ,MAAM,SAAS,MAAM,IAAI,CAAC,KAAK,GAAG,CAC3D,MAAO,GAAG,EAAO,KAAK,cAAc,EAAO,KAAK,MAAM,SAAS,EAAS,MAS1E,OANmB,EAAO,cAAgB,EAAQ,cAOhD,EAAA,EAAA,MAAC,EAAD,CACE,MAAO,EAAU,QAAQ,CACzB,WAAY,EAAM,WAClB,mBAAoB,CAAC,EAAQ,sBAH/B,CAKG,EAAQ,OACP,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,4BAAoB,EAAQ,KAAK,MAAU,CAAA,EACxD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wBACb,EAAA,EAAA,KAAC,EAAD,CAAoB,QAAS,EAAQ,KAAM,SAAA,GAAS,YAAA,GAAc,CAAA,CAC9D,CAAA,EACN,EAAA,EAAA,KAAC,IAAD,CAAA,SAAI,EAAQ,KAAK,YAAgB,CAAA,CAChC,CAAA,CAAA,EAEL,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,KAAM,EAAU,SAAS,CACzB,QAAS,EAAM,WACf,QAAQ,OACR,CAAA,EACF,EAAA,EAAA,KAAC,IAAD,CAAG,OAAO,SAAS,KAAM,GAAiB,CAAE,UAAU,yBACpD,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,WAAa,CAAA,CAC9C,CAAA,CACS,CAAA,CAAA,CAAA,IA3BV,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{y as e}from"./TJBzqR6k.chunk.js";import{t}from"./BG5Aor0J.chunk.js";import{t as n}from"./CrBD6Z4s.chunk.js";import{Q as r,c as i}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{y as e}from"./TJBzqR6k.chunk.js";import{t}from"./BG5Aor0J.chunk.js";import{t as n}from"./CrBD6Z4s.chunk.js";import{Q as r,c as i}from"./app-lnmpv5W4.js";import{t as a}from"./D2DuwJJH2.chunk.js";import{r as o}from"./Bgx2b8dF.chunk.js";var s={exchange(){return{url:n.urlBuilder(`/api/domain/v2/me/libraries`,{type:[`exchange`],maxCategoryDepth:0}),key:`exchange`,normalize:!1,formatData:e=>t.first(e).data}},categories(){return{url:n.urlBuilder(`/api/domain/v2/me/libraries`,{type:[`exchange`],maxCategoryDepth:2}),key:`exchange:categories`,normalize:!1,formatData:e=>t.first(e).children}},folderVideos(e,t,o){let s=r.getVideoSortParam(t),c=(s?`{${s},libraries.typeid:18}`:``)+i.VIDEO_COLLECTION;return{url:n.urlBuilder(`{gateway}/v1/objects/${e}/videos`,{cursor:o,query:c,permissionFilterOption:a.StripMetadata}),key:[`folder`,`videos`,e,o,t].filter(e=>!!e).join(`:`)}},seriesVideos(e,t,a){let o=r.getVideoSortParam(t),s=(o?`{${o},libraries.typeid:18}`:``)+i.VIDEO_COLLECTION;return{url:n.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:s,cursor:a}),key:[`series`,`videos`,e,a,t].filter(e=>!!e).join(`:`)}},mostRecentVideos(e,t){let r=`{orderByDesc:timestamp}`+i.VIDEO_COLLECTION;return{url:n.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:r,cursor:t}),key:[`mostRecent`,`videos`,e,t].filter(e=>!!e).join(`:`)}},addVideo(t,n){return{key:`add:video:exchange`,url:`{gateway}/v1/users/me/add-videos`,data:{libraryId:t,objectId:n},type:e.POST,invalidationKeys:`videos:${n}:`}},suggestEdit(t,n){return{key:`suggest:an:edit`,url:`{gateway}/v1/videos/${t}/suggest-edit`,data:n,type:e.POST}},search(e,t,r={},i){let a=`search:${e}:${t}:${i}`;a+=Object.keys(r).map(e=>r[e]).join(`;`);let s=Object.assign({},{index:t,cursor:i??void 0,query:e,...r});return{url:n.urlBuilder(`{gateway}/v3/search/exchange`,s),key:a,formatData:e=>{let t=e.totalResults,n=e?.results?.filter(e=>{if(e._index!==`series`&&e._index!==`playlist`)return!0;if(e._index===`playlist`){let n=e;return n.clips?.data?.length||n.interactives?.data?.length||n.videos?.data?.length?!0:(t--,!1)}return e.videos?.data?.length===0?(t--,!1):!0})??[];e.results=n,e.totalResults=t;let r=n[0]?._score;return{...e,results:o.mapMaxScoreToSearchResults(n,r)}}}}};export{s as t};
|
|
2
|
+
//# sourceMappingURL=CCvXN2-C.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CCvXN2-C.chunk.js","names":[],"sources":["../../src/apps/exchange/flight-requests/ExchangeRequests.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SearchIndices, SearchResultObjectTypes, SearchResults, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { SharedSearchHelper } from 'libs/shared/apps/search/utils/SharedSearchHelper';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { Playlist, Series, SuggestEditRequest } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nexport const ExchangeRequests = {\n exchange() {\n return {\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 0\n }),\n key: 'exchange',\n normalize: false,\n formatData: (data: HashObject[]) => {\n return ArrayHelper.first(data).data;\n }\n };\n },\n categories() {\n return {\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 2\n }),\n key: 'exchange:categories',\n normalize: false,\n formatData: (data: HashObject[]) => {\n return ArrayHelper.first(data).children;\n }\n };\n },\n folderVideos(\n folderId: string,\n sort?: VideoSortType,\n cursor?: string\n ): Flight.Request {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n \n const query = (sortFilter ? `{${sortFilter},libraries.typeid:18}` : '') + SharedWithStatements.VIDEO_COLLECTION;\n\n const url = UrlHelper.urlBuilder(`{gateway}/v1/objects/${folderId}/videos`, {\n cursor,\n query,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n });\n\n const key = [ 'folder', 'videos', folderId, cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url,\n key\n };\n },\n seriesVideos(\n seriesId: string,\n sort?: VideoSortType,\n cursor?: string\n ): Flight.Request {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const query = (sortFilter ? `{${sortFilter},libraries.typeid:18}` : '') + SharedWithStatements.VIDEO_COLLECTION;\n\n const url = UrlHelper.urlBuilder(`{gateway}/v1/collections/${seriesId}/videos`, {\n query,\n cursor\n });\n\n const key = [ 'series', 'videos', seriesId, cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url,\n key\n };\n },\n mostRecentVideos(exchangeId: string, cursor?: string): Flight.Request {\n const query = '{orderByDesc:timestamp}' + SharedWithStatements.VIDEO_COLLECTION;\n \n const url = UrlHelper.urlBuilder(`{gateway}/v1/collections/${exchangeId}/videos`, {\n query,\n cursor\n });\n\n const key = [ 'mostRecent', 'videos', exchangeId, cursor ].filter(k => !!k).join(':');\n\n return {\n url,\n key\n };\n },\n addVideo(\n libraryId: string,\n objectId: string\n ): Flight.Request {\n return {\n key: 'add:video:exchange',\n url: '{gateway}/v1/users/me/add-videos',\n data: {\n libraryId,\n objectId\n },\n type: HttpVerbs.POST,\n invalidationKeys: `videos:${objectId}:`\n };\n },\n\n suggestEdit(id: string, data: SuggestEditRequest): Flight.Request {\n return {\n key: 'suggest:an:edit',\n url: `{gateway}/v1/videos/${id}/suggest-edit`,\n data,\n type: HttpVerbs.POST\n };\n },\n\n search(\n query: string,\n indices: SearchIndices[],\n filters: HashObject = {},\n cursor?: string\n ): Flight.Request {\n let key = `search:${query}:${indices}:${cursor}`;\n\n key += Object.keys(filters).map(filterName => filters[filterName]).join(';');\n\n const params = Object.assign({}, {\n index: indices,\n cursor: cursor ?? undefined,\n query,\n ...filters\n });\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v3/search/exchange', params),\n key,\n formatData: (response: SearchResults<SearchResultObjectTypes>) => {\n /**\n * Until playlists and series are regionalised, search will always return every series/playlist that exists\n * even if the current user doesn't have access to the content inside (which will happen for example when playlists/series)\n * contain all UK library content but is being searched for by an AU user.\n *\n * For some search queries, this may result in search showing a bunch of \"empty\" playlists/series, which sucks.\n * This will filter all empty collections out and decrement the `totalResults` to avoid this and make search a better\n * experience.\n *\n * Ideally this will be removed one day when this regionalisation is no longer an issue.\n */\n let totalResults = response.totalResults;\n\n const results = response?.results?.filter(result => {\n if (result._index !== 'series' && result._index !== 'playlist')\n return true;\n\n if (result._index === 'playlist') {\n const playlist = result as SearchResultsObject<Playlist>;\n\n if (playlist.clips?.data?.length ||\n playlist.interactives?.data?.length ||\n playlist.videos?.data?.length)\n return true;\n\n totalResults--;\n return false;\n }\n\n if ((result as SearchResultsObject<Series>).videos?.data?.length === 0) {\n totalResults--;\n return false;\n }\n\n return true;\n }) ?? [];\n\n response.results = results;\n response.totalResults = totalResults;\n\n // The first search result will always have the highest score value.\n // We store it so that we can access it for subsequent results pages\n const resultMaxScore = results[0]?._score;\n\n return {\n ...response,\n results: SharedSearchHelper.mapMaxScoreToSearchResults(results, resultMaxScore)\n };\n }\n };\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,St as n,b as r,bt as i,d as a,s as o}from"./B1i9atik.chunk.js";import{g as s,n as c}from"./NpQVkKE2.chunk.js";import{t as l}from"./CzvVp9iC.chunk.js";import{n as u,t as d}from"./Dn3hwC-o.chunk.js";import{I as f,S as p}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,St as n,b as r,bt as i,d as a,s as o}from"./B1i9atik.chunk.js";import{g as s,n as c}from"./NpQVkKE2.chunk.js";import{t as l}from"./CzvVp9iC.chunk.js";import{n as u,t as d}from"./Dn3hwC-o.chunk.js";import{I as f,S as p}from"./app-lnmpv5W4.js";import{t as m}from"./UK8sD-oL.chunk.js";import{t as h}from"./BmEexpMP2.chunk.js";import{n as g}from"./BuSq2beZ2.chunk.js";t();var _=e(),v=`tv.infoAlert`;function y(e){return(0,_.jsx)(`div`,{className:`mb-3`,children:(0,_.jsx)(`div`,{children:e.dateRange&&(0,_.jsx)(_.Fragment,{children:(0,_.jsx)(s,{appLink:{application:u.TV,action:d.Tv.BROADCAST_CONTENT,args:[e.region?.code]},className:`text-info`,children:(0,_.jsxs)(`p`,{className:`fw-semibold mb-0 me-2`,children:[(0,_.jsx)(f,{namespace:v,phrase:`programsAvailable`}),g.getFormattedDateRange(h(e.dateRange.startDate,e.dateRange.timeZone),h(e.dateRange.endDate,e.dateRange.timeZone))]})})})})})}var b=`tv.tvTabs`,x=l.encloseNamespace(b),S={channels:{application:u.TV,action:d.Tv.CHANNELS},programs:{application:u.TV,action:d.Tv.PROGRAMS}},C={actionType:r.Click,entity:o.Url,location:a.MagicTabs};function w(e){let{active:t,currentRegion:r}=e,a=[{name:x(`channels`),appLink:{...S.channels,args:[r?.code]},active:t===`channels`,analyticsData:{name:x(`channels`),url:i.getHref(S.channels)},analyticsOptions:C},{name:x(`programs`),appLink:{...S.programs,args:[r?.code]},active:t===`programs`,analyticsData:{name:l.getPhrase(b,`programs`),url:i.getHref(S.programs)},analyticsOptions:C}];return e.showTvGuide&&e.config&&a.push({name:x(`tvGuide`),active:!1,analyticsOptions:C,svg:p,svgSize:c.Small,onSelect:()=>n.PageLoad(`${e.config.onlineUrl}/login?returnUrl=/tv/guide`,!0)}),(0,_.jsx)(`div`,{className:`mb-3`,children:(0,_.jsx)(m,{tabs:a})})}export{y as n,w as t};
|
|
2
|
+
//# sourceMappingURL=CDXcKno52.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CDXcKno52.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-info-alert/TvInfoAlert.tsx","../../src/apps/tv/components/tv-tabs/TvTabs.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\n\nconst namespace = 'tv.infoAlert';\n\ninterface TvInfoAlertProps {\n dateRange: TvDateRange;\n region: TvRegion;\n}\n\nexport function TvInfoAlert(props: TvInfoAlertProps) {\n return (\n <div className='mb-3'>\n <div>\n {props.dateRange && (\n <>\n <AppLink\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.BROADCAST_CONTENT,\n args: [props.region?.code]\n }}\n className='text-info'\n >\n <p className='fw-semibold mb-0 me-2'>\n <Text namespace={namespace} phrase='programsAvailable' />\n {TvUtils.getFormattedDateRange(\n toLocalTime(props.dateRange.startDate, props.dateRange.timeZone),\n toLocalTime(props.dateRange.endDate, props.dateRange.timeZone)\n )}\n </p>\n </AppLink>\n </>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nconst namespace = 'tv.tvTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst APP_LINKS = {\n channels: {\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS\n },\n programs: {\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS\n }\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\ninterface TvTabs {\n active: 'channels' | 'programs' | null;\n currentRegion: TvRegion;\n showTvGuide: boolean;\n config: Config;\n}\n\nexport function TvTabs(props: TvTabs): JSX.Element {\n const { active, currentRegion } = props;\n\n const tabs: PillTab[] = [{\n name: getPhrase('channels'),\n appLink: {\n ...APP_LINKS.channels,\n args: [currentRegion?.code]\n },\n active: active === 'channels',\n analyticsData: {\n name: getPhrase('channels'),\n url: Core.AppLinkHelper.getHref(APP_LINKS.channels)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n }, {\n name: getPhrase('programs'),\n appLink: {\n ...APP_LINKS.programs,\n args: [currentRegion?.code]\n },\n active: active === 'programs',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'programs'),\n url: Core.AppLinkHelper.getHref(APP_LINKS.programs)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n }];\n\n if (props.showTvGuide && props.config) {\n tabs.push({\n name: getPhrase('tvGuide'),\n active: false,\n analyticsOptions: ANALYTICS_OPTIONS,\n svg: NewWindowSvg,\n svgSize: SvgContainerSize.Small,\n onSelect: () => Core.LocationUtils.PageLoad(`${props.config.onlineUrl}/login?returnUrl=/tv/guide`, true)\n });\n }\n\n return (\n <div className='mb-3'>\n <PillTabSelector tabs={tabs} />\n </div>\n );\n}\n"],"mappings":"+YAYM,EAAY,eAOlB,SAAgB,EAAY,EAAyB,CACnD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,KAAC,MAAD,CAAA,SACG,EAAM,YACL,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,CACP,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,kBACnB,KAAM,CAAC,EAAM,QAAQ,KAAK,CAC3B,CACD,UAAU,sBAEV,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,iCAAb,EACE,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAO,oBAAsB,CAAA,CACxD,EAAQ,sBACP,EAAY,EAAM,UAAU,UAAW,EAAM,UAAU,SAAS,CAChE,EAAY,EAAM,UAAU,QAAS,EAAM,UAAU,SAAS,CAC/D,CACC,GACI,CAAA,CACT,CAAA,CAED,CAAA,CACF,CAAA,CC3BV,IAAM,EAAY,YACZ,EAAY,EAAgB,iBAAiB,EAAU,CAEvD,EAAY,CAChB,SAAU,CACR,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,SACpB,CACD,SAAU,CACR,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,UAEtB,CAEK,EAAoB,CACxB,WAAY,EAAW,MACvB,OAAQ,EAAW,IACnB,SAAU,EAAgB,UAC3B,CASD,SAAgB,EAAO,EAA4B,CACjD,GAAM,CAAE,SAAQ,iBAAkB,EAE5B,EAAkB,CAAC,CACvB,KAAM,EAAU,WAAW,CAC3B,QAAS,CACP,GAAG,EAAU,SACb,KAAM,CAAC,GAAe,KAAA,CACvB,CACD,OAAQ,IAAW,WACnB,cAAe,CACb,KAAM,EAAU,WAAW,CAC3B,IAAA,EAAwB,QAAQ,EAAU,SAAA,CAC3C,CACD,iBAAkB,EACnB,CAAE,CACD,KAAM,EAAU,WAAW,CAC3B,QAAS,CACP,GAAG,EAAU,SACb,KAAM,CAAC,GAAe,KAAA,CACvB,CACD,OAAQ,IAAW,WACnB,cAAe,CACb,KAAM,EAAgB,UAAU,EAAW,WAAW,CACtD,IAAA,EAAwB,QAAQ,EAAU,SAAA,CAC3C,CACD,iBAAkB,EACnB,CAAC,CAaF,OAXI,EAAM,aAAe,EAAM,QAC7B,EAAK,KAAK,CACR,KAAM,EAAU,UAAU,CAC1B,OAAQ,GACR,iBAAkB,EAClB,IAAK,EACL,QAAS,EAAiB,MAC1B,aAAA,EAAmC,SAAS,GAAG,EAAM,OAAO,UAAU,4BAA6B,GAAA,CACpG,CAAC,EAIF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,KAAC,EAAD,CAAuB,OAAQ,CAAA,CAC3B,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{S as e,b as t,d as n,s as r,x as i}from"./B1i9atik.chunk.js";import{l as a,p as o,u as s}from"./TJBzqR6k.chunk.js";import{t as c}from"./CzvVp9iC.chunk.js";import{n as l,t as u}from"./Dn3hwC-o.chunk.js";import{t as d}from"./CrBD6Z4s.chunk.js";import{t as f}from"./DKbUI-vj.chunk.js";import{t as p}from"./D_PyfoSL.chunk.js";import{C as m,S as h,Z as g,l as _,tt as v}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{S as e,b as t,d as n,s as r,x as i}from"./B1i9atik.chunk.js";import{l as a,p as o,u as s}from"./TJBzqR6k.chunk.js";import{t as c}from"./CzvVp9iC.chunk.js";import{n as l,t as u}from"./Dn3hwC-o.chunk.js";import{t as d}from"./CrBD6Z4s.chunk.js";import{t as f}from"./DKbUI-vj.chunk.js";import{t as p}from"./D_PyfoSL.chunk.js";import{C as m,S as h,Z as g,l as _,tt as v}from"./app-lnmpv5W4.js";import{t as y}from"./jErHNuXU2.chunk.js";import{t as b}from"./DM0JzOpR2.chunk.js";import{n as x}from"./M-OKfIH7.chunk.js";var S=function(e){return e.Developer=`Curator Devs`,e.Content=`Content`,e.Curator=`Curators`,e.Support=`Support`,e.SalesSupport=`Sales Support`,e.GraphicDesigner=`Graphic Designers`,e.MetadataEditor=`Metadata Editors`,e.ResourcingManager=`Resourcing Managers`,e.SeniorContentManager=`Senior Content Manager`,e.Marketing=`Marketing`,e.Sales=`Sales Representatives`,e.StreamableCurator=`Streamable Curator`,e.SupportExtraPermission=`Support - Extra Permissions`,e.SeoManager=`SEO Manager`,e.ContentReviewer=`Content Reviewer`,e}({}),C=c.encloseNamespace(`shared.hooks`);function w(e,t,n,r){let i=d.safeUrlConcat(e,`manage`),a=d.safeUrlConcat(e,`exchange`),o=(e,t,n)=>d.safeUrlConcat(e,`${t}/${n}`);switch(t){case v.Subject:return d.safeUrlConcat(i,`subjects/presentations/${r}/classifications/${n}/edit`);case v.Video:return o(i,`videos`,n);case v.Playlist:return o(i,`playlists`,n);case v.Series:return o(i,`series`,n);case v.Company:return o(i,`companies`,n);case v.Interactive:return o(i,`interactives`,n);case v.Clip:return o(i,`clips`,n);case v.Category:return o(a,`categories`,n)}}function T(e,t,n,r){let i=d.safeUrlConcat(e,`streamable-learning`),a=(e,t,n)=>d.safeUrlConcat(e,`${t}/${n}`);switch(t){case v.Subject:return d.safeUrlConcat(i,`${r}/classifications/${n}/edit`);case v.Video:return a(i,`videos`,n);case v.Company:return a(i,`companies`,n)}}function E(e,t,n,r,i=`clickview`){return i===`clickview-live`?T(e,t,n,r):w(e,t,n,r)}function D(){return C(`openInCurationStudio`)}var O=[S.Curator,S.Content,S.Developer],k=[S.StreamableCurator];function A(e=`clickview`){let t=a(f.currentUser()),{data:n}=a(t.data?.id&&f.groups(t.data?.id)),r=a(g.config()),i=e===`clickview-live`?k:O;function o(){return i.some(e=>n?.data.find(t=>t.name===e))}return{openInCurationStudioLabel:D(),isUserCurator:o(),getOpenInCurationStudioLink:(t,n,i)=>E(r.data?.curatorUrl,t,n,i,e)}}var j=function(e){return e[e.PlayPage=0]=`PlayPage`,e}({});function M(e){let t=o(),n=s();function r(t){return e.type===j.PlayPage?b.getVideoRequest(t.id,t.typeId,e.shareId):null}function i(e){let i=r(e);t(i.key).shouldFetch&&n(i)}function a(e){return t(r(e).key).hasCompleted}return{hydrate:i,isHydrated:a}}var N=c.encloseNamespace(`exchange.exchangeHooks`),P={lazyPlaceholder:!0};function F(o){let{hasPermissions:s}=m(),{isUserCurator:c,openInCurationStudioLabel:d,getOpenInCurationStudioLink:f}=A(),b=a(g.config()),S=a(s(p.ContributeVideo)&&y.libraryRequestLibraries()),{hydrate:C,isHydrated:w}=M({type:j.PlayPage});function T(a){let s=o===`preview`,p={id:a.id,name:a.name},m=s?n.VideoItemPreview:n.VideoListItem,g=[{order:10,label:s?N(`openInClickView`):``,svg:h,tooltip:s?``:N(`openInClickView`),className:s?`btn btn-dark me-2`:``,button:!0,href:b.data&&_.safeUrlConcat(b.data.liteUrl,`/videos/${a.id}`),analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.OpenInClickView,location:m,workflowPhase:e.Start}},{order:20,label:s?N(`addVideo`):null,svg:s?void 0:x,tooltip:s?``:N(`addVideo`),button:!s,appLink:{application:l.EXCHANGE,action:u.Exchange.ADD,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.AddToWorkspace,location:m,workflowPhase:e.Start}},{order:30,label:N(`suggest`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.SUGGEST_EDIT,args:[a.id],params:{location:m}},analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.SuggestEdit,location:m,workflowPhase:e.Start}}];return w(a)?(a._canAddToLibrary?.customLibrary&&S.data?.length&&g.push({order:25,label:N(`addToLibrary`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.ADD_TO_LIBRARY,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Create,entity:r.LibraryRequest,workflowPhase:e.Start,location:m}}),a._canDownload?.value&&g.push({order:40,label:N(`download`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.DOWNLOAD_VIDEO,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Download,entity:r.Video,workflowPhase:e.Start,location:m}}),c&&g.push({order:50,label:d,openInNewTab:!0,href:f(v.Video,a.id)}),g):[...g,P]}return{getVideoActions:T,fetchMoreActions:e=>C(e)}}export{A as n,F as t};
|
|
2
|
+
//# sourceMappingURL=CGLWqKaa.chunk.js.map
|