import { Button } from "@/components/ui/button"; import { Loader2 } from "lucide-react"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { Terminal } from "lucide-react"; import { IpcClient } from "@/ipc/ipc_client"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { AppUpgrade } from "@/ipc/ipc_types"; export function AppUpgrades({ appId }: { appId: number | null }) { const queryClient = useQueryClient(); const { data: upgrades, isLoading, error: queryError, } = useQuery({ queryKey: ["app-upgrades", appId], queryFn: () => { if (!appId) { return Promise.resolve([]); } return IpcClient.getInstance().getAppUpgrades({ appId }); }, enabled: !!appId, }); const { mutate: executeUpgrade, isPending: isUpgrading, error: mutationError, variables: upgradingVariables, } = useMutation({ mutationFn: (upgradeId: string) => { if (!appId) { throw new Error("appId is not set"); } return IpcClient.getInstance().executeAppUpgrade({ appId, upgradeId, }); }, onSuccess: (_, upgradeId) => { queryClient.invalidateQueries({ queryKey: ["app-upgrades", appId] }); if (upgradeId === "capacitor") { // Capacitor upgrade is done, so we need to invalidate the Capacitor // query to show the new status. queryClient.invalidateQueries({ queryKey: ["is-capacitor", appId] }); } }, }); const handleUpgrade = (upgradeId: string) => { executeUpgrade(upgradeId); }; if (!appId) { return null; } if (isLoading) { return (
{upgrade.description}
{mutationError && upgradingVariables === upgrade.id && (