\r\n {event.original_poster &&
}\r\n
{event.tournament}
\r\n {event.isLive && (\r\n
\r\n
\r\n {t('extraData:event_in_live')} \r\n
\r\n )}\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {event.team_local.name}\r\n
\r\n {type === \"upcoming\" ? (\r\n
\r\n {formatDate(event.start, \"HH:mm\")}h\r\n
\r\n ) : (\r\n <>\r\n
\r\n {event.team_local.scoreboard}\r\n
\r\n
\r\n {event.team_local.current_scoreboard}\r\n
\r\n >\r\n )}\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {event.team_guest.name}\r\n
\r\n {type === \"upcoming\" ? (\r\n
\r\n {t('date_prefix_in')} {ownFormatDuration(new Date(event.start), ['days', 'hours', 'minutes'], false, \"\")\r\n .replace(\"hours\", \"h\")\r\n .replace(\"hour\", \"h\")\r\n .replace('minutes', \"m\")\r\n .replace(\"minute\", \"m\")\r\n .replace(\"horas\", \"h\")\r\n .replace(\"hora\", \"h\")\r\n .replace('minutos', \"m\")\r\n .replace(\"minuto\", \"m\")\r\n }\r\n
\r\n ) : (\r\n <>\r\n
\r\n {event.team_guest.scoreboard}\r\n
\r\n
\r\n {event.team_guest.current_scoreboard}\r\n
\r\n >)}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default VlrItemComponent;\r\n","import React from 'react';\r\nimport { parse, isToday } from 'date-fns'\r\nimport CalendarIcon from '@material-ui/icons/CalendarToday';\r\n\r\nimport {formatDate} from \"../../../../../helpers/dateFormatter\";\r\nimport VlrItemComponent from \"./VlrItemComponent\";\r\nimport './_group_styles.scss';\r\nimport {useTranslation} from \"react-i18next\";\r\n\r\nconst VlrGroupItemComponent = ({ dateString, events, onOpenEventModal, nowDate, type }) => {\r\n const { t } = useTranslation('extraData');\r\n const dateFormatted = parse(dateString, 'yyyyMMdd', new Date());\r\n\r\n return (\r\n
\r\n
\r\n \r\n {isToday(dateFormatted) ? t('today') : formatDate(dateFormatted, \"iii. d\")}\r\n
\r\n
\r\n {events.map(ev => )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default VlrGroupItemComponent;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport './_styles.scss';\r\nimport {Grid} from \"@material-ui/core\";\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nimport VlrItemComponent from \"./VlrItemComponent\";\r\nimport {setOpenedEvent} from \"../../../../../store/openedEvent/actions\";\r\nimport {setOpenedEventMessages} from \"../../../../../store/openedEventMessages/actions\";\r\nimport {openEventInfoModal} from \"../../../../../store/eventInfoModal/actions\";\r\nimport {Event} from \"../../../../../services/tracking\";\r\nimport VlrGroupItemComponent from \"./VlrGroupItemComponent\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport {useTranslation} from \"react-i18next\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nconst VlrLandingMatchesComponent = ({userId}) => {\r\n const dispatch = useDispatch();\r\n const nowDate = new Date();\r\n\r\n const { t } = useTranslation('landing');\r\n\r\n const [upcomingEvents, setUpcomingEvents] = useState([]);\r\n const [loadingUpcoming, setLoadingUpcoming] = useState(true);\r\n\r\n const [liveEvents, setLiveEvents] = useState([]);\r\n const [loadingLiveEvents, setLoadingLiveEvents] = useState(true);\r\n\r\n const [passedEvents, setPassedEvents] = useState([]);\r\n const [loadingPassedEvents, setLoadingPassedEvents] = useState(true);\r\n\r\n const [tournaments, setTournaments] = useState([]);\r\n const [filterByTournament, setFilterByTournament] = useState(null);\r\n\r\n const [datar, setData] = useState({\r\n live: [],\r\n upcoming: {}\r\n });\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const fetchUpcomingEvents = (user, max, extraQuery) => {\r\n const dateObj = formatDate(new Date(), dateFormat)\r\n let data = {\r\n start: dateObj.substring(0, dateObj.length - 9) + \"00:00.000\",\r\n timezone: getCurrentTimezone(),\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.eventsLandingUpcoming.get(user, {\r\n query: data\r\n });\r\n }\r\n\r\n const fetchMatchesEvents = (user, max, is_live, extraQuery) => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 1);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 2);\r\n let data = {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n isLive: is_live\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.landingEventsLiveScores.get(userId, {\r\n query: data\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingUpcoming(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchUpcomingEvents(userId, 12, extraQuery).then((res) => {\r\n if (mounted) {\r\n setUpcomingEvents(res);\r\n setLoadingUpcoming(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingLiveEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 12, true, extraQuery).then((res) => {\r\n if (mounted) {\r\n setLiveEvents(res);\r\n setLoadingLiveEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingPassedEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 12, false, extraQuery).then((res) => {\r\n if (mounted) {\r\n setPassedEvents(res);\r\n setLoadingPassedEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n useEffect(() => {\r\n if (!loadingUpcoming && !loadingLiveEvents && !loadingPassedEvents) {\r\n let combine = [...upcomingEvents, ...liveEvents, ...passedEvents];\r\n let grouped = combine.reduce(\r\n (result, item) => ({\r\n ...result,\r\n [item['tournament']]: [\r\n ...(result[item['tournament']] || []),\r\n item,\r\n ],\r\n }),\r\n {},\r\n );\r\n if(filterByTournament === null) {\r\n setTournaments(Object.keys(grouped));\r\n }\r\n\r\n let watfaq = upcomingEvents.reduce(\r\n (result, item) => {\r\n let date_formatted = formatDate(new Date(item['start']), 'yyyyMMdd');\r\n return {\r\n ...result,\r\n [date_formatted]: [\r\n ...(result[date_formatted] || []),\r\n item,\r\n ],\r\n }\r\n },\r\n [])\r\n\r\n let new_data = {\r\n live: [...liveEvents],\r\n upcoming: {...watfaq}\r\n };\r\n setData(new_data);\r\n }\r\n }, [upcomingEvents, liveEvents, passedEvents, loadingUpcoming, loadingLiveEvents, loadingPassedEvents, filterByTournament]);\r\n\r\n\r\n const OpenInfo = (event) => {\r\n window.history.pushState({backRef: window.location.pathname}, \"Event: \" + event.title + \" | Latency\", `/${event.hasOwnProperty('slug') ? event.slug : event.owner.slug}/${event.id}`)\r\n dispatch(setOpenedEvent(event.id))\r\n dispatch(setOpenedEventMessages(event.id))\r\n dispatch(openEventInfoModal())\r\n Event(\"VlrLandingMatchesComponent\", \"OpenEvent\", event.id);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {t('label_competitions')}
\r\n \r\n setFilterByTournament(null)}\r\n />\r\n {tournaments.map((item, index) =>\r\n setFilterByTournament(item)}\r\n label={item.replace(\"Champions Tour\", \"\")}\r\n />)}\r\n
\r\n \r\n\r\n\r\n
\r\n \r\n \r\n {t('coming_matches')}
\r\n \r\n {datar.live.map(ev =>
)}\r\n {Object.keys(datar.upcoming).map((group, index) =>
)}\r\n {(datar.live.length === 0 && Object.keys(datar.upcoming).length === 0) && (\r\n
\r\n {t(\"empty_matches\")}\r\n
\r\n )}\r\n
\r\n \r\n \r\n {t('results_matches')}
\r\n \r\n {passedEvents.map(ev =>
)}\r\n {passedEvents.length === 0 && (\r\n
\r\n {t(\"empty_results\")}\r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default VlrLandingMatchesComponent;\r\n","import React from \"react\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport './_adbox.scss';\r\n\r\nconst AdBoxComponent = ({children, bgColor}) => {\r\n return (\r\n
\r\n \r\n
Ad
\r\n
\r\n Ads help us make Latency possible
\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nAdBoxComponent.defaultProps = {\r\n bgColor: \"grid.main\"\r\n}\r\n\r\nexport default AdBoxComponent;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport './_styles.scss';\r\nimport {Grid} from \"@material-ui/core\";\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nimport VlrItemComponent from \"./VlrItemComponent\";\r\nimport {setOpenedEvent} from \"../../../../../store/openedEvent/actions\";\r\nimport {setOpenedEventMessages} from \"../../../../../store/openedEventMessages/actions\";\r\nimport {openEventInfoModal} from \"../../../../../store/eventInfoModal/actions\";\r\nimport {Event} from \"../../../../../services/tracking\";\r\nimport VlrGroupItemComponent from \"./VlrGroupItemComponent\";\r\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Menu from \"@material-ui/core/Menu\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport AdBoxComponent from \"../../../../AdsenseBlocks/AdBoxComponent\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nconst VlrLandingMatchesMobileComponent = ({userId}) => {\r\n const dispatch = useDispatch();\r\n const nowDate = new Date();\r\n\r\n const { t } = useTranslation('landing');\r\n\r\n const [upcomingEvents, setUpcomingEvents] = useState([]);\r\n const [loadingUpcoming, setLoadingUpcoming] = useState(true);\r\n\r\n const [liveEvents, setLiveEvents] = useState([]);\r\n const [loadingLiveEvents, setLoadingLiveEvents] = useState(true);\r\n\r\n const [passedEvents, setPassedEvents] = useState([]);\r\n const [loadingPassedEvents, setLoadingPassedEvents] = useState(true);\r\n\r\n const [tournaments, setTournaments] = useState([]);\r\n const [filterByTournament, setFilterByTournament] = useState(null);\r\n\r\n const [currentTab, setCurrentTab] = useState(0);\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const open = Boolean(anchorEl);\r\n\r\n const [datar, setData] = useState({\r\n live: [],\r\n upcoming: {}\r\n });\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const fetchUpcomingEvents = (user, max, extraQuery) => {\r\n const dateObj = formatDate(new Date(), dateFormat)\r\n let data = {\r\n start: dateObj.substring(0, dateObj.length - 9) + \"00:00.000\",\r\n timezone: getCurrentTimezone(),\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.eventsLandingUpcoming.get(user, {\r\n query: data\r\n });\r\n }\r\n\r\n const fetchMatchesEvents = (user, max, is_live, extraQuery) => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 1);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 2);\r\n let data = {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n isLive: is_live\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.landingEventsLiveScores.get(userId, {\r\n query: data\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingUpcoming(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchUpcomingEvents(userId, 12, extraQuery).then((res) => {\r\n if (mounted) {\r\n setUpcomingEvents(res);\r\n setLoadingUpcoming(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingLiveEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 12, true, extraQuery).then((res) => {\r\n if (mounted) {\r\n setLiveEvents(res);\r\n setLoadingLiveEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingPassedEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 12, false, extraQuery).then((res) => {\r\n if (mounted) {\r\n setPassedEvents(res);\r\n setLoadingPassedEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n useEffect(() => {\r\n if (!loadingUpcoming && !loadingLiveEvents && !loadingPassedEvents) {\r\n let combine = [...upcomingEvents, ...liveEvents, ...passedEvents];\r\n let grouped = combine.reduce(\r\n (result, item) => ({\r\n ...result,\r\n [item['tournament']]: [\r\n ...(result[item['tournament']] || []),\r\n item,\r\n ],\r\n }),\r\n {},\r\n );\r\n if(filterByTournament === null) {\r\n setTournaments(Object.keys(grouped));\r\n }\r\n\r\n let watfaq = upcomingEvents.reduce(\r\n (result, item) => {\r\n let date_formatted = formatDate(new Date(item['start']), 'yyyyMMdd');\r\n return {\r\n ...result,\r\n [date_formatted]: [\r\n ...(result[date_formatted] || []),\r\n item,\r\n ],\r\n }\r\n },\r\n [])\r\n\r\n let new_data = {\r\n live: [...liveEvents],\r\n upcoming: {...watfaq}\r\n };\r\n setData(new_data);\r\n }\r\n }, [upcomingEvents, liveEvents, passedEvents, loadingUpcoming, loadingLiveEvents, loadingPassedEvents, filterByTournament]);\r\n\r\n\r\n const OpenInfo = (event) => {\r\n window.history.pushState({backRef: window.location.pathname}, \"Event: \" + event.title + \" | Latency\", `/${event.hasOwnProperty('slug') ? event.slug : event.owner.slug}/${event.id}`)\r\n dispatch(setOpenedEvent(event.id))\r\n dispatch(setOpenedEventMessages(event.id))\r\n dispatch(openEventInfoModal())\r\n Event(\"VlrLandingMatchesComponent\", \"OpenEvent\", event.id);\r\n };\r\n\r\n const handleChangeTab = (event, newValue) => {\r\n setCurrentTab(newValue);\r\n };\r\n\r\n const handleClickMenu = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n }\r\n\r\n const handleCloseMenu = () => {\r\n setAnchorEl(null);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n \r\n \r\n {currentTab === 0 && (\r\n \r\n {datar.live.map(ev =>
)}\r\n {Object.keys(datar.upcoming).map((group, index) =>
)}\r\n {(datar.live.length === 0 && Object.keys(datar.upcoming).length === 0) && (\r\n
\r\n {t(\"empty_matches\")}\r\n
\r\n )}\r\n
\r\n )}\r\n {currentTab === 1 && (\r\n \r\n {passedEvents.map(ev =>
)}\r\n {passedEvents.length === 0 && (\r\n
\r\n {t(\"empty_results\")}\r\n
\r\n )}\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default VlrLandingMatchesMobileComponent;\r\n","import React from 'react';\r\nimport {useSelector} from \"react-redux\";\r\nimport LandingLiveNow from \"./sections/LandingLiveNow/LandingLiveNow\";\r\nimport LandingHighlights from \"./sections/LandingHighlights/LandingHighlights\";\r\nimport LandingAgendaEventsToday from \"../LandingAgenda/LandingAgendaEventsToday/LandingAgendaEventsToday\";\r\nimport './_landing_cover.scss';\r\nimport LandingArticles from \"./sections/LandingArticles/LandingArticles\";\r\nimport LandingLiveScores from \"./sections/LandingLiveScores/LandingLiveScores\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {Box, Grid} from \"@material-ui/core\";\r\nimport LandingHighlightsCarousel from \"./sections/LandingHighlightsCarousel/LandingHighlightsCarousel\";\r\nimport LandingUpcomingEvents from \"./sections/LandingLiveScores/LandingUpcomingEvents\";\r\nimport {Event} from \"../../../services/tracking\";\r\nimport LandingCryptoTopEvents from \"./sections/LandingCrypto/LandingCryptoUpcoming/LandingCryptoTopEventsComponent\";\r\nimport LandingSmallTeamsComponent from \"../LandingMain/fragments/LandingTeamsComponent/LandingSmallTeamsComponent\";\r\nimport VlrLandingMatchesComponent from \"../LandingMain/fragments/VlrLandingMatchesComponent/VlrLandingMatchesComponent\";\r\nimport VlrLandingMatchesMobileComponent\r\n from \"../LandingMain/fragments/VlrLandingMatchesComponent/VlrLandingMatchesMobileComponent\";\r\nconst HtmlToReactParser = require('html-to-react').Parser\r\n\r\nconst htmlToReactParser = new HtmlToReactParser()\r\n\r\nconst componentName = \"LandingCoverComponent\";\r\n\r\nconst LandingCoverComponent = ({\r\n userId,\r\n userSlug,\r\n onOpenPlayer,\r\n changeTab,\r\n changeCustomTab,\r\n customBlocks,\r\n onOpenClip\r\n }) => {\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const {t} = useTranslation('landing');\r\n\r\n const handleOpenPlayer = (playerId) => {\r\n onOpenPlayer(playerId);\r\n changeTab(null, t(\"live_now\"));\r\n window.scrollTo(0, 0)\r\n Event(componentName, \"OpenPlayer\", playerId);\r\n }\r\n\r\n const handleOpenArticle = () => {\r\n changeTab(null, t(\"news\"));\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n const handleOpenClip = (clipId) => {\r\n onOpenClip(clipId);\r\n changeTab(null, t(\"highlights\"));\r\n window.scrollTo(0, 0)\r\n Event(componentName, \"OpenClip\", clipId);\r\n }\r\n\r\n const handleOpenBestClip = (clipId) => {\r\n onOpenClip(clipId);\r\n changeCustomTab(t(\"best_clip\"));\r\n Event(componentName, \"OpenBestClip\", clipId);\r\n }\r\n\r\n const handleClickCustom = (index, object) => {\r\n // 6 base\r\n changeCustomTab(object.title);\r\n }\r\n\r\n const handleOpenAgenda = () => {\r\n changeTab(null, t(\"agenda\"));\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n if (userSlug === \"valorant-oficial\" && 1 === 2) {\r\n return (\r\n
\r\n \r\n \r\n \r\n {t(\"upcoming_matches\")}
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t(\"last_scores\")}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {t(\"matches_live\")} \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {/*\r\n \r\n \r\n {t(\"highlights\")}
\r\n \r\n \r\n \r\n */}\r\n \r\n \r\n );\r\n } else if (userSlug === \"valorant-oficial\" && deviceView !== \"mobile\") {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );//VlrLandingMatchesMobileComponent\r\n } else if (userSlug === \"valorant-oficial\" && deviceView === \"mobile\") {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else if (userSlug === \"espacio-crypto\") {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
{t(\"featured_events\")}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t(\"upcoming_ico\")}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t(\"upcoming_airdrop\")}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
{t(\"latest_news\")}
\r\n
\r\n \r\n
\r\n
{t(\"todays_agenda\")}
\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n return (\r\n
\r\n {userId === \"7ac0b720-06a6-4257-97f9-899e63eb6fd5\" ? (\r\n
\r\n
{t(\"best_clip\")}
\r\n
\r\n \r\n ) : (\r\n
\r\n
{t(\"top_live_now\")}
\r\n
\r\n \r\n )}\r\n\r\n {customBlocks.map((item, index) => {\r\n if (item.preview_body) {\r\n return (\r\n
handleClickCustom(index, item)}>\r\n
{item.title}
\r\n
{htmlToReactParser.parse(item.preview_body)}
\r\n
\r\n )\r\n }\r\n return null;\r\n })}\r\n
\r\n
{t(\"highlights\")}
\r\n
\r\n \r\n {userId !== \"5b755b48-203a-40af-9934-30b4292b468b\" &&\r\n
\r\n
{t(\"latest_news\")}
\r\n
\r\n }\r\n
\r\n
{t(\"todays_agenda\")}
\r\n
\r\n \r\n {(userSlug === \"valorant-oficial\") && (\r\n
\r\n
Partidos en vivo
\r\n
\r\n Últimos resultados
\r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default LandingCoverComponent;\r\n","import React, {useEffect, useMemo, useState} from \"react\";\r\nimport services from \"../../../../../services\";\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport LiveNowItem from \"../../../MarbellaVice/Landing/LiveNowItem\";\r\nimport {makeStyles} from \"@material-ui/core\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n flexWrap: 'wrap',\r\n listStyle: 'none',\r\n padding: theme.spacing(0.5),\r\n margin: 0,\r\n },\r\n chip: {\r\n margin: theme.spacing(0.5),\r\n },\r\n}));\r\n\r\nconst LandingMainTabLiveNow = ({userId, onOpenPlayer, onDeleteOpenPlayer, eventsWithPlayerOpen}) => {\r\n const classes = useStyles();\r\n const [eventsLive, setEventsLive] = useState([]);\r\n\r\n useEffect(() => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 4);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 2);\r\n services.landingEventsLive.get(userId, {\r\n query: {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n $limit: 20\r\n }\r\n }).then((res) => setEventsLive(res)).catch((err) => {\r\n console.log(err);\r\n });\r\n }, [userId]);\r\n\r\n const RenderPlayerTabs = useMemo(() => {\r\n return (\r\n
\r\n {eventsWithPlayerOpen.map((data, index) => {\r\n let name = data.split('#+#')[0];\r\n\r\n return (\r\n
\r\n onDeleteOpenPlayer(data)}\r\n className={classes.chip}\r\n />\r\n \r\n );\r\n })}\r\n \r\n )\r\n }, [eventsWithPlayerOpen]);\r\n\r\n const RenderEvents = useMemo(() =>\r\n eventsLive.map((item) =>
)\r\n , [eventsLive, eventsWithPlayerOpen])\r\n\r\n return (\r\n
\r\n {RenderPlayerTabs}\r\n
\r\n {RenderEvents}\r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default LandingMainTabLiveNow;\r\n","export const setLandingFeedTimeline = (roomId, data) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'SET_LANDING_FEED_TIMELINE',\r\n payload: {\r\n roomId: roomId,\r\n messages: data\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const addLandingFeedTimeline = (data) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'ADD_LANDING_FEED_TIMELINE',\r\n payload: {\r\n roomId: data.roomId,\r\n message: data\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const editLandingFeedTimeline = (roomId, messageId, data) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'EDIT_LANDING_FEED_TIMELINE',\r\n payload: {\r\n roomId: roomId,\r\n messageId: messageId,\r\n message: data\r\n }\r\n })\r\n }\r\n};\r\n\r\n\r\nexport const removeLandingFeedTimeline = (roomId, messageId) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'REMOVE_LANDING_FEED_TIMELINE',\r\n payload: {\r\n roomId: roomId,\r\n messageId: messageId,\r\n }\r\n })\r\n }\r\n};\r\n","import {useDispatch, useSelector} from \"react-redux\";\r\nimport React, {Fragment, useEffect, useState} from \"react\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport CustomButton from \"../../CustomButton/CustomButton\";\r\nimport {followUser, unfollowUser} from \"../../../store/app/actions\";\r\nimport {useTranslation} from \"react-i18next\";\r\n\r\nconst FollowUserButton = ({ isFollow, userData }) => {\r\n const {t} = useTranslation('extraData');\r\n const dispatch = useDispatch();\r\n const loggedIn = useSelector(state => state.loggedIn);\r\n const [loading, setLoading] = useState(false);\r\n const history = useHistory();\r\n const [follow, setFollow] = useState(loggedIn ? isFollow : false);\r\n\r\n const redirect = () => {\r\n history.push('/login')\r\n }\r\n\r\n return (\r\n
\r\n {!follow &&\r\n {\r\n setLoading(true)\r\n dispatch(followUser(userData, redirect, \"landing-view\", setFollow, setLoading))\r\n }}\r\n className=\"follow-btn\">{t('extraData:buttons_follow')} \r\n }\r\n {follow &&\r\n {\r\n setLoading(true)\r\n dispatch(unfollowUser(userData, redirect, \"landing-view\", setFollow, setLoading))\r\n }}\r\n className=\"unfollow-btn\">{t('extraData:buttons_unfollow')} \r\n }\r\n \r\n );\r\n};\r\n\r\nexport default FollowUserButton;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {formatDate} from \"../../../../helpers/dateFormatter\";\r\nimport {isToday, parseJSON} from \"date-fns\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nconst HtmlToReactParser = require('html-to-react').Parser\r\n\r\nconst htmlToReactParser = new HtmlToReactParser()\r\nconst FeedNewItem = ({itemId, title, date, allowRemove, onClickDeleteButton}) => {\r\n const [time, setTime] = useState(\"-\");\r\n const reactElement = htmlToReactParser.parse(title)\r\n\r\n\r\n useEffect(() => {\r\n try {\r\n let convertToDate = parseJSON(date);\r\n setTime(formatDate(convertToDate, isToday(convertToDate) ? 'HH:mm' : 'dd/MM'))\r\n } catch (err) {\r\n\r\n }\r\n }, [itemId, date, title])\r\n\r\n\r\n return (\r\n
\r\n
{time}
\r\n
{reactElement}
\r\n\r\n {allowRemove && <>\r\n
\r\n
onClickDeleteButton(itemId)}>\r\n Borrar
>}\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default FeedNewItem;\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport Countdown from \"react-countdown\";\r\n\r\nconst LandingHeaderCountdownComponent = ({userID}) => {\r\n const {t} = useTranslation('landing');\r\n\r\n const SVGCircle = ({radius}) => (\r\n
\r\n \r\n \r\n );\r\n\r\n const describeArc = (x, y, radius, startAngle, endAngle) => {\r\n let start = polarToCartesian(x, y, radius, endAngle);\r\n let end = polarToCartesian(x, y, radius, startAngle);\r\n let largeArcFlag = endAngle - startAngle <= 180 ? \"0\" : \"1\";\r\n\r\n let d = [\r\n \"M\", start.x, start.y,\r\n \"A\", radius, radius, 0, largeArcFlag, 0, end.x, end.y\r\n ].join(\" \");\r\n\r\n return d;\r\n }\r\n\r\n const polarToCartesian = (centerX, centerY, radius, angleInDegrees) => {\r\n let angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\r\n\r\n return {\r\n x: centerX + (radius * Math.cos(angleInRadians)),\r\n y: centerY + (radius * Math.sin(angleInRadians))\r\n };\r\n }\r\n\r\n const mapNumber = (number, in_min, in_max, out_min, out_max) => {\r\n return (number - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;\r\n }\r\n\r\n const renderer_catdown = ({days, hours, minutes, seconds, completed}) => {\r\n if (completed) return null;\r\n const daysRadius = mapNumber(days, 30, 0, 0, 360);\r\n const hoursRadius = mapNumber(hours, 24, 0, 0, 360);\r\n const minutesRadius = mapNumber(minutes, 60, 0, 0, 360);\r\n const secondsRadius = mapNumber(seconds, 60, 0, 0, 360);\r\n return (\r\n
\r\n {(days !== undefined && days > 0) && (\r\n
\r\n \r\n {days}\r\n {t(\"days\")} \r\n
\r\n )}\r\n {(hours || hours === 0) && (\r\n
\r\n \r\n {hours}\r\n {t(\"hours\")} \r\n
\r\n )}\r\n {(minutes || minutes === 0) && (\r\n
\r\n \r\n {minutes}\r\n {t(\"minutes\")} \r\n
\r\n )}\r\n {(seconds || seconds === 0) && (\r\n
\r\n \r\n {seconds}\r\n {t(\"seconds\")} \r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n if (userID === '4e42510f-afd8-4f3b-b072-32ad4fc9cf19' && 1 === 2) {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n if (userID === '5b755b48-203a-40af-9934-30b4292b468b') {\r\n if (new Date(Date.UTC(2021, 8, 19, 19)) < new Date()) return null;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
Masters Berlín {t(\"ends_in\")} \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n return null;\r\n};\r\n\r\nexport default LandingHeaderCountdownComponent;\r\n","import React, {useEffect, useState} from \"react\";\r\nimport Calendar from \"../../../../../Calendar/Calendar\";\r\nimport {updateCalendar} from \"../../../../../../store/app/actions\";\r\nimport {unsetSelectedGroup} from \"../../../../../../store/selectedGroup/actions\";\r\nimport {unsetMonthlyEventsCount} from \"../../../../../../store/monthlyEventsCount/actions\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\n\r\nconst LandingHeaderCalendarComponent = ({userID, handleMoveTab, userSlug}) => {\r\n const dispatch = useDispatch()\r\n const deviceView = useSelector(state => state.deviceView)\r\n\r\n useEffect(() => {\r\n if (deviceView !== null) {\r\n dispatch(updateCalendar(new Date(), userID))\r\n }\r\n return () => {\r\n dispatch(unsetSelectedGroup())\r\n dispatch(unsetMonthlyEventsCount())\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [deviceView])\r\n\r\n return (\r\n
\r\n handleMoveTab('agenda')} ownerId={userID}/>\r\n
\r\n );\r\n};\r\n\r\nexport default LandingHeaderCalendarComponent;\r\n","import React from \"react\";\r\nimport {useSelector} from \"react-redux\";\r\nimport ReactPlayer from \"react-player\";\r\nimport LandingHeaderTimelineComponent from \"./fragments/LandingHeaderTimelineComponent\";\r\nimport FollowUserButton from \"../../../../Buttons/FollowUser/FollowUserButton\";\r\nimport LandingHeaderCountdownComponent from \"./fragments/LandingHeaderCountdownComponent\";\r\nimport {Button} from \"@material-ui/core\";\r\nimport LandingHeaderCalendarComponent from \"./fragments/LandingHeaderCalendarComponent\";\r\n\r\nconst LandingHeader = ({isFollow, userId, userNickname, headerMobile, headerVideo, changeTab, userSlug}) => {\r\n const currentUser = useSelector(state => state.user);\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme)\r\n\r\n\r\n return (\r\n
\r\n {deviceView === \"mobile\" && (\r\n
\r\n )}\r\n {deviceView !== \"mobile\" && (\r\n <>\r\n {currentUser.id !== userId && (\r\n
\r\n )}\r\n\r\n
\r\n @{userSlug}\r\n \r\n
\r\n {/*\r\n
\r\n \r\n
\r\n */}\r\n\r\n {deviceView === \"browser\" &&\r\n <>\r\n {(userId === 'b8b5720c-5cd2-4638-9d51-b832b9443d34') ?\r\n
\r\n : \r\n }\r\n >\r\n }\r\n\r\n {/*\r\n {userSlug !== \"valorant.espana\" && (\r\n \r\n )}\r\n */}\r\n >\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default LandingHeader;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {isValid, formatDate} from \"../../../../../../../helpers/dateFormatter\";\r\nimport {isToday, parseJSON} from \"date-fns\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport {useSelector} from \"react-redux\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport EditIcon from \"@material-ui/icons/Edit\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nconst HtmlToReactParser = require('html-to-react').Parser\r\n\r\nconst htmlToReactParser = new HtmlToReactParser()\r\nconst FeedNewItem = ({itemId, title, date, allowRemove, onClickDeleteButton, onClickEditButton}) => {\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [time, setTime] = useState(\"-\");\r\n const reactElement = htmlToReactParser.parse(title)\r\n useEffect(() => {\r\n try {\r\n let convertToDate = parseJSON(date);\r\n setTime(formatDate(convertToDate, isToday(convertToDate) ? 'HH:mm' : 'dd/MM'))\r\n } catch (err) {\r\n\r\n }\r\n }, [date])\r\n\r\n\r\n return (\r\n
\r\n
{time}
\r\n
{reactElement}
\r\n\r\n {allowRemove &&
\r\n
\r\n onClickEditButton(itemId)}>\r\n \r\n \r\n onClickDeleteButton(itemId)}>\r\n \r\n \r\n
}\r\n
\r\n );\r\n};\r\n\r\nexport default FeedNewItem;\r\n","import React, { useState } from 'react';\r\nimport { formatDate } from \"../../../../../../../helpers/dateFormatter\";\r\nimport {TextField, Box} from '@material-ui/core';\r\nimport CustomButton from \"../../../../../../CustomButton/CustomButton\";\r\nimport { parse } from \"date-fns\";\r\nimport { showSnackbar } from \"../../../../../../../store/snackbar/actions\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\n\r\nconst LandingFeedTimelineEditForm = ({ onSubmit, onClose, passedItem }) => {\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const dispatch = useDispatch();\r\n const currentDate = new Date();\r\n const [time, setTime] = useState(\r\n formatDate(passedItem\r\n && passedItem.hasOwnProperty('timeline_date')\r\n ? passedItem.timeline_date\r\n : currentDate, \"yyyy-MM-dd'T'HH:mm\"));\r\n const [body, setBody] = useState(passedItem &&\r\n passedItem.hasOwnProperty('timeline_title')\r\n ? passedItem.timeline_title\r\n : \"\");\r\n\r\n const handleSubmit = () => {\r\n try {\r\n let data = {\r\n type: 'timeline',\r\n custom_fields: {\r\n timeline_date: new Date(time).toISOString(),\r\n timeline_body: body\r\n }\r\n }\r\n\r\n if (passedItem && passedItem.hasOwnProperty('id')) {\r\n data.id = passedItem.id;\r\n }\r\n\r\n onSubmit(data, () => {\r\n onClose();\r\n }, () => {\r\n alert('error updating record')\r\n console.log(\"error!\");\r\n })\r\n }\r\n catch (e) {\r\n dispatch(showSnackbar({ message: e.message, type: \"error\" }));\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {\r\n setTime(event.target.value);\r\n }}\r\n inputProps={{\r\n step: 300, // 5 min\r\n }}\r\n fullWidth\r\n />\r\n setBody(event.target.value)}\r\n fullWidth\r\n margin=\"normal\"\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n />\r\n
\r\n
\r\n Cancel \r\n Save \r\n \r\n\r\n
\r\n );\r\n};\r\n\r\nexport default LandingFeedTimelineEditForm;\r\n","import React, {useEffect, useState} from \"react\";\r\nimport services from \"../../../../../../../services\";\r\nimport CircleAdd from \"../../../../../../../assets/icons/actions/add_event_circle.svg\";\r\nimport FeedNewItem from \"./FeedNewItem\";\r\nimport Modal from \"../../../../../../Modal/Modal\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport InfiniteList from \"react-infinite-scroll-list\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport {\r\n editLandingFeedTimeline,\r\n removeLandingFeedTimeline\r\n} from \"../../../../../../../store/landingFeedTimeline/actions\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport LandingFeedTimelineEditForm from \"./LandingFeedTimelineEditForm\";\r\n\r\n\r\nconst LandingFeedTimeline = ({userId, allowedManage, handleSubmit}) => {\r\n const {t} = useTranslation('extraData');\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [openForm, setOpenForm] = useState(false);\r\n const originalFeedNews = useSelector(state => state.landingFeedTimeline.hasOwnProperty(userId) ? state.landingFeedTimeline[userId] : []);\r\n const [feedNews, setFeedNews] = useState([...originalFeedNews]);\r\n const [loadingList, setLoadingList] = useState(false);\r\n const [total, setTotal] = useState(0);\r\n const [skip, setSkip] = useState(10);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [loading, setLoading] = useState(true);\r\n const dispatch = useDispatch();\r\n const [editItem, setEditItem] = useState(undefined);\r\n\r\n\r\n useEffect(() => {\r\n if (originalFeedNews.hasOwnProperty(userId)) {\r\n setTotal(originalFeedNews[userId].total)\r\n setFeedNews([...originalFeedNews[userId].data]);\r\n }\r\n setLoading(false)\r\n }, [originalFeedNews]);\r\n\r\n useEffect(() => {\r\n if (!originalFeedNews.hasOwnProperty(userId)) {\r\n loadData();\r\n }\r\n }, [userId]);\r\n\r\n const openWriterModal = () => {\r\n if (allowedManage) {\r\n setOpenForm(true);\r\n }\r\n }\r\n\r\n const handleRemoveFeedTimeline = (data) => {\r\n if (data.roomId === userId && data.type === \"timeline\") {\r\n let filtered = originalFeedNews[userId].data.filter(i => i.id !== data.id)\r\n let originalLength = originalFeedNews[userId].data.length;\r\n setTotal(total - (originalLength - filtered.length))\r\n setFeedNews([...filtered]);\r\n dispatch(removeLandingFeedTimeline(userId, data.id))\r\n }\r\n }\r\n\r\n const handleDeleteTimelineItem = (itemId) => {\r\n services.landingFeed.remove(itemId).then((res) => {\r\n handleRemoveFeedTimeline(res);\r\n });\r\n }\r\n\r\n const handleEditTimelineItem = (data) => {\r\n services.landingFeed.patch(data.id, {...data, roomId: userId}).then((res) => {\r\n setOpenForm(false);\r\n setEditItem(undefined);\r\n loadData();\r\n dispatch(editLandingFeedTimeline(userId, res.id, res));\r\n });\r\n }\r\n\r\n const onSubmitNewForm = (data, onSuccess, onError) => {\r\n handleSubmit(data, () => {\r\n onSuccess();\r\n }, onError)\r\n };\r\n\r\n const onSubmitForm = (data, onSuccess, onError) => {\r\n if (!data.hasOwnProperty('id')) {\r\n onSubmitNewForm(data, () => {\r\n loadData();\r\n onSuccess();\r\n }, onError);\r\n } else {\r\n handleEditTimelineItem(data);\r\n }\r\n };\r\n\r\n const fetchData = () => {\r\n if (!loadingList) {\r\n setLoadingList(true);\r\n services.landingFeed.find({\r\n query: {\r\n type: 'timeline',\r\n roomId: userId,\r\n $skip: skip,\r\n $limit: 5,\r\n $sort: {\r\n 'timeline': -1\r\n }\r\n }\r\n })\r\n .then((resp) => {\r\n if (resp.data.length > 0) {\r\n setFeedNews(prev => [...prev, ...resp.data]);\r\n setSkip(skip + 5);\r\n }\r\n setLoadingList(false);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n }\r\n\r\n };\r\n\r\n const loadData = () => {\r\n if (!loadingList) {\r\n setLoadingList(true);\r\n services.landingFeed.find({\r\n query: {\r\n type: 'timeline',\r\n roomId: userId,\r\n $sort: {\r\n 'timeline': -1\r\n },\r\n $limit: 10\r\n }\r\n })\r\n .then((resp) => {\r\n if (resp.data.length > 0) {\r\n setFeedNews(resp.data);\r\n setSkip(10);\r\n setTotal(resp.total);\r\n }\r\n setLoadingList(false);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n }\r\n };\r\n\r\n const closeForm = () => {\r\n setEditItem(undefined);\r\n setOpenForm(false);\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n Timeline\r\n {allowedManage &&
}\r\n
\r\n
\r\n {loading ? (\r\n
\r\n \r\n
) :\r\n
\r\n {feedNews.length === 0 && (\r\n {t('extraData:landing_empty_content')}
\r\n )}\r\n {feedNews.map((item) =>\r\n {\r\n setEditItem(item);\r\n setOpenForm(true);\r\n }}\r\n onClickDeleteButton={handleDeleteTimelineItem}/>\r\n )}\r\n \r\n }\r\n
\r\n
\r\n \r\n \r\n >\r\n );\r\n\r\n};\r\n\r\nexport default LandingFeedTimeline;\r\n","import React, {useEffect} from 'react';\r\nimport {useSelector} from \"react-redux\";\r\nimport EditIcon from \"@material-ui/icons/Edit\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nconst HtmlToReactParser = require('html-to-react').Parser\r\n\r\nconst htmlToReactParser = new HtmlToReactParser()\r\n\r\nconst LandingFeedArticle = ({ item, allowRemove, onClickDeleteButton, onClickEditButton}) => {\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const reactElement = htmlToReactParser.parse(item.text)\r\n\r\n useEffect(() => {\r\n try {\r\n // eslint-disable-next-line no-undef\r\n twttr.widgets.load()\r\n } catch (err) {\r\n }\r\n });\r\n\r\n return (\r\n
\r\n
\r\n
{item.title} \r\n
enviado por {item.author}
\r\n
\r\n
\r\n {(item.hasOwnProperty('cover') && item.cover !== null && item.cover !== \"\") &&
}\r\n
\r\n {reactElement}\r\n
\r\n {allowRemove && (\r\n
\r\n {onClickEditButton(item.id)}}>\r\n \r\n \r\n onClickDeleteButton(item.id)}>\r\n \r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LandingFeedArticle;\r\n","import React, { useRef, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport {TextField, Box} from \"@material-ui/core\";\r\nimport { Editor } from '@tinymce/tinymce-react';\r\nimport CustomButton from \"../../../../../../CustomButton/CustomButton\";\r\n\r\nconst LandingFeedArticleForm = ({ onSubmit, onClose, item }) => {\r\n const user = useSelector(state => state.user);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const [title, setTitle] = useState(item && item.title ? item.title : \"\");\r\n const [errorTitle, setErrorTitle] = useState(false);\r\n\r\n const [body, setBody] = useState(item && item.text ? item.text : \"\");\r\n const [errorBody, setErrorBody] = useState(false);\r\n\r\n const [author, setAuthor] = useState(item && item.author ? item.author : user.nickname);\r\n const [errorAuthor, setErrorAuthor] = useState(false);\r\n\r\n const [cover, setCover] = useState(item && item.cover ? item.cover : \"\");\r\n\r\n const handleSubmit = () => {\r\n let data = {\r\n type: 'article',\r\n text: body,\r\n custom_fields: {\r\n cover: cover,\r\n author: author,\r\n title: title\r\n }\r\n }\r\n\r\n if (item && item.hasOwnProperty('id')) {\r\n data.id = item.id;\r\n }\r\n\r\n onSubmit(data, () => {\r\n console.log(\"success\");\r\n onClose();\r\n }, () => {\r\n console.log(\"error!\");\r\n })\r\n }\r\n\r\n const handleFileRead = async (event) => {\r\n const file = event.target.files[0]\r\n const base64 = await convertBase64(file)\r\n setCover(base64)\r\n }\r\n\r\n const convertBase64 = (file) => {\r\n return new Promise((resolve, reject) => {\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file)\r\n fileReader.onload = () => {\r\n resolve(fileReader.result);\r\n }\r\n fileReader.onerror = (error) => {\r\n reject(error);\r\n }\r\n })\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
setTitle(e.target.value)}\r\n fullWidth\r\n margin=\"normal\"\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n />\r\n setAuthor(e.target.value)}\r\n fullWidth\r\n margin=\"normal\"\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n />\r\n \r\n handleFileRead(e)} />\r\n
\r\n setBody(value)}\r\n init={{\r\n height: 300,\r\n directionality: 'ltr',\r\n menubar: false,\r\n plugins: [\r\n 'advlist autolink lists link image preview anchor',\r\n 'searchreplace visualblocks code fullscreen',\r\n 'media table paste code wordcount'\r\n ],\r\n toolbar:\r\n [\r\n 'bold italic forecolor | outdent indent | alignleft aligncenter alignright alignjustify | bullist numlist | visualblocks code',\r\n 'link image media menuTwitchBtn'\r\n ],\r\n setup: (editor) => {\r\n editor.ui.registry.addMenuButton('menuTwitchBtn', {\r\n text: 'Twitch',\r\n fetch: function (callback) {\r\n var items = [\r\n {\r\n type: 'menuitem',\r\n text: 'Insertar Vídeo',\r\n onAction: function (_) {\r\n editor.windowManager.open({\r\n title: 'Dirección web del video', // The dialog's title - displayed in the dialog header\r\n body: {\r\n type: 'panel',\r\n items: [\r\n {\r\n type: 'input',\r\n name: 'url',\r\n label: 'URL',\r\n placeholder: 'https://www.twitch.tv/videos/592577871'\r\n },\r\n ]\r\n },\r\n buttons: [\r\n {\r\n type: 'cancel',\r\n name: 'closeButton',\r\n text: 'Cancel'\r\n },\r\n {\r\n type: 'submit',\r\n name: 'submitButton',\r\n text: 'Insertar',\r\n primary: true\r\n }\r\n ],\r\n initialData: {\r\n url: '',\r\n },\r\n onSubmit: (api) => {\r\n let data = api.getData();\r\n let url = data.url.replace('https://', '').replace('www.', '');\r\n let match = url.match(/^twitch\\.tv\\/videos\\/([\\w-]+)(?:\\?t=([\\w-]+)|)/)\r\n if (match.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n }\r\n api.close();\r\n }\r\n });\r\n }\r\n },\r\n {\r\n type: 'menuitem',\r\n text: 'Insertar Clip',\r\n onAction: function (_) {\r\n editor.windowManager.open({\r\n title: 'Dirección web del clip', // The dialog's title - displayed in the dialog header\r\n body: {\r\n type: 'panel',\r\n items: [\r\n {\r\n type: 'input',\r\n name: 'url',\r\n label: 'URL',\r\n placeholder: 'https://www.twitch.tv/starwraith/clip/DeafGloriousChickpeaGrammarKing'\r\n },\r\n ]\r\n },\r\n buttons: [\r\n {\r\n type: 'cancel',\r\n name: 'closeButton',\r\n text: 'Cancel'\r\n },\r\n {\r\n type: 'submit',\r\n name: 'submitButton',\r\n text: 'Insertar',\r\n primary: true\r\n }\r\n ],\r\n initialData: {\r\n url: '',\r\n },\r\n onSubmit: (api) => {\r\n let data = api.getData();\r\n let url = data.url.replace('https://', '').replace('www.', '');\r\n let match = url.match(/^twitch\\.tv\\/([\\w-]+)\\/clip\\/([\\w-]+)/)\r\n if (match && match.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n } else {\r\n let newMatch = url.match(/^clips\\.twitch\\.tv\\/([\\w-]+)/)\r\n if (newMatch && newMatch.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n }\r\n }\r\n api.close();\r\n }\r\n });\r\n }\r\n },\r\n ];\r\n callback(items);\r\n }\r\n });\r\n },\r\n content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }',\r\n image_uploadtab: true,\r\n relative_urls: false,\r\n }}\r\n />\r\n \r\n\r\n\r\n
\r\n Cancel \r\n Save \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LandingFeedArticleForm;\r\n","import CircleAdd from \"../../../../../../../assets/icons/actions/add_event_circle.svg\";\r\nimport Modal from \"../../../../../../Modal/Modal\";\r\nimport React, {useEffect, useState} from \"react\";\r\nimport {useSelector} from \"react-redux\";\r\nimport services from \"../../../../../../../services\";\r\nimport LandingFeedArticle from \"./LandingFeedArticle\";\r\nimport LandingFeedArticleForm from \"./LandingFeedArticleForm\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport InfiniteList from \"react-infinite-scroll-list\";\r\nimport \"./_landing_feed_articles.scss\"\r\n\r\nconst LandingFeedArticles = ({userId, allowedManage, handleSubmit}) => {\r\n const {t} = useTranslation('extraData');\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [openForm, setOpenForm] = useState(false);\r\n const [loading, setLoading] = useState(true);\r\n const [loadingList, setLoadingList] = useState(false);\r\n const [total, setTotal] = useState(0);\r\n const [skip, setSkip] = useState(4);\r\n const [news, setNews] = useState([]);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [editItem, setEditItem] = useState(undefined);\r\n\r\n const handlePatchFeedArticle = (data) => {\r\n services.landingFeed.patch(data.id, {...data, roomId: userId}).then((res) => {\r\n closeForm();\r\n loadData();\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n loadData();\r\n }, [userId]);\r\n\r\n const loadData = () => {\r\n setLoading(true);\r\n if (userId) {\r\n services.landingFeed.find({\r\n query: {\r\n type: 'article',\r\n roomId: userId,\r\n $limit: 4,\r\n $sort: {\r\n createdAt: -1\r\n }\r\n }\r\n }).then((res) => {\r\n setNews(res.data)\r\n setTotal(res.total)\r\n setLoading(false);\r\n });\r\n }\r\n };\r\n\r\n const openWriterModal = () => {\r\n if (allowedManage) {\r\n setOpenForm(true);\r\n }\r\n }\r\n\r\n const handleDeleteArticle = (itemId) => {\r\n services.landingFeed.remove(itemId).then((res) => {\r\n setTotal(total - 1)\r\n setNews(news.filter(i => i.id !== itemId));\r\n });\r\n };\r\n\r\n const onSubmitNewForm = (data, onSuccess, onError) => {\r\n handleSubmit(data, () => {\r\n onSuccess();\r\n }, onError)\r\n };\r\n\r\n const onSubmitForm = (data, onSuccess, onError) => {\r\n if (!data.hasOwnProperty('id')) {\r\n onSubmitNewForm(data, () => {\r\n loadData();\r\n onSuccess();\r\n }, onError);\r\n } else {\r\n handlePatchFeedArticle(data);\r\n }\r\n };\r\n\r\n const fetchData = () => {\r\n if (!loadingList) {\r\n setLoadingList(true);\r\n services.landingFeed.find({\r\n query: {\r\n type: 'article',\r\n roomId: userId,\r\n $skip: skip,\r\n $limit: 2,\r\n $sort: {\r\n createdAt: -1\r\n }\r\n }\r\n })\r\n .then((resp) => {\r\n if (resp.data.length > 0) {\r\n setNews([...news, ...resp.data]);\r\n setSkip(skip + 2);\r\n }\r\n setLoadingList(false);\r\n })\r\n .catch((error) => {\r\n console.log(error)\r\n })\r\n }\r\n };\r\n\r\n const handleClickEditButton = (item) => {\r\n setEditItem(item);\r\n openWriterModal();\r\n };\r\n\r\n\r\n const closeForm = () => {\r\n setEditItem(undefined);\r\n setOpenForm(false);\r\n };\r\n\r\n return (<>\r\n
\r\n News\r\n {allowedManage &&
}\r\n
\r\n
\r\n {loading ? (\r\n
\r\n
) :
\r\n {news.length === 0 && (\r\n {t('extraData:landing_empty_content')}
\r\n )}\r\n {news.map((item) =>\r\n {\r\n handleClickEditButton(item)\r\n }}\r\n />)}\r\n }\r\n
\r\n
\r\n \r\n \r\n >);\r\n};\r\n\r\nexport default LandingFeedArticles;\r\n","import React, {useEffect, useState} from 'react';\r\nimport services from \"../../../../../services\";\r\nimport LandingFeedTimeline from \"./Feed/LandingFeedTimeline/LandingFeedTimeline\";\r\nimport {useSelector} from \"react-redux\";\r\nimport LandingFeedArticles from \"./Feed/LandingFeedArticles/LandingFeedArticles\";\r\nimport {TwitterTimelineEmbed} from \"react-twitter-embed\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst LandingFeedComponent = ({userId}) => {\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const loggedIn = useSelector(state => state.loggedIn)\r\n const user = useSelector(state => state.user)\r\n const [allowedManage, setAllowedManage] = useState(false);\r\n const settingsGeneral = useSelector(state => state.settings.general);\r\n\r\n useEffect(() => {\r\n if (loggedIn) {\r\n if (user.id === userId) {\r\n setAllowedManage(true);\r\n } else {\r\n services.userLandingRoles.find({\r\n query: {\r\n roomId: userId\r\n }\r\n }).then((res) => {\r\n if (res.hasOwnProperty('allowed') && res.allowed === true) {\r\n setAllowedManage(true);\r\n }\r\n });\r\n }\r\n }\r\n }, [loggedIn, user]);\r\n\r\n\r\n const onSubmitModal = (data, onSuccess, onError) => {\r\n services.landingFeed.create({...data, roomId: userId}).then(res => {\r\n onSuccess(res);\r\n }).catch(err => {\r\n console.log(err)\r\n onError(err);\r\n })\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {userId === '4e42510f-afd8-4f3b-b072-32ad4fc9cf19' &&\r\n
}\r\n noFooter\r\n />}\r\n {userId === 'ce777e3c-f047-424d-9ee5-070b578caed3' &&
}\r\n noFooter\r\n />}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LandingFeedComponent;\r\n","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { TextField, Box } from \"@material-ui/core\";\r\nimport CustomButton from \"../../../../../../CustomButton/CustomButton\";\r\n\r\nconst LandingFeedClipsForm = ({ onSubmit, onClose }) => {\r\n const [blockedButton, setBlockedButton] = useState(true);\r\n const [error, setError] = useState(false);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [body, setBody] = useState(\"\");\r\n\r\n const handleSubmit = () => {\r\n let data = {\r\n type: 'clip',\r\n custom_fields: {\r\n clip: body\r\n }\r\n }\r\n onSubmit(data, () => {\r\n onClose();\r\n }, () => {\r\n console.log(\"error!\");\r\n })\r\n }\r\n\r\n const handleInputURL = (event) => {\r\n let url = event.target.value;\r\n if (url.startsWith(\"https://www.youtube.com\") || url.startsWith(\"https://youtube.com\") || url.startsWith(\"https://youtu.be\")) {\r\n let yt_regex = /http(?:s?):\\/\\/(?:www\\.)?youtu(?:be\\.com\\/watch\\?v=|\\.be\\/)([\\w\\-\\_]*)(&(amp;)?[\\w\\?=]*)?/\r\n let exc_yt = yt_regex.exec(url);\r\n if (exc_yt != null && exc_yt.length > 0 && exc_yt[1] !== null && exc_yt[1].length > 0) {\r\n setBody('youtube:' + exc_yt[1]);\r\n setError(false);\r\n setBlockedButton(false);\r\n } else {\r\n setError(true);\r\n }\r\n } else if (url.startsWith(\"https://www.twitch.tv\") || url.startsWith(\"https://twitch.tv\") || url.startsWith(\"https://clips.twitch.tv\")) {\r\n const twitch_regex = /https:\\/\\/(?:clips|www)\\.twitch\\.tv\\/(?:(?:.*)\\/clip\\/)?([A-Za-z0-9-_]+)/;\r\n let exc_twitch = twitch_regex.exec(url);\r\n if (exc_twitch != null && exc_twitch.length > 0 && exc_twitch[1] !== null && exc_twitch[1].length > 0) {\r\n setBody('twitch:' + exc_twitch[1]);\r\n setError(false);\r\n setBlockedButton(false);\r\n } else {\r\n setError(true);\r\n }\r\n } else {\r\n setError(true);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n Cancel \r\n Publicar \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LandingFeedClipsForm;\r\n","import CircleAdd from \"../../../../../../../assets/icons/actions/add_event_circle.svg\";\r\nimport Modal from \"../../../../../../Modal/Modal\";\r\nimport React, {useEffect, useMemo, useState} from \"react\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport services from \"../../../../../../../services\";\r\nimport LandingFeedClip from \"./LandingFeedClip\";\r\nimport LandingFeedClipsForm from \"./LandingFeedClipsForm\";\r\nimport {\r\n addLandingFeedClip,\r\n editLandingFeedClip, removeLandingFeedClip,\r\n setLandingFeedClips\r\n} from \"../../../../../../../store/landingFeedClips/actions\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport LandingPreviewFeedClip from \"./LandingPreviewFeedClip\";\r\nimport InfiniteList from \"react-infinite-scroll-list\";\r\nimport LandingFeedClipItem from \"./LandingFeedClipItem\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport {Event} from \"../../../../../../../services/tracking\";\r\n\r\nconst componentName = \"LandingFeedClips\";\r\n\r\nconst LandingFeedClips = ({type, userId, allowedManage, handleSubmit, eventWithClipOpen, displayClipInfo}) => {\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [openForm, setOpenForm] = useState(false);\r\n const [loading, setLoading] = useState(true);\r\n const [feedClips, _setFeedClips] = useState([]);\r\n const feedClipsRef = React.useRef(feedClips);\r\n const setFeedClips = data => {\r\n feedClipsRef.current = data;\r\n _setFeedClips(data);\r\n };\r\n const [loadingList, setLoadingList] = useState(false);\r\n const [total, setTotal] = useState(0);\r\n const [skip, setSkip] = useState(0);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const handleNewFeedClipMessage = (data) => {\r\n if (data.roomId === userId && data.type === type) {\r\n setFeedClips([data, ...feedClipsRef.current]);\r\n }\r\n };\r\n\r\n\r\n const handleRemoveFeedClipMessage = (data) => {\r\n if (data.roomId === userId && data.type === type) {\r\n let filtered = feedClipsRef.current.filter(i => i.id !== data.id)\r\n setFeedClips([...filtered]);\r\n }\r\n }\r\n\r\n\r\n useEffect(() => {\r\n setLoadingList(true);\r\n services.landingFeed.find({\r\n query: {\r\n type: type,\r\n roomId: userId,\r\n $skip: 0,\r\n $limit: 10,\r\n $sort: {\r\n createdAt: -1\r\n }\r\n }\r\n })\r\n .then((resp) => {\r\n setTotal(resp.total)\r\n if (resp.data.length > 0) {\r\n setFeedClips([...resp.data]);\r\n setSkip(skip + 10);\r\n }\r\n setLoadingList(false);\r\n setLoading(false);\r\n })\r\n .catch((error) => {\r\n console.log(error)\r\n })\r\n services.landingFeed.on('created', handleNewFeedClipMessage);\r\n //services.landingFeed.on('patched', handlePatchFeedClipMessage);\r\n //services.landingFeed.on('removed', handleRemoveFeedClipMessage);\r\n return () => {\r\n services.landingFeed.removeListener('created')\r\n //services.landingFeed.removeListener('patched')\r\n //services.landingFeed.removeListener('removed')\r\n }\r\n }, [userId]);\r\n\r\n\r\n const openWriterModal = () => {\r\n if (allowedManage) {\r\n setOpenForm(true);\r\n }\r\n }\r\n\r\n const handleDeleteClip = (itemId) => {\r\n services.landingFeed.remove(itemId, {\r\n query: {\r\n roomId: userId\r\n }\r\n }).then((res) => {\r\n handleRemoveFeedClipMessage(res);\r\n });\r\n Event(componentName, \"DeleteClip\", itemId);\r\n };\r\n\r\n const onSubmitNewForm = (data, onSuccess, onError) => {\r\n handleSubmit({...data, type: type}, () => {\r\n onSuccess();\r\n }, onError)\r\n };\r\n\r\n const fetchData = () => {\r\n if (!loadingList) {\r\n setLoadingList(true);\r\n services.landingFeed.find({\r\n query: {\r\n type: type,\r\n roomId: userId,\r\n $skip: skip,\r\n $limit: 3,\r\n\r\n $sort: {\r\n createdAt: -1\r\n }\r\n }\r\n })\r\n .then((resp) => {\r\n if (resp.data.length > 0) {\r\n setFeedClips([...feedClipsRef.current, ...resp.data]);\r\n setSkip(skip + 3);\r\n }\r\n setLoadingList(false);\r\n })\r\n .catch((error) => {\r\n console.log(error)\r\n })\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {allowedManage &&\r\n
openWriterModal('clip')} src={CircleAdd} alt=\"add new clip item\"/>}\r\n
\r\n \r\n {loading ?\r\n (
\r\n \r\n
)\r\n : <>\r\n {loading ? (\r\n
\r\n \r\n
) :\r\n
\r\n \r\n {feedClips.map((item) =>\r\n \r\n \r\n )}\r\n \r\n \r\n }\r\n >}\r\n
\r\n \r\n
setOpenForm(false)}>\r\n setOpenForm(null)}/>\r\n \r\n >\r\n );\r\n};\r\n\r\nLandingFeedClips.defaultProps = {\r\n type: 'clip',\r\n displayClipInfo: false\r\n}\r\n\r\nexport default LandingFeedClips;\r\n","import React, {useEffect, useState} from 'react';\r\nimport services from \"../../../../../services\";\r\nimport LandingFeedClips from \"../LandingFeedComponent/Feed/LandingFeedClips/LandingFeedClips\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {Event} from \"../../../../../services/tracking\";\r\n\r\nconst componentName = \"LandingHighlightsComponent\";\r\n\r\nconst LandingHighlightsComponent = ({userId, eventWithClipOpen, type, displayClipInfo}) => {\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const loggedIn = useSelector(state => state.loggedIn)\r\n const user = useSelector(state => state.user)\r\n const [allowedManage, setAllowedManage] = useState(false);\r\n\r\n useEffect(() => {\r\n if (loggedIn) {\r\n if (user.id === userId) {\r\n setAllowedManage(true);\r\n } else {\r\n services.userLandingRoles.find({\r\n query: {\r\n roomId: userId\r\n }\r\n }).then((res) => {\r\n if (res.hasOwnProperty('allowed') && res.allowed === true) {\r\n setAllowedManage(true);\r\n }\r\n });\r\n }\r\n }\r\n }, [loggedIn, user]);\r\n\r\n\r\n const onSubmitModal = (data, onSuccess, onError) => {\r\n services.landingFeed.create({...data, roomId: userId}).then(res => {\r\n onSuccess(res);\r\n Event(componentName, \"AddHighlight\", data.custom_fields.clip);\r\n }).catch(err => {\r\n console.log(err)\r\n onError(err);\r\n })\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nLandingHighlightsComponent.defaultProps = {\r\n type: 'clip',\r\n displayClipInfo: false\r\n}\r\n\r\nexport default LandingHighlightsComponent;\r\n","import {Box} from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport {ownTimeAgo} from \"../../../../../helpers/dateFormatter\";\r\nimport {setOpenedEvent} from \"../../../../../store/openedEvent/actions\";\r\nimport {setOpenedEventMessages} from \"../../../../../store/openedEventMessages/actions\";\r\nimport {openEventInfoModal} from \"../../../../../store/eventInfoModal/actions\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {Event} from \"../../../../../services/tracking\";\r\n\r\n\r\nconst PassedItem = ({ item }) => {\r\n const dispatch = useDispatch();\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const OpenInfo = () => {\r\n window.history.pushState({backRef: window.location.pathname}, \"my calendar\", `/${item.owner.slug}/${item.id}`)\r\n dispatch(setOpenedEvent(item.id))\r\n dispatch(setOpenedEventMessages(item.id))\r\n dispatch(openEventInfoModal())\r\n Event(\"PassedItem\", \"OpenEvent\", item.id);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {ownTimeAgo(item.end)}\r\n \r\n
\r\n
\r\n
0 ? item.landing.thumbnail_url : \"/media-thumb-no-available.png\"}`} />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{item.landing.twitch_user}
\r\n
{item.title}
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default PassedItem;\r\n","import {useTranslation} from \"react-i18next\";\r\nimport React, {useEffect, useRef, useState} from \"react\";\r\nimport services from \"../../../../../services\";\r\nimport {isToday} from \"date-fns\";\r\nimport {formatDate} from \"../../../../../helpers/dateFormatter\";\r\nimport TablePagination from \"@material-ui/core/TablePagination\";\r\nimport PassedItem from \"./PassedItem\";\r\nimport {ArrowBackIos, ArrowForwardIos} from \"@material-ui/icons\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport {Box} from \"@material-ui/core\";\r\n\r\nconst LandingEventsPassedPipeByDay = ({day, data, query, addDayHandler, subtractDayHandler}) => {\r\n const {t} = useTranslation(['extraData']);\r\n const firstUpdate = useRef(true);\r\n const [events, setEvents] = useState(data.data);\r\n const [total, setTotal] = useState(data.total.length);\r\n const [skip, setSkip] = useState(query.$skip);\r\n const [currentPage, setCurrentPage] = useState(query.$skip / data.total.length);\r\n const [rowsPerPage, setRowsPerPage] = useState(query.$limit);\r\n let tom = new Date(day);\r\n tom.setDate(tom.getDate() + 1)\r\n const [tomorrow, setTomorrow] = useState(tom > new Date());\r\n\r\n const handleChangePage = (e, newPage) => {\r\n setCurrentPage(newPage);\r\n setSkip(rowsPerPage * newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = (e) => {\r\n setRowsPerPage(parseInt(e.target.value, 10));\r\n setSkip(0);\r\n };\r\n\r\n useEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n return;\r\n }\r\n\r\n services.events.find({\r\n query: {\r\n ...query,\r\n $limit: rowsPerPage,\r\n $skip: skip\r\n }\r\n }).then((res) => {\r\n setEvents(res.data);\r\n });\r\n\r\n }, [query, rowsPerPage, skip]);\r\n\r\n useEffect(() => {\r\n if (data && query) {\r\n setEvents([]);\r\n setEvents(data.data);\r\n setSkip(query.$skip);\r\n setTotal(data.total.length);\r\n setCurrentPage(query.$skip / data.total.length);\r\n setRowsPerPage(query.$limit);\r\n tom = new Date(day);\r\n tom.setDate(tom.getDate() + 1);\r\n setTomorrow(tom > new Date());\r\n }\r\n }, [data, query]);\r\n\r\n return (<>\r\n
\r\n
\r\n \r\n \r\n {!isToday(day) ? (\r\n <>\r\n
{formatDate(day, \"iii d\")}
\r\n
{formatDate(day, \"LLLL\")}
\r\n >\r\n ) : (\r\n
{t('today')}
\r\n )}\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n {(events && events.length > 0) &&\r\n
t('extraData:table_pagination_labelDisplayedRows', {\r\n from: from,\r\n to: (to ? to : 0),\r\n count: count\r\n })}\r\n rowsPerPageOptions={[8, 12, 16, 20]}\r\n component=\"div\"\r\n count={total}\r\n page={currentPage}\r\n onChangePage={handleChangePage}\r\n rowsPerPage={rowsPerPage}\r\n onChangeRowsPerPage={handleChangeRowsPerPage}\r\n />\r\n }\r\n \r\n
\r\n
\r\n {events.map((item) =>
)}\r\n \r\n >\r\n );\r\n};\r\n\r\nexport default LandingEventsPassedPipeByDay;\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {eachDayOfInterval} from \"date-fns\";\r\n\r\nimport {formatDate, getCurrentTimezone, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nimport LandingEventsPassedPipe from \"./LandingEventsPassedPipe\";\r\nimport LandingEventsPassedPipeByDay from \"./LandingEventsPassedPipeByDay\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nconst EventsPassedComponentByDay = ({userId}) => {\r\n const [inputDay, setInputDay] = useState(new Date());\r\n const [data, setData] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const prepareData = async (day) => {\r\n let q = {\r\n ownerId: userId,\r\n start: formatDate(ownStartOfDay(day), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n paginate: false,\r\n bundle: true,\r\n landingVOD: true,\r\n isLive: false,\r\n $limit: 8,\r\n $skip: 0\r\n }\r\n return await services.events.find({\r\n query: q\r\n }).then((res) => {\r\n if (res.data.length > 0) {\r\n return {\r\n day: day,\r\n events: res,\r\n query: q\r\n }\r\n } else {\r\n return {\r\n day: day,\r\n events: {data: [], total: {length: 0}},\r\n query: q\r\n }\r\n }\r\n }).catch((err) => {\r\n return {\r\n day: day,\r\n events: {data: [], total: {length: 0}},\r\n query: q\r\n }\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n\r\n prepareData(inputDay).then(res => {\r\n setData(res);\r\n setLoading(false);\r\n });\r\n }, [userId]);\r\n\r\n const addDateHandler = () => {\r\n setLoading(true);\r\n\r\n setInputDay((pre) => {\r\n let date = pre;\r\n date.setDate(date.getDate() + 1);\r\n\r\n prepareData(date).then(res => {\r\n setData(res);\r\n setLoading(false);\r\n });\r\n\r\n return date\r\n })\r\n };\r\n\r\n const subtractDateHandler = () => {\r\n setLoading(true);\r\n\r\n setInputDay((pre) => {\r\n let date = pre;\r\n date.setDate(date.getDate() - 1);\r\n\r\n prepareData(date).then(res => {\r\n setData(res);\r\n setLoading(false);\r\n });\r\n\r\n return date\r\n })\r\n };\r\n\r\n return (\r\n
\r\n {data && }\r\n
\r\n );\r\n\r\n};\r\n\r\nexport default EventsPassedComponentByDay;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { Box } from \"@material-ui/core\";\r\nimport { Editor } from '@tinymce/tinymce-react';\r\nimport CustomButton from \"../../../../../CustomButton/CustomButton\";\r\nimport './_landing_custom_tab.scss';\r\n\r\nconst LandingCustomTabForm = ({ defaultData, onSubmit, onClose }) => {\r\n const user = useSelector(state => state.user);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [title, setTitle] = useState(\"\");\r\n const [errorTitle, setErrorTitle] = useState(false);\r\n const [body, setBody] = useState(\"\");\r\n const [previewBody, setPreviewBody] = useState(\"\");\r\n\r\n useEffect(() => {\r\n if (defaultData && defaultData.hasOwnProperty('id')) {\r\n setTitle(defaultData.title)\r\n setBody(defaultData.text)\r\n setPreviewBody(defaultData.preview_body)\r\n }\r\n }, [defaultData])\r\n\r\n const handleSubmit = () => {\r\n let data = {\r\n type: 'custom',\r\n text: body,\r\n custom_fields: {\r\n title: title,\r\n preview_body: previewBody\r\n }\r\n }\r\n onSubmit(data, () => {\r\n onClose();\r\n }, () => {\r\n console.log(\"error!\");\r\n })\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
setTitle(e.target.value)}\r\n fullWidth\r\n margin=\"normal\"\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n />\r\n Preview body \r\n setPreviewBody(value)}\r\n init={{\r\n height: 300,\r\n directionality: 'ltr',\r\n menubar: false,\r\n plugins: [\r\n 'advlist autolink lists link image preview anchor',\r\n 'searchreplace visualblocks code fullscreen',\r\n 'media table paste code wordcount'\r\n ],\r\n toolbar:\r\n [\r\n 'bold italic forecolor | outdent indent | alignleft aligncenter alignright alignjustify | bullist numlist | visualblocks code',\r\n 'link image media menuTwitchBtn'\r\n ],\r\n setup: (editor) => {\r\n editor.ui.registry.addMenuButton('menuTwitchBtn', {\r\n text: 'Twitch',\r\n fetch: function (callback) {\r\n var items = [\r\n {\r\n type: 'menuitem',\r\n text: 'Insertar Vídeo',\r\n onAction: function (_) {\r\n editor.windowManager.open({\r\n title: 'Dirección web del video', // The dialog's title - displayed in the dialog header\r\n body: {\r\n type: 'panel',\r\n items: [\r\n {\r\n type: 'input',\r\n name: 'url',\r\n label: 'URL',\r\n placeholder: 'https://www.twitch.tv/videos/592577871'\r\n },\r\n ]\r\n },\r\n buttons: [\r\n {\r\n type: 'cancel',\r\n name: 'closeButton',\r\n text: 'Cancel'\r\n },\r\n {\r\n type: 'submit',\r\n name: 'submitButton',\r\n text: 'Insertar',\r\n primary: true\r\n }\r\n ],\r\n initialData: {\r\n url: '',\r\n },\r\n onSubmit: (api) => {\r\n let data = api.getData();\r\n let url = data.url.replace('https://', '').replace('www.', '');\r\n let match = url.match(/^twitch\\.tv\\/videos\\/([\\w-]+)(?:\\?t=([\\w-]+)|)/)\r\n if (match.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n }\r\n api.close();\r\n }\r\n });\r\n }\r\n },\r\n {\r\n type: 'menuitem',\r\n text: 'Insertar Clip',\r\n onAction: function (_) {\r\n editor.windowManager.open({\r\n title: 'Dirección web del clip', // The dialog's title - displayed in the dialog header\r\n body: {\r\n type: 'panel',\r\n items: [\r\n {\r\n type: 'input',\r\n name: 'url',\r\n label: 'URL',\r\n placeholder: 'https://www.twitch.tv/starwraith/clip/DeafGloriousChickpeaGrammarKing'\r\n },\r\n ]\r\n },\r\n buttons: [\r\n {\r\n type: 'cancel',\r\n name: 'closeButton',\r\n text: 'Cancel'\r\n },\r\n {\r\n type: 'submit',\r\n name: 'submitButton',\r\n text: 'Insertar',\r\n primary: true\r\n }\r\n ],\r\n initialData: {\r\n url: '',\r\n },\r\n onSubmit: (api) => {\r\n let data = api.getData();\r\n let url = data.url.replace('https://', '').replace('www.', '');\r\n let match = url.match(/^twitch\\.tv\\/([\\w-]+)\\/clip\\/([\\w-]+)/)\r\n if (match && match.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n } else {\r\n let newMatch = url.match(/^clips\\.twitch\\.tv\\/([\\w-]+)/)\r\n if (newMatch && newMatch.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n }\r\n }\r\n api.close();\r\n }\r\n });\r\n }\r\n },\r\n ];\r\n callback(items);\r\n }\r\n });\r\n },\r\n content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }',\r\n image_uploadtab: true,\r\n relative_urls: false,\r\n }}\r\n />\r\n \r\n Body \r\n setBody(value)}\r\n init={{\r\n height: 300,\r\n directionality: 'ltr',\r\n menubar: false,\r\n plugins: [\r\n 'advlist autolink lists link image preview anchor',\r\n 'searchreplace visualblocks code fullscreen',\r\n 'media table paste code wordcount'\r\n ],\r\n toolbar:\r\n [\r\n 'bold italic forecolor | outdent indent | alignleft aligncenter alignright alignjustify | bullist numlist | visualblocks code',\r\n 'link image media menuTwitchBtn'\r\n ],\r\n setup: (editor) => {\r\n editor.ui.registry.addMenuButton('menuTwitchBtn', {\r\n text: 'Twitch',\r\n fetch: function (callback) {\r\n var items = [\r\n {\r\n type: 'menuitem',\r\n text: 'Insertar Vídeo',\r\n onAction: function (_) {\r\n editor.windowManager.open({\r\n title: 'Dirección web del video', // The dialog's title - displayed in the dialog header\r\n body: {\r\n type: 'panel',\r\n items: [\r\n {\r\n type: 'input',\r\n name: 'url',\r\n label: 'URL',\r\n placeholder: 'https://www.twitch.tv/videos/592577871'\r\n },\r\n ]\r\n },\r\n buttons: [\r\n {\r\n type: 'cancel',\r\n name: 'closeButton',\r\n text: 'Cancel'\r\n },\r\n {\r\n type: 'submit',\r\n name: 'submitButton',\r\n text: 'Insertar',\r\n primary: true\r\n }\r\n ],\r\n initialData: {\r\n url: '',\r\n },\r\n onSubmit: (api) => {\r\n let data = api.getData();\r\n let url = data.url.replace('https://', '').replace('www.', '');\r\n let match = url.match(/^twitch\\.tv\\/videos\\/([\\w-]+)(?:\\?t=([\\w-]+)|)/)\r\n if (match.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n }\r\n api.close();\r\n }\r\n });\r\n }\r\n },\r\n {\r\n type: 'menuitem',\r\n text: 'Insertar Clip',\r\n onAction: function (_) {\r\n editor.windowManager.open({\r\n title: 'Dirección web del clip', // The dialog's title - displayed in the dialog header\r\n body: {\r\n type: 'panel',\r\n items: [\r\n {\r\n type: 'input',\r\n name: 'url',\r\n label: 'URL',\r\n placeholder: 'https://www.twitch.tv/starwraith/clip/DeafGloriousChickpeaGrammarKing'\r\n },\r\n ]\r\n },\r\n buttons: [\r\n {\r\n type: 'cancel',\r\n name: 'closeButton',\r\n text: 'Cancel'\r\n },\r\n {\r\n type: 'submit',\r\n name: 'submitButton',\r\n text: 'Insertar',\r\n primary: true\r\n }\r\n ],\r\n initialData: {\r\n url: '',\r\n },\r\n onSubmit: (api) => {\r\n let data = api.getData();\r\n let url = data.url.replace('https://', '').replace('www.', '');\r\n let match = url.match(/^twitch\\.tv\\/([\\w-]+)\\/clip\\/([\\w-]+)/)\r\n if (match && match.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n } else {\r\n let newMatch = url.match(/^clips\\.twitch\\.tv\\/([\\w-]+)/)\r\n if (newMatch && newMatch.length > 0) {\r\n editor.execCommand('mceInsertContent', false, '
' +\r\n '' +\r\n '
');\r\n }\r\n }\r\n api.close();\r\n }\r\n });\r\n }\r\n },\r\n ];\r\n callback(items);\r\n }\r\n });\r\n },\r\n content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }',\r\n image_uploadtab: true,\r\n relative_urls: false,\r\n }}\r\n />\r\n \r\n
\r\n Cancel \r\n {defaultData && defaultData.hasOwnProperty('id') ? \"Save changes\" : \"Add new\"} \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LandingCustomTabForm;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {Box, Grid} from \"@material-ui/core\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useHistory} from 'react-router-dom';\r\nimport \"./_landing_teams.scss\"\r\nimport LandingTeamItem from \"./LandingTeamItem\";\r\nimport services from \"../../../../../services\";\r\nimport {showSnackbar} from \"../../../../../store/snackbar/actions\";\r\n\r\nconst LandingTeamsComponent = ({userId, customClassName, customHeadingMessage, customTeamIds}) => {\r\n const dispatch = useDispatch();\r\n const user = useSelector(state => state.user);\r\n let teamIds = customTeamIds ? customTeamIds : [\r\n 'ae6d5576-474e-4b74-8ad9-dfe935519470',\r\n '4410cc89-840b-4fee-ba1e-9a8378065a42',\r\n '47c2415c-a945-4e31-bc7e-1d3aaa58117a', // guild\r\n '9a019670-b38b-45ea-a0a7-562436665878', // acend\r\n 'c4fee41d-5667-4b6b-af8a-f0092afede4a',\r\n 'a7ca550b-6c70-4d5f-b686-97012bdb1de0', // sentinels\r\n '5e3a2c57-f089-4e48-aa09-3ae6362ea08d',\r\n '9a9dc58c-4c20-4345-a0ae-7bbf2a2335ff', //team liquid\r\n 'c9890b87-5b3c-4df8-ab4b-978b708a6615', //gambit\r\n 'c4d87475-fd69-4c2b-9e4e-7af582225bc5', //fnatic\r\n '9f166ccf-f0cf-49dd-8c7a-a15f13735474', // smb\r\n '6c311de8-60fe-4385-a512-6050f27fa278', // koi\r\n ];\r\n if(userId === \"b8b5720c-5cd2-4638-9d51-b832b9443d34\") {\r\n teamIds = [\r\n \"ae6d5576-474e-4b74-8ad9-dfe935519470\",\r\n \"9a9dc58c-4c20-4345-a0ae-7bbf2a2335ff\",\r\n \"9a019670-b38b-45ea-a0a7-562436665878\",\r\n \"c9890b87-5b3c-4df8-ab4b-978b708a6615\",\r\n \"4410cc89-840b-4fee-ba1e-9a8378065a42\",\r\n \"c4d87475-fd69-4c2b-9e4e-7af582225bc5\",\r\n \"9858718c-b137-44f9-872b-6d15239e1ff8\",\r\n \"3d202d86-eb6c-464f-b407-7614c562f8ff\",\r\n \"49434168-8ea5-4b26-bf5a-4deb05ea02b3\",\r\n \"f724f5fd-3753-4f79-8c10-3cb6dc32c385\",\r\n \"6744c8dc-6f26-4306-a22d-821f05048dfe\",\r\n \"01139c58-7660-4eb6-b231-f7bb3537f078\",\r\n \"ed97a30b-bf97-49c2-8425-27ce16509bda\",\r\n \"6d6b5e67-2240-4510-9b26-c399adacae2f\",\r\n \"c05f5fce-aac6-4cd6-b127-86958a4155ce\",\r\n \"9f166ccf-f0cf-49dd-8c7a-a15f13735474\",\r\n\r\n ]\r\n }\r\n const {t} = useTranslation('landing');\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const valorantCategory = \"b9815deb-43a0-481d-8f7f-4c606fffc146\";\r\n const history = useHistory();\r\n const [teams, setTeams] = useState([]);\r\n\r\n const handleFollow = (needUserFollow, userMain, categoryId, onComplete, onError) => {\r\n if (user && user.hasOwnProperty('id')) {\r\n if (needUserFollow) {\r\n services.follow.create({\r\n userId: user.id,\r\n followingId: userMain\r\n })\r\n .then((resp) => {\r\n services.userSubCategory.remove(null, {\r\n query: {\r\n ownerId: userMain,\r\n categoryId: categoryId\r\n }\r\n }).then((res) => {\r\n if (onComplete) {\r\n onComplete()\r\n }\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n });\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n dispatch(showSnackbar({message: `Something went wrong!`, type: \"info\"}))\r\n })\r\n } else {\r\n services.userSubCategory.remove(null, {\r\n query: {\r\n ownerId: userMain,\r\n categoryId: categoryId\r\n }\r\n }).then((res) => {\r\n if (onComplete) {\r\n onComplete()\r\n }\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n })\r\n }\r\n } else {\r\n history.push('/login')\r\n dispatch(showSnackbar({message: `To do this you must be logged in.`, type: \"info\"}))\r\n }\r\n }\r\n\r\n const handleUnfollow = (userMain, categoryId, onComplete, onError) => {\r\n if (user && user.hasOwnProperty('id')) {\r\n services.userSubCategory.create({\r\n ownerId: userMain,\r\n categoryId: categoryId\r\n }).then((res) => {\r\n if (onComplete) {\r\n onComplete()\r\n }\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n })\r\n } else {\r\n history.push('/login')\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n services.users.find({\r\n query: {\r\n id: {\r\n $in: [...teamIds]\r\n },\r\n $limit: 20\r\n },\r\n\r\n }).then((res) => {\r\n if (user && user.hasOwnProperty('id')) {\r\n services.userCategories.find({\r\n query: {\r\n userId: {$in: [...teamIds]},\r\n categoryId: valorantCategory\r\n }\r\n }).then((res1) => {\r\n setTeams(prevState => {\r\n let teams_res = [];\r\n\r\n res.data.forEach((t) => {\r\n let categoryOwner = res1.find(x => x.ownerId === t.id);\r\n let isCategorySubscribed = categoryOwner && categoryOwner.is_subscribed;\r\n teams_res.push({\r\n ...t,\r\n isCategorySubscribed\r\n })\r\n });\r\n\r\n return teams_res;\r\n });\r\n });\r\n } else {\r\n setTeams(res.data);\r\n }\r\n });\r\n }, [userId])\r\n\r\n return (\r\n
\r\n \r\n {t('teams')} \r\n \r\n \r\n \r\n \r\n {customHeadingMessage ? customHeadingMessage : t('teams_text1')} \r\n {t('teams_text2')} \r\n \r\n \r\n {(teams && teams.length > 0) &&\r\n teams.map(team => )}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LandingTeamsComponent;\r\n","import React from 'react';\r\nimport {Box, Grid} from \"@material-ui/core\";\r\nimport LandingUpcomingEvents from \"../../../LandingCover/sections/LandingLiveScores/LandingUpcomingEvents\";\r\nimport LandingLiveScores from \"../../../LandingCover/sections/LandingLiveScores/LandingLiveScores\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {Event} from \"../../../../../services/tracking\";\r\nimport LandingTeamsComponent from \"../LandingTeamsComponent/LandingTeamsComponent\";\r\n\r\nimport headerChampions from \"../../../../../assets/landings/champions2021.jpg\";\r\n\r\n\r\nconst componentName = \"InjectValorantChampionSpecial\";\r\n\r\nconst InjectValorantChampionSpecial = ({\r\n userId,\r\n changeTab,\r\n onOpenPlayer\r\n }) => {\r\n const {t} = useTranslation('landing');\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const handleOpenAgenda = () => {\r\n changeTab(null, t(\"agenda\"));\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n const handleOpenPlayer = (playerId) => {\r\n onOpenPlayer(playerId);\r\n changeTab(null, t(\"live_now\"));\r\n window.scrollTo(0, 0)\r\n Event(componentName, \"OpenPlayer\", playerId);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"upcoming_matches\")}
\r\n \r\n \r\n \r\n \r\n
{t(\"last_scores\")}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default InjectValorantChampionSpecial;\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {useSelector} from \"react-redux\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport './fragments/_landing_custom_tab.scss';\r\nimport {Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle} from \"@material-ui/core\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport Modal from \"../../../../Modal/Modal\";\r\nimport LandingCustomTabForm from \"./fragments/LandingCustomTabForm\";\r\nimport services from \"../../../../../services\";\r\nimport InjectValorantChampionSpecial from \"./InjectValorantChampionSpecial\";\r\n\r\nconst HtmlToReactParser = require('html-to-react').Parser\r\n\r\nconst htmlToReactParser = new HtmlToReactParser()\r\n\r\nconst LandingCustomTabComponent = ({userId, handleRefreshTabs, changeTab, onOpenPlayer, customTab, allowRemove, onClickDeleteButton}) => {\r\n const [customTabOpened, setCustomTabOpened] = useState(customTab);\r\n const {t} = useTranslation(['settings']);\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [openEditDialog, setOpenEditDialog] = useState(false);\r\n const [showDialog, setShowDialog] = useState(false);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [reactBodyElement, setReactBodyElement] = useState(htmlToReactParser.parse(customTab.hasOwnProperty('text') ? customTab.text.replace(/\\n/g, \"\")\r\n .replace(/[\\t ]+\\[\\t ]+\\<\")\r\n .replace(/\\>[\\t ]+$/g, \">\") : ''))\r\n useEffect(() => {\r\n setCustomTabOpened(customTab);\r\n setReactBodyElement(htmlToReactParser.parse(customTab.hasOwnProperty('text') ? customTab.text.replace(/\\n/g, \"\")\r\n .replace(/[\\t ]+\\[\\t ]+\\<\")\r\n .replace(/\\>[\\t ]+$/g, \">\") : ''))\r\n }, [customTab])\r\n\r\n const handleEdit = () => {\r\n setOpenEditDialog(true)\r\n }\r\n\r\n const onSubmitEdit = (data) => {\r\n services.landingFeed.patch(customTabOpened.id, {...data, roomId: customTabOpened.roomId}).then(res => {\r\n setReactBodyElement(htmlToReactParser.parse(res.text))\r\n setOpenEditDialog(false);\r\n handleRefreshTabs();\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n\r\n return (\r\n
\r\n {allowRemove &&\r\n
\r\n handleEdit(customTabOpened.id)}> \r\n setShowDialog(true)}> \r\n
\r\n }\r\n {customTabOpened.id === \"c9df70b8-2222-4e5f-a76e-0a0d681904aa\" && (\r\n
\r\n )}\r\n
\r\n {reactBodyElement}\r\n
\r\n {allowRemove && (\r\n <>\r\n
setShowDialog(false)}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n Atención \r\n \r\n \r\n Estás a punto de borrar una página de forma permanente, estás seguro de continuar?\r\n \r\n \r\n \r\n setShowDialog(false)} color=\"primary\">\r\n {t('advanced_deactivate_account_dialog_erase_event_cancel_btn')}\r\n \r\n {\r\n onClickDeleteButton(customTabOpened.id);\r\n setShowDialog(false);\r\n }} color=\"primary\" autoFocus>\r\n Sí, quiero continuar\r\n \r\n \r\n \r\n
setOpenEditDialog(false)}>\r\n setOpenEditDialog(false)}/>\r\n \r\n >\r\n )}\r\n
\r\n );\r\n }\r\n;\r\n\r\nexport default LandingCustomTabComponent;\r\n","import React from 'react';\r\nimport {Box, TextareaAutosize} from \"@material-ui/core\";\r\nimport {useSelector} from \"react-redux\";\r\n\r\nconst FeedbackTextareaInput = ({label, value, answer, onChange}) => {\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n return
\r\n {label} \r\n \r\n {\r\n onChange(answer, event.target.value)\r\n }}\r\n required\r\n />\r\n \r\n
\r\n};\r\n\r\nexport default FeedbackTextareaInput;\r\n","import {Checkbox} from \"@material-ui/core\";\r\nimport {IndeterminateCheckBox} from \"@material-ui/icons\";\r\nimport React from \"react\";\r\n\r\nconst FeedbackCheckboxInput = ({label, value, answer, onChange}) => {\r\n return
\r\n
{label} \r\n
\r\n }\r\n onChange={(event, newValue) => {\r\n onChange(answer, newValue)\r\n }}/>\r\n {value && Sí }\r\n {!value && No }\r\n
\r\n
\r\n};\r\n\r\nexport default FeedbackCheckboxInput;\r\n","import {useSelector} from \"react-redux\";\r\nimport {Rating} from \"@material-ui/lab\";\r\nimport {Star} from \"@material-ui/icons\";\r\nimport React from \"react\";\r\n\r\n\r\nconst FeedbackStarsInput = ({label, value, answer, onChange}) => {\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n return
\r\n
{label} \r\n
\r\n }\r\n onChange={(event, newValue) => {\r\n onChange(answer, newValue)\r\n }}\r\n />\r\n
\r\n
\r\n};\r\n\r\nexport default FeedbackStarsInput;\r\n","import React, {useState} from 'react';\r\nimport {Box, Button, Container, Drawer} from \"@material-ui/core\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport {Alert} from \"@material-ui/lab\";\r\nimport \"./_feedback_form.scss\"\r\nimport services from \"../../../../../services\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport FeedbackTextareaInput from \"./FeedbackTextareaInput\";\r\nimport FeedbackCheckboxInput from \"./FeedbackCheckboxInput\";\r\nimport FeedbackStarsInput from \"./FeedbackStarsInput\";\r\n\r\nconst FeedbackForm = ({open, onClose}) => {\r\n const {t} = useTranslation('feedbackForm');\r\n const deviceView = useSelector(state => state.deviceView);\r\n\r\n const [errorCreate, setErrorCreate] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('')\r\n const [successCreate, setSuccessCreate] = useState(false);\r\n\r\n const [answerFirst, setAnswerFirst] = useState('');\r\n const [answerSecond, setAnswerSecond] = useState('');\r\n const [answerThird, setAnswerThird] = useState('');\r\n const [answerFourth, setAnswerFourth] = useState('');\r\n const [answerFifth, setAnswerFifth] = useState('');\r\n\r\n const formItems = [\r\n {\"type\": \"textarea\", \"label\": t('first_question'), \"value\": answerFirst, \"answer\": 'answer_first'},\r\n {\"type\": \"textarea\", \"label\": t('second_question'), \"value\": answerSecond, \"answer\": 'answer_second'},\r\n {\"type\": \"textarea\", \"label\": t('third_question'), \"value\": answerThird, \"answer\": 'answer_third'},\r\n {\"type\": \"textarea\", \"label\": t('fourth_question'), \"value\": answerFourth, \"answer\": 'answer_fourth'},\r\n {\"type\": \"textarea\", \"label\": t('fifth_question'), \"value\": answerFifth, \"answer\": 'answer_fifth'},\r\n ]\r\n\r\n const answersDict = {\r\n 'answer_first': t('first_question_literal'),\r\n 'answer_second': t('second_question_literal'),\r\n 'answer_third': t('third_question_literal'),\r\n 'answer_fourth': t('fourth_question_literal'),\r\n 'answer_fifth': t('fifth_question_literal'),\r\n };\r\n\r\n const onSubmitModal = (event) => {\r\n event.preventDefault();\r\n\r\n let sendForm = {\r\n answer_first: answerFirst,\r\n answer_second: answerSecond,\r\n answer_third: answerThird,\r\n answer_fourth: answerFourth,\r\n answer_fifth: answerFifth,\r\n };\r\n\r\n if (sendForm['answer_first'] === '') {\r\n sendForm['answer_first'] = null;\r\n }\r\n if (sendForm['answer_second'] === '') {\r\n sendForm['answer_second'] = null;\r\n }\r\n if (sendForm['answer_third'] === '') {\r\n sendForm['answer_third'] = null;\r\n }\r\n if (sendForm['answer_fourth'] === '') {\r\n sendForm['answer_fourth'] = null;\r\n }\r\n if (sendForm['answer_fifth'] === '') {\r\n sendForm['answer_fifth'] = null;\r\n }\r\n\r\n services.landingFeedback.create(sendForm).then(res => {\r\n setSuccessCreate(true);\r\n setErrorCreate(false);\r\n }).catch(err => {\r\n console.error(err);\r\n if (err.hasOwnProperty('code') && err.code === 400) {\r\n if (err.message.match(/^Field (\\w+) is null\\. \\(required\\)$/)) {\r\n let match = err.message.match(/^Field (\\w+) is null\\. \\(required\\)$/)[1];\r\n setErrorMessage(`${t('required_pre')}${answersDict[match]}${t('required_post')}`)\r\n } else {\r\n setErrorMessage(t('error-already-send'));\r\n }\r\n } else {\r\n setErrorMessage(t('other-error'));\r\n }\r\n setErrorCreate(true);\r\n setSuccessCreate(false);\r\n })\r\n };\r\n\r\n const changeFormValue = (index, newValue) => {\r\n switch (index) {\r\n case 'answer_first':\r\n setAnswerFirst(newValue);\r\n break;\r\n case 'answer_second':\r\n setAnswerSecond(newValue);\r\n break;\r\n case 'answer_third':\r\n setAnswerThird(newValue);\r\n break;\r\n case 'answer_fourth':\r\n setAnswerFourth(newValue);\r\n break;\r\n case 'answer_fifth':\r\n setAnswerFifth(newValue);\r\n break;\r\n }\r\n };\r\n\r\n return
\r\n \r\n \r\n};\r\n\r\nexport default FeedbackForm;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport services from '../../../../services';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { MentionsInput, Mention } from 'react-mentions'\r\nimport Picker from 'emoji-picker-react';\r\nimport { showSnackbar } from \"../../../../store/snackbar/actions\";\r\nimport Portal from \"@material-ui/core/Portal\";\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\n\r\nconst ChatInputForm = (props) => {\r\n const dispatch = useDispatch();\r\n const { user, event } = props;\r\n const [loading, setLoading] = useState(false);\r\n const [text, setText] = useState(\"\");\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const { t } = useTranslation('extraData');\r\n const elSuggestionsRef = useRef(null);\r\n const timer = useRef(null);\r\n const [showEmojis, setShowEmojis] = useState(false);\r\n const container = React.useRef(null);\r\n\r\n const onEmojiClick = (event, emojiObject) => {\r\n setText(text + emojiObject.emoji)\r\n setShowEmojis(false);\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n if(timer.current) {\r\n clearTimeout(timer.current)\r\n }\r\n }\r\n }, [])\r\n\r\n const handleSubmit = () => {\r\n if (user && user.hasOwnProperty('id')) {\r\n const params = { text: text };\r\n if (text) {\r\n if (text.length > 255) {\r\n dispatch(showSnackbar({ message: t(\"extraData:input_max_length_255\"), type: \"error\" }))\r\n } else {\r\n if(text.trim().length > 0) {\r\n props.onSubmit(params);\r\n setText(\"\");\r\n }\r\n }\r\n }\r\n } else {\r\n dispatch(showSnackbar({ message: \"you need to login in order to perfom this action\", type: \"error\" }))\r\n }\r\n };\r\n\r\n const handleKeyDown = (event) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n handleSubmit()\r\n }\r\n };\r\n\r\n const queryMentions = (query, callback) => {\r\n if (!query) return;\r\n if(timer.current) clearTimeout(timer.current);\r\n setLoading(true);\r\n timer.current = setTimeout(() => doQueryMentions(query, callback), 500);\r\n };\r\n\r\n const doQueryMentions = (query, callback) => {\r\n services.search.find({\r\n query: {\r\n text: query,\r\n users: true\r\n }\r\n })\r\n .then((res) => {\r\n setLoading(false);\r\n return res.map(user => ({\r\n id: user.slug,\r\n display: `${user.nickname} (@${user.slug})`,\r\n }))\r\n } ).then(callback)\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n setText(e.target.value)}\r\n placeholder={t('placeholder_send_message')}\r\n suggestionsPortalHost={elSuggestionsRef ? elSuggestionsRef.current : null}\r\n >\r\n `@${username}`}\r\n trigger=\"@\"\r\n isLoading={loading}\r\n data={queryMentions}\r\n appendSpaceOnAdd\r\n style={(darkTheme ? {\r\n borderBottomColor: 'white',\r\n borderBottomWidth: 1.0,\r\n color: 'white',\r\n fontWeight: 'bold'\r\n } : {\r\n borderBottomColor: 'black',\r\n borderBottomWidth: 1.0,\r\n color: 'black',\r\n fontWeight: 'bold'\r\n })}\r\n />\r\n \r\n \r\n \r\n setShowEmojis(!showEmojis)}>\r\n {String.fromCodePoint(0x1f60a)}\r\n \r\n \r\n \r\n \r\n
\r\n {showEmojis ? (\r\n
\r\n ) : null}\r\n >\r\n )\r\n}\r\n\r\nexport default ChatInputForm;\r\n","import React, {useEffect, useMemo, useRef, useState} from 'react';\r\nimport {format, isToday} from 'date-fns'\r\nimport ChatInputForm from \"./ChatInputForm\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport services from \"../../../../services\";\r\nimport {addRoomMessage, editRoomMessage, setRoomMessages} from \"../../../../store/rooms/actions\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport {Link} from \"react-router-dom\";\r\nimport {showSnackbar} from \"../../../../store/snackbar/actions\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport ScrollToBottom, {useScrollToBottom, useSticky} from 'react-scroll-to-bottom';\r\nimport BlockIcon from '@material-ui/icons/Block';\r\nimport HistoryIcon from '@material-ui/icons/History';\r\nimport {CircularProgress} from \"@material-ui/core\";\r\n\r\nconst MessageItem = ({id, user, text, createdAt, censored}) => {\r\n const [loading, setLoading] = useState(false);\r\n const authUser = useSelector(state => state.user);\r\n const [isAdmin, setAdmin] = useState((authUser && authUser.hasOwnProperty('roles') && authUser.roles.includes('admin')));\r\n\r\n useEffect(() => {\r\n setAdmin((authUser && authUser.hasOwnProperty('roles') && authUser.roles.includes('admin')))\r\n }, [authUser]);\r\n\r\n useEffect(() => {\r\n setLoading(false);\r\n }, [censored]);\r\n\r\n const handleMentions = (text) => {\r\n // convert to link\r\n const reg = /(http:\\/\\/|https:\\/\\/)((\\w|=|\\?|\\.|\\/|&|-)+)/g;\r\n text = text.replace(reg, \"
$1$2 \");\r\n // convert mentions to link\r\n text = text.replace(/@\\[(.*?)\\]\\((.*?)\\)/gi, '');\r\n return text;\r\n };\r\n\r\n const toggleCensorMessage = () => {\r\n setLoading(true);\r\n services.landingChat.patch(id, {\r\n censored: !censored\r\n })\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {isToday(new Date(createdAt)) ? format(new Date(createdAt), 'HH:mm') : format(new Date(createdAt), 'dd/MM')}\r\n
\r\n
\r\n {user.nickname}{user.account_verified &&\r\n }: \r\n {censored && [El mensaje ha sido moderado] }\r\n {!censored && }\r\n
\r\n {isAdmin && (\r\n
\r\n {loading && }\r\n {(!loading && !censored) &&\r\n }\r\n {(!loading && censored) &&\r\n }\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n};\r\n\r\nconst Content = ({userID}) => {\r\n const room = useSelector(state => state.rooms.hasOwnProperty(userID) ? state.rooms[userID] : [])\r\n const scrollToBottom = useScrollToBottom();\r\n const [sticky] = useSticky();\r\n\r\n const RenderMessages = useMemo(() => room.map((message) =>
), [room])\r\n\r\n return (\r\n
\r\n {RenderMessages}\r\n \r\n );\r\n};\r\n\r\nconst LandingChat = ({userId}) => {\r\n const dispatch = useDispatch();\r\n const user = useSelector(state => state.user);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const [loadingChat, setLoadingChat] = useState(true);\r\n\r\n const handleChatMessage = (query) => {\r\n services.landingChat.create({\r\n roomId: userId,\r\n text: query.text\r\n }).then(() => {\r\n // success\r\n }).catch((err) => {\r\n dispatch(showSnackbar({message: err.message, type: \"error\"}));\r\n });\r\n }\r\n\r\n const handleNewMessage = (data) => {\r\n if (data.roomId === userId) {\r\n dispatch(addRoomMessage(data));\r\n }\r\n };\r\n\r\n const handlePatchMessage = (data) => {\r\n if (data.roomId === userId) {\r\n dispatch(editRoomMessage(userId, data.id, data))\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setLoadingChat(true);\r\n services.landingChat.on('created', handleNewMessage);\r\n services.landingChat.on('patched', handlePatchMessage);\r\n services.landingChat.find({\r\n query: {\r\n roomId: userId,\r\n $sort: {\r\n createdAt: -1\r\n },\r\n $limit: 60\r\n }\r\n }).then((res) => {\r\n dispatch(setRoomMessages(userId, res.data.reverse()));\r\n return services.rooms.create({\r\n roomId: userId\r\n }).then(() => {\r\n setLoadingChat(false);\r\n });\r\n }).catch((err) => {\r\n console.log('ERROR LOADING CHAT')\r\n });\r\n return () => {\r\n services.landingChat.removeListener('created', handleNewMessage)\r\n services.landingChat.removeListener('patched', handlePatchMessage)\r\n }\r\n }, [userId]);\r\n\r\n return (\r\n
\r\n
\r\n {loadingChat && }\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LandingChat;\r\n","export const setRoomMessages = (roomId, data) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'SET_ROOM_MESSAGES',\r\n payload: {\r\n roomId: roomId,\r\n messages: data\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const addRoomMessage = (data) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'ADD_ROOM_MESSAGE',\r\n payload: {\r\n roomId: data.roomId,\r\n message: data\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const editRoomMessage = (roomId, messageId, data) => {\r\n return dispatch => {\r\n dispatch({\r\n type: 'EDIT_ROOM_MESSAGE',\r\n payload: {\r\n roomId: roomId,\r\n messageId: messageId,\r\n message: data\r\n }\r\n })\r\n }\r\n};\r\n","import React, {useState} from 'react';\r\nimport {\r\n Box,\r\n Card,\r\n CardActionArea,\r\n CardActions,\r\n CardContent,\r\n Grid,\r\n IconButton, Paper\r\n} from \"@material-ui/core\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport InstagramIcon from '@material-ui/icons/Instagram';\r\nimport FacebookIcon from '@material-ui/icons/Facebook';\r\nimport YouTubeIcon from '@material-ui/icons/YouTube';\r\nimport TwitterIcon from '@material-ui/icons/Twitter';\r\nimport twitchLightIcon from '../../../../../assets/icons/actions/twitch-white.svg';\r\nimport twitchDarkIcon from '../../../../../assets/icons/actions/twitch-dark.svg';\r\nimport {useSelector} from \"react-redux\";\r\nimport \"./_landing_participants.scss\"\r\n\r\nconst LandingParticipantsComponent = ({userId}) => {\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [tortillaLandData, setTortillaLandData] = useState(\r\n [\r\n {\r\n \"name\": \"Ibai\",\r\n \"twitter\": \"https://twitter.com/IbaiLlanos\",\r\n \"twitch\": \"https://www.twitch.tv/ibai\",\r\n \"youtube\": \"https://www.youtube.com/channel/UCaY_-ksFSQtTGk0y1HA_3YQ\",\r\n \"instagram\": \"https://www.instagram.com/ibaillanos/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/ibai.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Auron\",\r\n \"twitter\": \"https://twitter.com/auronplay\",\r\n \"twitch\": \"https://www.twitch.tv/AuronPlay\",\r\n \"youtube\": \"https://www.youtube.com/user/AuronPlay\",\r\n \"instagram\": \"https://www.instagram.com/auronplay/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/AuronPlay.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Rubius\",\r\n \"twitter\": \"https://twitter.com/Rubiu5\",\r\n \"twitch\": \"https://www.twitch.tv/Rubius\",\r\n \"youtube\": \"https://www.youtube.com/c/elrubiusOMG\",\r\n \"instagram\": \"https://www.instagram.com/elrubiuswtf/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/Rubius.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"TheGrefg\",\r\n \"twitter\": \"https://twitter.com/TheGrefg\",\r\n \"twitch\": \"https://www.twitch.tv/thegrefg\",\r\n \"youtube\": \"https://www.youtube.com/user/TheGrefg\",\r\n \"instagram\": \"https://www.instagram.com/grefg_official/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/thegrefg.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Cristinini\",\r\n \"twitter\": \"https://twitter.com/IamCristinini\",\r\n \"twitch\": \"https://www.twitch.tv/iamcristinini\",\r\n \"youtube\": \"https://www.youtube.com/c/Cristinini\",\r\n \"instagram\": \"https://www.instagram.com/iamcristinini/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/iamcristinini.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Luzu\",\r\n \"twitter\": \"https://twitter.com/LuzuGames\",\r\n \"twitch\": \"https://www.twitch.tv/luzu\",\r\n \"youtube\": \"https://www.youtube.com/user/luzugames\",\r\n \"instagram\": \"https://www.instagram.com/luzu/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/luzu.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Mister Jagger\",\r\n \"twitter\": \"https://twitter.com/MisterJagger_\",\r\n \"twitch\": \"https://www.twitch.tv/jaggerprincesa\",\r\n \"youtube\": \"https://www.youtube.com/user/themisterjagger\",\r\n \"instagram\": \"https://www.instagram.com/mister_jagger/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/jaggerprincesa.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Jacky\",\r\n \"twitter\": \"https://twitter.com/CooLifeGame\",\r\n \"twitch\": \"https://www.twitch.tv/coolifegame\",\r\n \"youtube\": \"https://www.youtube.com/user/CooLifeGame\",\r\n \"instagram\": \"https://www.instagram.com/reybronza/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/coolifegame.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"MenosTrece\",\r\n \"twitter\": \"https://twitter.com/menos_trece\",\r\n \"twitch\": \"https://www.twitch.tv/menostrece\",\r\n \"youtube\": \"https://www.youtube.com/user/MenosTreceYT\",\r\n \"instagram\": \"https://www.instagram.com/menos_trece/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/menostrece.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Lolito\",\r\n \"twitter\": \"https://twitter.com/LOLiTOFDEZ\",\r\n \"twitch\": \"\",\r\n \"youtube\": \"https://www.youtube.com/user/LOLiTOBRO\",\r\n \"instagram\": \"https://www.instagram.com/lowlito/\",\r\n \"facebook\": \"https://fb.gg/lolitofdez\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/lolitofdez.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Zorman\",\r\n \"twitter\": \"https://twitter.com/ZormanVideos\",\r\n \"twitch\": \"https://www.twitch.tv/zormanworld\",\r\n \"youtube\": \"https://www.youtube.com/user/senorterror\",\r\n \"instagram\": \"https://www.instagram.com/zormanyeh/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/zormanworld.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Folagor\",\r\n \"twitter\": \"https://twitter.com/FolagoR\",\r\n \"twitch\": \"https://www.twitch.tv/folagorlives\",\r\n \"youtube\": \"https://www.youtube.com/c/Folagor03\",\r\n \"instagram\": \"https://www.instagram.com/yoel__ramirez/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/folagorlives.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Fargan\",\r\n \"twitter\": \"https://twitter.com/xFaRgAnx\",\r\n \"twitch\": \"\",\r\n \"youtube\": \"https://www.youtube.com/user/xFaRgAnx\",\r\n \"instagram\": \"https://www.instagram.com/xfarganx_/\",\r\n \"facebook\": \"https://fb.gg/farganfb\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/farganfb.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Perxitaa\",\r\n \"twitter\": \"https://twitter.com/Perxitaa\",\r\n \"twitch\": \"https://www.twitch.tv/perxitaa\",\r\n \"youtube\": \"https://www.youtube.com/user/perxitaa\",\r\n \"instagram\": \"https://www.instagram.com/perxitaa/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/perxitaa.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Karchez\",\r\n \"twitter\": \"https://twitter.com/Karchezzz\",\r\n \"twitch\": \"https://www.twitch.tv/karchez\",\r\n \"youtube\": \"https://www.youtube.com/c/karchez\",\r\n \"instagram\": \"https://www.instagram.com/karchezz/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/karchez.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Juan Garnizo\",\r\n \"twitter\": \"https://twitter.com/JuanSGuarnizo\",\r\n \"twitch\": \"https://www.twitch.tv/juansguarnizo\",\r\n \"youtube\": \"https://www.youtube.com/c/JuanSGuarnizo\",\r\n \"instagram\": \"https://www.instagram.com/juansguarnizo/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/juansguarnizo.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Genesis\",\r\n \"twitter\": \"https://twitter.com/GenesisGtv\",\r\n \"twitch\": \"https://www.twitch.tv/gtv_genesis\",\r\n \"youtube\": \"\",\r\n \"instagram\": \"https://www.instagram.com/genesisgtv/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/gtv_genesis.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Carola\",\r\n \"twitter\": \"https://twitter.com/TheCarolos\",\r\n \"twitch\": \"https://www.twitch.tv/carola\",\r\n \"youtube\": \"https://www.youtube.com/channel/UCdhcvooVFqcc2eQUwM38J3Q\",\r\n \"instagram\": \"https://www.instagram.com/thecarolos/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/carola.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Biyin\",\r\n \"twitter\": \"https://twitter.com/_biyin_\",\r\n \"twitch\": \"https://www.twitch.tv/biyin_\",\r\n \"youtube\": \"https://www.youtube.com/channel/UC4oYV_hjH0XhMl7thB_jZhQ\",\r\n \"instagram\": \"https://www.instagram.com/_bjean_/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/biyin_.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Axozer\",\r\n \"twitter\": \"https://twitter.com/aXoZerr\",\r\n \"twitch\": \"https://www.twitch.tv/axozer\",\r\n \"youtube\": \"https://www.youtube.com/c/aXoZer\",\r\n \"instagram\": \"https://www.instagram.com/aXoZerr/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/axozer.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Arigameplays\",\r\n \"twitter\": \"https://twitter.com/arigameplays\",\r\n \"twitch\": \"\",\r\n \"youtube\": \"https://www.youtube.com/arigameplays\",\r\n \"instagram\": \"https://www.instagram.com/arigameplays/\",\r\n \"facebook\": \"https://fb.gg/arigameplays\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/arigameplays.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Betra\",\r\n \"twitter\": \"https://twitter.com/FranCiancioci\",\r\n \"twitch\": \"https://www.twitch.tv/betra\",\r\n \"youtube\": \"\",\r\n \"instagram\": \"https://www.instagram.com/franciancioci/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/betra.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Deqiuv\",\r\n \"twitter\": \"https://twitter.com/DeqiuV\",\r\n \"twitch\": \"https://www.twitch.tv/deqiuv\",\r\n \"youtube\": \"https://www.youtube.com/c/DeqiuV\",\r\n \"instagram\": \"https://www.instagram.com/deqiuv/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/deqiuv.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Laura Escanes\",\r\n \"twitter\": \"https://twitter.com/LauraEscanes\",\r\n \"twitch\": \"https://www.twitch.tv/lauraescanes\",\r\n \"youtube\": \"https://www.youtube.com/lauraescanes\",\r\n \"instagram\": \"https://www.instagram.com/lauraescanes/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/lauraescanes.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Momon\",\r\n \"twitter\": \"https://twitter.com/MomonKun_\",\r\n \"twitch\": \"https://www.twitch.tv/momonkunn\",\r\n \"youtube\": \"https://www.youtube.com/c/MomonKun\",\r\n \"instagram\": \"https://www.instagram.com/momonkunlive/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/momonkunn.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Nia Lakshart\",\r\n \"twitter\": \"https://twitter.com/LakshartNia\",\r\n \"twitch\": \"https://www.twitch.tv/lakshartnia\",\r\n \"youtube\": \"https://www.youtube.com/user/LakshartNia\",\r\n \"instagram\": \"https://www.instagram.com/lakshartniayt/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/lakshartnia.jpg\",\r\n \"nombre real\": \"\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Paracetamor\",\r\n \"twitter\": \"https://twitter.com/paracetamor\",\r\n \"twitch\": \"https://www.twitch.tv/paracetamor\",\r\n \"youtube\": \"https://www.youtube.com/paracetamor\",\r\n \"instagram\": \"https://www.instagram.com/_paracetamor/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/paracetamor.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Pato\",\r\n \"twitter\": \"https://twitter.com/PatodeAqualand\",\r\n \"twitch\": \"https://www.twitch.tv/patodeaqualand\",\r\n \"youtube\": \"https://www.youtube.com/c/DvdcdzGames\",\r\n \"instagram\": \"https://www.instagram.com/patodeaqualand/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/patodeaqualand.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Xthefocusx\",\r\n \"twitter\": \"https://twitter.com/xTheFocuSx\",\r\n \"twitch\": \"https://www.twitch.tv/xxxthefocusxxx\",\r\n \"youtube\": \"https://www.youtube.com/c/xTheFocuSx\",\r\n \"instagram\": \"\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/xxxthefocusxxx.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Tanizen\",\r\n \"twitter\": \"https://twitter.com/TanizeN\",\r\n \"twitch\": \"https://www.twitch.tv/tanizen\",\r\n \"youtube\": \"https://www.youtube.com/c/TanizenTV\",\r\n \"instagram\": \"https://www.instagram.com/tanizen/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/tanizen.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Mayichi\",\r\n \"twitter\": \"https://twitter.com/Mayichii\",\r\n \"twitch\": \"https://www.twitch.tv/mayichi\",\r\n \"youtube\": \"https://www.youtube.com/c/Mayichi\",\r\n \"instagram\": \"https://www.instagram.com/mayichiii/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/mayichi.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Violeta G\",\r\n \"twitter\": \"https://twitter.com/soyvioletag\",\r\n \"twitch\": \"https://www.twitch.tv/violetag\",\r\n \"youtube\": \"https://www.youtube.com/c/SuperVioletaGamerYT\",\r\n \"instagram\": \"https://www.instagram.com/soyvioletag/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/violetag.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Gemita\",\r\n \"twitter\": \"https://twitter.com/gema327\",\r\n \"twitch\": \"https://www.twitch.tv/gemita\",\r\n \"youtube\": \"\",\r\n \"instagram\": \"https://www.instagram.com/gemita327/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/gemita.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Pol\",\r\n \"twitter\": \"https://twitter.com/polispol\",\r\n \"twitch\": \"https://www.twitch.tv/polmanzan\",\r\n \"youtube\": \"https://www.youtube.com/channel/UCISR0iuscKPmi57GndEyElA\",\r\n \"instagram\": \"https://www.instagram.com/polispol/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/polmanzan.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Josecristo\",\r\n \"twitter\": \"https://twitter.com/Jos3cristo\",\r\n \"twitch\": \"https://www.twitch.tv/josecristo_\",\r\n \"youtube\": \"https://www.youtube.com/channel/UCgGTOiKZUqiCCEWRHaQ-KuQ\",\r\n \"instagram\": \"https://www.instagram.com/_josecristo_/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/josecristo_.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Ampeterby7\",\r\n \"twitter\": \"https://twitter.com/Ampeterby7\",\r\n \"twitch\": \"https://www.twitch.tv/ampeterby7\",\r\n \"youtube\": \"https://www.youtube.com/ampeterby7\",\r\n \"instagram\": \"https://www.instagram.com/ampeterby7_/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/ampeterby7.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"Komanche\",\r\n \"twitter\": \"https://twitter.com/komanch\",\r\n \"twitch\": \"https://www.twitch.tv/komanche\",\r\n \"youtube\": \"https://www.youtube.com/c/Komanche\",\r\n \"instagram\": \"https://www.instagram.com/elkomanche/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/komanche.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n {\r\n \"name\": \"D3stri\",\r\n \"twitter\": \"https://twitter.com/D3strii\",\r\n \"twitch\": \"https://www.twitch.tv/d3stri\",\r\n \"youtube\": \"https://www.youtube.com/c/D3stri\",\r\n \"instagram\": \"https://www.instagram.com/d3strii/\",\r\n \"facebook\": \"\",\r\n \"picture\": \"https://cdn-01.latencyapp.com/static-tortillaland-resources/d3stri.jpg\",\r\n \"latency_id\": \"\"\r\n },\r\n ]\r\n );\r\n\r\n if (userId !== '4e42510f-afd8-4f3b-b072-32ad4fc9cf19') { //check is tortillaland\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {tortillaLandData.map((x, i) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {x.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {x.twitch &&\r\n \r\n \r\n {darkTheme &&\r\n \r\n }\r\n {!darkTheme &&\r\n \r\n }\r\n \r\n \r\n }\r\n {x.facebook &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n {x.twitter &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n {x.youtube &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n {x.instagram &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n )} \r\n \r\n );\r\n};\r\n\r\n\r\nexport default LandingParticipantsComponent;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useLocation, useHistory} from \"react-router-dom\";\r\nimport {matchPath} from \"react-router\";\r\nimport {getUserProfile} from \"../../../store/user/actions\";\r\nimport {removeProfile} from \"../../../store/app/actions\";\r\nimport {Box, Tab, Tabs} from \"@material-ui/core\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport LandingCoverComponent from \"../LandingCover/LandingCoverComponent\";\r\nimport ProfileAgenda from \"../../Profile/ProfileAgenda/ProfileAgenda\";\r\nimport LandingMainTabLiveNow from \"./fragments/LiveNowComponent/LandingMainTabLiveNow\";\r\nimport './_landing_main.scss';\r\nimport LandingHeader from \"./fragments/Header/LandingHeader\";\r\nimport LandingFeedComponent from \"./fragments/LandingFeedComponent/LandingFeedComponent\";\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport services from \"../../../services\";\r\nimport LandingHighlightsComponent from \"./fragments/LandingHighlightsComponent/LandingHighlightsComponent\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport DragScrollProvider from 'drag-scroll-provider'\r\nimport EventsPassedComponentByDay from \"./fragments/EventsPassedComponent/LandingEventsPassedByDayComponent\";\r\nimport LandingCustomTabComponent from \"./fragments/LandingCustomTabComponent/LandingCustomTabComponent\";\r\nimport {TwitchChat} from \"react-twitch-embed\";\r\nimport LandingCustomTabForm from \"./fragments/LandingCustomTabComponent/fragments/LandingCustomTabForm\";\r\nimport FeedbackForm from \"./fragments/FeedbackForm/FeedbackForm\";\r\nimport LandingChat from \"../MarbellaVice/Landing/LandingChat\";\r\nimport LandingParticipantsComponent from \"./fragments/LandingParticipantsComponent/LandingParticipantsComponent\";\r\nimport LandingTeamsComponent from \"./fragments/LandingTeamsComponent/LandingTeamsComponent\";\r\nimport Modal from \"../../Modal/Modal\";\r\nimport {setOpenedProfileWeeklyEvents} from \"../../../store/openedProfileWeeklyEvents/actions\";\r\nimport {Event} from \"../../../services/tracking\";\r\nimport {Helmet} from \"react-helmet\";\r\n\r\nconst componentName = \"LandingMain\";\r\n\r\nconst LandingMain = () => {\r\n const location = useLocation();\r\n const [eventsWithPlayerOpen, setEventsWithPlayerOpen] = useState([]);\r\n const [eventWithClipOpen, setEventWithClipOpen] = useState(undefined);\r\n const [loading, setLoading] = useState(true);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [userID, setUserID] = useState(undefined);\r\n const [userSlug, setUserSlug] = useState(\"\");\r\n const [profileData, setProfileData] = useState(undefined);\r\n const deviceView = useSelector(state => state.deviceView);\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const [tab, setTab] = useState(0);\r\n const [sidebarTab, setSidebarTab] = useState(0);\r\n const [customTabs, setCustomTabs] = useState([]);\r\n const [openTabForm, setOpenTabForm] = useState(false);\r\n const [openFeedbackForm, setOpenFeedbackForm] = useState(false);\r\n const {i18n, t} = useTranslation('landing');\r\n const _defaultLandingTabs = [t(\"home\"), t(\"news\"), t(\"live_now\"), t(\"highlights\"), t(\"agenda\"), t(\"passed_vods\")];\r\n const [landingTabs, _setLandingTabs] = useState(_defaultLandingTabs);\r\n const landingTabsRef = React.useRef(landingTabs);\r\n const setLandingTabs = data => {\r\n landingTabsRef.current = data;\r\n _setLandingTabs(data);\r\n };\r\n\r\n const loggedIn = useSelector(state => state.loggedIn)\r\n const user = useSelector(state => state.user)\r\n const [allowedManage, setAllowedManage] = useState(false);\r\n const [isOwner, setIsOwner] = useState(false);\r\n const [isAdmin, setIsAdmin] = useState(false);\r\n\r\n const resources = {\r\n \"giants.crew.by.latency\": {\r\n headerVideo: \"/dist/special/giantscrew.mp4\",\r\n headerMobile: \"/dist/special/giantscrew-mobile.jpg\"\r\n },\r\n \"aimlab.master.challenge\": {\r\n headerVideo: \"/dist/special/aimlabmasterchallenge2-compress.mp4\",\r\n headerVideoWebm: \"/dist/special/aimlabmasterchallenge2.webm\",\r\n headerMobile: \"/dist/special/aimlabmasterchallenge-mobile2.jpg\"\r\n },\r\n \"valorant.oficial\": {\r\n headerVideo: \"/dist/special/valorant.mp4\",\r\n headerVideoWebm: \"/dist/special/valorant.webm\",\r\n headerMobile: \"/dist/special/valorant-mobile.jpg\"\r\n },\r\n \"tortillaland\": {\r\n headerVideo: \"/dist/special/tortillaland.mp4\",\r\n headerVideoWebm: \"/dist/special/tortillaland.webm\",\r\n headerMobile: \"/dist/special/tortillaland-mobile.jpg\"\r\n },\r\n \"espacio.crypto\": {\r\n headerVideo: \"/dist/special/crypto.mp4\",\r\n headerVideoWebm: \"/dist/special/crypto.webm\",\r\n headerMobile: \"/dist/special/crypto-mobile.jpg\"\r\n }\r\n };\r\n\r\n const redirect = () => {\r\n history.push('/not-found');\r\n }\r\n\r\n useEffect(() => {\r\n const match = matchPath(history.location.pathname, {\r\n path: \"/:user/:type(live)?\",\r\n exact: true,\r\n strict: false\r\n });\r\n if (match.isExact) {\r\n if (profileData && profileData.hasOwnProperty('slug') && profileData.slug === match.params.user) {\r\n return;\r\n }\r\n let param_user = match.params.user;\r\n if(param_user === \"valorant\") {\r\n param_user = \"valorant.oficial\"\r\n }\r\n setLoading(true);\r\n dispatch(getUserProfile(param_user, redirect, (user) => {\r\n setProfileData(user);\r\n setUserID(user.id);\r\n setUserSlug(user.slug.replaceAll('.', '-'))\r\n setLoading(false);\r\n }));\r\n } else {\r\n redirect();\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (userID && user && user.hasOwnProperty('id')) {\r\n setIsOwner(!!(user && user.id === userID));\r\n }\r\n if (user && user.hasOwnProperty('id')) {\r\n setIsAdmin(user && user.id ? user.roles.includes('admin') : false)\r\n }\r\n }, [user, userID]);\r\n\r\n useEffect(() => {\r\n checkTabs();\r\n }, [user, isOwner, allowedManage])\r\n\r\n const changeTab = (e, val) => {\r\n if (typeof val === 'number' && (val % 1) === 0) {\r\n let tab = landingTabsRef.current[val];\r\n if (tab !== undefined) {\r\n setTab(val);\r\n let slugify = tab.toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '');\r\n history.push(`#${slugify}`)\r\n Event(\"LandingMain\", \"ChangeTab\", tab);\r\n }\r\n } else {\r\n handleCustomTab(val);\r\n let tab = landingTabsRef.current.indexOf(val);\r\n if (tab !== undefined) {\r\n let slugify = landingTabsRef.current[tab].toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '');\r\n history.push(`#${slugify}`)\r\n Event(componentName, \"ChangeTab\", landingTabsRef.current[tab]);\r\n }\r\n }\r\n }\r\n\r\n const handleCustomTab = (val) => {\r\n let tab = landingTabsRef.current.indexOf(val);\r\n if (tab !== -1) {\r\n setTab(tab)\r\n window.scrollTo(0, 0)\r\n }\r\n }\r\n\r\n const changeSidebarTab = (e, val) => {\r\n setSidebarTab(val);\r\n }\r\n\r\n const checkTabs = () => {\r\n if (userID) {\r\n setTab(0);\r\n //dispatch(prepareProfile(new Date(), userID, redirect));\r\n dispatch(setOpenedProfileWeeklyEvents(new Date(), userID))\r\n let tabs = _defaultLandingTabs;\r\n if (userID === \"7ac0b720-06a6-4257-97f9-899e63eb6fd5\") {\r\n tabs = [t(\"home\"), t(\"best_clip\"), t(\"news\"), t(\"highlights\"), t(\"agenda\")];\r\n } else if (userID === \"5b755b48-203a-40af-9934-30b4292b468b\") {\r\n tabs = [t(\"home\"), t(\"agenda\"), t(\"live_now\"), t(\"highlights\"), t('teams')];\r\n if (allowedManage) {\r\n tabs.push(t('news'))\r\n }\r\n } else if (userID === \"b8b5720c-5cd2-4638-9d51-b832b9443d34\") {\r\n tabs = [t(\"home\"), t(\"agenda\"), t(\"highlights\"), t('teams')];\r\n if (allowedManage) {\r\n tabs.push(t('news'))\r\n }\r\n } else if (userID === \"4e42510f-afd8-4f3b-b072-32ad4fc9cf19\") {\r\n tabs = [t(\"home\"), t(\"news\"), t(\"live_now\"), t(\"highlights\"), t(\"agenda\"), t(\"passed_vods\"), t('participants')];\r\n } else if (userID === \"ce777e3c-f047-424d-9ee5-070b578caed3\") {\r\n tabs = [t(\"home\"), t(\"news\"), t(\"live_now\"), t(\"highlights\"), t(\"agenda\"), t(\"passed_vods\")]\r\n } else if (userID === \"f11e468d-7cc9-4846-9aff-199d85a5457e\") {\r\n tabs = [t(\"home\"), t(\"news\"), t(\"agenda\")]\r\n\r\n }\r\n\r\n services.landingFeed.find({\r\n query: {\r\n type: 'custom',\r\n roomId: userID,\r\n $sort: {\r\n createdAt: -1\r\n }\r\n }\r\n }).then((res) => {\r\n let data_reversed = res.data.reverse()\r\n setCustomTabs(data_reversed);\r\n let final_tabs = [...tabs, ...data_reversed.map(item => item.title)]\r\n setLandingTabs(final_tabs);\r\n if (location.hash && location.hash.length > 0) {\r\n const found = final_tabs.find(element => element.toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '') === location.hash.replace(\"#\", \"\"));\r\n if (found) {\r\n setTab(final_tabs.indexOf(found));\r\n }\r\n }\r\n }).catch((err) => {\r\n setCustomTabs([]);\r\n setLandingTabs([...tabs]);\r\n if (location.hash && location.hash.length > 0) {\r\n const found = tabs.find(element => element.toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '') === location.hash.replace(\"#\", \"\"));\r\n if (found) {\r\n setTab(tabs.indexOf(found));\r\n }\r\n }\r\n });\r\n\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n loadCustomTabs();\r\n return () => {\r\n dispatch(removeProfile());\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [userID]);\r\n\r\n const handleOpenPlayer = (eventId) => {\r\n if (!eventsWithPlayerOpen.includes(eventId)) {\r\n setEventsWithPlayerOpen([...eventsWithPlayerOpen, eventId]);\r\n }\r\n Event(componentName, \"OpenPlayer\", eventId);\r\n };\r\n const handleOpenClip = (eventId) => {\r\n setEventWithClipOpen(eventId);\r\n Event(componentName, \"OpenClip\", eventId);\r\n };\r\n\r\n const handleDeleteOnePlayer = (eventId) => {\r\n setEventsWithPlayerOpen([...eventsWithPlayerOpen.filter(i => i !== eventId)]);\r\n if (sidebarTab !== 0) {\r\n setSidebarTab(0);\r\n }\r\n Event(componentName, \"DeleteOnePlayer\", eventId);\r\n }\r\n useEffect(() => {\r\n if (loggedIn) {\r\n if (user.id === userID) {\r\n setAllowedManage(true);\r\n } else {\r\n services.userLandingRoles.find({\r\n query: {\r\n roomId: userID\r\n }\r\n }).then((res) => {\r\n if (res.hasOwnProperty('allowed') && res.allowed === true) {\r\n setAllowedManage(true);\r\n }\r\n }).catch(err => setAllowedManage(false));\r\n }\r\n } else {\r\n setAllowedManage(false);\r\n }\r\n }, [loggedIn, user, userID]);\r\n\r\n const loadCustomTabs = () => {\r\n if (userID) {\r\n services.landingFeed.find({\r\n query: {\r\n type: 'custom',\r\n roomId: userID,\r\n $sort: {\r\n createdAt: -1\r\n }\r\n }\r\n }).then((res) => {\r\n let data_reversed = res.data.reverse()\r\n setCustomTabs(data_reversed);\r\n setLandingTabs([...landingTabs, ...data_reversed.map(item => item.title)])\r\n });\r\n }\r\n checkTabs();\r\n }\r\n\r\n const onSubmitTabModal = (data, onSuccess, onError) => {\r\n services.landingFeed.create({...data, roomId: userID}).then(res => {\r\n onSuccess(res);\r\n loadCustomTabs();\r\n Event(componentName, \"AddCustomTab\", data.custom_fields.title);\r\n }).catch(err => {\r\n onError(err);\r\n })\r\n };\r\n\r\n const handleDeleteClip = (itemId) => {\r\n services.landingFeed.remove(itemId).then((res) => {\r\n loadCustomTabs();\r\n setTab(0);\r\n Event(componentName, \"DeleteClip\", itemId);\r\n });\r\n };\r\n\r\n const setOpenFeedbackFormOn = () => {\r\n setOpenFeedbackForm(true);\r\n };\r\n\r\n const setOpenFeedbackFormOff = () => {\r\n setOpenFeedbackForm(false);\r\n };\r\n\r\n return (\r\n
\r\n {loading && \r\n \r\n
}\r\n {!loading && (\r\n <>\r\n \r\n {profileData.nickname} · Live / Latency \r\n \r\n {i18n.language === \"es\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {profileData.slug === \"valorant.oficial\" && (\r\n \r\n )}\r\n \r\n {profileData.slug === \"valorant.oficial\" && (\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n {landingTabs && landingTabs.map((value, index) =>\r\n \r\n )}\r\n {allowedManage && }\r\n classes={{selected: darkTheme ? 'select-dark' : 'select-light'}}\r\n onClick={() => setOpenTabForm(true)}/>\r\n }\r\n \r\n \r\n {landingTabs[tab] === t(\"home\") && }\r\n {landingTabs[tab] === t(\"news\") && }\r\n {landingTabs[tab] === t(\"live_now\") &&\r\n }\r\n {landingTabs[tab] === t(\"highlights\") &&\r\n }\r\n {landingTabs[tab] === t(\"agenda\") && (\r\n \r\n {({onMouseDown, ref, scrollTo}) => (\r\n \r\n )}\r\n \r\n )}\r\n {landingTabs[tab] === t(\"passed_vods\") &&\r\n }\r\n {landingTabs[tab] === t(\"best_clip\") &&\r\n }\r\n {landingTabs[tab] === t(\"participants\") &&\r\n \r\n }\r\n {landingTabs[tab] === t(\"teams\") &&\r\n \r\n }\r\n {(!openTabForm && !_defaultLandingTabs.includes(landingTabs[tab])\r\n && landingTabs[tab] !== t(\"best_clip\")\r\n && landingTabs[tab] !== t(\"participants\")\r\n && landingTabs[tab] !== t(\"teams\")) &&\r\n }\r\n \r\n \r\n
\r\n {deviceView === \"browser\" && (\r\n \r\n
\r\n \r\n \r\n {eventsWithPlayerOpen.map((data, index) => {\r\n let name = data.split('#+#')[0];\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n
\r\n {eventsWithPlayerOpen.map((data) => {\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n )}\r\n \r\n \r\n
\r\n )}\r\n \r\n setOpenTabForm(false)}>\r\n setOpenTabForm(false)}/>\r\n \r\n >\r\n )}\r\n {(user && user.hasOwnProperty('id') && userID === '7ac0b720-06a6-4257-97f9-899e63eb6fd5') &&\r\n \r\n
\r\n
❤️
\r\n
| Feedback
\r\n
\r\n
\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nexport default LandingMain;\r\n","import NavbarSearchForm from \"../Forms/NavbarSearchForm/NavbarSearchForm\";\r\nimport React from \"react\";\r\nimport {Box, Grid} from \"@material-ui/core\";\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nconst MobileSearchComponent = () => {\r\n const location = useLocation();\r\n\r\n if(location.pathname === \"/agenda\" || location.pathname === \"/explore\") {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n\r\n\r\n};\r\n\r\nexport default MobileSearchComponent;\r\n","import React, { useEffect } from 'react';\r\nimport client from \"../../services/client\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {Box} from \"@material-ui/core\";\r\nimport Lottie from \"react-lottie-player\";\r\nimport animationData from \"../../assets/animations/success-greentick.json\";\r\n\r\nconst DeepLinkMobile = ({ oauth }) => {\r\n const loggedIn = useSelector(state => state.loggedIn);\r\n\r\n useEffect(() => {\r\n const r_oauth = async () => {\r\n if (loggedIn) {\r\n const {accessToken} = await client.get('authentication');\r\n window.location.assign(`latency://login/${accessToken}`)\r\n } else {\r\n window.location.assign(\"latency://login\")\r\n }\r\n }\r\n const r_link = () => {\r\n window.location.assign(\"latency://home\")\r\n }\r\n\r\n if(oauth) {\r\n r_oauth().then();\r\n } else {\r\n r_link();\r\n }\r\n }, [oauth, loggedIn]);\r\n\r\n return (\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeepLinkMobile;\r\n","import React, {Fragment} from 'react';\r\nimport './event-card.scss';\r\nimport {Box, Tooltip} from '@material-ui/core';\r\nimport {formatDate} from '../../../helpers/dateFormatter';\r\nimport {useTranslation} from 'react-i18next';\r\nimport {useSelector} from \"react-redux\";\r\nimport {isSameDay, format} from 'date-fns'\r\nimport LinesEllipsis from 'react-lines-ellipsis'\r\n\r\nconst EventCardSimple = (props) => {\r\n const currentUser = useSelector(state => state.user);\r\n const {event, isCalendar} = props\r\n const pipeDate = new Date();\r\n const {t} = useTranslation(['eventForm', 'extraData'])\r\n const darkTheme = useSelector(state => state.darkTheme)\r\n const eventStart = new Date(event.start);\r\n const eventEnd = new Date(event.end);\r\n const _isSameDay = isSameDay(eventStart, eventEnd);\r\n const _isToday = isSameDay(pipeDate, eventStart);\r\n const formatPipeDate = pipeDate && pipeDate instanceof Date ? format(pipeDate, 'yyy-MM-dd') : null;\r\n\r\n const eventPoster = event.owner && event.poster && event.poster !== \"/images/defaultHeader2.png\" ? event.poster : \"/images/defaultAvatar.png\";\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {event.poster && event.poster !== \"/images/defaultHeader2.png\" && (\r\n \r\n {eventPoster.endsWith(\".webp\") ? (\r\n
\r\n \r\n \r\n \r\n ) : (\r\n
\r\n )}\r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {event.isLive && (\r\n \r\n \r\n {t('extraData:event_in_live')} \r\n \r\n )}\r\n {!event.isLive && (\r\n <>\r\n {(!event.is_fullday && _isSameDay) &&\r\n \r\n {_isToday && (\r\n \r\n {new Date(event.start).getTime() !== new Date(event.end).getTime() &&\r\n {`${t('explore:explore_label_event_today')} ${formatDate(event.start, \"p\")} - ${formatDate(event.end, \"p\")}`} \r\n }\r\n {new Date(event.start).getTime() === new Date(event.end).getTime() &&\r\n {`${t('explore:explore_label_event_today')} ${formatDate(event.start, \"p\")}`} \r\n }\r\n \r\n )}\r\n {!_isToday && (\r\n {`${formatDate(event.start, \"iii d, p\")}`} \r\n )}\r\n\r\n \r\n }\r\n {(!event.is_fullday && !_isSameDay) &&\r\n \r\n {formatDate(event.start, 'yyyy-MM-dd') === formatPipeDate &&\r\n {`${formatDate(event.start, \"p\")} - ${formatDate(event.end, \"iii d, p\")}`} \r\n }\r\n {formatDate(event.end, 'yyyy-MM-dd') === formatPipeDate &&\r\n {`${formatDate(event.start, \"iii d, p\")} - ${formatDate(event.end, \"p\")}`} \r\n }\r\n {formatDate(event.start, 'yyyy-MM-dd') !== formatPipeDate && formatDate(event.end, 'yyyy-MM-dd') !== formatPipeDate &&\r\n {`${formatDate(event.start, \"iii d, p\")} - ${formatDate(event.end, \"iii d, p\")}`} \r\n }\r\n \r\n }\r\n {(event.is_fullday && _isSameDay) && <>\r\n {_isToday ? {t('forms_label_allDay')} : {formatDate(event.start, \"iii d, p\")} }\r\n >\r\n }\r\n {(event.is_fullday && !_isSameDay) &&\r\n {t('forms_label_allDay')} - {formatDate(event.end, \"iii d, p\")} \r\n }\r\n >\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default EventCardSimple;\r\n\r\n","import React, {useEffect, useState} from 'react';\r\nimport {Box} from \"@material-ui/core\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport Lottie from \"react-lottie-player\";\r\nimport './_explore_featured_events_component.scss';\r\nimport services from \"../../../services\";\r\nimport animationData from \"../../../assets/animations/warning-yellow.json\";\r\nimport {formatDate, getCurrentTimezone, getDateWithoutTime} from \"../../../helpers/dateFormatter\";\r\nimport {isSameDay, parseISO} from \"date-fns\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {setOpenedEvent} from \"../../../store/openedEvent/actions\";\r\nimport {setOpenedEventMessages} from \"../../../store/openedEventMessages/actions\";\r\nimport {openEventInfoModal} from \"../../../store/eventInfoModal/actions\";\r\nimport EventCardSimple from \"../../Event/EventCardSimple/EventCardSimple\";\r\nimport {Event} from \"../../../services/tracking\";\r\n\r\nconst ExploreFeaturedEventsComponent = ({ userId }) => {\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation('explore');\r\n const dateToday = new Date();\r\n const [loading, setLoading] = useState(true);\r\n const [isErrorFetching, setErrorFetching] = useState(false);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [highlightedItem, setHighlightedItem] = useState(null);\r\n const [highlightedList, setHighlightedList] = useState([]);\r\n\r\n\r\n useEffect(() => {\r\n let query = {\r\n timezone: getCurrentTimezone()\r\n };\r\n if(userId != null) {\r\n query.userId = userId;\r\n }\r\n services.exploreFeaturedEvents.find({\r\n query\r\n }).then(res => {\r\n setHighlightedItem(res.length > 0 ? res[0] : null)\r\n setHighlightedList(res.slice(1, 6));\r\n if(res.length === 0) {\r\n setLoading(true);\r\n } else {\r\n setLoading(false);\r\n }\r\n setErrorFetching(false);\r\n }).catch(err => {\r\n setLoading(true);\r\n setErrorFetching(true);\r\n });\r\n }, [userId]);\r\n\r\n const handleOpenHighlightItem = (e) => {\r\n e.preventDefault();\r\n window.history.pushState({backRef: window.location.pathname}, \"Latency\", `/${highlightedItem.owner.slug}/${highlightedItem.id}`)\r\n dispatch(setOpenedEvent(highlightedItem.id))\r\n dispatch(setOpenedEventMessages(highlightedItem.id))\r\n dispatch(openEventInfoModal())\r\n Event(\"ExploreFeaturedEventsComponent\", \"handleOpenHighlightItem\", `/${highlightedItem.owner.slug}/${highlightedItem.id}`);\r\n\r\n }\r\n\r\n const onClickEvent = (item) => {\r\n window.history.pushState({backRef: window.location.pathname}, \"Latency\", `/${item.owner.slug}/${item.id}`)\r\n dispatch(setOpenedEvent(item.id))\r\n dispatch(setOpenedEventMessages(item.id))\r\n dispatch(openEventInfoModal())\r\n Event(\"ExploreFeaturedEventsComponent\", \"onClickEvent\", `/${highlightedItem.owner.slug}/${highlightedItem.id}`);\r\n\r\n }\r\n\r\n return (\r\n
\r\n {isErrorFetching && (\r\n \r\n \r\n ERROR FETCHING \r\n
\r\n )}\r\n\r\n \r\n {loading && ( )}\r\n {(!loading && highlightedItem !== null) && (\r\n \r\n\r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExploreFeaturedEventsComponent;\r\n","import React, {useEffect, useMemo, useState} from 'react';\r\nimport {Box} from \"@material-ui/core\";\r\nimport {Swiper, SwiperSlide} from 'swiper/react';\r\nimport 'swiper/swiper-bundle.min.css';\r\nimport SwiperCore, {Autoplay, Pagination, Navigation} from 'swiper';\r\nimport Lottie from \"react-lottie-player\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useHistory} from \"react-router-dom\";\r\n\r\nimport services from \"../../../services\";\r\nimport {closeEventInfoModal} from \"../../../store/eventInfoModal/actions\";\r\nimport ExploreFeaturedUserItemComponent from \"./ExploreFeaturedUserItemComponent\";\r\nimport animationData from \"../../../assets/animations/warning-yellow.json\";\r\nimport './_explore_featured_users_component.scss';\r\n\r\nSwiperCore.use([Autoplay, Pagination, Navigation]);\r\n\r\nconst ExploreFeaturedUsersComponent = () => {\r\n const history = useHistory();\r\n const dispatch = useDispatch();\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [item, setItem] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [isErrorFetching, setErrorFetching] = useState(false);\r\n\r\n useEffect(() => {\r\n services.exploreLight.get(9).then((res) => {\r\n setItem(res);\r\n setLoading(false);\r\n setErrorFetching(false);\r\n }).catch(err => {\r\n setLoading(true);\r\n setErrorFetching(true);\r\n });\r\n }, []);\r\n\r\n const onOpenProfile = (user) => {\r\n history.push(`/${user.slug}`);\r\n dispatch(closeEventInfoModal());\r\n }\r\n\r\n\r\n return (\r\n
\r\n {isErrorFetching && (\r\n \r\n \r\n ERROR FETCHING \r\n
\r\n )}\r\n {loading &&\r\n \r\n {([0, 1, 2, 3].map(item => ))}\r\n \r\n }\r\n\r\n {!loading && (\r\n \r\n {item.map((item) => (\r\n \r\n \r\n )\r\n )}\r\n \r\n )}\r\n\r\n\r\n \r\n );\r\n};\r\n\r\nexport default ExploreFeaturedUsersComponent;\r\n","import React, {useEffect, useMemo, useState} from 'react';\r\nimport {Box} from \"@material-ui/core\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport services from \"../../../services\";\r\nimport {getCurrentTimezone} from \"../../../helpers/dateFormatter\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport Lottie from \"react-lottie-player\";\r\nimport animationData from \"../../../assets/animations/warning-yellow.json\";\r\nimport './_explore_featured_categories_component.scss';\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport {Swiper, SwiperSlide} from 'swiper/react';\r\nimport SwiperCore, {Autoplay, Pagination, Navigation} from 'swiper';\r\n\r\nconst ExploreFeaturedCategoriesComponent = () => {\r\n const history = useHistory();\r\n const { t } = useTranslation(['explore']);\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const [items, setItems] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [isErrorFetching, setErrorFetching] = useState(false);\r\n\r\n useEffect(() => {\r\n services.exploreFeaturedCategories.find({\r\n query: {\r\n timezone: getCurrentTimezone(),\r\n }\r\n }).then(res => {\r\n setItems(res.sort(() => Math.random() - 0.5));\r\n setLoading(false);\r\n setErrorFetching(false);\r\n }).catch(err => {\r\n setLoading(true);\r\n setErrorFetching(true);\r\n });\r\n }, []);\r\n\r\n const handleOpenDiscoverCat = (ref) => {\r\n history.push(ref);\r\n }\r\n\r\n return (\r\n
\r\n {isErrorFetching && (\r\n \r\n \r\n ERROR FETCHING \r\n
\r\n )}\r\n {loading && (\r\n \r\n {([0, 1, 2, 3, 4, 5].map(item => ))}\r\n
\r\n )}\r\n {!loading &&\r\n \r\n {items.map((item) => (\r\n \r\n {\r\n e.preventDefault();\r\n handleOpenDiscoverCat(`/${t('category_slug_label')}/${item.hasOwnProperty('parent') ? item.parent.slug + '/' : ''}${item.slug}`)\r\n }}>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {item.text} \r\n {item.eventsCount} {t('events_count_label')} \r\n \r\n \r\n )\r\n )}\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nexport default ExploreFeaturedCategoriesComponent;\r\n","import React from 'react';\r\nimport {Box} from \"@material-ui/core\";\r\nimport {Helmet} from \"react-helmet\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport './_new_explore_page.scss';\r\nimport ExploreFeaturedEventsComponent\r\n from \"../../components/Explore/ExploreFeaturedEvents/ExploreFeaturedEventsComponent\";\r\nimport ExploreFeaturedUsersComponent from \"../../components/Explore/ExploreFeaturedUsers/ExploreFeaturedUsersComponent\";\r\nimport {useSelector} from \"react-redux\";\r\nimport ExploreFeaturedCategoriesComponent\r\n from \"../../components/Explore/ExploreFeaturedCategories/ExploreFeaturedCategoriesComponent\";\r\n\r\nconst NewExplorePage = () => {\r\n const deviceView = useSelector(state => state.deviceView);\r\n const { i18n, t } = useTranslation(['explore']);\r\n\r\n return (\r\n
\r\n
\r\n {t('UserMenu:menu_label_explore')} / Latency \r\n \r\n {i18n.language === \"es\" ? (\r\n
\r\n ) : (\r\n
\r\n )}\r\n
\r\n \r\n\r\n
\r\n {t('explore_title_featured_users')} \r\n\r\n \r\n \r\n
\r\n \r\n\r\n
\r\n \r\n
TRENDING \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
{t('explore_title_more_events')} \r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n
\r\n {t('explore_title_featured_cats')} \r\n \r\n \r\n
\r\n \r\n\r\n {/*\r\n
\r\n
{t('explore_title_featured_trends')}
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n */}\r\n
\r\n )\r\n ;\r\n};\r\n\r\nexport default NewExplorePage;\r\n","import React, {useState} from 'react';\r\nimport {Box} from \"@material-ui/core\";\r\nimport {ReactComponent as VerifiedUserIcon} from \"../../assets/icons/user/check-new.svg\";\r\nimport CustomButton from \"../CustomButton/CustomButton\";\r\nimport {followUser, unfollowUser} from \"../../store/app/actions\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {showSnackbar} from \"../../store/snackbar/actions\";\r\n\r\n\r\nconst CategoryFeaturedUserItemComponent = ({user, onClick}) => {\r\n const dispatch = useDispatch();\r\n const {t} = useTranslation('extraData');\r\n\r\n const currentUser = useSelector(state => state.user);\r\n const [follow, setFollow] = useState(user.follow);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const showErrorFollow = () => dispatch(showSnackbar({message: `To do this you must be logged in.`, type: \"info\"}));\r\n\r\n return (\r\n
\r\n \r\n {user.id !== currentUser.id &&\r\n \r\n {!follow &&\r\n {\r\n e.stopPropagation();\r\n setLoading(true);\r\n dispatch(followUser(user, showErrorFollow, \"explore-user\", setFollow, setLoading))\r\n }}\r\n className=\"follow-btn\">{t('extraData:buttons_follow')} \r\n }\r\n\r\n {user.id !== currentUser.id && follow &&\r\n {\r\n e.stopPropagation();\r\n setLoading(true);\r\n dispatch(unfollowUser(user, showErrorFollow, \"explore-user\", setFollow, setLoading))\r\n }}\r\n className=\"unfollow-btn\">{t('extraData:buttons_unfollow')} \r\n }\r\n \r\n }\r\n \r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onClick(user)\r\n }}\r\n className=\"user\">\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {user.nickname}\r\n {user.account_verified &&\r\n }\r\n \r\n
@{user.slug}
\r\n
\r\n
\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CategoryFeaturedUserItemComponent;\r\n","import React, {useEffect, useMemo, useState} from 'react';\r\nimport {Box} from \"@material-ui/core\";\r\nimport {Swiper, SwiperSlide} from 'swiper/react';\r\nimport 'swiper/swiper-bundle.min.css';\r\nimport SwiperCore, {Autoplay, Pagination, Navigation} from 'swiper';\r\nimport Lottie from \"react-lottie-player\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useHistory} from \"react-router-dom\";\r\n\r\nimport services from \"../../services\";\r\nimport {closeEventInfoModal} from \"../../store/eventInfoModal/actions\";\r\nimport CategoryFeaturedUserItemComponent from \"./CategoryFeaturedUserItemComponent\";\r\nimport animationData from \"../../assets/animations/warning-yellow.json\";\r\nimport './_category_featured_users_component.scss';\r\n\r\nSwiperCore.use([Autoplay, Pagination, Navigation]);\r\n\r\nconst CategoryFeaturedUsersComponent = ({ catId = 9 }) => {\r\n const history = useHistory();\r\n const dispatch = useDispatch();\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [item, setItem] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [isErrorFetching, setErrorFetching] = useState(false);\r\n\r\n useEffect(() => {\r\n services.exploreLight.get(catId).then((res) => {\r\n let ordered = res.sort((a, b) => a.weight < b.weight ? 1 : -1);\r\n setItem(ordered);\r\n setLoading(false);\r\n setErrorFetching(false);\r\n }).catch(err => {\r\n setLoading(true);\r\n setErrorFetching(true);\r\n });\r\n }, [catId]);\r\n\r\n const onOpenProfile = (user) => {\r\n history.push(`/${user.slug}`);\r\n dispatch(closeEventInfoModal());\r\n }\r\n\r\n const RenderItems = useMemo(() =>\r\n [...item].map((item) => (\r\n
\r\n \r\n )\r\n )\r\n , [darkTheme, item])\r\n\r\n return (\r\n
\r\n {isErrorFetching && (\r\n \r\n \r\n ERROR FETCHING \r\n
\r\n )}\r\n {loading &&\r\n \r\n {([0, 1, 2, 3].map(item => ))}\r\n \r\n }\r\n\r\n {!loading && (\r\n \r\n {RenderItems}\r\n \r\n )}\r\n\r\n\r\n \r\n );\r\n};\r\n\r\nexport default CategoryFeaturedUsersComponent;\r\n","import React, {useState, useEffect} from 'react';\r\nimport {useParams} from \"react-router-dom\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {Box} from \"@material-ui/core\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport './_discover_category_page.scss';\r\nimport NewAgendaPipelines from \"../../components/Pipelines/NewAgendaPipelines\";\r\nimport {setSelectedDate} from \"../../store/selectedDate/actions\";\r\nimport Calendar from \"../../components/Calendar/Calendar\";\r\nimport {setMonthlyEventsCount} from \"../../store/monthlyEventsCount/actions\";\r\nimport {setOpenedDiscoverCategoriesWeeklyEvents} from \"../../store/openedDiscoverCategoriesWeeklyEvents/actions\";\r\nimport {Helmet} from \"react-helmet\";\r\nimport CategoryFeaturedUsersComponent from \"../../components/CategoryFeaturedUsers/CategoryFeaturedUsersComponent\";\r\nimport ArrowLeftIcon from \"@material-ui/icons/ChevronLeft\";\r\n\r\nconst DiscoverCategory = () => {\r\n const dispatch = useDispatch();\r\n const deviceView = useSelector(state => state.deviceView);\r\n const {i18n, t} = useTranslation();\r\n const today_date = new Date();\r\n const {primary, secondary} = useParams();\r\n const [parent, setParent] = useState(null);\r\n const [category, setCategory] = useState(null);\r\n const eventCategoriesSelector = useSelector(state => state.eventCategories);\r\n const weeklySelected = useSelector(state => state.openedDiscoverCategories);\r\n const [featuredUsersCategory, setFeaturedUsersCategory] = useState(null);\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (category !== null && category && category.hasOwnProperty('id')) {\r\n dispatch(setSelectedDate(today_date));\r\n dispatch(setMonthlyEventsCount(today_date, null, null, category.id))\r\n dispatch(setOpenedDiscoverCategoriesWeeklyEvents(today_date, category.id));\r\n handleCategoryFeaturedUsers(category.id)\r\n }\r\n }, [category]);\r\n\r\n useEffect(() => {\r\n if (eventCategoriesSelector) {\r\n if (secondary !== undefined) {\r\n let item = eventCategoriesSelector.find(i => i.slug === secondary);\r\n if (item) {\r\n setCategory(item);\r\n setParent(eventCategoriesSelector.find(i => i.id === item.parentId));\r\n }\r\n } else {\r\n setCategory(eventCategoriesSelector.find(i => i.slug === primary));\r\n }\r\n }\r\n }, [eventCategoriesSelector, primary, secondary]);\r\n\r\n const centerOnDay = () => {\r\n\r\n };\r\n\r\n const handleCategoryFeaturedUsers = (catId) => {\r\n let cat = null;\r\n if (catId === '37f0a322-a2ac-480e-8345-99ce1d86abf6') { // cine y series\r\n cat = 6;\r\n } else if (catId === '181a8b9d-9ff7-4827-bb62-5d585add5623') { // podcasts\r\n cat = 10;\r\n } else if (catId === '65d4ed8c-68d8-4518-bd5c-72ea70e50265') { // variety content\r\n cat = 11;\r\n } else if (catId === 'cad9e8fb-60db-476a-9133-7fb1d6896837') { // videojuegos\r\n cat = 12;\r\n } else if (catId === 'dd1c4864-b3a8-457e-839f-5cf19c99dd3c') { // valorant\r\n cat = 13;\r\n } else if (catId === '83a75d1a-baf6-4537-8bff-d1371e2dcc16') { // deportes\r\n cat = 14;\r\n } else if (catId === '2d190db6-06f2-47c2-809e-031ec7757ba5') { // crypto\r\n cat = 15;\r\n } else if (catId === '6ed21110-efd4-4903-ad84-05cb9d9f1507') { // league of legends\r\n cat = 16;\r\n }\r\n\r\n\r\n setFeaturedUsersCategory(cat);\r\n }\r\n\r\n const handleGoBack = () => {\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n {category && category.hasOwnProperty('id') ? `${t('explore:category_label')}: ${category.text}` : t('explore:category_label')} /\r\n Latency \r\n \r\n {i18n.language === \"es\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n Volver a Explorar
\r\n \r\n\r\n {(category && category.hasOwnProperty('id')) && (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {parent && (\r\n
{parent.text}
\r\n )}\r\n
{t('explore:category_label')}:
{category.text} \r\n \r\n
\r\n \r\n {featuredUsersCategory !== null && (\r\n \r\n {t('explore:explore_title_featured_users')} \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n >\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default DiscoverCategory;\r\n","import {Link, useHistory, useParams} from \"react-router-dom\";\r\nimport React, {useEffect, useState} from \"react\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {getUserProfile} from \"../../store/user/actions\";\r\nimport {prepareProfile, removeProfile} from \"../../store/app/actions\";\r\nimport {setOpenedProfileFilterCategory} from \"../../store/openedProfileFilterCategory/actions\";\r\nimport {setMonthlyEventsCount} from \"../../store/monthlyEventsCount/actions\";\r\nimport {setOpenedProfileWeeklyEvents} from \"../../store/openedProfileWeeklyEvents/actions\";\r\nimport {Box} from \"@material-ui/core\";\r\nimport Calendar from \"../../components/Calendar/Calendar\";\r\nimport Loader from \"../../components/Loader/Loader\";\r\nimport Scroller from \"../../components/Scroller/Scroller\";\r\nimport ProfileEventCard from \"../../components/Event/ProfileEventCard/ProfileEventCard\";\r\nimport EmbedUserCategories from \"../../components/Embed/EmbedUserCategories/EmbedUserCategories\";\r\nimport ProfileAgenda from \"../../components/Profile/ProfileAgenda/ProfileAgenda\";\r\nimport './new_embed.scss';\r\nimport logoLatency from '../../assets/images/logo_latency.svg';\r\nimport logoLatencyComplex from \"../../assets/images/logo_latency_complex.svg\";\r\nimport logoPingingIsotype from \"../../assets/images/logo_isotipo_pinging.svg\";\r\nimport Logo from \"../../components/Logo/Logo\";\r\n\r\nconst NewEmbedPage = (props) => {\r\n const {userNickname, eventID} = useParams();\r\n const [userID, setUserId] = useState(undefined);\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const deviceView = useSelector(state => state.deviceView);\r\n const {t} = useTranslation(['userDetails', 'eventDetails']);\r\n const [loadingNextEvents, setLoadingNextEvents] = useState(true);\r\n const selectedDate = useSelector(state => state.selectedDate);\r\n const openedProfileNextEvents = useSelector(state => state.openedProfileNextEvents);\r\n const openedProfileFilterCategory = useSelector(state => state.openedProfileFilterCategory);\r\n const [filterCategories, setFilterCategories] = useState(openedProfileFilterCategory);\r\n\r\n useEffect(() => {\r\n if(openedProfileNextEvents && openedProfileNextEvents.hasOwnProperty('data')){\r\n setLoadingNextEvents(false)\r\n } else {\r\n setLoadingNextEvents(true);\r\n }\r\n return () => {\r\n setLoadingNextEvents(true);\r\n }\r\n }, [openedProfileNextEvents]);\r\n\r\n useEffect(() => {\r\n dispatch(getUserProfile(userNickname, redirect, (user) => {\r\n setUserId(user.id)\r\n }))\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [userNickname]);\r\n\r\n useEffect(() => {\r\n if(userID && eventID){\r\n props.onParams({userID, eventID})\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [userID, eventID]);\r\n\r\n useEffect(() => {\r\n if(userID) {\r\n dispatch(prepareProfile(new Date(), userID, redirect));\r\n window.scrollTo(0,0);\r\n }\r\n return () => {\r\n dispatch(removeProfile());\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [userID, deviceView]);\r\n\r\n const redirect = () => {\r\n history.push('/not-found');\r\n };\r\n\r\n const onFilterCategories = (val) => {\r\n setFilterCategories(val);\r\n dispatch(setOpenedProfileFilterCategory(val, () => {\r\n dispatch(setMonthlyEventsCount(selectedDate, userID, false));\r\n dispatch(setOpenedProfileWeeklyEvents(selectedDate, userID, false))\r\n }));\r\n };\r\n\r\n useEffect(() => {\r\n document.body.classList.toggle('bg-transparent', true);\r\n return () => {\r\n document.body.classList.remove('bg-transparent');\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('userDetails:headings_coming_events')} \r\n \r\n {loadingNextEvents && }\r\n {!loadingNextEvents && (\r\n {openedProfileNextEvents && openedProfileNextEvents.hasOwnProperty('data') && openedProfileNextEvents.data.length > 0 && openedProfileNextEvents.data.map((event, index) =>\r\n \r\n )}\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
powered by \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NewEmbedPage;\r\n","import React from 'react';\r\nimport {Box, Tooltip} from \"@material-ui/core\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {\r\n formatDate,\r\n getDateWithoutTime,\r\n ownFormatDistance,\r\n ownFormatDuration,\r\n ownTimeAgo\r\n} from \"../../../../../helpers/dateFormatter\";\r\nimport './_item_styles.scss';\r\nimport {useTranslation} from \"react-i18next\";\r\n\r\nconst VlrItemComponent = ({event, onOpenEventModal, nowDate, type}) => {\r\n const {t} = useTranslation('extraData');\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const openEventModalHandler = () => onOpenEventModal(event);\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n {type !== 'upcoming' && (\r\n <>\r\n {event.original_poster &&
}\r\n
{event.tournament}
\r\n >\r\n )}\r\n {event.isLive && (\r\n
\r\n
\r\n {t('extraData:event_in_live')} \r\n
\r\n )}\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {event.team_local.name}\r\n
\r\n {type === \"upcoming\" ? (\r\n
\r\n {formatDate(event.start, \"HH:mm\")}h\r\n
\r\n ) : (\r\n <>\r\n
\r\n {event.team_local.scoreboard}\r\n
\r\n
\r\n {event.team_local.current_scoreboard}\r\n
\r\n >\r\n )}\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {event.team_guest.name}\r\n
\r\n {type === \"upcoming\" ? (\r\n
\r\n {t('date_prefix_in')} {ownFormatDuration(new Date(event.start), ['days', 'hours', 'minutes'], false, \"\")\r\n .replace(\"hours\", \"h\")\r\n .replace(\"hour\", \"h\")\r\n .replace('minutes', \"m\")\r\n .replace(\"minute\", \"m\")\r\n .replace(\"horas\", \"h\")\r\n .replace(\"hora\", \"h\")\r\n .replace('minutos', \"m\")\r\n .replace(\"minuto\", \"m\")\r\n }\r\n
\r\n ) : (\r\n <>\r\n
\r\n {event.team_guest.scoreboard}\r\n
\r\n
\r\n {event.team_guest.current_scoreboard}\r\n
\r\n >)}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default VlrItemComponent;\r\n","import React from 'react';\r\nimport {Box, Tooltip} from \"@material-ui/core\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {\r\n formatDate,\r\n ownFormatDuration,\r\n} from \"../../../../../helpers/dateFormatter\";\r\nimport './_item_inline_styles.scss';\r\nimport {useTranslation} from \"react-i18next\";\r\n\r\nconst VlrInlineUpcomingItemComponent = ({event, onOpenEventModal, nowDate, type}) => {\r\n const {t} = useTranslation('extraData');\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const openEventModalHandler = () => onOpenEventModal(event);\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n {formatDate(event.start, \"HH:mm\")}h\r\n
\r\n
\r\n {t('date_prefix_in')} {ownFormatDuration(new Date(event.start), ['days', 'hours', 'minutes'], false, \"\")\r\n .replace(\"hours\", \"h\")\r\n .replace(\"hour\", \"h\")\r\n .replace('minutes', \"m\")\r\n .replace(\"minute\", \"m\")\r\n .replace(\"horas\", \"h\")\r\n .replace(\"hora\", \"h\")\r\n .replace('minutos', \"m\")\r\n .replace(\"minuto\", \"m\")\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {event.team_local.name}\r\n
\r\n
\r\n
\r\n vs\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {event.team_guest.name}\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default VlrInlineUpcomingItemComponent;\r\n","import React, {useEffect, useState} from 'react';\r\nimport './_group_styles.scss';\r\nimport {useTranslation} from \"react-i18next\";\r\nimport VlrInlineUpcomingItemComponent\r\n from \"./VlrInlineUpcomingItemComponent\";\r\n\r\nconst VlrGroupTournamentItemComponent = ({ tournamentName, events, onOpenEventModal, nowDate, type }) => {\r\n const { t } = useTranslation('extraData');\r\n const [tournamentImage, setTournamentImage] = useState(null);\r\n\r\n useEffect(() => {\r\n let monkprint = events[0];\r\n setTournamentImage(monkprint.original_poster);\r\n }, [events])\r\n\r\n return (\r\n
\r\n
\r\n {tournamentImage &&
}\r\n {tournamentName}\r\n
\r\n
\r\n {events.map(ev => )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default VlrGroupTournamentItemComponent;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport './_styles.scss';\r\nimport {Grid} from \"@material-ui/core\";\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nimport VlrItemComponent from \"./VlrItemComponent\";\r\nimport {setOpenedEvent} from \"../../../../../store/openedEvent/actions\";\r\nimport {setOpenedEventMessages} from \"../../../../../store/openedEventMessages/actions\";\r\nimport {openEventInfoModal} from \"../../../../../store/eventInfoModal/actions\";\r\nimport {Event} from \"../../../../../services/tracking\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport VlrGroupTournamentItemComponent from \"./VlrGroupTournamentItemComponent\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nconst VlrLandingMatchesComponent = ({userId}) => {\r\n const dispatch = useDispatch();\r\n const nowDate = new Date();\r\n\r\n const { t } = useTranslation('landing');\r\n\r\n const [upcomingEvents, setUpcomingEvents] = useState([]);\r\n const [loadingUpcoming, setLoadingUpcoming] = useState(true);\r\n\r\n const [liveEvents, setLiveEvents] = useState([]);\r\n const [loadingLiveEvents, setLoadingLiveEvents] = useState(true);\r\n\r\n const [passedEvents, setPassedEvents] = useState([]);\r\n const [loadingPassedEvents, setLoadingPassedEvents] = useState(true);\r\n\r\n const [tournaments, setTournaments] = useState([]);\r\n const [filterByTournament, setFilterByTournament] = useState(null);\r\n\r\n const [datar, setData] = useState({\r\n live: [],\r\n upcoming: {},\r\n upcomingByTournamnets: {}\r\n });\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n\r\n const fetchUpcomingEvents = (user, max, extraQuery) => {\r\n const dateObj = formatDate(new Date(), dateFormat)\r\n let data = {\r\n start: dateObj.substring(0, dateObj.length - 9) + \"00:00.000\",\r\n timezone: getCurrentTimezone(),\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.eventsLandingUpcoming.get(user, {\r\n query: data\r\n });\r\n }\r\n\r\n const fetchMatchesEvents = (user, max, is_live, extraQuery) => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 1);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 2);\r\n let data = {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n isLive: is_live\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.landingEventsLiveScores.get(userId, {\r\n query: data\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingUpcoming(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchUpcomingEvents(userId, 12, extraQuery).then((res) => {\r\n if (mounted) {\r\n setUpcomingEvents(res);\r\n setLoadingUpcoming(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingLiveEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 12, true, extraQuery).then((res) => {\r\n if (mounted) {\r\n setLiveEvents(res);\r\n setLoadingLiveEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingPassedEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 12, false, extraQuery).then((res) => {\r\n if (mounted) {\r\n setPassedEvents(res);\r\n setLoadingPassedEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n useEffect(() => {\r\n if (!loadingUpcoming && !loadingLiveEvents && !loadingPassedEvents) {\r\n let combine = [...upcomingEvents, ...liveEvents, ...passedEvents];\r\n let grouped = combine.reduce(\r\n (result, item) => ({\r\n ...result,\r\n [item['tournament']]: [\r\n ...(result[item['tournament']] || []),\r\n item,\r\n ],\r\n }),\r\n {},\r\n );\r\n\r\n if(filterByTournament === null) {\r\n //setTournaments(Object.keys(grouped));\r\n setTournaments(grouped);\r\n console.log('grouped?', grouped);\r\n }\r\n\r\n\r\n let watfaq = upcomingEvents.reduce(\r\n (result, item) => {\r\n let date_formatted = formatDate(new Date(item['start']), 'yyyyMMdd');\r\n return {\r\n ...result,\r\n [date_formatted]: [\r\n ...(result[date_formatted] || []),\r\n item,\r\n ],\r\n }\r\n },\r\n []);\r\n\r\n let watfaq2 = upcomingEvents.reduce(\r\n (result, item) => {\r\n let date_formatted = item['tournament'];\r\n return {\r\n ...result,\r\n [date_formatted]: [\r\n ...(result[date_formatted] || []),\r\n item,\r\n ],\r\n }\r\n },\r\n []);\r\n\r\n console.log('watfaq2', watfaq2)\r\n\r\n\r\n\r\n let new_data = {\r\n live: [...liveEvents],\r\n upcoming: {...watfaq},\r\n upcomingByTournamnets: {...watfaq2}\r\n };\r\n setData(new_data);\r\n }\r\n }, [upcomingEvents, liveEvents, passedEvents, loadingUpcoming, loadingLiveEvents, loadingPassedEvents, filterByTournament]);\r\n\r\n\r\n const OpenInfo = (event) => {\r\n window.history.pushState({backRef: window.location.pathname}, \"Event: \" + event.title + \" | Latency\", `/${event.hasOwnProperty('slug') ? event.slug : event.owner.slug}/${event.id}`)\r\n dispatch(setOpenedEvent(event.id))\r\n dispatch(setOpenedEventMessages(event.id))\r\n dispatch(openEventInfoModal())\r\n Event(\"VlrLandingMatchesComponent\", \"OpenEvent\", event.id);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {t('label_competitions')}
\r\n \r\n setFilterByTournament(null)}\r\n />\r\n {Object.keys(tournaments).map((group, index) => {\r\n let tournament_image = tournaments[group][0].original_poster;\r\n\r\n return (\r\n }\r\n color={filterByTournament === group ? \"primary\" : \"secondary\"}\r\n size=\"medium\"\r\n onClick={() => setFilterByTournament(group)}\r\n label={group.replace(\"Champions Tour\", \"\")}\r\n />\r\n )\r\n })}\r\n
\r\n \r\n\r\n\r\n
\r\n \r\n \r\n \r\n {t('coming_matches')}
\r\n \r\n {datar.live.map(ev =>
)}\r\n {Object.keys(datar.upcomingByTournamnets).map((group, index) =>
)}\r\n {(datar.live.length === 0 && Object.keys(datar.upcoming).length === 0) && (\r\n
\r\n {t(\"empty_matches\")}\r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n {t('results_matches')}
\r\n \r\n {passedEvents.map(ev =>
)}\r\n {passedEvents.length === 0 && (\r\n
\r\n {t(\"empty_results\")}\r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default VlrLandingMatchesComponent;\r\n","import {Box, Grid} from \"@material-ui/core\";\r\nimport VlrLandingMatchesComponent from \"./fragments/VlrLandingMatchesComponent/VlrLandingMatchesComponent\";\r\nimport LandingSmallTeamsComponent from \"../LandingMain/fragments/LandingTeamsComponent/LandingSmallTeamsComponent\";\r\nimport React from \"react\";\r\n\r\nexport const LandingValorantCoverComponent = ({ userId, changeTab }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import './_landing_valorant.scss';\r\nimport {Box, Tab, Tabs} from \"@material-ui/core\";\r\nimport React, {useEffect, useState} from \"react\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {Helmet} from \"react-helmet\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport LandingHeader from \"../LandingMain/fragments/Header/LandingHeader\";\r\nimport {getUserProfile} from \"../../../store/user/actions\";\r\nimport {useHistory, useLocation} from \"react-router-dom\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport {Event} from \"../../../services/tracking\";\r\nimport LandingCoverComponent from \"../LandingCover/LandingCoverComponent\";\r\nimport LandingFeedComponent from \"../LandingMain/fragments/LandingFeedComponent/LandingFeedComponent\";\r\nimport LandingMainTabLiveNow from \"../LandingMain/fragments/LiveNowComponent/LandingMainTabLiveNow\";\r\nimport LandingHighlightsComponent from \"../LandingMain/fragments/LandingHighlightsComponent/LandingHighlightsComponent\";\r\nimport DragScrollProvider from \"drag-scroll-provider\";\r\nimport ProfileAgenda from \"../../Profile/ProfileAgenda/ProfileAgenda\";\r\nimport EventsPassedComponentByDay\r\n from \"../LandingMain/fragments/EventsPassedComponent/LandingEventsPassedByDayComponent\";\r\nimport LandingParticipantsComponent\r\n from \"../LandingMain/fragments/LandingParticipantsComponent/LandingParticipantsComponent\";\r\nimport LandingTeamsComponent from \"../LandingMain/fragments/LandingTeamsComponent/LandingTeamsComponent\";\r\nimport LandingCustomTabComponent from \"../LandingMain/fragments/LandingCustomTabComponent/LandingCustomTabComponent\";\r\nimport {LandingValorantCoverComponent} from \"./LandingValorantCoverComponent\";\r\n\r\nconst componentName = \"LandingValorant\"\r\n\r\nexport const LandingValorant = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n const history = useHistory();\r\n const {i18n, t} = useTranslation('landing');\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [cssDeviceView, setCSSDeviceView] = useState(\"\");\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [userID, setUserID] = useState(undefined);\r\n const [userSlug, setUserSlug] = useState(\"\");\r\n const [profileData, setProfileData] = useState(undefined);\r\n const [tab, setTab] = useState(0);\r\n\r\n const [eventsWithPlayerOpen, setEventsWithPlayerOpen] = useState([]);\r\n const [eventWithClipOpen, setEventWithClipOpen] = useState(undefined);\r\n\r\n const [customTabs, setCustomTabs] = useState([]);\r\n const _defaultLandingTabs = [t(\"home\"), t(\"agenda\"), t(\"live_now\"), t(\"teams\")];\r\n const [landingTabs, _setLandingTabs] = useState(_defaultLandingTabs);\r\n const landingTabsRef = React.useRef(landingTabs);\r\n const setLandingTabs = data => {\r\n landingTabsRef.current = data;\r\n _setLandingTabs(data);\r\n };\r\n\r\n const resources = {\r\n headerVideo: \"/dist/special/valorant.mp4\",\r\n headerVideoWebm: \"/dist/special/valorant.webm\",\r\n headerMobile: \"/dist/special/valorant-mobile.jpg\"\r\n };\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n dispatch(getUserProfile(\"valorant.oficial\", () => {\r\n history.push('/not-found');\r\n }, (user) => {\r\n setProfileData(user);\r\n setUserID(user.id);\r\n setUserSlug(user.slug.replaceAll('.', '-'))\r\n setLoading(false);\r\n }));\r\n }, []);\r\n\r\n useEffect(() => {\r\n let class_string = darkTheme ? \"is-dark-theme\" : \"is-light-theme\"\r\n if (deviceView === \"mobile\" || deviceView === \"tablet\") {\r\n class_string += ` is-${deviceView}`;\r\n } else {\r\n class_string += ` is-desktop`;\r\n }\r\n setCSSDeviceView(class_string);\r\n }, [darkTheme, deviceView]);\r\n\r\n const handleCustomTab = (val) => {\r\n let tab = landingTabsRef.current.indexOf(val);\r\n if (tab !== -1) {\r\n setTab(tab)\r\n window.scrollTo(0, 0)\r\n }\r\n }\r\n\r\n const changeTab = (e, val) => {\r\n if (typeof val === 'number' && (val % 1) === 0) {\r\n let tab = landingTabsRef.current[val];\r\n if (tab !== undefined) {\r\n setTab(val);\r\n let slugify = tab.toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '');\r\n history.push(`#${slugify}`)\r\n Event(\"LandingMain\", \"ChangeTab\", tab);\r\n }\r\n } else {\r\n handleCustomTab(val);\r\n let tab = landingTabsRef.current.indexOf(val);\r\n if (tab !== undefined) {\r\n let slugify = landingTabsRef.current[tab].toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '');\r\n history.push(`#${slugify}`)\r\n Event(componentName, \"ChangeTab\", landingTabsRef.current[tab]);\r\n }\r\n }\r\n }\r\n\r\n const handleOpenPlayer = (eventId) => {\r\n if (!eventsWithPlayerOpen.includes(eventId)) {\r\n setEventsWithPlayerOpen([...eventsWithPlayerOpen, eventId]);\r\n }\r\n Event(componentName, \"OpenPlayer\", eventId);\r\n };\r\n const handleOpenClip = (eventId) => {\r\n setEventWithClipOpen(eventId);\r\n Event(componentName, \"OpenClip\", eventId);\r\n };\r\n const handleDeleteOnePlayer = (eventId) => {\r\n setEventsWithPlayerOpen([...eventsWithPlayerOpen.filter(i => i !== eventId)]);\r\n Event(componentName, \"DeleteOnePlayer\", eventId);\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n Valorant Oficial · Live / Latency \r\n \r\n {i18n.language === \"es\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n {loading && (\r\n \r\n \r\n
\r\n )}\r\n\r\n {!loading && (\r\n <>\r\n \r\n \r\n
\r\n \r\n {landingTabs && landingTabs.map((value, index) =>\r\n \r\n )}\r\n \r\n \r\n
\r\n {landingTabs[tab] === t(\"home\") && }\r\n {landingTabs[tab] === t(\"live_now\") &&\r\n }\r\n {landingTabs[tab] === t(\"agenda\") && (\r\n \r\n {({onMouseDown, ref, scrollTo}) => (\r\n \r\n )}\r\n \r\n )}\r\n {landingTabs[tab] === t(\"teams\") &&\r\n \r\n }\r\n \r\n
\r\n >\r\n )}\r\n\r\n\r\n \r\n >\r\n );\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport ReactGA from \"react-ga4\";\r\n\r\n\r\nconst CustomAnalytics = ({ history }) => {\r\n useEffect(() => history.listen((location, action) => {\r\n ReactGA.send({ hitType: \"pageview\", page: location.pathname });\r\n }), [])\r\n\r\n //...\r\n return null;\r\n}\r\n\r\nexport default withRouter(CustomAnalytics);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {Box, Button, CircularProgress, Grid} from \"@material-ui/core\";\r\nimport {closeEventInfoModal} from \"../../../../../store/eventInfoModal/actions\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport BellIconOn from '../../../../../assets/icons/actions/bell-on.svg';\r\nimport BellIconOff from '../../../../../assets/icons/actions/bell-off-grey.svg';\r\n\r\n\r\nconst EmbedTeamItem = ({user, suscribeCategoryId, onFollowClick, onUnfollowClick, gridItemSettings, onClick}) => {\r\n const { t } = useTranslation('landing');\r\n const history = useHistory();\r\n const dispatch = useDispatch();\r\n const [loading, setLoading] = useState(true);\r\n const [isCategorySubscribed, setIsCategorySubscribed] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [follow, setFollow] = useState(false);\r\n const [isFollow, setIsFollow] = useState(false);\r\n const handleFollowClick = () => {\r\n setIsLoading(true);\r\n onFollowClick(!follow, user.id, suscribeCategoryId, () => {\r\n setIsCategorySubscribed(true);\r\n setFollow(true);\r\n setIsLoading(false);\r\n setIsFollow(true);\r\n }, () => setIsLoading(false))\r\n }\r\n\r\n const handleUnfollowClick = () => {\r\n setIsLoading(true);\r\n onUnfollowClick(user.id, suscribeCategoryId, () => {\r\n setIsCategorySubscribed(false);\r\n setIsLoading(false);\r\n setIsFollow(false);\r\n }, () => setIsLoading(false))\r\n }\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n setFollow(user.follow);\r\n setIsCategorySubscribed(user.isCategorySubscribed);\r\n setIsFollow((user.follow && user.isCategorySubscribed));\r\n setLoading(false);\r\n }, [user]);\r\n\r\n const onOpenProfile = (usr) => {\r\n history.push(`/${usr.slug}`);\r\n dispatch(closeEventInfoModal());\r\n }\r\n\r\n const handleClick = () => {\r\n if(isFollow) {\r\n handleUnfollowClick();\r\n } else {\r\n handleFollowClick();\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {loading && (\r\n
\r\n \r\n )}\r\n {!loading && (<>\r\n
\r\n >)}\r\n
\r\n );\r\n}\r\n\r\nEmbedTeamItem.defaultProps = {\r\n gridItemSettings: {\r\n item: {\r\n xs: 12,\r\n lg: 3,\r\n md: 3\r\n },\r\n boxPadding: {\r\n py: 1,\r\n px: 1\r\n },\r\n team: {\r\n hideContentName: false\r\n }\r\n }\r\n}\r\n\r\nexport default EmbedTeamItem;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {Box, Grid} from \"@material-ui/core\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useHistory} from 'react-router-dom';\r\nimport \"./_landing_teams.scss\"\r\nimport EmbedTeamItem from \"./EmbedTeamItem\";\r\nimport services from \"../../../../../services\";\r\nimport {showSnackbar} from \"../../../../../store/snackbar/actions\";\r\n\r\nconst EmbedTeamsComponent = ({userId, customClassName, customHeadingMessage, customTeamIds}) => {\r\n const dispatch = useDispatch();\r\n const user = useSelector(state => state.user);\r\n let teamIds = customTeamIds ? customTeamIds : [\r\n 'ae6d5576-474e-4b74-8ad9-dfe935519470',\r\n '4410cc89-840b-4fee-ba1e-9a8378065a42',\r\n '47c2415c-a945-4e31-bc7e-1d3aaa58117a', // guild\r\n '9a019670-b38b-45ea-a0a7-562436665878', // acend\r\n 'c4fee41d-5667-4b6b-af8a-f0092afede4a',\r\n 'a7ca550b-6c70-4d5f-b686-97012bdb1de0', // sentinels\r\n '5e3a2c57-f089-4e48-aa09-3ae6362ea08d',\r\n '9a9dc58c-4c20-4345-a0ae-7bbf2a2335ff', //team liquid\r\n 'c9890b87-5b3c-4df8-ab4b-978b708a6615', //gambit\r\n 'c4d87475-fd69-4c2b-9e4e-7af582225bc5', //fnatic\r\n '9f166ccf-f0cf-49dd-8c7a-a15f13735474', // smb\r\n '6c311de8-60fe-4385-a512-6050f27fa278', // koi\r\n ];\r\n if(userId === \"b8b5720c-5cd2-4638-9d51-b832b9443d34\") {\r\n teamIds = [\r\n \"ae6d5576-474e-4b74-8ad9-dfe935519470\",\r\n \"9a9dc58c-4c20-4345-a0ae-7bbf2a2335ff\",\r\n \"9a019670-b38b-45ea-a0a7-562436665878\",\r\n \"c9890b87-5b3c-4df8-ab4b-978b708a6615\",\r\n \"4410cc89-840b-4fee-ba1e-9a8378065a42\",\r\n \"c4d87475-fd69-4c2b-9e4e-7af582225bc5\",\r\n \"9858718c-b137-44f9-872b-6d15239e1ff8\",\r\n \"3d202d86-eb6c-464f-b407-7614c562f8ff\",\r\n \"49434168-8ea5-4b26-bf5a-4deb05ea02b3\",\r\n \"f724f5fd-3753-4f79-8c10-3cb6dc32c385\",\r\n \"6744c8dc-6f26-4306-a22d-821f05048dfe\",\r\n \"01139c58-7660-4eb6-b231-f7bb3537f078\",\r\n \"ed97a30b-bf97-49c2-8425-27ce16509bda\",\r\n \"6d6b5e67-2240-4510-9b26-c399adacae2f\",\r\n \"c05f5fce-aac6-4cd6-b127-86958a4155ce\",\r\n \"9f166ccf-f0cf-49dd-8c7a-a15f13735474\",\r\n\r\n ]\r\n }\r\n const {t} = useTranslation('landing');\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const valorantCategory = \"b9815deb-43a0-481d-8f7f-4c606fffc146\";\r\n const history = useHistory();\r\n const [teams, setTeams] = useState([]);\r\n\r\n const handleFollow = (needUserFollow, userMain, categoryId, onComplete, onError) => {\r\n if (user && user.hasOwnProperty('id')) {\r\n if (needUserFollow) {\r\n services.follow.create({\r\n userId: user.id,\r\n followingId: userMain\r\n })\r\n .then((resp) => {\r\n services.userSubCategory.remove(null, {\r\n query: {\r\n ownerId: userMain,\r\n categoryId: categoryId\r\n }\r\n }).then((res) => {\r\n if (onComplete) {\r\n onComplete()\r\n }\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n });\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n dispatch(showSnackbar({message: `Something went wrong!`, type: \"info\"}))\r\n })\r\n } else {\r\n services.userSubCategory.remove(null, {\r\n query: {\r\n ownerId: userMain,\r\n categoryId: categoryId\r\n }\r\n }).then((res) => {\r\n if (onComplete) {\r\n onComplete()\r\n }\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n })\r\n }\r\n } else {\r\n history.push('/login')\r\n dispatch(showSnackbar({message: `To do this you must be logged in.`, type: \"info\"}))\r\n }\r\n }\r\n\r\n const handleUnfollow = (userMain, categoryId, onComplete, onError) => {\r\n if (user && user.hasOwnProperty('id')) {\r\n services.userSubCategory.create({\r\n ownerId: userMain,\r\n categoryId: categoryId\r\n }).then((res) => {\r\n if (onComplete) {\r\n onComplete()\r\n }\r\n }).catch((error) => {\r\n if (onError) {\r\n onError()\r\n }\r\n })\r\n } else {\r\n history.push('/login')\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n services.users.find({\r\n query: {\r\n id: {\r\n $in: [...teamIds]\r\n },\r\n $limit: 20\r\n },\r\n\r\n }).then((res) => {\r\n if (user && user.hasOwnProperty('id')) {\r\n services.userCategories.find({\r\n query: {\r\n userId: {$in: [...teamIds]},\r\n categoryId: valorantCategory\r\n }\r\n }).then((res1) => {\r\n setTeams(prevState => {\r\n let teams_res = [];\r\n\r\n res.data.forEach((t) => {\r\n let categoryOwner = res1.find(x => x.ownerId === t.id);\r\n let isCategorySubscribed = categoryOwner && categoryOwner.is_subscribed;\r\n teams_res.push({\r\n ...t,\r\n isCategorySubscribed\r\n })\r\n });\r\n\r\n return teams_res;\r\n });\r\n });\r\n } else {\r\n setTeams(res.data);\r\n }\r\n });\r\n }, [userId])\r\n\r\n return (\r\n
\r\n \r\n {(teams && teams.length > 0) &&\r\n teams.map(team => )}\r\n\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EmbedTeamsComponent;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nexport const EmbedLeaguesComponent = ({userId}) => {\r\n const [upcomingEvents, setUpcomingEvents] = useState([]);\r\n const [loadingUpcoming, setLoadingUpcoming] = useState(true);\r\n\r\n const [liveEvents, setLiveEvents] = useState([]);\r\n const [loadingLiveEvents, setLoadingLiveEvents] = useState(true);\r\n\r\n const [passedEvents, setPassedEvents] = useState([]);\r\n const [loadingPassedEvents, setLoadingPassedEvents] = useState(true);\r\n\r\n const [tournaments, setTournaments] = useState([]);\r\n\r\n const fetchUpcomingEvents = (user, max, extraQuery) => {\r\n const dateObj = formatDate(new Date(), dateFormat)\r\n let data = {\r\n start: dateObj.substring(0, dateObj.length - 9) + \"00:00.000\",\r\n timezone: getCurrentTimezone(),\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.eventsLandingUpcoming.get(user, {\r\n query: data\r\n });\r\n }\r\n\r\n const fetchMatchesEvents = (user, max, is_live, extraQuery) => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 1);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 2);\r\n let data = {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n isLive: is_live\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.landingEventsLiveScores.get(userId, {\r\n query: data\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingLiveEvents(true);\r\n setLoadingUpcoming(true);\r\n setLoadingPassedEvents(true);\r\n let extraQuery = {};\r\n\r\n fetchUpcomingEvents(userId, 12, extraQuery).then((res) => {\r\n if (mounted) {\r\n setUpcomingEvents(res);\r\n setLoadingUpcoming(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n fetchMatchesEvents(userId, 12, true, extraQuery).then((res) => {\r\n if (mounted) {\r\n setLiveEvents(res);\r\n setLoadingLiveEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n fetchMatchesEvents(userId, 12, false, extraQuery).then((res) => {\r\n if (mounted) {\r\n setPassedEvents(res);\r\n setLoadingPassedEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId]);\r\n\r\n useEffect(() => {\r\n if (!loadingUpcoming && !loadingLiveEvents && !loadingPassedEvents) {\r\n let combine = [...upcomingEvents, ...liveEvents, ...passedEvents];\r\n let grouped = combine.reduce(\r\n (result, item) => ({\r\n ...result,\r\n [item['tournament']]: [\r\n ...(result[item['tournament']] || []),\r\n item,\r\n ],\r\n }),\r\n {},\r\n );\r\n setTournaments(grouped);\r\n }\r\n }, [upcomingEvents, liveEvents, passedEvents, loadingUpcoming, loadingLiveEvents, loadingPassedEvents]);\r\n\r\n return (\r\n
\r\n {Object.keys(tournaments).map((group, index) => {\r\n let tournament_image = tournaments[group][0].original_poster;\r\n\r\n return (\r\n
\r\n
\r\n
{group.replace(\"Champions Tour\", \"\")}
\r\n
\r\n )\r\n })}\r\n
\r\n );\r\n};\r\n","import React, {useEffect, useState} from 'react';\r\nimport Flag from 'react-world-flags'\r\nimport {isToday} from \"date-fns\";\r\nimport {formatDate} from \"../../../../../helpers/dateFormatter\";\r\nimport BellIconOff from '../../../../../assets/icons/actions/bell-off-grey.svg';\r\nimport {isSameDay} from 'date-fns'\r\nconst {utcToZonedTime} = require('date-fns-tz');\r\n\r\nexport const ValorantUpcomingEvent = ({ start, team_local, team_guest, original_poster, tournament}) => {\r\n const [startDate, setStartDate] = useState({\r\n original: null,\r\n es: null,\r\n arg: null,\r\n mx: null,\r\n us: null\r\n });\r\n\r\n const prepareDate = (date, tz) => {\r\n return utcToZonedTime(date, tz)\r\n }\r\n\r\n useEffect(() => {\r\n setStartDate({\r\n original: new Date(start),\r\n es: prepareDate(start, 'Europe/Madrid'),\r\n arg: prepareDate(start, 'America/Argentina/Buenos_Aires'),\r\n mx: prepareDate(start, 'America/Mexico_City'),\r\n us: prepareDate(start, 'America/Los_Angeles')\r\n });\r\n }, [start]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {team_local.name}\r\n
\r\n
\r\n
\r\n
vs
\r\n
\r\n
\r\n \r\n {formatDate(startDate.es, 'HH:mm')}h{!isSameDay(startDate.es, startDate.original) && +1 } \r\n
\r\n
\r\n \r\n {formatDate(startDate.arg, 'HH:mm')}h{!isSameDay(startDate.arg, startDate.original) && +1 } \r\n
\r\n
\r\n \r\n {formatDate(startDate.mx, 'HH:mm')}h{!isSameDay(startDate.mx, startDate.original) && +1 } \r\n
\r\n
\r\n \r\n {formatDate(startDate.us, 'HH:mm')}h{!isSameDay(startDate.us, startDate.original) && +1 } \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {team_guest.name}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {isToday(new Date(start)) ? 'Hoy' : formatDate(start, \"iii d\")}\r\n
\r\n
\r\n
\r\n
{tournament.substring(0, 32)}{tournament.length > 32 ? '...' : ''} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, {useEffect, useState} from 'react';\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nimport {ValorantUpcomingEvent} from \"./ValorantUpcomingEvent\";\r\nimport './_embed-next-events.scss';\r\nimport {useSelector} from \"react-redux\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nexport const EmbedNextEvents = ({ userId, filterByTournament }) => {\r\n const { t } = useTranslation('landing');\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [upcomingEvents, setUpcomingEvents] = useState([]);\r\n const [loadingUpcoming, setLoadingUpcoming] = useState(true);\r\n\r\n const [liveEvents, setLiveEvents] = useState([]);\r\n const [loadingLiveEvents, setLoadingLiveEvents] = useState(true);\r\n\r\n const fetchUpcomingEvents = (user, max, extraQuery) => {\r\n const dateObj = formatDate(new Date(), dateFormat)\r\n let data = {\r\n start: dateObj.substring(0, dateObj.length - 9) + \"00:00.000\",\r\n timezone: getCurrentTimezone(),\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.eventsLandingUpcoming.get(user, {\r\n query: data\r\n });\r\n }\r\n\r\n const fetchMatchesEvents = (user, max, is_live, extraQuery) => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 1);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 2);\r\n let data = {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n isLive: is_live\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.landingEventsLiveScores.get(userId, {\r\n query: data\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingUpcoming(true);\r\n setLoadingLiveEvents(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchUpcomingEvents(userId, 12, extraQuery).then((res) => {\r\n if (mounted) {\r\n setUpcomingEvents(res);\r\n setLoadingUpcoming(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n fetchMatchesEvents(userId, 12, true, extraQuery).then((res) => {\r\n if (mounted) {\r\n setLiveEvents(res);\r\n setLoadingLiveEvents(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n return (\r\n
\r\n {upcomingEvents.map(item => )}\r\n
\r\n );\r\n}\r\n","import React, {useEffect, useState} from 'react';\r\nimport BellIconOff from '../../../../../assets/icons/actions/bell-off-grey.svg';\r\n\r\nexport const ValorantResultEvent = ({ id, team_local, team_guest, original_poster, tournament}) => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {team_local.name}\r\n
\r\n
\r\n
\r\n
vs
\r\n
\r\n {team_local.scoreboard} \r\n : \r\n {team_guest.scoreboard} \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {team_guest.name}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Finished\r\n
\r\n
\r\n
\r\n
{tournament.substring(0, 32)}{tournament.length > 32 ? '...' : ''} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, {useEffect, useState} from 'react';\r\nimport {formatDate, getCurrentTimezone, ownEndOfDay, ownStartOfDay} from \"../../../../../helpers/dateFormatter\";\r\nimport services from \"../../../../../services\";\r\nimport {ValorantResultEvent} from \"./ValorantResultEvent\";\r\nimport './_embed-result-events.scss';\r\nimport {useSelector} from \"react-redux\";\r\n\r\nconst dateFormat = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\r\n\r\nexport const EmbedResultEvents = ({ userId, filterByTournament }) => {\r\n const deviceView = useSelector(state => state.deviceView);\r\n const [passedEvents, setPassedEvents] = useState([]);\r\n const [loadingPassed, setLoadingPassed] = useState(true);\r\n\r\n const fetchMatchesEvents = (user, max, is_live, extraQuery) => {\r\n const dateObj = new Date();\r\n dateObj.setDate(dateObj.getDate() - 14);\r\n const dateObjFuture = new Date();\r\n dateObjFuture.setDate(dateObjFuture.getDate() + 1);\r\n let data = {\r\n start: formatDate(ownStartOfDay(dateObj), dateFormat),\r\n end: formatDate(ownEndOfDay(dateObjFuture), dateFormat),\r\n timezone: getCurrentTimezone(),\r\n isLive: is_live\r\n }\r\n data = {\r\n ...data,\r\n ...extraQuery\r\n }\r\n if (Number.isInteger(max) && max > 0) {\r\n data.$limit = max;\r\n }\r\n return services.landingEventsLiveScores.get(userId, {\r\n query: data\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n let mounted = true;\r\n setLoadingPassed(true);\r\n let extraQuery = {};\r\n if(filterByTournament !== null) {\r\n extraQuery.location = filterByTournament;\r\n }\r\n fetchMatchesEvents(userId, 24, false, extraQuery).then((res) => {\r\n if (mounted) {\r\n setPassedEvents(res);\r\n setLoadingPassed(false);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n });\r\n return () => mounted = false;\r\n }, [userId, filterByTournament]);\r\n\r\n return (\r\n
\r\n {passedEvents.map(item => )}\r\n
\r\n );\r\n}\r\n","import './_landing_valorant.scss';\r\nimport {Box, Tab, Tabs} from \"@material-ui/core\";\r\nimport React, {useEffect, useState} from \"react\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {Helmet} from \"react-helmet\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport LandingHeader from \"../LandingMain/fragments/Header/LandingHeader\";\r\nimport {getUserProfile} from \"../../../store/user/actions\";\r\nimport {useHistory, useLocation} from \"react-router-dom\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport {Event} from \"../../../services/tracking\";\r\nimport LandingMainTabLiveNow from \"../LandingMain/fragments/LiveNowComponent/LandingMainTabLiveNow\";\r\nimport DragScrollProvider from \"drag-scroll-provider\";\r\nimport ProfileAgenda from \"../../Profile/ProfileAgenda/ProfileAgenda\";\r\nimport LandingTeamsComponent from \"../LandingMain/fragments/LandingTeamsComponent/LandingTeamsComponent\";\r\nimport EmbedTeamsComponent from \"./fragments/EmbedTeamsComponent/EmbedTeamsComponent\";\r\nimport {EmbedLeaguesComponent} from \"./fragments/EmbedLeaguesComponent/EmbedLeaguesComponent\";\r\nimport VlrLandingMatchesComponent from \"./fragments/VlrLandingMatchesComponent/VlrLandingMatchesComponent\";\r\nimport {EmbedNextEvents} from \"./fragments/EmbedNextEventsComponent/EmbedNextEvents\";\r\nimport {EmbedResultEvents} from \"./fragments/EmbedResultEventsComponent/EmbedResultEventsComponent\";\r\n\r\nconst componentName = \"EmbedValorant\"\r\n\r\nexport const EmbedValorant = () => {\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const {i18n, t} = useTranslation('landing');\r\n const deviceView = useSelector(state => state.deviceView);\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const [cssDeviceView, setCSSDeviceView] = useState(\"\");\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [userID, setUserID] = useState(undefined);\r\n const [profileData, setProfileData] = useState(undefined);\r\n const [tab, setTab] = useState(1);\r\n\r\n const [eventsWithPlayerOpen, setEventsWithPlayerOpen] = useState([]);\r\n const [eventWithClipOpen, setEventWithClipOpen] = useState(undefined);\r\n\r\n const _defaultLandingTabs = [t(\"agenda\"), \"next events\", \"results\"];\r\n const [landingTabs, _setLandingTabs] = useState(_defaultLandingTabs);\r\n const landingTabsRef = React.useRef(landingTabs);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n dispatch(getUserProfile(\"valorant.oficial\", () => {\r\n history.push('/not-found');\r\n }, (user) => {\r\n setProfileData(user);\r\n setUserID(user.id);\r\n setLoading(false);\r\n }));\r\n }, []);\r\n\r\n useEffect(() => {\r\n let class_string = darkTheme ? \"is-dark-theme\" : \"is-light-theme\"\r\n if (deviceView === \"mobile\" || deviceView === \"tablet\") {\r\n class_string += ` is-${deviceView}`;\r\n } else {\r\n class_string += ` is-desktop`;\r\n }\r\n setCSSDeviceView(class_string);\r\n }, [darkTheme, deviceView]);\r\n\r\n const handleCustomTab = (val) => {\r\n let tab = landingTabsRef.current.indexOf(val);\r\n if (tab !== -1) {\r\n setTab(tab)\r\n window.scrollTo(0, 0)\r\n }\r\n }\r\n\r\n const changeTab = (e, val) => {\r\n if (typeof val === 'number' && (val % 1) === 0) {\r\n let tab = landingTabsRef.current[val];\r\n if (tab !== undefined) {\r\n setTab(val);\r\n let slugify = tab.toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '');\r\n history.push(`#${slugify}`)\r\n Event(\"LandingMain\", \"ChangeTab\", tab);\r\n }\r\n } else {\r\n handleCustomTab(val);\r\n let tab = landingTabsRef.current.indexOf(val);\r\n if (tab !== undefined) {\r\n let slugify = landingTabsRef.current[tab].toLowerCase()\r\n .replace(/ /g, '-')\r\n .replace(/[^\\w-]+/g, '');\r\n history.push(`#${slugify}`)\r\n Event(componentName, \"ChangeTab\", landingTabsRef.current[tab]);\r\n }\r\n }\r\n }\r\n\r\n const handleOpenPlayer = (eventId) => {\r\n if (!eventsWithPlayerOpen.includes(eventId)) {\r\n setEventsWithPlayerOpen([...eventsWithPlayerOpen, eventId]);\r\n }\r\n Event(componentName, \"OpenPlayer\", eventId);\r\n };\r\n const handleOpenClip = (eventId) => {\r\n setEventWithClipOpen(eventId);\r\n Event(componentName, \"OpenClip\", eventId);\r\n };\r\n const handleDeleteOnePlayer = (eventId) => {\r\n setEventsWithPlayerOpen([...eventsWithPlayerOpen.filter(i => i !== eventId)]);\r\n Event(componentName, \"DeleteOnePlayer\", eventId);\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n Valorant Oficial · Live / Latency \r\n \r\n {i18n.language === \"es\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n {loading && (\r\n \r\n \r\n
\r\n )}\r\n\r\n {!loading && (\r\n <>\r\n \r\n
\r\n \r\n
Regions
\r\n
\r\n {['All', 'VCT EMEA', 'VCT AMÉRICA', 'VCT ASIA', 'VCT APAC'].map((item, ind) =>\r\n
\r\n
\r\n
\r\n
{item}
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n
Teams VCT
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
Leagues
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n {landingTabs && landingTabs.map((value, index) =>\r\n \r\n )}\r\n \r\n \r\n {landingTabs[tab] === \"next events\" && }\r\n {landingTabs[tab] === \"results\" && }\r\n {landingTabs[tab] === t(\"agenda\") && (\r\n \r\n {({onMouseDown, ref, scrollTo}) => (\r\n \r\n )}\r\n \r\n )}\r\n {landingTabs[tab] === t(\"teams\") &&\r\n \r\n }\r\n \r\n
\r\n >\r\n )}\r\n\r\n\r\n \r\n >\r\n );\r\n};\r\n","import React, {useEffect, useMemo} from 'react';\r\nimport {BrowserRouter as Router, Switch, Route, Redirect} from 'react-router-dom';\r\nimport Agenda from './pages/Agenda/Agenda';\r\nimport PrivacyPolicy from './pages/PrivacyPolicy/PrivacyPolicy';\r\nimport CookiesPolicy from './pages/CookiesPolicy/CookiesPolicy';\r\nimport Terms from './pages/Terms/Terms';\r\nimport Contact from './pages/Contact/Contact';\r\nimport Login from './pages/Login/Login';\r\nimport Register from './pages/Register/Register';\r\nimport Profile from './pages/Profile/Profile';\r\nimport NotFound from './pages/404NotFound/404NotFound';\r\nimport Navbar from './components/Navbar/Navbar';\r\nimport {Grid} from '@material-ui/core';\r\nimport {useSelector, useDispatch} from 'react-redux';\r\nimport {reAuthenticate} from './store/user/actions';\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport {createTheme} from \"@material-ui/core/styles\";\r\nimport {ThemeProvider} from '@material-ui/core/styles';\r\nimport themeData from './helpers/themeData';\r\nimport {openEventInfoModal, closeEventInfoModal} from './store/eventInfoModal/actions';\r\nimport Verify from \"./pages/Verify/Verify\";\r\nimport EditProfile from './pages/EditProfile/EditProfile';\r\nimport {closeAddEventModal} from './store/addEventModal/actions';\r\nimport CookitesTerms from './components/CookiesTerms/CookiesTerms';\r\nimport {unsetSelectedGroup} from './store/selectedGroup/actions';\r\nimport {unsetAgendaFilter} from './store/agendafFilter/actions';\r\nimport {setOpenedEvent} from './store/openedEvent/actions';\r\nimport {setDeviceView} from './store/deviceView/actions';\r\nimport {addNewNotification, unsetNotifications} from './store/notifications/actions';\r\nimport {setOpenedEventMessages} from \"./store/openedEventMessages/actions\";\r\nimport Footer from \"./components/Footer/Foot\";\r\nimport Settings from \"./pages/Settings/Settings\";\r\nimport Loader from \"./components/Loader/Loader\";\r\nimport LegalNotice from \"./pages/LegalNotice/LegalNotice\";\r\nimport SupervisorComponent from \"./components/Supervisor/SupervisorComponent\";\r\nimport services from \"./services\";\r\nimport {showSnackbar} from \"./store/snackbar/actions\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {closeAddAccountModal} from \"./store/addNewAccountModal/actions\";\r\nimport {closeManageMultiAccountModal} from \"./store/manageMultiAccountModal/actions\";\r\nimport {addNewInvitation, unsetInvitations} from \"./store/invitations/actions\";\r\nimport LandingMain from \"./components/special/LandingMain/LandingMain\";\r\nimport MobileSearchComponent from \"./components/MobileSearchComponent/MobileSearchComponent\";\r\nimport {Event, initGA} from \"./services/tracking\";\r\nimport DeepLinkMobile from \"./pages/Redirects/DeeplinkMobile\";\r\nimport {setEventCategories} from \"./store/eventCategories/actions\";\r\nimport NewExplorePage from \"./pages/NewExplore/NewExplorePage\";\r\nimport DiscoverCategory from \"./pages/DiscoverCategory/DiscoverCategory\";\r\nimport NewEmbedPage from \"./pages/Embed/NewEmbedPage\";\r\nimport {LandingValorant} from \"./components/special/LandingValorant/LandingValorant\";\r\nimport CustomAnalytics from \"./CustomAnalytics\";\r\nimport {EmbedValorant} from \"./components/special/EmbedValorant/EmbedValorant\";\r\n\r\nconst trackingId = \"G-R0KX97JCKM\";\r\n\r\ninitGA(trackingId);\r\n\r\nconst PrivateRoute = ({component: Component, loggedIn, onParams, ...rest}) => (\r\n
(\r\n loggedIn ? : \r\n )}/>\r\n)\r\n\r\nconst SessionRoute = ({component: Component, loggedIn, ...rest}) => (\r\n (\r\n loggedIn ? : \r\n )}/>\r\n)\r\n\r\nconst App = () => {\r\n const {t} = useTranslation(['notifications']);\r\n const loggedIn = useSelector(state => state.loggedIn);\r\n const loader = useSelector(state => state.loader);\r\n const dispatch = useDispatch()\r\n const darkTheme = useSelector(state => state.darkTheme);\r\n const cookiesTerms = useSelector(state => state.cookiesTerms);\r\n const deviceView = useSelector(state => state.deviceView);\r\n const theme = useMemo(() =>\r\n createTheme(themeData(darkTheme)), [darkTheme]\r\n );\r\n const settingsExperimental = useSelector(state => state.settings.general.experimental);\r\n\r\n useEffect(() => {\r\n dispatch(reAuthenticate())\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [loggedIn])\r\n\r\n useEffect(() => {\r\n checkScreen();\r\n window.addEventListener(\"resize\", (ev) => {\r\n ev.preventDefault();\r\n checkScreen()\r\n });\r\n dispatch(closeEventInfoModal());\r\n dispatch(setEventCategories());\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(closeEventInfoModal());\r\n dispatch(closeAddEventModal());\r\n dispatch(unsetSelectedGroup());\r\n dispatch(unsetAgendaFilter());\r\n dispatch(unsetNotifications());\r\n dispatch(unsetInvitations());\r\n dispatch(closeAddAccountModal());\r\n dispatch(closeManageMultiAccountModal());\r\n }\r\n })\r\n\r\n useEffect(() => {\r\n services.notifications.on('created', data => {\r\n dispatch(showSnackbar({message: t(\"notifications:snackbar_new_notification\"), type: \"success\"}));\r\n if (data.notificationObject.notificationChange.actionOnEntity === \"invitation\") {\r\n dispatch(addNewInvitation(data.id));\r\n } else {\r\n dispatch(addNewNotification(data.id));\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const checkScreen = () => {\r\n if (document.documentElement.clientWidth <= 600) {\r\n dispatch(setDeviceView(\"mobile\"))\r\n } else if ((document.documentElement.clientWidth > 600) && (document.documentElement.clientWidth <= 1080)) {\r\n dispatch(setDeviceView(\"tablet\"))\r\n } else if (document.documentElement.clientWidth > 1080) {\r\n dispatch(setDeviceView(\"browser\"))\r\n }\r\n }\r\n\r\n const onParams = (params) => {\r\n if (params.userID && params.eventID) {\r\n dispatch(setOpenedEventMessages(params.eventID))\r\n dispatch(setOpenedEvent(params.eventID))\r\n dispatch(openEventInfoModal())\r\n Event(\"App\", \"OpenEvent\", params.eventID);\r\n } else {\r\n dispatch(closeEventInfoModal())\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {loader.loadingSpinner && }\r\n {!loader.loadingSpinner && (\r\n \r\n \r\n \r\n \r\n {deviceView === \"mobile\" && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n }/>\r\n {/*\r\n }/>\r\n */}\r\n }/>\r\n }/>\r\n \r\n \r\n }/>\r\n }/>\r\n }/>\r\n\r\n }/>\r\n }/>\r\n }/>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n \r\n \r\n \r\n \r\n )}\r\n {!cookiesTerms && }\r\n \r\n \r\n )\r\n}\r\n\r\nexport default App;\r\n","import services from '../../services/';\r\n\r\nexport const setEventCategories = () => {\r\n return dispatch => {\r\n services.eventCategories.find({\r\n query: { $limit: 50, $sort: { text: 1 } }\r\n }).then((resp) => {\r\n dispatch({\r\n type: 'SET_EVENT_CATEGORIES',\r\n payload: resp.data.map(x => ({ id: x.id, cover_url: x.cover_url, parentId: x.parentId, text: x.text, slug: x.slug }))\r\n })\r\n }).catch((error) => {\r\n console.log(error)\r\n })\r\n }\r\n}\r\n","export const setAgendaFilter = (data) => {\r\n return dispatch => {\r\n dispatch({type: 'SET_AGENDA_FILTER', payload: data})\r\n }\r\n}\r\n\r\nexport const unsetAgendaFilter = () => {\r\n return dispatch => {\r\n dispatch({type: 'UNSET_AGENDA_FILTER'})\r\n }\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import './wdyr';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './assets/scss/index.scss'\r\nimport App from './App';\r\nimport {store, persistor} from './store';\r\nimport {PersistGate} from 'redux-persist/integration/react';\r\nimport {Provider} from 'react-redux';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport './helpers/internationalization';\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\nserviceWorker.unregister();\r\n","module.exports = __webpack_public_path__ + \"static/media/icon-visibility-private-red.8bee689d.svg\";","module.exports = __webpack_public_path__ + \"static/media/phoneColored.9b9c1696.svg\";","module.exports = __webpack_public_path__ + \"static/media/musicColored.745e705a.svg\";","module.exports = __webpack_public_path__ + \"static/media/streamColored.c03b339b.svg\";","module.exports = __webpack_public_path__ + \"static/media/sportsColored.559d6a5a.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-hyperlink.aa76bcbc.svg\";","module.exports = __webpack_public_path__ + \"static/media/in.d1c4ee4f.svg\";","module.exports = __webpack_public_path__ + \"static/media/insta.4587adeb.svg\";","module.exports = __webpack_public_path__ + \"static/media/youtube.316a9ea1.svg\";","module.exports = __webpack_public_path__ + \"static/media/twitch-white.6d2d44b6.svg\";","module.exports = __webpack_public_path__ + \"static/media/phone.64e425ae.svg\";","module.exports = __webpack_public_path__ + \"static/media/book-icon.fbcdd16f.svg\";","module.exports = __webpack_public_path__ + \"static/media/book-icon-colored.2d83ed4a.svg\";","module.exports = __webpack_public_path__ + \"static/media/music.731be942.svg\";","module.exports = __webpack_public_path__ + \"static/media/stream.f82cb65b.svg\";","module.exports = __webpack_public_path__ + \"static/media/sports.09f61f87.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo_latency.351df538.svg\";","module.exports = __webpack_public_path__ + \"static/media/google-plus.5984b37f.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-pin-location.47b02e9d.svg\";","module.exports = __webpack_public_path__ + \"static/media/ping-off.9212d428.svg\";","module.exports = __webpack_public_path__ + \"static/media/ping-on.bd15cb52.svg\";","module.exports = __webpack_public_path__ + \"static/media/agenda-off-colored.5940ebc8.svg\";","module.exports = __webpack_public_path__ + \"static/media/agenda-on.f9ccffed.svg\";","module.exports = __webpack_public_path__ + \"static/media/basketball-icon.786dc990.svg\";","module.exports = __webpack_public_path__ + \"static/media/fashion-icon.d665b93c.svg\";","module.exports = __webpack_public_path__ + \"static/media/gamepad-icon.6ba476d5.svg\";","module.exports = __webpack_public_path__ + \"static/media/music-icon.6483d990.svg\";","module.exports = __webpack_public_path__ + \"static/media/tv-icon.6283ba74.svg\";","module.exports = __webpack_public_path__ + \"static/media/basketball-icon-colored.db0ac64b.svg\";","module.exports = __webpack_public_path__ + \"static/media/fashion-icon-colored.1cc66ca9.svg\";","module.exports = __webpack_public_path__ + \"static/media/gamepad-icon-colored.3306e1ab.svg\";","module.exports = __webpack_public_path__ + \"static/media/music-icon-colored.644ef656.svg\";","module.exports = __webpack_public_path__ + \"static/media/tv-icon-colored.963c2ea8.svg\";","module.exports = __webpack_public_path__ + \"static/media/twitch-dark.cf8ddd11.svg\";","module.exports = __webpack_public_path__ + \"static/media/comments.683a136b.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo_latency_complex.aa7b2211.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo_isotipo_pinging.0d5dae4a.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoFWNgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0QRiF8AAAACXBIWXMAAAsTAAALEwEAmpwYAAAE7WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTAzLTE2VDEwOjU3OjEyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0wMy0xNlQxMDo1OTowMiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wMy0xNlQxMDo1OTowMiswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YzFkOGVlOTktMjk4Zi04YTRkLThiN2UtMTIzNDQyNjJiM2JmIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOmMxZDhlZTk5LTI5OGYtOGE0ZC04YjdlLTEyMzQ0MjYyYjNiZiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmMxZDhlZTk5LTI5OGYtOGE0ZC04YjdlLTEyMzQ0MjYyYjNiZiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YzFkOGVlOTktMjk4Zi04YTRkLThiN2UtMTIzNDQyNjJiM2JmIiBzdEV2dDp3aGVuPSIyMDIyLTAzLTE2VDEwOjU3OjEyKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+tlD6/QAAAVpJREFUSA1j+P//PwMtMaYAPnB5vwnDxf2bGc5s5mIgAEi34PJBTaDhr4H4P8PFA1sZrq5io54F5/bKAw1+DDEcjjcxnDnDSrkFl/eIAw27hWY4DC9nWLWKmXwLbhzhZbi0/xQOwyH40v7FDP8bmEi34P5+DqAB+/AaDsMXDswEamYk3oL9+1mAGjcQZTgcH5iKbAluC0CKLh5YSJrhMJ/s7yBsAUgROYYjcAvpyfTi/u84DQTFFcX54NL+ZzgtOHNIknILLh44i9OCc3u0qGDB/tk4LTi/z5pyCy4ciMWdcvYlUW7B1f08QMO+4LBkNnVK04v7e3BYcIU6Flw6LIgjNf0DimtQbgEkNdkC8U/MAm/fJOpYAPbJPi+god/QLPkExDLUsQASHzrAIuUCqi8O7CSusCMWgCqaS/sTUOuLfbNgdQPlFqDWenpAw6vADQKQJcD6G6cF1MYADsvegTw04okAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/arrow_left.24e94e8d.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow_right.b1f0abd8.svg\";","module.exports = __webpack_public_path__ + \"static/media/Heart.fbce26e7.svg\";","module.exports = __webpack_public_path__ + \"static/media/HeartFill.d0473959.svg\";","module.exports = __webpack_public_path__ + \"static/media/group.6bd1c681.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow_down.7730de2c.svg\";","module.exports = __webpack_public_path__ + \"static/media/commentsGrey.4826eafd.svg\";","module.exports = __webpack_public_path__ + \"static/media/chevron-down.72e39f5e.svg\";","module.exports = __webpack_public_path__ + \"static/media/minus.52b9b84d.svg\";","module.exports = __webpack_public_path__ + \"static/media/apple.fc1dbcbd.svg\";","module.exports = __webpack_public_path__ + \"static/media/balloon.6efce246.svg\";","module.exports = __webpack_public_path__ + \"static/media/notification-on.41434a18.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-guests.e094e426.svg\";","module.exports = __webpack_public_path__ + \"static/media/attendees_colored.5e06f3e0.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-tags.afe1c33c.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-visibility-public.602d112a.svg\";","module.exports = __webpack_public_path__ + \"static/media/cars-icon.f758d198.svg\";","module.exports = __webpack_public_path__ + \"static/media/esports-icon.a9426627.svg\";","module.exports = __webpack_public_path__ + \"static/media/cars-icon-colored.5dc193a1.svg\";","module.exports = __webpack_public_path__ + \"static/media/esports-icon-colored.713827a8.svg\";","module.exports = __webpack_public_path__ + \"static/media/champions2021.0e5c2c83.jpg\";"],"sourceRoot":""}