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 (

App Upgrades

); } if (queryError) { return (

App Upgrades

Error loading upgrades {queryError.message}
); } const currentUpgrades = upgrades?.filter((u) => u.isNeeded) ?? []; return (

App Upgrades

{currentUpgrades.length === 0 ? (
App is up-to-date and has all Dyad capabilities enabled
) : (
{currentUpgrades.map((upgrade: AppUpgrade) => (

{upgrade.title}

{upgrade.description}

{mutationError && upgradingVariables === upgrade.id && ( Upgrade Failed {(mutationError as Error).message}{" "} { e.stopPropagation(); IpcClient.getInstance().openExternalUrl( upgrade.manualUpgradeUrl ?? "https://dyad.sh/docs", ); }} className="underline font-medium hover:dark:text-red-200" > Manual Upgrade Instructions )}
))}
)}
); }