38 lines
953 B
TypeScript
38 lines
953 B
TypeScript
|
|
import { trpc } from "@/trpc"
|
||
|
|
import Cookies from "js-cookie"
|
||
|
|
import { useCallback, useEffect, useMemo } from "react"
|
||
|
|
import { useNavigate } from "react-router"
|
||
|
|
import { useLocalStorage } from "usehooks-ts"
|
||
|
|
|
||
|
|
export function useSession() {
|
||
|
|
const [orgId, setOrgId, removeOrgId] = useLocalStorage("orgId", "")
|
||
|
|
const user = trpc.user.me.useQuery()
|
||
|
|
|
||
|
|
const organization = useMemo(() => {
|
||
|
|
return (
|
||
|
|
user.data?.UserOrganizations.find((uo) => uo.organizationId === orgId)
|
||
|
|
?.Organization || null
|
||
|
|
)
|
||
|
|
}, [user.data, orgId])
|
||
|
|
|
||
|
|
const navigate = useNavigate()
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
if (!user.isLoading && !user.data) {
|
||
|
|
navigate("/")
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!orgId) {
|
||
|
|
navigate("/")
|
||
|
|
}
|
||
|
|
}, [orgId, user.data, navigate, user.isLoading])
|
||
|
|
|
||
|
|
const logout = useCallback(() => {
|
||
|
|
removeOrgId()
|
||
|
|
Cookies.remove("token")
|
||
|
|
window.location.href = "/"
|
||
|
|
}, [removeOrgId])
|
||
|
|
|
||
|
|
return { orgId, setOrgId, user, organization, logout }
|
||
|
|
}
|