diff --git a/src/app/(main)/gitea/admin/users/admin-create-user-form.tsx b/src/app/(main)/gitea/admin/users/admin-create-user-form.tsx new file mode 100644 index 0000000..fd4925b --- /dev/null +++ b/src/app/(main)/gitea/admin/users/admin-create-user-form.tsx @@ -0,0 +1,246 @@ +"use client"; + +import { z } from "zod"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import logger from "@/lib/logger"; +import { useEffect } from "react"; +import { Loader2 } from "lucide-react"; +import { useForm } from "react-hook-form"; +import { useToast } from "@/hooks/use-toast"; +import { Input } from "@/components/ui/input"; +import { Button } from "@/components/ui/button"; +import { Checkbox } from "@/components/ui/checkbox"; +import { ToastAction } from "@/components/ui/toast"; +import { zodResolver } from "@hookform/resolvers/zod"; +import adminCreateUserStore from "@/app/actions/(gitea)/admin/users/store"; + +const formSchema = z.object({ + source_id: z.coerce.number().int().nonnegative().default(0), + visibility: z.enum(["public", "limited", "private"]).default("public"), + username: z + .string() + .min(1, "Username cannot be empty") + .max(40, "Username is too long (max 40 characters)"), + email: z + .string() + .email("Invalid email address") + .max(254, "Email is too long (max 254 characters)"), + password: z + .string() + .min(8, "Password must be at least 8 characters") + .max(255, "Password must be at most 255 characters"), + must_change_password: z.coerce.boolean().default(true), +}); + +const defaultValues: z.infer = { + source_id: 0, + visibility: "public", + username: "", + email: "", + password: "", + must_change_password: true, +}; + +export default function AdminCreateUserForm() { + const { toast } = useToast(); + const { user, error, loading, adminCreateUser } = adminCreateUserStore(); + + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues, + }); + + function onSubmit(values: z.infer) { + logger.info({ values }, "submitting form"); + adminCreateUser(values).then(() => { + form.reset(defaultValues); + }); + } + + function onReset() { + form.reset(defaultValues); + } + + useEffect(() => { + form.reset(defaultValues); + }, [form]); + + useEffect(() => { + if (user) { + toast({ + variant: "default", + title: "User created", + description: `User ${user.login} created successfully`, + action: ( + Create another + ), + }); + } else if (error) { + toast({ + variant: "destructive", + title: "Failed to create user", + description: `${error.message}`, + action: Try again, + }); + } + }, [user, error, toast]); + + return ( + + + Gitea + Admin Create User Card + + +
+ + ( + + Authentication Source + + + + )} + /> + ( + + User visibility + + + + )} + /> + ( + + Username + + + + + + )} + /> + ( + + Email Address + + + + + + )} + /> + ( + + Password + + + + + + )} + /> + ( + + + + +
+ Require user to change password + (recommended) + +
+
+ )} + /> +
+ + +
+ + +
+
+ ); +} diff --git a/src/app/(main)/gitea/admin/users/page.tsx b/src/app/(main)/gitea/admin/users/page.tsx index caed747..774e7bd 100644 --- a/src/app/(main)/gitea/admin/users/page.tsx +++ b/src/app/(main)/gitea/admin/users/page.tsx @@ -1,248 +1,9 @@ -"use client"; - -import { z } from "zod"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import logger from "@/lib/logger"; -import { useEffect } from "react"; -import { Loader2 } from "lucide-react"; -import { useForm } from "react-hook-form"; -import { useToast } from "@/hooks/use-toast"; -import { Input } from "@/components/ui/input"; -import { Button } from "@/components/ui/button"; -import { Checkbox } from "@/components/ui/checkbox"; -import { ToastAction } from "@/components/ui/toast"; -import { zodResolver } from "@hookform/resolvers/zod"; -import adminCreateUserStore from "@/app/actions/(gitea)/admin/users/store"; - -const formSchema = z.object({ - source_id: z.coerce.number().int().nonnegative().default(0), - visibility: z.enum(["public", "limited", "private"]).default("public"), - username: z - .string() - .min(1, "Username cannot be empty") - .max(40, "Username is too long (max 40 characters)"), - email: z - .string() - .email("Invalid email address") - .max(254, "Email is too long (max 254 characters)"), - password: z - .string() - .min(8, "Password must be at least 8 characters") - .max(255, "Password must be at most 255 characters"), - must_change_password: z.coerce.boolean().default(true), -}); - -const defaultValues: z.infer = { - source_id: 0, - visibility: "public", - username: "", - email: "", - password: "", - must_change_password: true, -}; - -export default function AdminCreateUserForm() { - const { toast } = useToast(); - const { user, error, loading, adminCreateUser } = adminCreateUserStore(); - - const form = useForm>({ - resolver: zodResolver(formSchema), - defaultValues, - }); - - function onSubmit(values: z.infer) { - logger.info({ values }, "submitting form"); - adminCreateUser(values).then(() => { - form.reset(defaultValues); - }); - } - - function onReset() { - form.reset(defaultValues); - } - - useEffect(() => { - form.reset(defaultValues); - }, [form]); - - useEffect(() => { - if (user) { - toast({ - variant: "default", - title: "User created", - description: `User ${user.login} created successfully`, - action: ( - Create another - ), - }); - } else if (error) { - toast({ - variant: "destructive", - title: "Failed to create user", - description: `${error.message}`, - action: Try again, - }); - } - }, [user, error, toast]); +import AdminCreateUserForm from "./admin-create-user-form"; +export default function AdminCreateUserPage() { return (
- - - Gitea - Admin Create User Card - - -
- - ( - - Authentication Source - - - - )} - /> - ( - - User visibility - - - - )} - /> - ( - - Username - - - - - - )} - /> - ( - - Email Address - - - - - - )} - /> - ( - - Password - - - - - - )} - /> - ( - - - - -
- Require user to change password - (recommended) - -
-
- )} - /> -
- - -
- - -
-
+
); }