import { List, Text } from "@mantine/core"; import { Plural, Trans, useLingui } from "@lingui/react/macro"; import { DatabaseIcon, TreeStructureIcon, TrophyIcon, MedalIcon, CrownIcon, PulseIcon, } from "@phosphor-icons/react"; import ListLink from "@/components/list-link"; import ListButton from "@/components/list-button"; import { getBadgeMigrationStatus, migrateBadgeProgress } from "@/features/badges/server"; import { useServerQuery } from "@/lib/tanstack-query/hooks"; import toast from "@/lib/sonner"; export const ToolsList = () => { const { t } = useLingui(); const { data: migrationStatus, refetch: refetchMigrationStatus } = useServerQuery({ queryKey: ["admin", "badge-migration-status"], queryFn: () => getBadgeMigrationStatus(), options: { refetchInterval: (query) => query.state.data?.state === "running" ? 2000 : false, }, }); const isMigrating = migrationStatus?.state === "running"; const handleMigrateBadges = async () => { if (isMigrating) return; const result = await migrateBadgeProgress(); if (result.success) { toast.success( result.data.started ? t`Badge recalculation started in the background` : t`Badge recalculation is already running` ); } else { toast.error(t`Failed to start badge recalculation`); } await refetchMigrationStatus(); }; return ( {migrationStatus?.state === "running" && ( Recalculating badges in the background ({migrationStatus.playersProcessed}/{migrationStatus.totalPlayers}) )} {migrationStatus?.state === "completed" && ( Last recalculation:{" "} )} {migrationStatus?.state === "failed" && ( Badge recalculation failed. Check the server logs. )} window.location.replace(process.env.POCKETBASE_URL! + "/_/") } /> ); }; export default ToolsList;