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 { describeError } from "../api/errors"; import { QueryErrorState, useQueryView } from "../components/QueryView"; import { queryKeys } from "../lib/queryKeys"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; 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(), }); const statusQuery = useQuery({ queryKey: ["board-claim", token, code], queryFn: () => accessApi.getBoardClaimStatus(token, code), enabled: token.length > 0 && code.length > 0, }); const statusView = useQueryView(statusQuery); 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
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 organization ownership access from local trusted mode.
{claimMutation.isError && ( // query-error-ok: mutation result{describeError(claimMutation.error).body}
)}