feat(ott-2113): change redirect after auth

keep-around/efafe8ea63ccf54ee38a4c03f17b8468f4023163
nevainero 4 years ago
parent 6537ca4b49
commit efafe8ea63
  1. 48
      src/features/AuthStore/hooks/useAuth.tsx

@ -13,7 +13,9 @@ import isString from 'lodash/isString'
import { PAGES } from 'config' import { PAGES } from 'config'
import { addLanguageUrlParam } from 'helpers/languageUrlParam' import {
addLanguageUrlParam,
} from 'helpers/languageUrlParam'
import { writeToken, removeToken } from 'helpers/token' import { writeToken, removeToken } from 'helpers/token'
import { setCookie, removeCookie } from 'helpers/cookie' import { setCookie, removeCookie } from 'helpers/cookie'
import { isMatchPage } from 'helpers/isMatchPage' import { isMatchPage } from 'helpers/isMatchPage'
@ -21,7 +23,9 @@ import { isMatchPage } from 'helpers/isMatchPage'
import { useLocalStore, useToggle } from 'hooks' import { useLocalStore, useToggle } from 'hooks'
import { useLexicsStore } from 'features/LexicsStore' import { useLexicsStore } from 'features/LexicsStore'
import { queryParamStorage } from 'features/QueryParamsStorage' import {
queryParamStorage,
} from 'features/QueryParamsStorage'
import { getClientSettings } from '../helpers' import { getClientSettings } from '../helpers'
@ -72,13 +76,20 @@ export const useAuth = () => {
markUserLoaded, markUserLoaded,
]) ])
const [matchPage, setMatchPage] = useLocalStore({ const [page, setPage] = useLocalStore({
clearOnUnmount: true, clearOnUnmount: true,
defaultValue: '', defaultValue: '',
key: 'matchBackLocation', key: 'matchBackLocation',
validator: isString, validator: isString,
}) })
const [search, setSearch] = useLocalStore({
clearOnUnmount: true,
defaultValue: '',
key: 'searchBack',
validator: isString,
})
const signinRedirectCallback = useCallback(() => { const signinRedirectCallback = useCallback(() => {
userManager.signinRedirectCallback() userManager.signinRedirectCallback()
.then((loadedUser) => { .then((loadedUser) => {
@ -86,19 +97,23 @@ export const useAuth = () => {
queryParamStorage.clear() queryParamStorage.clear()
history.replace(PAGES.home) history.replace(PAGES.home)
markUserLoaded() markUserLoaded()
if (matchPage) { if (page) {
history.push(matchPage) const route = `${page}${page === '/' ? search : ''}`
setMatchPage('') history.push(route)
setPage('')
setSearch('')
} }
}).catch(login) }).catch(login)
}, [ }, [
userManager, userManager,
history, login,
setMatchPage,
storeUser, storeUser,
history,
markUserLoaded, markUserLoaded,
matchPage, page,
login, search,
setPage,
setSearch,
]) ])
useEffect(() => { useEffect(() => {
@ -109,17 +124,19 @@ export const useAuth = () => {
checkUser().catch(() => { checkUser().catch(() => {
if (!isMatchPage()) { if (!isMatchPage()) {
login() login()
setMatchPage('')
} else {
setMatchPage(history.location.pathname)
} }
if (history.location.pathname === '/') {
setSearch(history.location.search)
}
setPage(history.location.pathname)
}) })
} }
}, [ }, [
checkUser, checkUser,
signinRedirectCallback, signinRedirectCallback,
login, login,
setMatchPage, setPage,
setSearch,
history, history,
]) ])
@ -140,7 +157,8 @@ export const useAuth = () => {
}, [userManager, logout]) }, [userManager, logout])
useEffect(() => { useEffect(() => {
// событие срабатывает после получения токена(первый логин и обновление токена) // событие срабатывает после получения токена(первый
// логин и обновление токена)
userManager.events.addUserLoaded(storeUser) userManager.events.addUserLoaded(storeUser)
return () => userManager.events.removeUserLoaded(storeUser) return () => userManager.events.removeUserLoaded(storeUser)
}, [userManager, storeUser]) }, [userManager, storeUser])

Loading…
Cancel
Save