feat: add ability for setting current public IP in server IP update form

This commit is contained in:
Krzysztof Durek
2024-11-17 21:58:37 +01:00
parent 3015d69adc
commit 82367213ea
2 changed files with 43 additions and 2 deletions

View File

@@ -19,8 +19,15 @@ import {
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";
@@ -41,6 +48,7 @@ export const UpdateServerIp = ({ children, serverId }: Props) => {
const [isOpen, setIsOpen] = useState(false);
const { data } = api.admin.one.useQuery();
const { data: ip } = api.server.publicIp.useQuery();
const { mutateAsync, isLoading, error, isError } =
api.admin.update.useMutation();
@@ -62,6 +70,11 @@ export const UpdateServerIp = ({ children, serverId }: Props) => {
const utils = api.useUtils();
const setCurrentIp = () => {
if (!ip) return;
form.setValue("serverIp", ip);
};
const onSubmit = async (data: Schema) => {
await mutateAsync({
serverIp: data.serverIp,
@@ -97,8 +110,31 @@ export const UpdateServerIp = ({ children, serverId }: Props) => {
render={({ field }) => (
<FormItem>
<FormLabel>Server IP</FormLabel>
<FormControl>
<Input {...field} />
<FormControl className="flex gap-2">
<div>
<Input {...field} />
<TooltipProvider delayDuration={0}>
<Tooltip>
<TooltipTrigger asChild>
<Button
variant="secondary"
type="button"
onClick={setCurrentIp}
>
<RefreshCw className="size-4 text-muted-foreground" />
</Button>
</TooltipTrigger>
<TooltipContent
side="left"
sideOffset={5}
className="max-w-[11rem]"
>
<p>Set current public IP</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</div>
</FormControl>
<pre>
<FormMessage />

View File

@@ -22,6 +22,7 @@ import {
findAdminById,
findServerById,
findServersByAdminId,
getPublicIpWithFallback,
haveActiveServices,
removeDeploymentsByServerId,
serverSetup,
@@ -181,4 +182,8 @@ export const serverRouter = createTRPCRouter({
throw error;
}
}),
publicIp: protectedProcedure.query(async ({ ctx }) => {
const ip = await getPublicIpWithFallback();
return ip;
}),
});