瀏覽代碼

edit group fix

tags/Baseline_30082024_FRONTEND_UAT
MSI\derek 1 年之前
父節點
當前提交
b852093821
共有 5 個檔案被更改,包括 49 行新增29 行删除
  1. +5
    -2
      src/app/(main)/settings/group/edit/page.tsx
  2. +13
    -0
      src/app/api/group/index.ts
  3. +18
    -22
      src/components/EditUserGroup/EditUserGroup.tsx
  4. +12
    -5
      src/components/EditUserGroup/EditUserGroupWrapper.tsx
  5. +1
    -0
      src/components/EditUserGroup/GroupInfo.tsx

+ 5
- 2
src/app/(main)/settings/group/edit/page.tsx 查看文件

@@ -1,3 +1,4 @@
import { searchParamsProps } from "@/app/utils/fetchUtil";
import EditPosition from "@/components/EditPosition"; import EditPosition from "@/components/EditPosition";
import EditUserGroup from "@/components/EditUserGroup"; import EditUserGroup from "@/components/EditUserGroup";
import { I18nProvider, getServerI18n } from "@/i18n"; import { I18nProvider, getServerI18n } from "@/i18n";
@@ -8,7 +9,9 @@ export const metadata: Metadata = {
title: "Edit User Group", title: "Edit User Group",
}; };


const Group: React.FC = async () => {
const Group: React.FC<searchParamsProps> = async ({
searchParams,
}) => {
const { t } = await getServerI18n("group"); const { t } = await getServerI18n("group");


// Preload necessary dependencies // Preload necessary dependencies
@@ -17,7 +20,7 @@ const Group: React.FC = async () => {
<> <>
{/* <Typography variant="h4">{t("Edit User Group")}</Typography> */} {/* <Typography variant="h4">{t("Edit User Group")}</Typography> */}
<I18nProvider namespaces={["group"]}> <I18nProvider namespaces={["group"]}>
<EditUserGroup />
<EditUserGroup id={parseInt(searchParams.id as string)}/>
</I18nProvider> </I18nProvider>
</> </>
); );


+ 13
- 0
src/app/api/group/index.ts 查看文件

@@ -14,8 +14,21 @@ export interface UserGroupResult {
description: string; description: string;
} }


export type IndivUserGroup = {
authIds: number[];
data: any;
userIds: number[];
}

export const fetchGroup = cache(async () => { export const fetchGroup = cache(async () => {
return serverFetchJson<Records>(`${BASE_API_URL}/group`, { return serverFetchJson<Records>(`${BASE_API_URL}/group`, {
next: { tags: ["group"] }, next: { tags: ["group"] },
}); });
}); });


export const fetchIndivGroup = cache(async (id: number) => {
return serverFetchJson<IndivUserGroup>(`${BASE_API_URL}/group/${id}`, {
next: { tags: ["group"] },
});
});

+ 18
- 22
src/components/EditUserGroup/EditUserGroup.tsx 查看文件

@@ -1,6 +1,6 @@
"use client"; "use client";
import { useRouter, useSearchParams } from "next/navigation"; 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 SearchResults, { Column } from "../SearchResults";
// import { TeamResult } from "@/app/api/team"; // import { TeamResult } from "@/app/api/team";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@@ -16,19 +16,19 @@ import {
import { Check, Close, Error } from "@mui/icons-material"; import { Check, Close, Error } 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 { UserGroupResult } from "@/app/api/group";
import { IndivUserGroup, UserGroupResult } from "@/app/api/group";
import { UserResult } from "@/app/api/user"; import { UserResult } from "@/app/api/user";
import GroupInfo from "./GroupInfo"; import GroupInfo from "./GroupInfo";
import AuthorityAllocation from "./AuthorityAllocation"; import AuthorityAllocation from "./AuthorityAllocation";
import UserAllocation from "./UserAllocation"; import UserAllocation from "./UserAllocation";
interface Props { interface Props {
groups: UserGroupResult[];
// auths: auth[];
// groups: UserGroupResult[];
auths: auth[];
users: UserResult[]; users: UserResult[];
group: IndivUserGroup
} }


const EditUserGroup: React.FC<Props> = ({ groups, users }) => {
// console.log(users)
const EditUserGroup: React.FC<Props> = ({ users, auths, group }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const [serverError, setServerError] = useState(""); const [serverError, setServerError] = useState("");
const formProps = useForm<CreateGroupInputs>(); const formProps = useForm<CreateGroupInputs>();
@@ -36,7 +36,6 @@ const EditUserGroup: React.FC<Props> = ({ groups, users }) => {
const id = parseInt(searchParams.get("id") || "0"); const id = parseInt(searchParams.get("id") || "0");
const router = useRouter(); const router = useRouter();
const [tabIndex, setTabIndex] = useState(0); const [tabIndex, setTabIndex] = useState(0);
const [auths, setAuths] = useState<auth[]>();


const errors = formProps.formState.errors; const errors = formProps.formState.errors;


@@ -79,22 +78,19 @@ const EditUserGroup: React.FC<Props> = ({ groups, users }) => {
}, },
[router] [router]
); );

const resetGroup = React.useCallback(() => {
formProps.reset({
name: group.data.name,
description: group.data.description,
addAuthIds: group.authIds,
addUserIds: group.userIds,
})
}, []);

useEffect(() => { 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 ( return (
<> <>


+ 12
- 5
src/components/EditUserGroup/EditUserGroupWrapper.tsx 查看文件

@@ -1,24 +1,31 @@
import React from "react"; import React from "react";
import EditUserGroup from "./EditUserGroup"; import EditUserGroup from "./EditUserGroup";
import EditUserGroupLoading from "./EditUserGroupLoading"; import EditUserGroupLoading from "./EditUserGroupLoading";
import { fetchGroup } from "@/app/api/group";
import { fetchGroup, fetchIndivGroup } from "@/app/api/group";
import { fetchUser } from "@/app/api/user"; import { fetchUser } from "@/app/api/user";
import { fetchAuth } from "@/app/api/group/actions";


interface SubComponents { interface SubComponents {
Loading: typeof EditUserGroupLoading; Loading: typeof EditUserGroupLoading;
} }


const EditUserGroupWrapper: React.FC & SubComponents = async () => {
interface Props {
id: number
}

const EditUserGroupWrapper: React.FC<Props> & SubComponents = async ({ id }) => {


const [ const [
groups,
group,
users, users,
auths,
] = await Promise.all([ ] = await Promise.all([
fetchGroup(),
fetchIndivGroup(id),
fetchUser(), fetchUser(),
fetchAuth("group", id),
]); ]);


return <EditUserGroup groups={groups.records} users={users}/>;
return <EditUserGroup users={users} auths={auths.records} group={group}/>;
}; };


EditUserGroupWrapper.Loading = EditUserGroupLoading; EditUserGroupWrapper.Loading = EditUserGroupLoading;


+ 1
- 0
src/components/EditUserGroup/GroupInfo.tsx 查看文件

@@ -43,6 +43,7 @@ const GroupInfo: React.FC = () => {
<TextField <TextField
label={t("Group Name")} label={t("Group Name")}
fullWidth fullWidth
rows={4}
{...register("name", { {...register("name", {
required: true, required: true,
})} })}


Loading…
取消
儲存