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, FormMessage,
} from "@/components/ui/form"; } from "@/components/ui/form";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { api } from "@/utils/api"; import { api } from "@/utils/api";
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { RefreshCw } from "lucide-react";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { toast } from "sonner"; import { toast } from "sonner";
@@ -41,6 +48,7 @@ export const UpdateServerIp = ({ children, serverId }: Props) => {
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const { data } = api.admin.one.useQuery(); const { data } = api.admin.one.useQuery();
const { data: ip } = api.server.publicIp.useQuery();
const { mutateAsync, isLoading, error, isError } = const { mutateAsync, isLoading, error, isError } =
api.admin.update.useMutation(); api.admin.update.useMutation();
@@ -62,6 +70,11 @@ export const UpdateServerIp = ({ children, serverId }: Props) => {
const utils = api.useUtils(); const utils = api.useUtils();
const setCurrentIp = () => {
if (!ip) return;
form.setValue("serverIp", ip);
};
const onSubmit = async (data: Schema) => { const onSubmit = async (data: Schema) => {
await mutateAsync({ await mutateAsync({
serverIp: data.serverIp, serverIp: data.serverIp,
@@ -97,8 +110,31 @@ export const UpdateServerIp = ({ children, serverId }: Props) => {
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Server IP</FormLabel> <FormLabel>Server IP</FormLabel>
<FormControl> <FormControl className="flex gap-2">
<Input {...field} /> <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> </FormControl>
<pre> <pre>
<FormMessage /> <FormMessage />

View File

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