import { useMemo } from "react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Link, useParams, useSearchParams } from "@/lib/router"; import { accessApi } from "../api/access"; import { authApi } from "../api/auth"; import { queryKeys } from "../lib/queryKeys"; import { Button } from "@/components/ui/button"; export function BoardClaimPage() { const queryClient = useQueryClient(); const params = useParams(); const [searchParams] = useSearchParams(); const token = (params.token ?? "").trim(); const code = (searchParams.get("code") ?? "").trim(); const currentPath = useMemo( () => `/board-claim/${encodeURIComponent(token)}${code ? `?code=${encodeURIComponent(code)}` : ""}`, [token, code], ); const sessionQuery = useQuery({ queryKey: queryKeys.auth.session, queryFn: () => authApi.getSession(), retry: false, }); const statusQuery = useQuery({ queryKey: ["board-claim", token, code], queryFn: () => accessApi.getBoardClaimStatus(token, code), enabled: token.length > 0 && code.length > 0, retry: false, }); const claimMutation = useMutation({ mutationFn: () => accessApi.claimBoard(token, code), onSuccess: async () => { await queryClient.invalidateQueries({ queryKey: queryKeys.auth.session }); await queryClient.invalidateQueries({ queryKey: queryKeys.health }); await queryClient.invalidateQueries({ queryKey: queryKeys.companies.all }); await queryClient.invalidateQueries({ queryKey: queryKeys.companies.stats }); await statusQuery.refetch(); }, }); if (!token || !code) { return
{statusQuery.error instanceof Error ? statusQuery.error.message : "Challenge is invalid or expired."}
This instance is now linked to your authenticated user.
Sign in or create an account, then return to this page to claim Board ownership.
This will promote your user to instance admin and migrate company ownership access from local trusted mode.
{claimMutation.error && ({claimMutation.error instanceof Error ? claimMutation.error.message : "Failed to claim board ownership"}
)}