"use client";
import { useState } from "react";
import { useRouter } from "next/navigation";
import { AdminDialog } from "@/components/ui/admin-dialog";
import { createUser, updateUser } from "./actions";
type UserRow = {
id: string;
employeeId: string;
name: string;
email: string;
role: string;
isActive: boolean;
};
const ROLES = [
{ value: "TECHNICAL", label: "Technical" },
{ value: "MANNING", label: "Manning" },
{ value: "ACCOUNTS", label: "Accounts" },
{ value: "MANAGER", label: "Manager" },
{ value: "SUPERUSER", label: "SuperUser" },
{ value: "AUDITOR", label: "Auditor" },
{ value: "ADMIN", label: "Admin" },
];
function UserFormFields({ user }: { user?: UserRow }) {
return (
{user ? (
{user.employeeId}
) : (
)}
);
}
export function AddUserButton() {
const router = useRouter();
const [open, setOpen] = useState(false);
const [pending, setPending] = useState(false);
const [error, setError] = useState("");
async function handleSubmit(e: React.FormEvent) {
e.preventDefault();
setPending(true);
setError("");
const result = await createUser(new FormData(e.currentTarget));
if ("error" in result) { setError(result.error); setPending(false); }
else { setPending(false); setOpen(false); router.refresh(); }
}
return (
<>
setOpen(false)}>
>
);
}
export function EditUserButton({
user,
open: controlledOpen,
onOpenChange,
}: {
user: UserRow;
open?: boolean;
onOpenChange?: (v: boolean) => void;
}) {
const router = useRouter();
const [internalOpen, setInternalOpen] = useState(false);
const [pending, setPending] = useState(false);
const [error, setError] = useState("");
const isControlled = controlledOpen !== undefined;
const open = isControlled ? controlledOpen : internalOpen;
const setOpen = isControlled ? (onOpenChange ?? (() => {})) : setInternalOpen;
async function handleSubmit(e: React.FormEvent) {
e.preventDefault();
setPending(true);
setError("");
const fd = new FormData(e.currentTarget);
fd.set("id", user.id);
const result = await updateUser(fd);
if ("error" in result) { setError(result.error); setPending(false); }
else { setPending(false); setOpen(false); router.refresh(); }
}
return (
<>
{!isControlled && (
)}
setOpen(false)}>
>
);
}