"use client"; import { useRouter, useSearchParams } from "next/navigation"; import { useCallback, useEffect, useLayoutEffect, useMemo, useState } from "react"; import SearchResults, { Column } from "../SearchResults"; // import { TeamResult } from "@/app/api/team"; import { useTranslation } from "react-i18next"; import { Button, Card, CardContent, Grid, Stack, Tab, Tabs, TabsProps, TextField, Typography, } from "@mui/material"; import { FieldErrors, FormProvider, SubmitErrorHandler, SubmitHandler, useForm, useFormContext, } from "react-hook-form"; import { Check, Close, Error, RestartAlt } from "@mui/icons-material"; import { StaffResult } from "@/app/api/staff"; import { UserInputs, editUser, fetchUserDetails } from "@/app/api/user/actions"; import UserDetail from "./UserDetail"; import { UserResult } from "@/app/api/user"; import { auth, fetchAuth } from "@/app/api/group/actions"; import AuthAllocation from "./AuthAllocation"; interface Props { // users: UserResult[] } const EditUser: React.FC = async ({ }) => { const { t } = useTranslation(); const formProps = useForm(); const searchParams = useSearchParams(); const id = parseInt(searchParams.get("id") || "0"); const [tabIndex, setTabIndex] = useState(0); const router = useRouter(); const [serverError, setServerError] = useState(""); const [data, setData] = useState(); const [auths, setAuths] = useState(); const handleTabChange = useCallback>( (_e, newValue) => { setTabIndex(newValue); }, [] ); const errors = formProps.formState.errors; const fetchUserDetail = async () => { console.log(id); try { // fetch user info const userDetail = await fetchUserDetails(id); console.log(userDetail); const _data = userDetail.data as UserResult; console.log(_data); setData(_data); //fetch user auths const authDetail = await fetchAuth("user", id); setAuths(authDetail.records) const addAuthIds = authDetail.records.filter((item) => item.v === 1).map((item) => item.id).sort((a, b) => a - b); formProps.reset({ name: _data.username, email: _data.email, addAuthIds: addAuthIds || [] }); } catch (error) { console.log(error); setServerError(t("An error has occurred. Please try again later.")); } } useEffect(() => { fetchUserDetail(); }, []); // useEffect(() => { // const thisUser = users.filter((item) => item.id === id) // formProps.reset({ // username: thisUser[0].username, // email: thisUser[0].email, // }); // }, []); const hasErrorsInTab = ( tabIndex: number, errors: FieldErrors ) => { switch (tabIndex) { case 0: return Object.keys(errors).length > 0; default: false; } }; const handleCancel = () => { router.back(); }; const onSubmit = useCallback>( async (data) => { try { console.log(data); const tempData = { name: data.name, email: data.email, locked: false, addAuthIds: data.addAuthIds || [], removeAuthIds: data.removeAuthIds || [], } console.log(tempData); await editUser(id, tempData); router.replace("/settings/staff"); } catch (e) { console.log(e); setServerError(t("An error has occurred. Please try again later.")); } }, [router] ); const onSubmitError = useCallback>( (errors) => { console.log(errors); }, [] ); return ( <> {serverError && ( {serverError} )} ) : undefined } iconPosition="end" /> {tabIndex == 0 && } {tabIndex === 1 && } ); }; export default EditUser;