fix(#479): redirect to home when no route matched (#225)

keep-around/af30b88d367751c9e05a735e4a0467a96238ef47
Mirlan 5 years ago committed by GitHub
parent ab00d6089a
commit 4ae42594db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 82
      src/features/App/AuthenticatedApp.tsx
  2. 2
      src/features/ExtendedSearchPage/index.tsx
  3. 7
      src/features/HomePage/index.tsx
  4. 20
      src/features/MatchPage/index.tsx
  5. 13
      src/features/PlayerPage/index.tsx
  6. 13
      src/features/TeamPage/index.tsx
  7. 13
      src/features/TournamentPage/index.tsx
  8. 9
      src/features/UserAccount/index.tsx

@ -6,69 +6,55 @@ import {
} from 'react-router-dom' } from 'react-router-dom'
import { indexLexics } from 'config/lexics/indexLexics' import { indexLexics } from 'config/lexics/indexLexics'
import { useLexicsConfig } from 'features/LexicsStore'
import { PAGES } from 'config' import { PAGES } from 'config'
import { devices } from 'config/devices'
import { useLexicsConfig } from 'features/LexicsStore'
import { HomePage } from 'features/HomePage' import { HomePage } from 'features/HomePage'
import { TeamPage } from 'features/TeamPage' import { TeamPage } from 'features/TeamPage'
import { MatchPage } from 'features/MatchPage' import { MatchPage } from 'features/MatchPage'
import { PlayerPage } from 'features/PlayerPage' import { PlayerPage } from 'features/PlayerPage'
import { TournamentPage } from 'features/TournamentPage' import { TournamentPage } from 'features/TournamentPage'
import { ExtendedSearchStore, ExtendedSearchPage } from 'features/ExtendedSearchPage' import { ExtendedSearchStore, ExtendedSearchPage } from 'features/ExtendedSearchPage'
import { UserAccount } from 'features/UserAccount' import { UserAccountForm } from 'features/UserAccount'
import { MatchSwitchesStore } from 'features/MatchSwitches'
import { MainWrapper } from 'features/MainWrapper'
import { UserFavorites } from 'features/UserFavorites' import { MatchSwitchesStore } from 'features/MatchSwitches'
import { UserFavoritesStore } from 'features/UserFavorites/store' import { UserFavoritesStore } from 'features/UserFavorites/store'
import { useMediaQuery } from 'features/MediaQuery'
import { FormStore } from 'features/FormStore'
export const AuthenticatedApp = () => { export const AuthenticatedApp = () => {
useLexicsConfig(indexLexics) useLexicsConfig(indexLexics)
const isMobile = useMediaQuery({ query: devices.tablet })
return ( return (
<MatchSwitchesStore> <MatchSwitchesStore>
<Switch> <UserFavoritesStore>
<Route path={PAGES.useraccount}> <ExtendedSearchStore>
<UserAccountForm /> {/* в Switch как прямой children можно рендерить только Route или Redirect */}
</Route> <Switch>
<UserFavoritesStore> <Route path={PAGES.useraccount}>
<ExtendedSearchStore> <UserAccountForm />
<MainWrapper> </Route>
{!isMobile && <UserFavorites />} <Route exact path={PAGES.home}>
<Route exact path={PAGES.home}> <HomePage />
<HomePage /> </Route>
</Route> <Route path={`/:sportName${PAGES.tournament}/:pageId`}>
<TournamentPage />
<Route path={`/:sportName${PAGES.tournament}/:pageId`}> </Route>
<TournamentPage /> <Route path={`/:sportName${PAGES.team}/:pageId`}>
</Route> <TeamPage />
</Route>
<Route path={`/:sportName${PAGES.team}/:pageId`}> <Route path={`/:sportName${PAGES.player}/:pageId`}>
<TeamPage /> <PlayerPage />
</Route> </Route>
<Route path={`/:sportName${PAGES.player}/:pageId`}> <Route path={`/:sportName${PAGES.match}/:pageId`}>
<PlayerPage /> <MatchPage />
</Route> </Route>
<Route path={`/:sportName${PAGES.match}/:pageId`}> <Route path={PAGES.extendedSearch}>
<MatchPage /> <ExtendedSearchPage />
</Route> </Route>
<Route path={PAGES.extendedSearch}> <Redirect to={PAGES.home} />
<ExtendedSearchPage /> </Switch>
</Route> </ExtendedSearchStore>
</MainWrapper> </UserFavoritesStore>
</ExtendedSearchStore>
</UserFavoritesStore>
<Redirect to={PAGES.home} />
</Switch>
</MatchSwitchesStore> </MatchSwitchesStore>
) )
} }
export const UserAccountForm = () => (
<FormStore>
<UserAccount />
</FormStore>
)

