| @@ -7,6 +7,7 @@ import { UserDetail, UserResult } from "."; | |||||
| import { cache } from "react"; | import { cache } from "react"; | ||||
| export interface UserInputs { | export interface UserInputs { | ||||
| username: string; | |||||
| name: string; | name: string; | ||||
| email?: string; | email?: string; | ||||
| addAuthIds?: number[]; | addAuthIds?: number[]; | ||||
| @@ -175,7 +175,7 @@ const EditTeam: React.FC<Props> = async ({ staff, teamInfo }) => { | |||||
| <Button | <Button | ||||
| variant="outlined" | variant="outlined" | ||||
| startIcon={<Close />} | startIcon={<Close />} | ||||
| // onClick={handleCancel} | |||||
| onClick={() => router.back()} | |||||
| > | > | ||||
| {t("Cancel")} | {t("Cancel")} | ||||
| </Button> | </Button> | ||||
| @@ -50,6 +50,7 @@ interface Props { | |||||
| } | } | ||||
| const EditUser: React.FC<Props> = async ({ user, rules, auths }) => { | const EditUser: React.FC<Props> = async ({ user, rules, auths }) => { | ||||
| console.log(user) | |||||
| const { t } = useTranslation("user"); | const { t } = useTranslation("user"); | ||||
| const formProps = useForm<UserInputs>(); | const formProps = useForm<UserInputs>(); | ||||
| const searchParams = useSearchParams(); | const searchParams = useSearchParams(); | ||||
| @@ -79,7 +80,7 @@ const EditUser: React.FC<Props> = async ({ user, rules, auths }) => { | |||||
| console.log(addAuthIds); | console.log(addAuthIds); | ||||
| try { | try { | ||||
| formProps.reset({ | formProps.reset({ | ||||
| name: user.username, | |||||
| username: user.username, | |||||
| email: user.email, | email: user.email, | ||||
| addAuthIds: addAuthIds, | addAuthIds: addAuthIds, | ||||
| removeAuthIds: [], | removeAuthIds: [], | ||||
| @@ -145,7 +146,8 @@ const EditUser: React.FC<Props> = async ({ user, rules, auths }) => { | |||||
| } | } | ||||
| } | } | ||||
| const userData = { | const userData = { | ||||
| name: data.name, | |||||
| username: data.username, | |||||
| name: user.name, | |||||
| locked: false, | locked: false, | ||||
| addAuthIds: data.addAuthIds || [], | addAuthIds: data.addAuthIds || [], | ||||
| removeAuthIds: data.removeAuthIds || [], | removeAuthIds: data.removeAuthIds || [], | ||||
| @@ -159,6 +161,7 @@ const EditUser: React.FC<Props> = async ({ user, rules, auths }) => { | |||||
| return; | return; | ||||
| } | } | ||||
| console.log("passed"); | console.log("passed"); | ||||
| console.log(userData); | |||||
| await editUser(id, userData); | await editUser(id, userData); | ||||
| if (data.password && data.password.length > 0) { | if (data.password && data.password.length > 0) { | ||||
| await adminChangePassword(pwData); | await adminChangePassword(pwData); | ||||
| @@ -15,14 +15,16 @@ interface SubComponents { | |||||
| } | } | ||||
| const EditUserWrapper: React.FC<searchParamsProps> & SubComponents = async ({ | const EditUserWrapper: React.FC<searchParamsProps> & SubComponents = async ({ | ||||
| searchParams | |||||
| searchParams, | |||||
| }) => { | }) => { | ||||
| const id = parseInt(searchParams.id as string) | |||||
| const pwRule = await fetchPwRules() | |||||
| const user = await fetchUserDetails(id); | |||||
| const auths = await fetchAuth("user", id); | |||||
| const id = parseInt(searchParams.id as string); | |||||
| const [pwRule, user, auths] = await Promise.all([ | |||||
| fetchPwRules(), | |||||
| fetchUserDetails(id), | |||||
| fetchAuth("user", id), | |||||
| ]); | |||||
| return <EditUser user={user.data} rules={pwRule} auths={auths.records}/> | |||||
| return <EditUser user={user.data} rules={pwRule} auths={auths.records} />; | |||||
| }; | }; | ||||
| EditUserWrapper.Loading = EditUserLoading; | EditUserWrapper.Loading = EditUserLoading; | ||||
| @@ -34,10 +34,10 @@ const UserDetail: React.FC = () => { | |||||
| <TextField | <TextField | ||||
| label={t("username")} | label={t("username")} | ||||
| fullWidth | fullWidth | ||||
| {...register("name", { | |||||
| {...register("username", { | |||||
| required: "username required!", | required: "username required!", | ||||
| })} | })} | ||||
| error={Boolean(errors.name)} | |||||
| error={Boolean(errors.username)} | |||||
| /> | /> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={6}> | <Grid item xs={6}> | ||||
| @@ -13,7 +13,7 @@ import { | |||||
| useForm, | useForm, | ||||
| useFormContext, | useFormContext, | ||||
| } from "react-hook-form"; | } from "react-hook-form"; | ||||
| import { Check, Close, Error } from "@mui/icons-material"; | |||||
| import { Check, Close, Error, RestartAlt } from "@mui/icons-material"; | |||||
| import { StaffResult } from "@/app/api/staff"; | import { StaffResult } from "@/app/api/staff"; | ||||
| import { CreateGroupInputs, auth, fetchAuth, saveGroup } from "@/app/api/group/actions"; | import { CreateGroupInputs, auth, fetchAuth, saveGroup } from "@/app/api/group/actions"; | ||||
| import { IndivUserGroup, UserGroupResult } from "@/app/api/group"; | import { IndivUserGroup, UserGroupResult } from "@/app/api/group"; | ||||
| @@ -86,11 +86,12 @@ const EditUserGroup: React.FC<Props> = ({ users, auths, group }) => { | |||||
| addAuthIds: group.authIds, | addAuthIds: group.authIds, | ||||
| addUserIds: group.userIds, | addUserIds: group.userIds, | ||||
| }) | }) | ||||
| }, []); | |||||
| }, [group, users]); | |||||
| useEffect(() => { | useEffect(() => { | ||||
| resetGroup() | resetGroup() | ||||
| }, [group, users]); | |||||
| }, []); | |||||
| // }, [group, users]); | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| @@ -136,10 +137,17 @@ const EditUserGroup: React.FC<Props> = ({ users, auths, group }) => { | |||||
| {tabIndex === 1 && <AuthorityAllocation auth={auths!!}/>} | {tabIndex === 1 && <AuthorityAllocation auth={auths!!}/>} | ||||
| {tabIndex === 2 && <UserAllocation users={users!!} />} | {tabIndex === 2 && <UserAllocation users={users!!} />} | ||||
| <Stack direction="row" justifyContent="flex-end" gap={1}> | <Stack direction="row" justifyContent="flex-end" gap={1}> | ||||
| <Button | |||||
| variant="text" | |||||
| startIcon={<RestartAlt />} | |||||
| onClick={resetGroup} | |||||
| > | |||||
| {t("Reset")} | |||||
| </Button> | |||||
| <Button | <Button | ||||
| variant="outlined" | variant="outlined" | ||||
| startIcon={<Close />} | startIcon={<Close />} | ||||
| // onClick={handleCancel} | |||||
| onClick={() => router.back()} | |||||
| > | > | ||||
| {t("Cancel")} | {t("Cancel")} | ||||
| </Button> | </Button> | ||||