diff --git a/src/components/general/client-route-form/index.tsx b/src/components/general/client-route-form/index.tsx index 689a8f7..7966ba3 100644 --- a/src/components/general/client-route-form/index.tsx +++ b/src/components/general/client-route-form/index.tsx @@ -1,4 +1,7 @@ -import type { BUN_SQLITE_WGUI_CLIENT_ROUTES } from "@/db/types/db"; +import type { + BUN_SQLITE_WGUI_CLIENT_ROUTES, + BUN_SQLITE_WGUI_HOSTS, +} from "@/db/types/db"; import type { ClientRouteView } from "@/src/functions/backend/acme/decorate-client-route"; import type { ClientRouteFormObject } from "./types"; import Form from "@/src/components/twui/form/Form"; @@ -12,22 +15,31 @@ import FormSection from "../form-section"; import FormActions from "../form-actions"; import InlineAlert from "../inline-alert"; import submitClientRouteForm from "./submit-client-route-form"; -import { useContext } from "react"; +import { useContext, useRef, useState } from "react"; import { AppContext } from "@/src/pages/__root"; +import { useAdminCrudGet } from "@/src/hooks/use-admin-crud-get"; +import Select from "../../twui/form/Select"; +import adminCrudHandler from "@/src/functions/frontend/admin-crud-handler"; +import EmptyContent from "../../twui/elements/EmptyContent"; +import twuiNumberfy from "../../twui/utils/numberfy"; type Props = { - host_id: number; + host_id?: number; existing_route?: ClientRouteView; - cancel_href: string; }; export default function ClientRouteForm({ - host_id, + host_id: passed_host_id, existing_route, - cancel_href, }: Props) { const { confirm } = useConfirm(); - const { user } = useContext(AppContext); + const { user, pageProps } = useContext(AppContext); + + const [host_id, set_host_id] = useState( + passed_host_id || pageProps?.host?.id || pageProps?.hosts?.[0]?.id, + ); + + const is_host_id_present = typeof host_id == "number"; const init = useFormInit({ existing: existing_route, @@ -53,18 +65,33 @@ export default function ClientRouteForm({ return ; } + if (!pageProps?.hosts?.[0]) { + return ( + + ); + } + + const cancel_href = is_host_id_present + ? `/admin/hosts/${host_id}/routes` + : `/admin/routes`; + return (
+ onSubmit={() => { + if (typeof host_id !== "number") { + window.alert(`Host ID is required!`); + return; + } + submitClientRouteForm({ init, host_id, - cancel_href, confirm, - }) - } + cancel_href, + }); + }} > {status?.error ? ( ) : null} + +