import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import { Ban, CheckCircle2, RefreshCcw, Rocket, Terminal } from "lucide-react"; import { useRouter } from "next/router"; import { toast } from "sonner"; import { DialogAction } from "@/components/shared/dialog-action"; import { Button } from "@/components/ui/button"; import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { api } from "@/utils/api"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; interface Props { composeId: string; } export const ComposeActions = ({ composeId }: Props) => { const router = useRouter(); const { data, refetch } = api.compose.one.useQuery( { composeId, }, { enabled: !!composeId }, ); const { mutateAsync: update } = api.compose.update.useMutation(); const { mutateAsync: deploy } = api.compose.deploy.useMutation(); const { mutateAsync: redeploy } = api.compose.redeploy.useMutation(); const { mutateAsync: start, isLoading: isStarting } = api.compose.start.useMutation(); const { mutateAsync: stop, isLoading: isStopping } = api.compose.stop.useMutation(); return (
{ await deploy({ composeId: composeId, }) .then(() => { toast.success("Compose deployed successfully"); refetch(); router.push( `/dashboard/project/${data?.environment.projectId}/environment/${data?.environmentId}/services/compose/${composeId}?tab=deployments`, ); }) .catch(() => { toast.error("Error deploying compose"); }); }} > { await redeploy({ composeId: composeId, }) .then(() => { toast.success("Compose reloaded successfully"); refetch(); }) .catch(() => { toast.error("Error reloading compose"); }); }} > {data?.composeType === "docker-compose" && data?.composeStatus === "idle" ? ( { await start({ composeId: composeId, }) .then(() => { toast.success("Compose started successfully"); refetch(); }) .catch(() => { toast.error("Error starting compose"); }); }} > ) : ( { await stop({ composeId: composeId, }) .then(() => { toast.success("Compose stopped successfully"); refetch(); }) .catch(() => { toast.error("Error stopping compose"); }); }} > )}
Autodeploy { await update({ composeId, autoDeploy: enabled, }) .then(async () => { toast.success("Auto Deploy Updated"); await refetch(); }) .catch(() => { toast.error("Error updating Auto Deploy"); }); }} className="flex flex-row gap-2 items-center data-[state=checked]:bg-primary" />
); };