focalboard/webapp/src/route.tsx
Ishan Masdekar 3a135a30e7
fix: handles null or empty clientConfig (#3237)
Adds a check to see if the clientConfig object is null or empty.
If null or empty clientConfig then sets the disableTour to false.

Related Issue: #3236

Signed-off by: imasdekar <imasdekar@disroot.org>
2022-06-16 09:32:08 -04:00

77 lines
2.5 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react'
import {
Redirect,
Route,
} from 'react-router-dom'
import {Utils} from './utils'
import {getLoggedIn, getMe} from './store/users'
import {useAppSelector} from './store/hooks'
import {UserSettingKey} from './userSettings'
import {IUser, UserPropPrefix} from './user'
import {getClientConfig} from './store/clientConfig'
import {ClientConfig} from './config/clientConfig'
type RouteProps = {
path: string|string[]
exact?: boolean
render?: (props: any) => React.ReactElement
component?: React.ComponentType
children?: React.ReactElement
getOriginalPath?: (match: any) => string
loginRequired?: boolean
}
function FBRoute(props: RouteProps) {
const loggedIn = useAppSelector<boolean|null>(getLoggedIn)
const me = useAppSelector<IUser|null>(getMe)
const clientConfig = useAppSelector<ClientConfig>(getClientConfig)
let redirect: React.ReactNode = null
const disableTour = clientConfig?.featureFlags?.disableTour || false
const showWelcomePage = !disableTour &&
Utils.isFocalboardPlugin() &&
(me?.id !== 'single-user') &&
props.path !== '/welcome' &&
loggedIn === true &&
!me?.props[UserPropPrefix + UserSettingKey.WelcomePageViewed]
if (showWelcomePage) {
redirect = ({match}: any) => {
if (props.getOriginalPath) {
return <Redirect to={`/welcome?r=${props.getOriginalPath!(match)}`}/>
}
return <Redirect to='/welcome'/>
}
}
if (redirect === null && loggedIn === false && props.loginRequired) {
redirect = ({match}: any) => {
if (props.getOriginalPath) {
let redirectUrl = '/' + Utils.buildURL(props.getOriginalPath!(match))
if (redirectUrl.indexOf('//') === 0) {
redirectUrl = redirectUrl.slice(1)
}
const loginUrl = `/error?id=not-logged-in&r=${encodeURIComponent(redirectUrl)}`
return <Redirect to={loginUrl}/>
}
return <Redirect to='/error?id=not-logged-in'/>
}
}
return (
<Route
path={props.path}
render={props.render}
component={props.component}
exact={props.exact}
>
{redirect || props.children}
</Route>
)
}
export default React.memo(FBRoute)