diff --git a/src/app/(main)/settings/group/edit/page.tsx b/src/app/(main)/settings/group/edit/page.tsx index 9055358..f1bfcbd 100644 --- a/src/app/(main)/settings/group/edit/page.tsx +++ b/src/app/(main)/settings/group/edit/page.tsx @@ -1,3 +1,4 @@ +import { searchParamsProps } from "@/app/utils/fetchUtil"; import EditPosition from "@/components/EditPosition"; import EditUserGroup from "@/components/EditUserGroup"; import { I18nProvider, getServerI18n } from "@/i18n"; @@ -8,7 +9,9 @@ export const metadata: Metadata = { title: "Edit User Group", }; -const Group: React.FC = async () => { +const Group: React.FC = async ({ + searchParams, +}) => { const { t } = await getServerI18n("group"); // Preload necessary dependencies @@ -17,7 +20,7 @@ const Group: React.FC = async () => { <> {/* {t("Edit User Group")} */} - + ); diff --git a/src/app/api/group/index.ts b/src/app/api/group/index.ts index 9dcee9e..082b0f3 100644 --- a/src/app/api/group/index.ts +++ b/src/app/api/group/index.ts @@ -14,8 +14,21 @@ export interface UserGroupResult { description: string; } +export type IndivUserGroup = { + authIds: number[]; + data: any; + userIds: number[]; +} + export const fetchGroup = cache(async () => { return serverFetchJson(`${BASE_API_URL}/group`, { next: { tags: ["group"] }, }); }); + + +export const fetchIndivGroup = cache(async (id: number) => { + return serverFetchJson(`${BASE_API_URL}/group/${id}`, { + next: { tags: ["group"] }, + }); + }); diff --git a/src/components/EditUserGroup/EditUserGroup.tsx b/src/components/EditUserGroup/EditUserGroup.tsx index 1eba351..c523a58 100644 --- a/src/components/EditUserGroup/EditUserGroup.tsx +++ b/src/components/EditUserGroup/EditUserGroup.tsx @@ -1,6 +1,6 @@ "use client"; import { useRouter, useSearchParams } from "next/navigation"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; import SearchResults, { Column } from "../SearchResults"; // import { TeamResult } from "@/app/api/team"; import { useTranslation } from "react-i18next"; @@ -16,19 +16,19 @@ import { import { Check, Close, Error } from "@mui/icons-material"; import { StaffResult } from "@/app/api/staff"; import { CreateGroupInputs, auth, fetchAuth, saveGroup } from "@/app/api/group/actions"; -import { UserGroupResult } from "@/app/api/group"; +import { IndivUserGroup, UserGroupResult } from "@/app/api/group"; import { UserResult } from "@/app/api/user"; import GroupInfo from "./GroupInfo"; import AuthorityAllocation from "./AuthorityAllocation"; import UserAllocation from "./UserAllocation"; interface Props { - groups: UserGroupResult[]; -// auths: auth[]; + // groups: UserGroupResult[]; + auths: auth[]; users: UserResult[]; + group: IndivUserGroup } -const EditUserGroup: React.FC = ({ groups, users }) => { - // console.log(users) +const EditUserGroup: React.FC = ({ users, auths, group }) => { const { t } = useTranslation(); const [serverError, setServerError] = useState(""); const formProps = useForm(); @@ -36,7 +36,6 @@ const EditUserGroup: React.FC = ({ groups, users }) => { const id = parseInt(searchParams.get("id") || "0"); const router = useRouter(); const [tabIndex, setTabIndex] = useState(0); - const [auths, setAuths] = useState(); const errors = formProps.formState.errors; @@ -79,22 +78,19 @@ const EditUserGroup: React.FC = ({ groups, users }) => { }, [router] ); + + const resetGroup = React.useCallback(() => { + formProps.reset({ + name: group.data.name, + description: group.data.description, + addAuthIds: group.authIds, + addUserIds: group.userIds, + }) + }, []); + useEffect(() => { - const thisGroup = groups.filter((item) => item.id === id)[0]; - const addUserIds = users.filter((item) => item.groupId === id).map((data) => data.id) - let addAuthIds: number[] = [] - fetchAuth("group", id).then((data) => { - setAuths(data.records) - addAuthIds = data.records.filter((data) => data.v === 1).map((data) => data.id).sort((a, b) => a - b); - formProps.reset({ - name: thisGroup.name, - description: thisGroup.description, - addAuthIds: addAuthIds, - addUserIds: addUserIds, - }); - }); - // console.log(auths) - }, [groups, users]); + resetGroup() + }, [group, users]); return ( <> diff --git a/src/components/EditUserGroup/EditUserGroupWrapper.tsx b/src/components/EditUserGroup/EditUserGroupWrapper.tsx index abec89d..573d0db 100644 --- a/src/components/EditUserGroup/EditUserGroupWrapper.tsx +++ b/src/components/EditUserGroup/EditUserGroupWrapper.tsx @@ -1,24 +1,31 @@ import React from "react"; import EditUserGroup from "./EditUserGroup"; import EditUserGroupLoading from "./EditUserGroupLoading"; -import { fetchGroup } from "@/app/api/group"; +import { fetchGroup, fetchIndivGroup } from "@/app/api/group"; import { fetchUser } from "@/app/api/user"; +import { fetchAuth } from "@/app/api/group/actions"; interface SubComponents { Loading: typeof EditUserGroupLoading; } -const EditUserGroupWrapper: React.FC & SubComponents = async () => { +interface Props { + id: number +} + +const EditUserGroupWrapper: React.FC & SubComponents = async ({ id }) => { const [ - groups, + group, users, + auths, ] = await Promise.all([ - fetchGroup(), + fetchIndivGroup(id), fetchUser(), + fetchAuth("group", id), ]); - return ; + return ; }; EditUserGroupWrapper.Loading = EditUserGroupLoading; diff --git a/src/components/EditUserGroup/GroupInfo.tsx b/src/components/EditUserGroup/GroupInfo.tsx index 3817cec..9578327 100644 --- a/src/components/EditUserGroup/GroupInfo.tsx +++ b/src/components/EditUserGroup/GroupInfo.tsx @@ -43,6 +43,7 @@ const GroupInfo: React.FC = () => {