@ -3,6 +3,7 @@ import React, { Fragment } from 'react'
import { devices } from 'config' import { devices } from 'config'
import { useMediaQuery } from 'features/MediaQuery' import { useMediaQuery } from 'features/MediaQuery'
import { UserFavorites } from 'features/UserFavorites'
import { MobileHeader } from './components/MobileHeader' import { MobileHeader } from './components/MobileHeader'
import { DesktopHeader } from './components/DesktopHeader' import { DesktopHeader } from './components/DesktopHeader'
@ -18,6 +19,7 @@ export const ExtendedSearchPage = () => {
const isMobile = useMediaQuery({ query: devices.tablet }) const isMobile = useMediaQuery({ query: devices.tablet })
return ( return (
<Fragment> <Fragment>
{!isMobile && <UserFavorites />}
{ {
isMobile isMobile
? <MobileHeader /> ? <MobileHeader />

@ -17,6 +17,8 @@ import {
HeaderMobileBottom, HeaderMobileBottom,
} from 'features/HeaderMobile/styled' } from 'features/HeaderMobile/styled'
import { SportFilterWrapper } from 'features/ProfileHeader/styled' import { SportFilterWrapper } from 'features/ProfileHeader/styled'
import { MainWrapper } from 'features/MainWrapper'
import { UserFavorites } from 'features/UserFavorites'
import { useHomePage } from './hooks' import { useHomePage } from './hooks'
import { Header } from './components/Header' import { Header } from './components/Header'
@ -26,7 +28,7 @@ const Home = () => {
const isMobile = useMediaQuery({ query: devices.tablet }) const isMobile = useMediaQuery({ query: devices.tablet })
const { fetchMatches } = useHomePage() const { fetchMatches } = useHomePage()
return ( return (
<Fragment> <MainWrapper>
{ {
isMobile isMobile
? <HeaderMobile /> ? <HeaderMobile />
@ -44,6 +46,7 @@ const Home = () => {
</Fragment> </Fragment>
) )
} }
{!isMobile && <UserFavorites />}
<Content> <Content>
<Matches fetch={fetchMatches} /> <Matches fetch={fetchMatches} />
</Content> </Content>
@ -55,7 +58,7 @@ const Home = () => {
</SportFilterWrapper> </SportFilterWrapper>
) )
} }
</Fragment> </MainWrapper>
) )
} }

@ -1,16 +1,21 @@
import React, { Fragment } from 'react' import React from 'react'
import isEmpty from 'lodash/isEmpty' import isEmpty from 'lodash/isEmpty'
import { devices } from 'config'
import { StreamPlayer } from 'features/StreamPlayer' import { StreamPlayer } from 'features/StreamPlayer'
import { MultiSourcePlayer } from 'features/MultiSourcePlayer' import { MultiSourcePlayer } from 'features/MultiSourcePlayer'
import { ProfileHeader } from 'features/ProfileHeader' import { ProfileHeader } from 'features/ProfileHeader'
import { MainWrapper } from 'features/MainWrapper'
import { UserFavorites } from 'features/UserFavorites'
import { useMediaQuery } from 'features/MediaQuery'
import { MatchProfileCard } from './MatchProfileCard' import { MatchProfileCard } from './MatchProfileCard'
import { usePlayerProgressReporter } from './hooks/usePlayerProgressReporter' import { usePlayerProgressReporter } from './hooks/usePlayerProgressReporter'
import { useMatchProfile } from './hooks/useMatchProfile' import { useMatchProfile } from './hooks/useMatchProfile'
import { useVideoData } from './hooks/useVideoData' import { useVideoData } from './hooks/useVideoData'
import { MainWrapper, Container } from './styled' import { MainWrapper as Wrapper, Container } from './styled'
export const MatchPage = () => { export const MatchPage = () => {
const profile = useMatchProfile() const profile = useMatchProfile()
@ -22,13 +27,16 @@ export const MatchPage = () => {
} = useVideoData() } = useVideoData()
const { onPlayerProgressChange, onPlayingChange } = usePlayerProgressReporter() const { onPlayerProgressChange, onPlayingChange } = usePlayerProgressReporter()
const isMobile = useMediaQuery({ query: devices.tablet })
const isLiveMatch = Boolean(url) && !isLastPlayPositionFetching const isLiveMatch = Boolean(url) && !isLastPlayPositionFetching
const isFinishedMatch = !isEmpty(videos) && !isLastPlayPositionFetching const isFinishedMatch = !isEmpty(videos) && !isLastPlayPositionFetching
return ( return (
<Fragment> <MainWrapper>
{!isMobile && <UserFavorites />}
<ProfileHeader /> <ProfileHeader />
<MainWrapper> <Wrapper>
<MatchProfileCard profile={profile} /> <MatchProfileCard profile={profile} />
<Container> <Container>
{ {
@ -52,7 +60,7 @@ export const MatchPage = () => {
) )
} }
</Container> </Container>
</MainWrapper> </Wrapper>
</Fragment> </MainWrapper>
) )
} }

