import { AlertBlock } from "@/components/shared/alert-block"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { RefreshCw } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; const schema = z.object({ serverIp: z.string(), }); type Schema = z.infer; interface Props { children?: React.ReactNode; serverId?: string; } export const UpdateServerIp = ({ children }: Props) => { const [isOpen, setIsOpen] = useState(false); const { data } = api.user.get.useQuery(); const { data: ip } = api.server.publicIp.useQuery(); const { mutateAsync, isLoading, error, isError } = api.user.update.useMutation(); const form = useForm({ defaultValues: { serverIp: data?.user.serverIp || "", }, resolver: zodResolver(schema), }); useEffect(() => { if (data) { form.reset({ serverIp: data.user.serverIp || "", }); } }, [form, form.reset, data]); const utils = api.useUtils(); const setCurrentIp = () => { if (!ip) return; form.setValue("serverIp", ip); }; const onSubmit = async (data: Schema) => { await mutateAsync({ serverIp: data.serverIp, }) .then(async () => { toast.success("Server IP Updated"); await utils.user.get.invalidate(); setIsOpen(false); }) .catch(() => { toast.error("Error updating the IP of the server"); }); }; return ( {children} Update Server IP Update the IP of the server {isError && {error?.message}}
( Server IP

Set current public IP

										
									
)} />
); };