Spaces:
Build error
Build error
import { useEffect } from "react"; | |
import { useLocation, useNavigate } from "react-router"; | |
import { useIsAuthed } from "./query/use-is-authed"; | |
import { LoginMethod, setLoginMethod } from "#/utils/local-storage"; | |
import { useConfig } from "./query/use-config"; | |
/** | |
* Hook to handle authentication callback and set login method after successful authentication | |
*/ | |
export const useAuthCallback = () => { | |
const location = useLocation(); | |
const { data: isAuthed, isLoading: isAuthLoading } = useIsAuthed(); | |
const { data: config } = useConfig(); | |
const navigate = useNavigate(); | |
useEffect(() => { | |
// Only run in SAAS mode | |
if (config?.APP_MODE !== "saas") { | |
return; | |
} | |
// Wait for auth to load | |
if (isAuthLoading) { | |
return; | |
} | |
// Only set login method if authentication was successful | |
if (!isAuthed) { | |
return; | |
} | |
// Check if we have a login_method query parameter | |
const searchParams = new URLSearchParams(location.search); | |
const loginMethod = searchParams.get("login_method"); | |
// Set the login method if it's valid | |
if ( | |
loginMethod === LoginMethod.GITHUB || | |
loginMethod === LoginMethod.GITLAB | |
) { | |
setLoginMethod(loginMethod as LoginMethod); | |
// Clean up the URL by removing the login_method parameter | |
searchParams.delete("login_method"); | |
const newUrl = `${location.pathname}${searchParams.toString() ? `?${searchParams.toString()}` : ""}`; | |
navigate(newUrl, { replace: true }); | |
} | |
}, [isAuthed, isAuthLoading, location.search, config?.APP_MODE]); | |
}; | |