| @@ -14,40 +14,33 @@ import { Metadata } from "next"; | |||
| import Link from "next/link"; | |||
| import { Suspense } from "react"; | |||
| export const metadata: Metadata = { | |||
| title: "Change Password", | |||
| }; | |||
| title: "Change Password", | |||
| }; | |||
| const ChangePasswordPage: React.FC = async () => { | |||
| const { t } = await getServerI18n("User Group"); | |||
| // preloadTeamLeads(); | |||
| // preloadStaff(); | |||
| return ( | |||
| <> | |||
| <Stack | |||
| direction="row" | |||
| justifyContent="space-between" | |||
| flexWrap="wrap" | |||
| rowGap={2} | |||
| > | |||
| <Typography variant="h4" marginInlineEnd={2}> | |||
| {t("Change Password")} | |||
| </Typography> | |||
| </Stack> | |||
| <I18nProvider namespaces={["User Group", "common"]}> | |||
| <Suspense fallback={<ChangePassword.Loading />}> | |||
| <ChangePassword /> | |||
| </Suspense> | |||
| </I18nProvider> | |||
| </> | |||
| ); | |||
| }; | |||
| const ChangePasswordPage: React.FC = async () => { | |||
| const { t } = await getServerI18n("User Group"); | |||
| // preloadTeamLeads(); | |||
| // preloadStaff(); | |||
| return ( | |||
| <> | |||
| <Stack | |||
| direction="row" | |||
| justifyContent="space-between" | |||
| flexWrap="wrap" | |||
| rowGap={2} | |||
| > | |||
| <Typography variant="h4" marginInlineEnd={2}> | |||
| {t("Change Password")} | |||
| </Typography> | |||
| </Stack> | |||
| {/* <I18nProvider namespaces={["User Group", "common"]}> | |||
| <Suspense fallback={<UserGroupSearch.Loading />}> | |||
| <UserGroupSearch /> | |||
| </Suspense> | |||
| </I18nProvider> */} | |||
| <I18nProvider namespaces={["User Group", "common"]}> | |||
| <Suspense fallback={<ChangePassword.Loading />}> | |||
| <ChangePassword /> | |||
| </Suspense> | |||
| </I18nProvider> | |||
| </> | |||
| ); | |||
| }; | |||
| export default ChangePasswordPage; | |||
| export default ChangePasswordPage; | |||
| @@ -7,19 +7,15 @@ import { Suspense } from "react"; | |||
| import { preloadUser } from "@/app/api/user"; | |||
| import { searchParamsProps } from "@/app/utils/fetchUtil"; | |||
| const User: React.FC<searchParamsProps> = async ({ | |||
| searchParams | |||
| }) => { | |||
| const User: React.FC<searchParamsProps> = async ({ searchParams }) => { | |||
| const { t } = await getServerI18n("user"); | |||
| preloadUser() | |||
| preloadUser(); | |||
| return ( | |||
| <> | |||
| <Typography variant="h4">{t("Edit User")}</Typography> | |||
| <I18nProvider namespaces={["user", "common"]}> | |||
| <Suspense fallback={<EditUser.Loading />}> | |||
| <EditUser | |||
| // id={parseInt(searchParams.id as string)} | |||
| /> | |||
| <EditUser searchParams={searchParams} /> | |||
| </Suspense> | |||
| </I18nProvider> | |||
| </> | |||
| @@ -20,10 +20,10 @@ const EditUserPage: React.FC<searchParamsProps> = async ({ | |||
| return ( | |||
| <> | |||
| <I18nProvider namespaces={["team", "common"]}> | |||
| <I18nProvider namespaces={["user", "common"]}> | |||
| <Suspense fallback={<EditUser.Loading />}> | |||
| <EditUser | |||
| // id={id} | |||
| searchParams={searchParams} | |||
| /> | |||
| </Suspense> | |||
| </I18nProvider> | |||
| @@ -33,19 +33,12 @@ const ChagnePasswordForm: React.FC = () => { | |||
| setValue, | |||
| } = useFormContext<PasswordInputs>(); | |||
| // const resetGroup = useCallback(() => { | |||
| // console.log(defaultValues); | |||
| // if (defaultValues !== undefined) { | |||
| // resetField("description"); | |||
| // } | |||
| // }, [defaultValues]); | |||
| return ( | |||
| <Card sx={{ display: "block" }}> | |||
| <CardContent component={Stack} spacing={4}> | |||
| <Box> | |||
| <Typography variant="overline" display="block" marginBlockEnd={1}> | |||
| {t("Group Info")} | |||
| {t("Please Fill in all the Fields")} | |||
| </Typography> | |||
| <Grid container spacing={2} columns={{ xs: 6, sm: 12 }}> | |||
| <Grid item xs={6}> | |||
| @@ -7,10 +7,6 @@ interface SubComponents { | |||
| } | |||
| const ChangePasswordWrapper: React.FC & SubComponents = async () => { | |||
| // const records = await fetchAuth() | |||
| // const users = await fetchUser() | |||
| // console.log(users) | |||
| // const auth = records.records as auth[] | |||
| return <ChangePassword />; | |||
| }; | |||
| @@ -33,11 +33,15 @@ import { auth, fetchAuth } from "@/app/api/group/actions"; | |||
| import AuthAllocation from "./AuthAllocation"; | |||
| interface Props { | |||
| rules: passwordRule | |||
| user: UserResult, | |||
| rules: passwordRule, | |||
| auths: auth[] | |||
| } | |||
| const EditUser: React.FC<Props> = async ({ | |||
| rules | |||
| user, | |||
| rules, | |||
| auths | |||
| }) => { | |||
| const { t } = useTranslation(); | |||
| const formProps = useForm<UserInputs>(); | |||
| @@ -46,8 +50,6 @@ const EditUser: React.FC<Props> = async ({ | |||
| const [tabIndex, setTabIndex] = useState(0); | |||
| const router = useRouter(); | |||
| const [serverError, setServerError] = useState(""); | |||
| const [data, setData] = useState<UserResult>(); | |||
| const [auths, setAuths] = useState<auth[]>(); | |||
| const handleTabChange = useCallback<NonNullable<TabsProps["onChange"]>>( | |||
| (_e, newValue) => { | |||
| @@ -57,34 +59,23 @@ const EditUser: React.FC<Props> = async ({ | |||
| ); | |||
| const errors = formProps.formState.errors; | |||
| console.log("asdasd") | |||
| const fetchUserDetail = async () => { | |||
| useEffect(() => { | |||
| 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); | |||
| const addAuthIds = auths && auths.length > 0 | |||
| ? auths.filter((item) => item.v === 1).map((item) => item.id).sort((a, b) => a - b) | |||
| : [] | |||
| formProps.reset({ | |||
| name: _data.username, | |||
| email: _data.email, | |||
| addAuthIds: addAuthIds || [] | |||
| name: user.username, | |||
| email: user.email, | |||
| addAuthIds: addAuthIds | |||
| }); | |||
| } catch (error) { | |||
| console.log(error); | |||
| setServerError(t("An error has occurred. Please try again later.")); | |||
| } | |||
| } | |||
| useEffect(() => { | |||
| fetchUserDetail(); | |||
| }, []); | |||
| }, [user, auths]); | |||
| const hasErrorsInTab = ( | |||
| tabIndex: number, | |||
| @@ -92,10 +83,8 @@ console.log("asdasd") | |||
| ) => { | |||
| switch (tabIndex) { | |||
| case 0: | |||
| console.log("yolo") | |||
| return Object.keys(errors).length > 0; | |||
| default: | |||
| console.log("yolo") | |||
| false; | |||
| } | |||
| }; | |||
| @@ -123,7 +112,7 @@ console.log("asdasd") | |||
| if (!regex_pw.test(pw)) { | |||
| haveError = true | |||
| formProps.setError("password", { message: "A combination of uppercase letters, lowercase letters, numbers, and symbols is required.", type: "required" }) | |||
| } | |||
| } | |||
| } | |||
| const userData = { | |||
| name: data.name, | |||
| @@ -6,20 +6,23 @@ import { useSearchParams } from "next/navigation"; | |||
| import { fetchTeam, fetchTeamDetail } from "@/app/api/team"; | |||
| import { fetchStaff } from "@/app/api/staff"; | |||
| import { fetchPwRules, fetchUser, fetchUserDetail } from "@/app/api/user"; | |||
| import { searchParamsProps } from "@/app/utils/fetchUtil"; | |||
| import { fetchUserDetails } from "@/app/api/user/actions"; | |||
| import { fetchAuth } from "@/app/api/group/actions"; | |||
| interface SubComponents { | |||
| Loading: typeof EditUserLoading; | |||
| } | |||
| interface Props { | |||
| // id: number | |||
| } | |||
| const EditUserWrapper: React.FC<Props> & SubComponents = async ({ | |||
| // id | |||
| const EditUserWrapper: React.FC<searchParamsProps> & SubComponents = async ({ | |||
| searchParams | |||
| }) => { | |||
| const id = parseInt(searchParams.id as string) | |||
| const pwRule = await fetchPwRules() | |||
| const user = await fetchUserDetails(id); | |||
| const auths = await fetchAuth("user", id); | |||
| return <EditUser rules={pwRule} /> | |||
| return <EditUser user={user.data} rules={pwRule} auths={auths.records}/> | |||
| }; | |||
| EditUserWrapper.Loading = EditUserLoading; | |||