@ -1,10 +1,13 @@
import React, { Fragment } from 'react' import React from 'react'
import { ProfileTypes } from 'config' import { ProfileTypes, devices } from 'config'
import { ProfileHeader } from 'features/ProfileHeader' import { ProfileHeader } from 'features/ProfileHeader'
import { ProfileCard } from 'features/ProfileCard' import { ProfileCard } from 'features/ProfileCard'
import { Matches } from 'features/Matches' import { Matches } from 'features/Matches'
import { UserFavorites } from 'features/UserFavorites'
import { MainWrapper } from 'features/MainWrapper'
import { useMediaQuery } from 'features/MediaQuery'
import { usePlayerPage } from './hooks' import { usePlayerPage } from './hooks'
import { Content } from './styled' import { Content } from './styled'
@ -15,9 +18,11 @@ export const PlayerPage = () => {
infoItems, infoItems,
titleObj, titleObj,
} = usePlayerPage() } = usePlayerPage()
const isMobile = useMediaQuery({ query: devices.tablet })
return ( return (
<Fragment> <MainWrapper>
{!isMobile && <UserFavorites />}
<ProfileHeader /> <ProfileHeader />
<Content> <Content>
<ProfileCard <ProfileCard
@ -27,6 +32,6 @@ export const PlayerPage = () => {
/> />
<Matches fetch={fetchMatches} /> <Matches fetch={fetchMatches} />
</Content> </Content>
</Fragment> </MainWrapper>
) )
} }

@ -1,10 +1,13 @@
import React, { Fragment } from 'react' import React from 'react'
import { ProfileTypes } from 'config' import { ProfileTypes, devices } from 'config'
import { ProfileHeader } from 'features/ProfileHeader' import { ProfileHeader } from 'features/ProfileHeader'
import { ProfileCard } from 'features/ProfileCard' import { ProfileCard } from 'features/ProfileCard'
import { Matches } from 'features/Matches' import { Matches } from 'features/Matches'
import { UserFavorites } from 'features/UserFavorites'
import { MainWrapper } from 'features/MainWrapper'
import { useMediaQuery } from 'features/MediaQuery'
import { useTeamPage } from './hooks' import { useTeamPage } from './hooks'
import { Content } from './styled' import { Content } from './styled'
@ -15,9 +18,11 @@ export const TeamPage = () => {
infoItems, infoItems,
titleObj, titleObj,
} = useTeamPage() } = useTeamPage()
const isMobile = useMediaQuery({ query: devices.tablet })
return ( return (
<Fragment> <MainWrapper>
{!isMobile && <UserFavorites />}
<ProfileHeader /> <ProfileHeader />
<Content> <Content>
<ProfileCard <ProfileCard
@ -27,6 +32,6 @@ export const TeamPage = () => {
/> />
<Matches fetch={fetchMatches} /> <Matches fetch={fetchMatches} />
</Content> </Content>
</Fragment> </MainWrapper>
) )
} }

@ -1,10 +1,13 @@
import React, { Fragment } from 'react' import React from 'react'
import { ProfileTypes } from 'config' import { ProfileTypes, devices } from 'config'
import { ProfileHeader } from 'features/ProfileHeader' import { ProfileHeader } from 'features/ProfileHeader'
import { ProfileCard } from 'features/ProfileCard' import { ProfileCard } from 'features/ProfileCard'
import { Matches } from 'features/Matches' import { Matches } from 'features/Matches'
import { MainWrapper } from 'features/MainWrapper'
import { UserFavorites } from 'features/UserFavorites'
import { useMediaQuery } from 'features/MediaQuery'
import { useTournamentPage } from './hooks' import { useTournamentPage } from './hooks'
import { Content } from './styled' import { Content } from './styled'
@ -15,9 +18,11 @@ export const TournamentPage = () => {
infoItems, infoItems,
titleObj, titleObj,
} = useTournamentPage() } = useTournamentPage()
const isMobile = useMediaQuery({ query: devices.tablet })
return ( return (
<Fragment> <MainWrapper>
{!isMobile && <UserFavorites />}
<ProfileHeader /> <ProfileHeader />
<Content> <Content>
<ProfileCard <ProfileCard
@ -27,6 +32,6 @@ export const TournamentPage = () => {
/> />
<Matches fetch={fetchMatches} /> <Matches fetch={fetchMatches} />
</Content> </Content>
</Fragment> </MainWrapper>
) )
} }

@ -9,6 +9,7 @@ import { Form } from 'features/Login/styled'
import { T9n } from 'features/T9n' import { T9n } from 'features/T9n'
import { Error } from 'features/Common/Input/styled' import { Error } from 'features/Common/Input/styled'
import { useLexicsConfig } from 'features/LexicsStore' import { useLexicsConfig } from 'features/LexicsStore'
import { FormStore } from 'features/FormStore'
import { useUserInfo } from './hooks/useUserInfo' import { useUserInfo } from './hooks/useUserInfo'
import { useUserSubscriptions } from './hooks/useUserSubscriptions' import { useUserSubscriptions } from './hooks/useUserSubscriptions'
@ -32,7 +33,7 @@ import {
const labelWidth = 110 const labelWidth = 110
export const UserAccount = () => { const UserAccount = () => {
useLexicsConfig(userAccountLexics) useLexicsConfig(userAccountLexics)
const { const {
@ -215,3 +216,9 @@ export const UserAccount = () => {
</UserAccountComponentWrapper> </UserAccountComponentWrapper>
) )
} }
export const UserAccountForm = () => (
<FormStore>
<UserAccount />
</FormStore>
)

Loading…
Cancel
Save