{"version":3,"file":"static/chunks/6089-8a3778b043de3972.js","mappings":"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","sources":["webpack://_N_E/./src/components/event/Registration/OfflineEventRegistration.tsx","webpack://_N_E/./src/components/event/Registration/EventTimer/index.tsx","webpack://_N_E/./src/components/event/Registration/OnlineEventRegistration/index.tsx","webpack://_N_E/./src/components/event/Registration/index.tsx","webpack://_N_E/./src/components/widget/BroadcastStatus/index.tsx","webpack://_N_E/./src/components/widget/SeatsLeft/SeatsLeftContainer/index.tsx","webpack://_N_E/./src/components/widget/SeatsLeft/index.tsx","webpack://_N_E/./src/hooks/utils/useBroadcastsStatus.ts","webpack://_N_E/./src/hooks/utils/useMediaQueries.ts","webpack://_N_E/./src/store/eventRegisterBtnState/index.ts","webpack://_N_E/./src/utils/timer/constants.ts","webpack://_N_E/./src/utils/timer/calculateTime.ts","webpack://_N_E/./src/components/event/Registration/EventTimer/EventTimer.module.scss","webpack://_N_E/./src/components/event/Registration/OnlineEventRegistration/OnlineEventRegistration.module.scss","webpack://_N_E/./src/components/event/Registration/Registration.module.scss","webpack://_N_E/./src/components/widget/BroadcastStatus/BroadcastStatus.module.scss","webpack://_N_E/./src/components/widget/SeatsLeft/SeatsLeftContainer/SeatsLeftContainer.module.scss"],"sourcesContent":["import dayjs from 'dayjs';\nimport cn from 'classnames';\nimport { useReactiveVar } from '@apollo/client';\nimport { UiButton, UiIcon, UiProgress, UiText } from 'znanie-uikit';\n\nimport { IRegistrationProps, isMoreAvailableSeats } from './index';\n\nimport { eventRegisterBtnStateVar } from 'store/eventRegisterBtnState';\n\nimport { decl } from 'utils/helpers';\nimport { AnalyticsEvent, trackAnalyticsData } from 'utils/analytics';\n\nimport css from './Registration.module.scss';\n\ninterface IProps extends Omit {}\n\nexport default function OfflineEventRegistration({\n enrollFinishDate,\n isOffline,\n isUserRegistered,\n eventId,\n left,\n capacity,\n onSignUpClick,\n}: IProps) {\n const { isDisabled } = useReactiveVar(eventRegisterBtnStateVar);\n\n const progressPercent = (1 - (capacity - left) / capacity) * 100;\n\n const getProgressColor = () => {\n if (progressPercent > 70) {\n return '#54C6F2';\n } else if (progressPercent < 30) {\n return '#ed694a';\n } else {\n return '#fec42d';\n }\n };\n\n const handleOtherEventsBtnClick = () => {\n trackAnalyticsData(AnalyticsEvent.EVENT_OTHER_EVENTS_BTN_CLICK);\n };\n\n return (\n <>\n
\n {isMoreAvailableSeats({ capacity, left }) && (\n <>\n \n Осталось{' '}\n \n {left}\n {' '}\n {decl(left, ['место', 'места', 'мест'])}\n \n
\n \n
\n \n )}\n \n Запись до {dayjs(enrollFinishDate).format('DD MMMM HH:mm')}\n \n
\n
\n {isUserRegistered ? (\n \n Место проведения\n \n ) : left > 0 ? (\n \n Записаться\n \n ) : (\n \n Другие мероприятия\n \n )}\n {\n // Отображаем кнопку \"Добавить в календарь\",\n // если пользователь зарегистрирован на текущее мероприятие\n isUserRegistered && (\n }\n weight=\"normal\"\n variant=\"outline\"\n href={`${process.env.NEXT_PUBLIC_API_HOST}/api/event-calendar/${eventId}/cal.ics`}\n target=\"_blank\"\n >\n Добавить в календарь\n \n )\n }\n
\n \n );\n}\n","import { useEffect, useState } from 'react';\nimport { UiText } from 'znanie-uikit';\n\nimport { calculateTime } from 'utils/timer/calculateTime';\n\nimport css from './EventTimer.module.scss';\n\ninterface IProps {\n value: string;\n}\n\nexport function EventTimer({ value }: IProps) {\n const [timerDays, setTimerDays] = useState(0);\n const [timerHours, setTimerHours] = useState(0);\n const [timerMinutes, setTimerMinutes] = useState(0);\n\n let interval: NodeJS.Timeout;\n\n const startTimer = () => {\n const updateTimeStates = () => {\n if (!value) return;\n\n const { timeDifference, days, hours, minutes } = calculateTime(value);\n\n if (timeDifference < 0) {\n clearInterval(interval);\n } else {\n setTimerDays(days);\n setTimerHours(hours);\n setTimerMinutes(minutes);\n }\n };\n\n interval = setInterval(() => {\n updateTimeStates();\n }, 1000);\n };\n\n useEffect(() => {\n startTimer();\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n return (\n
\n \n Осталось до начала трансляции\n \n
\n
\n {timerDays}\n дней\n
\n\n
\n {timerHours}\n часов\n
\n\n
\n {timerMinutes}\n минут\n
\n
\n
\n );\n}\n","import { UiButton, UiIcon, UiText } from 'znanie-uikit';\nimport { useReactiveVar } from '@apollo/client';\n\nimport { IRegistrationProps } from '../index';\nimport { EventTimer } from '../EventTimer';\n\nimport { eventRegisterBtnStateVar } from 'store/eventRegisterBtnState';\n\nimport { useBroadcastsStatus } from 'hooks/utils/useBroadcastsStatus';\n\nimport css from './OnlineEventRegistration.module.scss';\n\ninterface IProps\n extends Pick<\n IRegistrationProps,\n | 'eventId'\n | 'isUserRegistered'\n | 'broadcasts'\n | 'startDate'\n | 'onSignUpClick'\n | 'onCancel'\n > {\n isEventStarted: boolean;\n}\n\nexport default function OnlineEventRegistration({\n eventId,\n isUserRegistered,\n broadcasts,\n startDate,\n isEventStarted,\n onSignUpClick,\n onCancel,\n}: IProps) {\n const { isDisabled } = useReactiveVar(eventRegisterBtnStateVar);\n\n const { currentBroadcast, futureBroadcast } = useBroadcastsStatus(broadcasts);\n\n return (\n <>\n {/* отображаем данный стейт, если пользователь не зарегистирован на мероприятие,\n и мероприятие еще не началось, либо не началась следующая трансляция*/}\n {!isUserRegistered && !currentBroadcast && (\n
\n \n Запишитесь на мероприятие, чтобы присоединиться{' '}\n \n к онлайн трансляции и добавить мероприятие в календарь.\n \n \n \n Записаться\n \n
\n )}\n\n {/* отображаем данный стейт, если пользователь зарегистирован на мероприятие,\n и мероприятие еще не началось, либо не началась следующая трансляция*/}\n {isUserRegistered && (!isEventStarted || !currentBroadcast) && (\n
\n {/* отображаем таймер до начала мероприятия или если есть следующая трансляция*/}\n {(!isEventStarted || futureBroadcast) && (\n \n )}\n
\n \n \n Вы записаны на мероприятие\n \n
\n \n Отменить запись\n \n\n }\n weight=\"normal\"\n variant=\"outline\"\n href={`${process.env.NEXT_PUBLIC_API_HOST}/api/event-calendar/${eventId}/cal.ics`}\n target=\"_blank\"\n >\n Добавить в календарь\n \n
\n )}\n \n );\n}\n","import OfflineEventRegistration from './OfflineEventRegistration';\nimport OnlineEventRegistration from './OnlineEventRegistration';\n\nimport { isMoreOrLessThanCurrent } from 'utils/dates';\n\nimport { useBroadcastsStatus } from 'hooks/utils/useBroadcastsStatus';\n\nimport { BroadcastType } from 'graphql/types';\n\nimport css from './Registration.module.scss';\n\n//Если количество занятых мест больше или равно 70% от общего числа доступных мест к регистрации, тогда отображаем блок с ползунком и количеством мест\nexport const isMoreAvailableSeats = ({\n capacity,\n left,\n}: {\n capacity: number;\n left: number;\n}): boolean => {\n if (!capacity || !left) return true;\n const employedPlaces: number = capacity - left;\n const percent: number = 0.7;\n return employedPlaces >= Math.floor(capacity * percent);\n};\n\nexport interface IRegistrationProps {\n eventId?: string;\n isOffline?: boolean;\n isUserRegistered?: boolean;\n isRegistrationOff: boolean;\n left: number;\n capacity: number;\n startDate: string;\n finishDate: string;\n enrollFinishDate: string;\n broadcasts: BroadcastType[];\n\n onSignUpClick(): void;\n onCancel(): void;\n}\n\nexport default function Registration(props: IRegistrationProps) {\n const {\n isOffline,\n startDate,\n isRegistrationOff,\n finishDate,\n enrollFinishDate,\n broadcasts,\n } = props;\n\n const { currentBroadcast } = useBroadcastsStatus(broadcasts);\n const isRegistrationOver = isMoreOrLessThanCurrent(enrollFinishDate);\n const isEventStarted = isMoreOrLessThanCurrent(startDate);\n const isEventFinished = isMoreOrLessThanCurrent(finishDate);\n\n // определяет условия отображения блока с информацией о регистрации на онлайн/оффлан мероприятия,\n const isEventRegistrationShown = () => {\n // для оффлайн мероприятия\n if (isOffline) {\n // отображаем, если регистрация на мероприятие еще не закончилась, или регистрация выключена\n if (isRegistrationOff) {\n return false;\n } else {\n return !isRegistrationOver;\n }\n }\n\n // для онлайн мероприятия\n if (!isOffline) {\n // отображем, если регистрация выключена, и нет трансляции в эфире\n if (isRegistrationOff && !currentBroadcast) {\n return false;\n } else {\n // инчаче, отображаем, если мероприятие еще не началось, или\n // в промежуток между трансляциями\n if (!isEventStarted || (!isEventFinished && !currentBroadcast)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n return isEventRegistrationShown() ? (\n
\n
\n {isOffline ? (\n \n ) : (\n \n )}\n
\n
\n ) : null;\n}\n","import { FC } from 'react';\nimport cn from 'classnames';\nimport dayjs from 'dayjs';\n\nimport { IBroadcastSettingsProps } from 'hooks/utils/useBroadcastsStatus';\n\nimport css from './BroadcastStatus.module.scss';\n\nexport interface IBroadcastStatusIcon {\n isNow: boolean;\n}\nexport interface IBroadcastStatusMarkProps {\n settings: IBroadcastSettingsProps;\n withTime?: boolean;\n label?: string;\n withoutLabel?: boolean;\n withoutPadding?: boolean;\n withoutBackground?: boolean;\n labelColor?: 'white' | 'black';\n align?: 'left' | 'center' | 'right';\n}\n\nexport const BroadcastStatusIcon: FC = ({ isNow }) => {\n return
;\n};\n\nexport default function BroadcastStatusMark({\n withTime,\n settings,\n label = 'В эфире',\n withoutBackground,\n withoutLabel,\n withoutPadding,\n align,\n labelColor = 'white',\n}: IBroadcastStatusMarkProps) {\n const getFutureBroadcastText = () =>\n withTime && settings?.futureBroadcast\n ? `Трансляция начнется ${dayjs(\n settings?.futureBroadcast.startTime\n ).fromNow()}`\n : 'Трансляция';\n\n return (\n \n \n {!withoutLabel && (\n \n {settings?.currentBroadcast ? label : getFutureBroadcastText()}\n \n )}\n
\n );\n}\n","import { ReactNode } from 'react';\nimport { UiIcon } from 'znanie-uikit';\nimport css from './SeatsLeftContainer.module.scss';\n\ninterface IProps {\n children: ReactNode;\n}\n\nexport default function SeatsLeftContainer({ children }: IProps) {\n return (\n
\n
\n \n
\n {children}\n
\n );\n}\n","import SeatsLeftContainer from 'components/widget/SeatsLeft/SeatsLeftContainer';\nimport { isMoreAvailableSeats } from 'components/event/Registration';\nimport { decl } from 'utils/helpers';\nimport { isMoreOrLessThanCurrent } from 'utils/dates';\n\ninterface IProps {\n capacity?: number;\n number?: number;\n enrollFinishDate?: string;\n}\n\nexport default function SeatsLeft({\n number,\n capacity,\n enrollFinishDate,\n}: IProps) {\n if (!number) return null;\n\n const isSignUpClosed: boolean = !!(\n enrollFinishDate && isMoreOrLessThanCurrent(enrollFinishDate)\n );\n\n return (\n \n {isSignUpClosed ? (\n <>Запись закрыта\n ) : isMoreAvailableSeats({ capacity: capacity!, left: number }) ? (\n <>\n {number > 0 ? (\n <>\n Осталось {number} {decl(number, ['место', 'места', 'мест'])}\n \n ) : (\n <>Мест больше нет\n )}\n \n ) : (\n <>Запись идет\n )}\n \n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { isMoreOrLessThanCurrent } from 'utils/dates';\n\nimport { BroadcastType } from 'graphql/types';\n\nexport interface IBroadcastSettingsProps {\n currentBroadcast: BroadcastType | null;\n futureBroadcast: BroadcastType | null;\n recentBroadcast: BroadcastType | null;\n}\n\nconst initialSettings: IBroadcastSettingsProps = {\n currentBroadcast: null,\n futureBroadcast: null,\n recentBroadcast: null,\n};\n\nexport const getBroadcastsStatus = (broadcasts: BroadcastType[]) => {\n if (broadcasts && broadcasts.length) {\n const currentBroadcast =\n broadcasts.find(\n (b) =>\n b.published &&\n isMoreOrLessThanCurrent(b.startTime) &&\n isMoreOrLessThanCurrent(b.finishTime, true)\n ) || initialSettings.currentBroadcast;\n\n const futureBroadcast =\n broadcasts.find(\n (b) => b.published && isMoreOrLessThanCurrent(b.startTime, true)\n ) || initialSettings.futureBroadcast;\n\n const passedBroadcasts = broadcasts.filter(\n (b) =>\n (b.published && isMoreOrLessThanCurrent(b.finishTime)) ||\n initialSettings.recentBroadcast\n );\n\n const recentBroadcast =\n (passedBroadcasts && passedBroadcasts[passedBroadcasts.length - 1]) ||\n initialSettings.recentBroadcast;\n\n return { currentBroadcast, futureBroadcast, recentBroadcast };\n }\n\n return initialSettings;\n};\n\nexport const useBroadcastsStatus = (\n broadcasts: BroadcastType[]\n): IBroadcastSettingsProps => {\n const [broadcastsSettings, setBroadcastsSettings] = useState(initialSettings);\n\n useEffect(() => {\n const { currentBroadcast, futureBroadcast, recentBroadcast } =\n getBroadcastsStatus(broadcasts);\n setBroadcastsSettings({\n currentBroadcast,\n futureBroadcast,\n recentBroadcast,\n });\n }, []);\n\n return broadcastsSettings;\n};\n","import { useMediaQuery } from 'react-responsive';\n\nexport interface IMediaBreakpoints {\n [key: string]: boolean;\n isMobile: boolean;\n isMobileOrTablet: boolean;\n isTablet: boolean;\n isTabletOrDesktop: boolean;\n isDesktop: boolean;\n}\n\nexport function useMediaQueries(): IMediaBreakpoints {\n const isMobile = useMediaQuery({ maxWidth: 480 });\n const isMobileOrTablet = useMediaQuery({ maxWidth: 989 });\n const isTablet = useMediaQuery({ minWidth: 481, maxWidth: 989 });\n const isTabletOrDesktop = useMediaQuery({ minWidth: 769 });\n const isDesktop = useMediaQuery({ minWidth: 990 });\n\n return {\n isMobile,\n isMobileOrTablet,\n isTablet,\n isTabletOrDesktop,\n isDesktop,\n };\n}\n","import { makeVar } from '@apollo/client';\n\nexport const eventRegisterBtnStateVar = makeVar({\n isDisabled: false,\n});\n","/**\n * Константы, содержащие значения единиц времени в милисекундах\n */\nexport const SECONDS = 1000;\n\nexport const MINUTES = SECONDS * 60;\n\nexport const HOURS = MINUTES * 60;\n\nexport const DAYS = HOURS * 24;\n","import { DAYS, HOURS, MINUTES, SECONDS } from './constants';\n\nexport const calculateTime = (dt: string) => {\n const countdownDate = new Date(dt).getTime();\n\n const now = new Date().getTime();\n const timeDifference = countdownDate - now;\n\n const days = Math.floor(timeDifference / DAYS);\n const hours = Math.floor((timeDifference % DAYS) / HOURS);\n const minutes = Math.floor((timeDifference % HOURS) / MINUTES);\n const seconds = Math.floor((timeDifference % MINUTES) / SECONDS);\n\n return {\n timeDifference,\n days,\n hours,\n minutes,\n seconds,\n };\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"timerBlock\":\"EventTimer_timerBlock__Qlp0v\",\"timerTitle\":\"EventTimer_timerTitle__FyFVC\",\"timerList\":\"EventTimer_timerList__KhI3d\",\"timerItem\":\"EventTimer_timerItem__VXAjr\",\"timerValue\":\"EventTimer_timerValue__TR3cK\",\"timerUnit\":\"EventTimer_timerUnit__dcolY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"stateBlock\":\"OnlineEventRegistration_stateBlock__62ExP\",\"onlineInfoWrapper\":\"OnlineEventRegistration_onlineInfoWrapper__LqFaK\",\"onlineInfo\":\"OnlineEventRegistration_onlineInfo__G3uoY\",\"onlineTextRegisterBtn\":\"OnlineEventRegistration_onlineTextRegisterBtn__Xjuza\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Registration_container__NgSFB\",\"block\":\"Registration_block___QXRT\",\"info\":\"Registration_info__AjHGd\",\"count\":\"Registration_count__ASBYu\",\"progress\":\"Registration_progress__0r_mM\",\"expireDate\":\"Registration_expireDate__ZLfiW\",\"broadcastNote\":\"Registration_broadcastNote__SI_fU\",\"btnOffset\":\"Registration_btnOffset__0FraF\",\"buttons\":\"Registration_buttons__tZ37t\",\"buttonsReverse\":\"Registration_buttonsReverse__1g43V\",\"onlineInfo\":\"Registration_onlineInfo__JrAbn\",\"onlineTextRegisterBtn\":\"Registration_onlineTextRegisterBtn__lE3La\",\"onlineOutlineRegisterBtn\":\"Registration_onlineOutlineRegisterBtn__MJi5_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"block\":\"BroadcastStatus_block__OQOQs\",\"withoutBackground\":\"BroadcastStatus_withoutBackground__UWZAe\",\"withoutPadding\":\"BroadcastStatus_withoutPadding__3f4AK\",\"left\":\"BroadcastStatus_left__Ty8d9\",\"center\":\"BroadcastStatus_center__exku3\",\"right\":\"BroadcastStatus_right__EOjV_\",\"icon\":\"BroadcastStatus_icon__3aA2l\",\"iconNow\":\"BroadcastStatus_iconNow__qD_nz\",\"pulse\":\"BroadcastStatus_pulse__vVPXi\",\"text\":\"BroadcastStatus_text__YjwtL\",\"white\":\"BroadcastStatus_white__ZOA_Q\",\"black\":\"BroadcastStatus_black__apgWH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"SeatsLeftContainer_container__cBiGu\",\"icon\":\"SeatsLeftContainer_icon__fx0Ab\"};"],"names":["OfflineEventRegistration","enrollFinishDate","isOffline","isUserRegistered","eventId","left","capacity","onSignUpClick","useReactiveVar","eventRegisterBtnStateVar","isDisabled","progressPercent","div","className","css","isMoreAvailableSeats","UiText","align","as","decl","UiProgress","percent","color","dayjs","format","cn","UiButton","fluid","variant","href","weight","disabled","onClick","trackAnalyticsData","AnalyticsEvent","startIcon","UiIcon","name","size","process","target","EventTimer","interval","value","useState","startTimer","setInterval","calculateTime","timeDifference","days","hours","minutes","clearInterval","setTimerDays","setTimerHours","setTimerMinutes","updateTimeStates","useEffect","span","timerDays","timerHours","timerMinutes","OnlineEventRegistration","broadcasts","startDate","isEventStarted","onCancel","useBroadcastsStatus","currentBroadcast","futureBroadcast","startTime","Math","floor","Registration","props","isRegistrationOff","finishDate","isRegistrationOver","isMoreOrLessThanCurrent","isEventFinished","isEventRegistrationShown","id","BroadcastStatusIcon","isNow","BroadcastStatusMark","withTime","settings","label","withoutBackground","withoutLabel","withoutPadding","labelColor","fromNow","SeatsLeftContainer","children","SeatsLeft","number","isSignUpClosed","initialSettings","recentBroadcast","getBroadcastsStatus","length","find","b","published","finishTime","passedBroadcasts","filter","setBroadcastsSettings","broadcastsSettings","useMediaQueries","isMobile","useMediaQuery","maxWidth","isMobileOrTablet","isTablet","minWidth","isTabletOrDesktop","isDesktop","makeVar","MINUTES","SECONDS","HOURS","DAYS","dt","Date","getTime","seconds","module","exports"],"sourceRoot":""}