diff --git a/server/routers/external.ts b/server/routers/external.ts index 7fd0c69..2cb7ba6 100644 --- a/server/routers/external.ts +++ b/server/routers/external.ts @@ -46,10 +46,10 @@ authenticated.put("/org/:orgId/site", verifyOrgAccess, site.createSite); authenticated.get("/org/:orgId/sites", verifyOrgAccess, site.listSites); authenticated.get("/org/:orgId/site/:niceId", verifyOrgAccess, site.getSite); -authenticated.get("/site/siteId/:siteId", verifySiteAccess, site.getSite); -authenticated.get("/site/siteId/:siteId/roles", verifySiteAccess, site.listSiteRoles); -authenticated.post("/site/siteId/:siteId", verifySiteAccess, site.updateSite); -authenticated.delete("/site/siteId/:siteId", verifySiteAccess, site.deleteSite); +authenticated.get("/site/:siteId", verifySiteAccess, site.getSite); +authenticated.get("/site/:siteId/roles", verifySiteAccess, site.listSiteRoles); +authenticated.post("/site/:siteId", verifySiteAccess, site.updateSite); +authenticated.delete("/site/:siteId", verifySiteAccess, site.deleteSite); authenticated.put( "/org/:orgId/site/:siteId/resource", diff --git a/src/app/[orgId]/sites/[niceId]/components/ClientLayout.tsx b/src/app/[orgId]/sites/[niceId]/components/ClientLayout.tsx new file mode 100644 index 0000000..a06b740 --- /dev/null +++ b/src/app/[orgId]/sites/[niceId]/components/ClientLayout.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { SidebarNav } from "@app/components/sidebar-nav"; +import { useSiteContext } from "@app/hooks/useSiteContext"; + +const sidebarNavItems = [ + { + title: "Profile", + href: "/{orgId}/sites/{niceId}", + }, + { + title: "Appearance", + href: "/{orgId}/sites/{niceId}/appearance", + }, + { + title: "Notifications", + href: "/{orgId}/sites/{niceId}/notifications", + }, + { + title: "Display", + href: "/{orgId}/sites/{niceId}/display", + }, +]; + +export function ClientLayout({ isCreate, children }: { isCreate: boolean; children: React.ReactNode }) { + const { site } = useSiteContext(); + return (
+
+

+ {isCreate + ? "New Site" + : site?.name + " Settings"} +

+

+ {isCreate + ? "Create a new site" + : "Configure the settings on your site: " + + site?.name || ""} + . +

+
+
+ +
+ {children} +
+
+
); +} \ No newline at end of file diff --git a/src/app/[orgId]/sites/[niceId]/components/create-site.tsx b/src/app/[orgId]/sites/[niceId]/components/CreateSite.tsx similarity index 99% rename from src/app/[orgId]/sites/[niceId]/components/create-site.tsx rename to src/app/[orgId]/sites/[niceId]/components/CreateSite.tsx index 5f2b1d8..e83d36c 100644 --- a/src/app/[orgId]/sites/[niceId]/components/create-site.tsx +++ b/src/app/[orgId]/sites/[niceId]/components/CreateSite.tsx @@ -18,7 +18,7 @@ import { FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" -import { generateKeypair } from "./wireguard-config"; +import { generateKeypair } from "./wireguardConfig"; import React, { useState, useEffect } from "react"; import { api } from "@/api"; import { useParams } from "next/navigation"; diff --git a/src/app/[orgId]/sites/[niceId]/components/GeneralForm.tsx b/src/app/[orgId]/sites/[niceId]/components/GeneralForm.tsx new file mode 100644 index 0000000..d2fd5f2 --- /dev/null +++ b/src/app/[orgId]/sites/[niceId]/components/GeneralForm.tsx @@ -0,0 +1,174 @@ +"use client" + +import Link from "next/link" +import { zodResolver } from "@hookform/resolvers/zod" +import { useFieldArray, useForm } from "react-hook-form" +import { z } from "zod" + +import { cn } from "@/lib/utils" +import { toast } from "@/hooks/use-toast" + +import { Button } from "@/components/ui/button" +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form" +import { Input } from "@/components/ui/input" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" +import { Textarea } from "@/components/ui/textarea" +import { useSiteContext } from "@app/hooks/useSiteContext" +import api from "@app/api" + +const GeneralFormSchema = z.object({ + name: z.string() + // email: z + // .string({ + // required_error: "Please select an email to display.", + // }) + // .email(), + // bio: z.string().max(160).min(4), + // urls: z + // .array( + // z.object({ + // value: z.string().url({ message: "Please enter a valid URL." }), + // }) + // ) + // .optional(), +}) + +type GeneralFormValues = z.infer + +export function GeneralForm() { + const { site, updateSite } = useSiteContext(); + + const form = useForm({ + resolver: zodResolver(GeneralFormSchema), + defaultValues: { + name: site?.name + }, + mode: "onChange", + }) + + // const { fields, append } = useFieldArray({ + // name: "urls", + // control: form.control, + // }) + + async function onSubmit(data: GeneralFormValues) { + await updateSite({ name: data.name }); + } + + return ( +
+ + ( + + Name + + + + + This is the display name of the site. + + + + )} + /> + {/* ( + + Email + + + You can manage verified email addresses in your{" "} + email settings. + + + + )} + /> + ( + + Bio + +