131421a0f1
Docker Release / Check web and api (push) Waiting to run
Docker Release / Resolve release tag (push) Blocked by required conditions
Docker Release / Build and publish all-in-one (push) Blocked by required conditions
Docker Release / Build and publish api (push) Blocked by required conditions
Docker Release / Build and publish web (push) Blocked by required conditions
Docker Release / Build and publish dovecot (push) Blocked by required conditions
Docker Release / Build and publish postfix (push) Blocked by required conditions
Docker Release / Build and publish rspamd (push) Blocked by required conditions
Docker Release / Create GitHub release (push) Blocked by required conditions
20 lines
742 B
TypeScript
20 lines
742 B
TypeScript
import React from "react"
|
|
import { Navigate, useLocation } from "react-router-dom"
|
|
import { useMe } from "@/hooks/use-me"
|
|
import { AuthLoading, AuthError } from "@/components/auth-states"
|
|
import { isUnauthorizedError } from "@/lib/api"
|
|
|
|
export function AuthGuard({ children }: { children: React.ReactNode }) {
|
|
const me = useMe()
|
|
const location = useLocation()
|
|
|
|
if (me.isLoading) return <AuthLoading />
|
|
if (me.isError && !isUnauthorizedError(me.error)) return <AuthError message={me.error.message} onRetry={() => me.refetch()} />
|
|
if (me.isError || !me.data?.user) {
|
|
const from = `${location.pathname}${location.search}${location.hash}`
|
|
return <Navigate to="/login" replace state={{ from }} />
|
|
}
|
|
|
|
return <>{children}</>
|
|
}
|