"use client" import { Button } from '@/components/ui/button'; import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "./ui/card"; import { getHosts, getRouteUpstreams } from '@/lib/utils'; import { toast } from './ui/use-toast'; import React, { useState } from 'react'; import useSWRMutation from 'swr/mutation'; import { deleteRoute } from '@/lib/clientActions'; import { Dialog, DialogContent, DialogHeader } from './ui/dialog'; import { DialogDescription, DialogTitle } from '@radix-ui/react-dialog'; import { Form, FormControl, FormField, FormItem, FormLabel } from './ui/form'; import { useFieldArray, useForm } from 'react-hook-form'; import { Input } from './ui/input'; import { get, set } from 'lodash'; export default function RouteCards({ routes }: { routes: Route[] }) { const [route, setRoute] = useState(); const { trigger: handleDelete } = useSWRMutation("/api/caddy/routes", deleteRoute, { onError: () => { return toast({ title: "Error", description: "There was an error deleting the route", variant: "destructive" }); }, onSuccess: () => { toast({ title: "Success", description: "Route deleted successfully!", variant: "success" }); } }); let editRoute = (route: Route) => { setRoute(route); } return ( <> {route && } { routes.map((route, index) => (
{getHosts(route).values().next().value} {getHosts(route).map((route => {route}))}

Tunneling to

{getRouteUpstreams(route)?.map((upstream => upstream.dial))}

))} ) } export function EditRouteDialog({ route }: { route: Route }) { const [modifiedRoute, setRoute] = useState(route); let validHosts: any[] = getHosts(route); let validUpstreams: any[] = getRouteUpstreams(route).map((upstream) => upstream.dial); const form = useForm({ values: { handler: route.handle[0].routes[0].handle[0].handler, upstreams: validUpstreams, hosts: validHosts, } }); const { fields: upstreams, append: appendUpstreams } = useFieldArray({ control: form.control, name: "upstreams", }) const { fields: hosts, append: appendHosts } = useFieldArray({ control: form.control, name: "hosts", }) let onSubmit = ((data: any) => { console.log(modifiedRoute) }) let handleChange = (value: any, path: any) => { console.log(path) let updatedRoute = set(modifiedRoute, path, value.target.value); console.log(updatedRoute) setRoute(updatedRoute); form.setValue(value.target.name, value.target.value) } return (
( Handler handleChange(value, `modifiedRoute.handle[0].handler`)} /> )} > {upstreams.map((upstream, index) => ( ( Upstream {index + 1} handleChange(value, `handle[0].routes[0].handle[0].upstreams[${index}]`)} /> )} /> ))} {hosts.map((host, index) => ( ( Host {index + 1} handleChange(value, `match[0].host[${index}]`)} /> )} /> ))}
) }