From 0ce3a16d3a22f51fe3dbe2dbd1f41b3071f45c3c Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Tue, 20 Aug 2024 16:29:55 +0100 Subject: [PATCH] Resolved another bug related to master corporate groups --- src/pages/(admin)/Lists/GroupList.tsx | 13 +++---------- src/pages/(admin)/Lists/UserList.tsx | 7 +++---- src/pages/api/groups/index.ts | 11 +++++------ 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/pages/(admin)/Lists/GroupList.tsx b/src/pages/(admin)/Lists/GroupList.tsx index 4174c601..92d2913b 100644 --- a/src/pages/(admin)/Lists/GroupList.tsx +++ b/src/pages/(admin)/Lists/GroupList.tsx @@ -14,7 +14,7 @@ import {toast} from "react-toastify"; import readXlsxFile from "read-excel-file"; import {useFilePicker} from "use-file-picker"; import {getUserCorporate} from "@/utils/groups"; -import {isAgentUser, isCorporateUser} from "@/resources/user"; +import {isAgentUser, isCorporateUser, USER_TYPE_LABELS} from "@/resources/user"; import {checkAccess} from "@/utils/permissions"; import usePermissions from "@/hooks/usePermissions"; @@ -202,7 +202,6 @@ const filterTypes = ["corporate", "teacher", "mastercorporate"]; export default function GroupList({user}: {user: User}) { const [isCreating, setIsCreating] = useState(false); const [editingGroup, setEditingGroup] = useState(); - const [filterByUser, setFilterByUser] = useState(false); const {permissions} = usePermissions(user?.id || ""); @@ -218,12 +217,6 @@ export default function GroupList({user}: {user: User}) { adminAdmins: user?.id, }); - useEffect(() => { - if (user && ["corporate", "teacher", "mastercorporate"].includes(user.type)) { - setFilterByUser(true); - } - }, [user]); - const deleteGroup = (group: Group) => { if (!confirm(`Are you sure you want to delete "${group.name}"?`)) return; @@ -246,7 +239,7 @@ export default function GroupList({user}: {user: User}) { columnHelper.accessor("admin", { header: "Admin", cell: (info) => ( -
x.id === info.getValue())?.type)}> +
x.id === info.getValue())?.type || "student"]}> {users.find((x) => x.id === info.getValue())?.name}
), @@ -309,7 +302,7 @@ export default function GroupList({user}: {user: User}) { user={user} onClose={closeModal} users={ - user?.type === "corporate" || user?.type === "teacher" + checkAccess(user, ["corporate", "teacher", "mastercorporate"]) ? users.filter( (u) => groups diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx index 220022a4..7cf60d3f 100644 --- a/src/pages/(admin)/Lists/UserList.tsx +++ b/src/pages/(admin)/Lists/UserList.tsx @@ -76,10 +76,9 @@ export default function UserList({ useEffect(() => { (async () => { if (user && users) { - const filterUsers = - user.type === "corporate" || user.type === "teacher" - ? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id)) - : users; + const filterUsers = ["corporate", "teacher", "mastercorporate"].includes(user.type) + ? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id)) + : users; const filteredUsers = filters.reduce((d, f) => d.filter(f), filterUsers); const sortedUsers = await asyncSorter(filteredUsers, sortFunction); diff --git a/src/pages/api/groups/index.ts b/src/pages/api/groups/index.ts index ede84b30..093f86fd 100644 --- a/src/pages/api/groups/index.ts +++ b/src/pages/api/groups/index.ts @@ -7,6 +7,7 @@ import {sessionOptions} from "@/lib/session"; import {Group} from "@/interfaces/user"; import {v4} from "uuid"; import {updateExpiryDateOnGroup, getGroupsForUser} from "@/utils/groups.be"; +import {uniqBy} from "lodash"; const db = getFirestore(app); @@ -31,15 +32,13 @@ async function get(req: NextApiRequest, res: NextApiResponse) { if (req.session?.user?.type === "mastercorporate") { try { const masterCorporateGroups = await getGroupsForUser(admin, participant); - const corporatesFromMaster = masterCorporateGroups.filter((g) => g.name === "Corporate").flatMap((g) => g.participants); + const corporatesFromMaster = masterCorporateGroups.filter((g) => g.name.trim() === "Corporate").flatMap((g) => g.participants); + + if (corporatesFromMaster.length === 0) return res.status(200).json(masterCorporateGroups); - if (corporatesFromMaster.length === 0) { - res.status(200).json(masterCorporateGroups); - return; - } Promise.all(corporatesFromMaster.map((c) => getGroupsForUser(c, participant))) .then((groups) => { - res.status(200).json([...masterCorporateGroups, ...groups.flat()]); + res.status(200).json([...masterCorporateGroups, ...uniqBy(groups.flat(), "id")]); return; }) .catch((e) => {