burger-online
35 строк · 979.0 Байт
1import React from 'react'
2import {useSelector} from 'react-redux'
3import {Navigate, useLocation} from 'react-router-dom'
4import Preloader from '../components/UI/preloader/preloader'
5import {userStore} from '../redux/user/slice'
6
7type TProtectedProps = {
8onlyUnAuth?: boolean
9element: JSX.Element
10}
11
12const Protected: React.FC<TProtectedProps> = ({onlyUnAuth = false, element}) => {
13const {isAuthChecked, user} = useSelector(userStore)
14
15const location = useLocation()
16
17if (!isAuthChecked) {
18return <Preloader />
19}
20
21if (onlyUnAuth && user) {
22const {from}: {from: {pathname: string}} = location.state || {from: {pathname: '/'}}
23return <Navigate to={from.pathname} />
24}
25
26if (!onlyUnAuth && !user) {
27return <Navigate to='/login' state={{from: {pathname: location}}} />
28}
29return element
30}
31
32export const OnlyAuth = Protected
33export const OnlyUnAuth: React.FC<TProtectedProps> = ({element}) => (
34<Protected onlyUnAuth={true} element={element} />
35)
36