rsnext/examples/with-iron-session/lib/useUser.ts
Vincent Voyer 942c15129c
docs(examples): Update with-iron-session to latest iron-session API (#30956)
Co-authored-by: Lee Robinson <me@leerob.io>
2021-11-09 09:30:15 -06:00

28 lines
899 B
TypeScript

import { useEffect } from 'react'
import Router from 'next/router'
import useSWR from 'swr'
import { User } from 'pages/api/user'
export default function useUser({
redirectTo = '',
redirectIfFound = false,
} = {}) {
const { data: user, mutate: mutateUser } = useSWR<User>('/api/user')
useEffect(() => {
// if no redirect needed, just return (example: already on /dashboard)
// if user data not yet there (fetch in progress, logged in or not) then don't do anything yet
if (!redirectTo || !user) return
if (
// If redirectTo is set, redirect if the user was not found.
(redirectTo && !redirectIfFound && !user?.isLoggedIn) ||
// If redirectIfFound is also set, redirect if the user was found
(redirectIfFound && user?.isLoggedIn)
) {
Router.push(redirectTo)
}
}, [user, redirectIfFound, redirectTo])
return { user, mutateUser }
}