Resolved another bug related to master corporate groups

This commit is contained in:
Tiago Ribeiro
2024-08-20 16:29:55 +01:00
parent 4315a7b17c
commit 0ce3a16d3a
3 changed files with 11 additions and 20 deletions

View File

@@ -14,7 +14,7 @@ import {toast} from "react-toastify";
import readXlsxFile from "read-excel-file"; import readXlsxFile from "read-excel-file";
import {useFilePicker} from "use-file-picker"; import {useFilePicker} from "use-file-picker";
import {getUserCorporate} from "@/utils/groups"; 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 {checkAccess} from "@/utils/permissions";
import usePermissions from "@/hooks/usePermissions"; import usePermissions from "@/hooks/usePermissions";
@@ -202,7 +202,6 @@ const filterTypes = ["corporate", "teacher", "mastercorporate"];
export default function GroupList({user}: {user: User}) { export default function GroupList({user}: {user: User}) {
const [isCreating, setIsCreating] = useState(false); const [isCreating, setIsCreating] = useState(false);
const [editingGroup, setEditingGroup] = useState<Group>(); const [editingGroup, setEditingGroup] = useState<Group>();
const [filterByUser, setFilterByUser] = useState(false);
const {permissions} = usePermissions(user?.id || ""); const {permissions} = usePermissions(user?.id || "");
@@ -218,12 +217,6 @@ export default function GroupList({user}: {user: User}) {
adminAdmins: user?.id, adminAdmins: user?.id,
}); });
useEffect(() => {
if (user && ["corporate", "teacher", "mastercorporate"].includes(user.type)) {
setFilterByUser(true);
}
}, [user]);
const deleteGroup = (group: Group) => { const deleteGroup = (group: Group) => {
if (!confirm(`Are you sure you want to delete "${group.name}"?`)) return; 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", { columnHelper.accessor("admin", {
header: "Admin", header: "Admin",
cell: (info) => ( cell: (info) => (
<div className="tooltip" data-tip={capitalize(users.find((x) => x.id === info.getValue())?.type)}> <div className="tooltip" data-tip={USER_TYPE_LABELS[users.find((x) => x.id === info.getValue())?.type || "student"]}>
{users.find((x) => x.id === info.getValue())?.name} {users.find((x) => x.id === info.getValue())?.name}
</div> </div>
), ),
@@ -309,7 +302,7 @@ export default function GroupList({user}: {user: User}) {
user={user} user={user}
onClose={closeModal} onClose={closeModal}
users={ users={
user?.type === "corporate" || user?.type === "teacher" checkAccess(user, ["corporate", "teacher", "mastercorporate"])
? users.filter( ? users.filter(
(u) => (u) =>
groups groups

View File

@@ -76,8 +76,7 @@ export default function UserList({
useEffect(() => { useEffect(() => {
(async () => { (async () => {
if (user && users) { if (user && users) {
const filterUsers = const filterUsers = ["corporate", "teacher", "mastercorporate"].includes(user.type)
user.type === "corporate" || user.type === "teacher"
? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id)) ? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id))
: users; : users;

View File

@@ -7,6 +7,7 @@ import {sessionOptions} from "@/lib/session";
import {Group} from "@/interfaces/user"; import {Group} from "@/interfaces/user";
import {v4} from "uuid"; import {v4} from "uuid";
import {updateExpiryDateOnGroup, getGroupsForUser} from "@/utils/groups.be"; import {updateExpiryDateOnGroup, getGroupsForUser} from "@/utils/groups.be";
import {uniqBy} from "lodash";
const db = getFirestore(app); const db = getFirestore(app);
@@ -31,15 +32,13 @@ async function get(req: NextApiRequest, res: NextApiResponse) {
if (req.session?.user?.type === "mastercorporate") { if (req.session?.user?.type === "mastercorporate") {
try { try {
const masterCorporateGroups = await getGroupsForUser(admin, participant); 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))) Promise.all(corporatesFromMaster.map((c) => getGroupsForUser(c, participant)))
.then((groups) => { .then((groups) => {
res.status(200).json([...masterCorporateGroups, ...groups.flat()]); res.status(200).json([...masterCorporateGroups, ...uniqBy(groups.flat(), "id")]);
return; return;
}) })
.catch((e) => { .catch((e) => {