Filtered out the fields from the UserCard in the list wouldn't have anything to display

This commit is contained in:
Joao Ramos
2024-06-24 11:12:16 +01:00
parent 77a22b3ab3
commit ec8c06ca94

View File

@@ -787,35 +787,44 @@ export default function UserList({
document.body.removeChild(element); document.body.removeChild(element);
}; };
return ( const viewStudentFilter = (x: User) => x.type === "student";
<> const viewTeacherFilter = (x: User) => x.type === "teacher";
{renderHeader && renderHeader(displayUsers.length)} const belongsToAdminFilter = (x: User) => {
<div className="w-full"> if (!selectedUser) return false;
<Modal isOpen={!!selectedUser} onClose={() => setSelectedUser(undefined)}> return groups
<>
{selectedUser && (
<div className="w-full flex flex-col gap-8">
<UserCard
loggedInUser={user}
onViewStudents={
selectedUser.type === "corporate" ||
selectedUser.type === "teacher"
? () => {
appendUserFilters({
id: "view-students",
filter: (x: User) => x.type === "student",
});
appendUserFilters({
id: "belongs-to-admin",
filter: (x: User) =>
groups
.filter( .filter(
(g) => (g) =>
g.admin === selectedUser.id || g.admin === selectedUser.id ||
g.participants.includes(selectedUser.id) g.participants.includes(selectedUser.id)
) )
.flatMap((g) => g.participants) .flatMap((g) => g.participants)
.includes(x.id), .includes(x.id);
};
const viewStudentFilterBelongsToAdmin = (x: User) =>
x.type === "student" && belongsToAdminFilter(x);
const viewTeacherFilterBelongsToAdmin = (x: User) =>
x.type === "teacher" && belongsToAdminFilter(x);
const renderUserCard = (selectedUser: User) => {
const studentsFromAdmin = users.filter(viewStudentFilterBelongsToAdmin);
const teachersFromAdmin = users.filter(viewTeacherFilterBelongsToAdmin);
return (
<div className="w-full flex flex-col gap-8">
<UserCard
loggedInUser={user}
onViewStudents={
(selectedUser.type === "corporate" ||
selectedUser.type === "teacher") &&
studentsFromAdmin.length > 0
? () => {
appendUserFilters({
id: "view-students",
filter: viewStudentFilter,
});
appendUserFilters({
id: "belongs-to-admin",
filter: belongsToAdminFilter,
}); });
router.push("/list/users"); router.push("/list/users");
@@ -823,24 +832,17 @@ export default function UserList({
: undefined : undefined
} }
onViewTeachers={ onViewTeachers={
selectedUser.type === "corporate" || (selectedUser.type === "corporate" ||
selectedUser.type === "student" selectedUser.type === "student") &&
teachersFromAdmin.length > 0
? () => { ? () => {
appendUserFilters({ appendUserFilters({
id: "view-teachers", id: "view-teachers",
filter: (x: User) => x.type === "teacher", filter: viewTeacherFilter,
}); });
appendUserFilters({ appendUserFilters({
id: "belongs-to-admin", id: "belongs-to-admin",
filter: (x: User) => filter: belongsToAdminFilter,
groups
.filter(
(g) =>
g.admin === selectedUser.id ||
g.participants.includes(selectedUser.id)
)
.flatMap((g) => g.participants)
.includes(x.id),
}); });
router.push("/list/users"); router.push("/list/users");
@@ -848,8 +850,7 @@ export default function UserList({
: undefined : undefined
} }
onViewCorporate={ onViewCorporate={
selectedUser.type === "teacher" || selectedUser.type === "teacher" || selectedUser.type === "student"
selectedUser.type === "student"
? () => { ? () => {
appendUserFilters({ appendUserFilters({
id: "view-corporate", id: "view-corporate",
@@ -859,9 +860,7 @@ export default function UserList({
id: "belongs-to-admin", id: "belongs-to-admin",
filter: (x: User) => filter: (x: User) =>
groups groups
.filter((g) => .filter((g) => g.participants.includes(selectedUser.id))
g.participants.includes(selectedUser.id)
)
.flatMap((g) => [g.admin, ...g.participants]) .flatMap((g) => [g.admin, ...g.participants])
.includes(x.id), .includes(x.id),
}); });
@@ -877,8 +876,18 @@ export default function UserList({
user={selectedUser} user={selectedUser}
/> />
</div> </div>
)} );
</> };
return (
<>
{renderHeader && renderHeader(displayUsers.length)}
<div className="w-full">
<Modal
isOpen={!!selectedUser}
onClose={() => setSelectedUser(undefined)}
>
{selectedUser && renderUserCard(selectedUser)}
</Modal> </Modal>
<div className="w-full flex flex-col gap-2"> <div className="w-full flex flex-col gap-2">
<div className="w-full flex gap-2 items-end"> <div className="w-full flex gap-2 items-end">
@@ -916,7 +925,10 @@ export default function UserList({
> >
{row.getVisibleCells().map((cell) => ( {row.getVisibleCells().map((cell) => (
<td className="px-4 py-2 items-center w-fit" key={cell.id}> <td className="px-4 py-2 items-center w-fit" key={cell.id}>
{flexRender(cell.column.columnDef.cell, cell.getContext())} {flexRender(
cell.column.columnDef.cell,
cell.getContext()
)}
</td> </td>
))} ))}
</tr> </tr>