{"version":3,"file":"static/chunks/7480-e1a96b1b1a9099b2.js","mappings":"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","sources":["webpack://_N_E/../../packages/api-domru/src/api-epg/v1/programs.ts","webpack://_N_E/./src/features/domru-tv/program/helpers/index.ts","webpack://_N_E/./src/features/domru-tv/api/index.ts","webpack://_N_E/./src/features/schedule/ScheduleTooltip/index.js","webpack://_N_E/./src/features/schedule/helpers.js","webpack://_N_E/../../packages/api-domru/src/api-epg/v1/packets.ts"],"sourcesContent":["import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\ninterface IGetProgram {\n startTo: string,\n startFrom: string,\n epgIds: string,\n select?: string,\n with?: string,\n}\n\n/*\n* Программа передач для определенного набора каналов с epgId\n* https://master.api-epg.sandbox.d2c.r-one.io/docs/#/v1/ProgramController_getPrograms\n*/\n\nexport const getProgram = (params: IGetProgram): IRequest => ({\n uri: '/api/v1/programs',\n method: 'GET',\n queryParams: {\n ...params,\n },\n});\n\n","import dayjs from 'dayjs';\n\nexport const getFinishDate = (startDate: Date, finishTime: {\n hour: number,\n minute: number,\n}) => {\n let finishDate;\n\n if (finishTime) {\n finishDate = dayjs(startDate);\n finishDate = finishDate.set('hour', finishTime?.hour).set('minute', finishTime?.minute);\n } else {\n finishDate = dayjs(startDate).add(1, 'day');\n }\n return finishDate;\n};\n\n","import dayjs from 'dayjs';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { IPacketDto } from '@r1-frontend/api-domru/api-epg/v1/dto/IPacketDto';\nimport { IProgram } from '@r1-frontend/api-domru/api-epg/v1/dto/IProgram';\nimport { getPackageChannels } from '@r1-frontend/api-domru/api-epg/v1/packets';\nimport { getProgram } from '@r1-frontend/api-domru/api-epg/v1/programs';\n\nimport { getFinishDate } from '../program/helpers';\n\ninterface IGetTvPacketList {\n providerId: number,\n packetId: number,\n}\n\ninterface IGetProgram {\n channel: string,\n dateFrom: string,\n dateTo: string,\n}\n\ninterface IGetSchedule {\n xvidArray: number[],\n startDate: Date,\n time: {\n start: {\n hour: number,\n minute: number,\n },\n finish: {\n hour: number,\n minute: number,\n },\n },\n}\n\nexport async function getTvPacketInfo({ providerId, packetId }: IGetTvPacketList) {\n const response = await doRequest.apiEPG(\n getPackageChannels(providerId, { active: 1, packetIds: [packetId], with: 'channels' }),\n );\n\n const packageInfo = response.isSuccess ? response.payload[0] : { body: '', title: '' };\n const channels = (response.isSuccess && response.payload[0]?.channels)\n ? response.payload[0].channels.map(channel => ({\n ...channel,\n button: channel.lcn,\n logo: channel?.channelInfo?.logo,\n chid: channel.channelId,\n xvid: channel.epgId,\n bids: packetId,\n biglogo: channel?.channelInfo?.bigLogo || channel?.channelInfo?.logo,\n }))\n : [];\n\n return { ...packageInfo, channels };\n}\n\nexport const getPacketsChannels = async(providerId: number) =>{\n const response = await doRequest.apiEPG(\n getPackageChannels(providerId, {\n active: 1,\n with: 'channels',\n }),\n );\n // TODO переписать на reduce\n if (response.isSuccess) {\n return response.payload.map(item => {\n const { channels = [] } = item;\n\n let hdChannelsCount = 0;\n let sdChannelsCount = 0;\n channels.forEach(({ quality }) => quality === 'HD' ? hdChannelsCount += 1 : sdChannelsCount += 1);\n return ({\n id: (item.billing_id || '').toString(),\n name: item.title,\n description: item.body,\n price: (item.price || 0).toString(),\n hdChannelsCount: hdChannelsCount,\n sdChannelsCount: sdChannelsCount,\n image: item.image680x280,\n alias: item.alias_second,\n });\n });\n }\n return [];\n};\n\nexport const getProgramChannel = async({ channel, dateFrom, dateTo }: IGetProgram) => {\n const dateStartFormat = new Date(dateFrom);\n const dateFinishFormat = new Date(dateTo);\n const params = {\n startTo: dateFinishFormat.toISOString(),\n startFrom: dateStartFormat.toISOString(),\n order: '+start',\n epgIds: `[\"${encodeURIComponent(channel)}\"]`,\n };\n return await doRequest.apiEPG(\n getProgram(params),\n );\n};\n\nexport const getSchedule = async({ xvidArray, startDate, time }: IGetSchedule) => {\n const { start, finish } = time;\n const finishDate = getFinishDate(startDate, finish);\n\n const dateStartFormat = dayjs(startDate).hour(start?.hour ?? 0).minute(start?.minute ?? 0);\n const dateFinishFormat = finishDate;\n\n const xvidParameter = xvidArray.map((epgId) => `\"${encodeURIComponent(epgId)}\"`);\n const params = {\n startTo: dateFinishFormat.toISOString(),\n startFrom: dateStartFormat.toISOString(),\n order: '+start',\n epgIds: `[${xvidParameter}]`,\n };\n return await doRequest.apiEPG(\n getProgram(params),\n );\n};\n","import { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\nimport React, { Component } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { EGP_IMG } from '~/src/constants';\n\nconst TooltipContainer = styled.div`\n background-color: ${COLORS.white};\n box-sizing: border-box;\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25);\n color: ${COLORS.TextPrimary};\n display: block;\n padding: 32px 24px;\n position: fixed;\n width: 528px;\n z-index: 10;\n\n ${({ coordinates = { x: 0, y: 0 }, isReverse = false }) => css`\n left: ${coordinates.x}px;\n top: ${coordinates.y}px;\n transform: ${isReverse ? 'translate(-50%, 20px)' : 'translate(-50%, -100%) translateY(-20px)'};\n `}\n\n @media only screen and (max-width: 767px) {\n box-shadow: none;\n overflow-y: auto;\n padding: 0;\n bottom: 0;\n left: 0;\n top: 50px;\n transform: none;\n width: 100%;\n z-index: 100;\n }\n\n &::after {\n background-color: ${COLORS.white};\n content: \"\";\n position: absolute;\n left: 50%;\n height: 20px;\n width: 20px;\n z-index: 10;\n\n ${({ isReverse = false }) => {\n if (isReverse) {\n return css`\n border-top: 1px solid rgba(195, 195, 195, 0.25);\n border-left: 1px solid rgba(195, 195, 195, 0.25);\n top: 0;\n transform: translate(-50%, -50%) rotate(45deg);\n `;\n } else {\n return css`\n bottom: 0;\n box-shadow: 6px 6px 10px rgba(0, 0, 0, 0.12);\n transform: translate(-50%, 50%) rotate(45deg);\n `;\n }\n }}\n\n @media only screen and (max-width: 767px) {\n content: none;\n }\n }\n`;\n\nconst TooltipCloseButton = styled.div`\n cursor: pointer;\n position: absolute;\n right: 20px;\n top: 20px;\n transform:rotate(-45deg);\n height: 23px;\n width: 23px;\n z-index: 10;\n\n @media only screen and (max-width: 767px) {\n position: fixed;\n top: 70px;\n }\n\n &::after,\n &::before {\n background-color: ${COLORS.GRAY_DARK};\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 1px;\n width: 100%;\n z-index: 10;\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-90deg);\n }\n`;\n\nconst TooltipImage = styled.img`\n max-height: 112px;\n max-width: 100%;\n\n @media only screen and (max-width: 767px) {\n max-height: none;\n width: 100%;\n }\n`;\n\nconst TooltipTitle = styled.div`\n ${FONTS.L};\n margin-top: 30px;\n width: 100%;\n\n @media only screen and (max-width: 767px) {\n margin-top: 30px;\n padding: 0 14px;\n }\n`;\n\nconst TooltipDescription = styled.div`\n ${FONTS.S};\n margin-top: 9px;\n width: 100%;\n\n @media only screen and (max-width: 767px) {\n margin-top: 15px;\n padding: 0 14px;\n }\n`;\n\nexport default class ScheduleTooltip extends Component {\n static defaultProps = {\n content: {},\n coordinates: { X: 0, y: 0 },\n };\n\n state = {\n coordinates: this.props.coordinates,\n isReverse: false,\n }\n\n constructor(props) {\n super(props);\n this.tooltipNode = React.createRef();\n this.resizeTimer = null;\n }\n\n componentDidMount() {\n this.isMobile = window.matchMedia('(max-width: 767px)').matches;\n if (this.props.isShow) {\n this.tooltipOpen();\n}\n\n document.addEventListener('click', this.onDocumentClick);\n window.addEventListener('resize', this.onWindowResize);\n\n if (this.isMobile === false) {\n window.addEventListener('scroll', this.tooltipClose);\n }\n }\n\n componentDidUpdate({ coordinates }) {\n if (JSON.stringify(coordinates) !== JSON.stringify(this.props.coordinates)) {\n this.setState({ coordinates: this.props.coordinates }, this.tooltipOpen);\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.onDocumentClick);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('scroll', this.tooltipClose);\n }\n\n correctCoordinates() {\n const containerRect = this.props.container.getBoundingClientRect();\n const tooltipRect = this.tooltipNode.current.getBoundingClientRect();\n\n const newCoordinates = { ...this.props.coordinates };\n let isReverse = false;\n\n if (tooltipRect.left < containerRect.left) {\n newCoordinates.x += containerRect.left - tooltipRect.left;\n }\n\n if (tooltipRect.right > containerRect.right) {\n newCoordinates.x -= tooltipRect.right - containerRect.right;\n }\n\n if (tooltipRect.top < 0) {\n isReverse = true;\n }\n\n this.setState({\n coordinates: newCoordinates,\n isReverse,\n });\n }\n\n tooltipOpen = () => {\n if (this.isMobile) {\n document.body.style.overflow = 'hidden';\n }\n\n this.setState({ isReverse: false }, this.correctCoordinates);\n }\n\n tooltipClose = () => {\n document.body.style.overflow = '';\n this.props.tooltipClose();\n }\n\n onDocumentClick = (event) => {\n if (this.tooltipNode.current === null) {\n return;\n}\n\n if (!this.tooltipNode.current.contains(event.target)) {\n this.tooltipClose();\n }\n }\n\n onWindowResize = () => {\n const isMobile = window.matchMedia('(max-width: 767px)').matches;\n\n if (isMobile !== this.isMobile) {\n this.isMobile = isMobile;\n\n if (isMobile === false) {\n window.removeEventListener('scroll', this.tooltipClose);\n } else {\n window.addEventListener('scroll', this.tooltipClose);\n }\n }\n\n if (this.props.isShow === false || isMobile === true) {\n return;\n}\n\n clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(this.tooltipClose, 200);\n }\n\n render() {\n let tooltip = null;\n\n if (this.props.isShow) {\n tooltip = (\n \n \n \n {this.props.content.title ? ({this.props.content.title}) : null}\n {this.props.content.desc ? ({this.props.content.desc}) : null}\n \n );\n }\n\n return tooltip;\n }\n}\n","/**\n * Возращаем месяц в формате MM\n *\n * @param {Date} date - дата\n * @returns {string} - месяц\n */\nexport function getFullMouth(date) {\n const currentDate = new Date(date.getTime());\n return `${('0' + (currentDate.getMonth() + 1)).slice(-2)}`;\n}\n\n/**\n * Возращаем число в формате DD\n *\n * @param {Date} date - дата\n * @returns {string} - число\n */\nexport function getFullDate(date) {\n const currentDate = new Date(date.getTime());\n return `${('0' + currentDate.getDate()).slice(-2)}`;\n}\n\n/**\n * Возращаем день недели\n *\n * @param {Date} date - дата\n * @returns {string} - день недели\n */\nexport function getFullDay(date) {\n const currentDate = new Date(date.getTime());\n const daysName = ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'];\n return daysName[currentDate.getDay()];\n}\n\n/**\n * Возращаем время в формате hh:mm\n *\n * @param {Date} date - дата\n * @returns {string} - строка со временем\n */\nexport function dateToScheduleFormat(date) {\n const currentDate = new Date(date.getTime());\n return currentDate.toTimeString().replace(/.*(\\d{2}:\\d{2}:\\d{2}).*/, '$1').slice(0, -3);\n}\n\n/**\n * Генерируем строку с датой в формате YYYY-MM-DD для запроса к API\n *\n * @param {Date} date - дата\n * @returns {string} - строка с датой\n */\nexport function dateToServerFormat(date) {\n const currentDate = new Date(date.getTime());\n return `${currentDate.getFullYear()}-${getFullMouth(currentDate)}-${getFullDate(currentDate)}`;\n}\n\n/**\n * Генерируем строку со временем в формате hh:mm для запроса к API\n *\n * @param {object} time - временной интервал\n * @returns {string} - строка со временем\n */\nexport function timeToServerFormat(time) {\n const hours = `${('0' + time.hour).slice(-2)}`;\n const minute = `${('0' + time.minute).slice(-2)}`;\n\n return `${hours}:${minute}`;\n}\n\n/**\n * Создаем массив с датами на неделю\n *\n * @returns {array} - массив с датами\n */\nexport function createDateList() {\n const dateList = [];\n const specialDaysName = ['Вчера', 'Сегодня', 'Завтра'];\n\n for (let i = -2; i < 5; i++) {\n const currentDate = new Date();\n currentDate.setDate(currentDate.getDate() + i);\n\n let tabTitle = `${getFullDay(currentDate)}, ${getFullDate(currentDate)}`;\n if (i >= -1 && i <= 1) {\n tabTitle = specialDaysName[i + 1];\n }\n dateList.push({ start: currentDate, tabTitle });\n }\n\n return dateList;\n}\n\n/**\n * Приводим дату в ISO-формат\n *\n * @param {string} currentDate - дата\n * @returns {Date}\n */\nexport function createDate(currentDate) {\n return new Date(currentDate.replace(' ', 'T'));\n}\n\n/**\n * Добавляем объекты даты в каждую трансляцию\n *\n * @param {object} schedule - объект с трансляциями\n * @returns {object} - объект с расписанием\n */\nexport function addTimeToSchedule(schedule) {\n const tempSchedule = { ...schedule };\n\n Object.keys(tempSchedule).forEach((channel) => {\n tempSchedule[channel].forEach((broadcast) => {\n const duration = parseInt(broadcast.duration, 10);\n const start = createDate(broadcast.start);\n const finish = createDate(broadcast.start);\n finish.setSeconds(finish.getSeconds() + duration);\n\n broadcast.duration = duration;\n broadcast.finish = finish;\n broadcast.start = start;\n broadcast.status = null;\n });\n });\n\n return tempSchedule;\n}\n\n/**\n * Создаем временные интервалы для\n * фильтра по времени суток\n *\n * @returns {object} - объект с временными интервалами\n*/\nexport function createTimeIntevals() {\n return {\n morning: {\n start: { hour: 0, minute: 0 },\n finish: { hour: 11, minute: 59 },\n },\n afternoon: {\n start: { hour: 12, minute: 0 },\n finish: { hour: 15, minute: 59 },\n },\n evening: {\n start: { hour: 16, minute: 0 },\n finish: { hour: 23, minute: 59 },\n },\n };\n}\n\n/**\n * Получаем временной интервал\n * соответствующий текущему времени\n *\n * @returns {string} - название текущего временного интервала\n*/\nexport function getCurrentTimeInterval() {\n const nowDate = new Date();\n const timeIntervals = createTimeIntevals();\n\n return Object.keys(timeIntervals)\n .filter(interval => {\n const hour = nowDate.getHours();\n const { start, finish } = timeIntervals[interval];\n\n return (hour >= start.hour) && (hour <= finish.hour);\n })[0];\n}\n\n/**\n *\n * Сортировка каналов по времени\n *\n * @param {object} broadcasts - обьект программы\n * @returns {object} - сортированные обьекты программы\n*/\nexport function broadcastsFilter(broadcasts) {\n const nowDate = new Date();\n const pastBroadcasts = [];\n let futureBroadcasts = [];\n\n broadcasts.every((broadcast, index) => {\n if (Date.parse(broadcast.start) <= nowDate.getTime()) {\n broadcast.status = false;\n pastBroadcasts.push(broadcast);\n return true;\n } else {\n futureBroadcasts = broadcasts.slice(index, broadcasts.length - 1);\n return false;\n }\n });\n\n if (pastBroadcasts.length > 0) {\n const lastBroadcast = pastBroadcasts[pastBroadcasts.length - 1];\n\n if (nowDate >= lastBroadcast.start.getTime() && nowDate < lastBroadcast.finish.getTime()) {\n lastBroadcast.status = true;\n lastBroadcast.progress = ((nowDate.getTime() - lastBroadcast.start) / (lastBroadcast.duration * 1000) * 100).toFixed(2);\n futureBroadcasts.unshift(pastBroadcasts.pop());\n }\n }\n\n return {\n futureBroadcasts,\n pastBroadcasts,\n };\n}\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\ninterface IGetTvPacketList {\n packetIds?: number[],\n notNullPrice?: number,\n active?: number,\n with?: string,\n}\n\n/*\n* Список пакетов каналов в разрезе провайдеров\n* https://master.api-epg.sandbox.d2c.r-one.io/docs/#/v1/PacketController_getPacketsByProviderId\n*/\n\nexport const getPackageChannels = (providerId: number, params: IGetTvPacketList): IRequest =>({\n uri: `/api/v1/${providerId}/packets`,\n method: 'GET',\n queryParams: { ...params },\n headers: {\n providerId: `${providerId}`,\n },\n});\n"],"names":["getProgram","params","uri","method","queryParams","getFinishDate","startDate","finishTime","dayjs","set","hour","minute","add","getTvPacketInfo","providerId","packetId","response","packageInfo","channels","doRequest","getPackageChannels","active","packetIds","with","isSuccess","payload","body","title","map","channel","button","lcn","logo","channelInfo","chid","channelId","xvid","epgId","bids","biglogo","bigLogo","item","hdChannelsCount","sdChannelsCount","forEach","quality","id","billing_id","toString","name","description","price","image","image680x280","alias","alias_second","getProgramChannel","dateFrom","dateTo","dateStartFormat","dateFinishFormat","Date","startTo","toISOString","startFrom","order","epgIds","encodeURIComponent","getSchedule","xvidArray","time","start","finish","finishDate","xvidParameter","TooltipContainer","styled","COLORS","coordinates","x","y","isReverse","css","TooltipCloseButton","TooltipImage","TooltipTitle","FONTS","TooltipDescription","ScheduleTooltip","props","state","tooltipOpen","isMobile","document","style","overflow","setState","correctCoordinates","tooltipClose","onDocumentClick","event","tooltipNode","current","contains","target","onWindowResize","window","matchMedia","matches","removeEventListener","addEventListener","isShow","clearTimeout","resizeTimer","setTimeout","React","componentDidMount","this","componentDidUpdate","JSON","stringify","componentWillUnmount","containerRect","container","getBoundingClientRect","tooltipRect","newCoordinates","left","right","top","render","tooltip","ref","onClick","className","alt","content","src","EGP_IMG","icon","desc","Component","defaultProps","X","getFullDate","date","currentDate","getTime","getDate","slice","dateToScheduleFormat","toTimeString","replace","createDateList","dateList","specialDaysName","i","setDate","tabTitle","getDay","push","createDate","addTimeToSchedule","schedule","tempSchedule","Object","keys","broadcast","duration","parseInt","setSeconds","getSeconds","status","createTimeIntevals","morning","afternoon","evening","getCurrentTimeInterval","nowDate","timeIntervals","filter","interval","getHours","broadcastsFilter","broadcasts","pastBroadcasts","futureBroadcasts","every","index","parse","length","lastBroadcast","progress","toFixed","unshift","pop","headers"],"sourceRoot":""}