Added the option to view both the teachers and students of a corporate as well as the corporate of a student

This commit is contained in:
Tiago Ribeiro
2023-12-03 00:13:50 +00:00
parent 36be5267a2
commit 5c8867555d
8 changed files with 308 additions and 21 deletions

View File

@@ -20,6 +20,8 @@ import {
import UserCard from "@/components/UserCard";
import useGroups from "@/hooks/useGroups";
import IconCard from "./IconCard";
import useFilterStore from "@/stores/listFilterStore";
import {useRouter} from "next/router";
interface Props {
user: User;
@@ -34,6 +36,9 @@ export default function AdminDashboard({user}: Props) {
const {users, reload} = useUsers();
const {groups} = useGroups();
const appendUserFilters = useFilterStore((state) => state.appendUserFilter);
const router = useRouter();
useEffect(() => {
setShowModal(!!selectedUser && page === "");
}, [selectedUser, page]);
@@ -61,7 +66,7 @@ export default function AdminDashboard({user}: Props) {
? groups
.filter((g) => g.admin === selectedUser.id || g.participants.includes(selectedUser.id))
.flatMap((g) => g.participants)
.includes(x.id) || false
.includes(x.id)
: true);
return (
@@ -76,7 +81,7 @@ export default function AdminDashboard({user}: Props) {
<h2 className="text-2xl font-semibold">Students ({users.filter(filter).length})</h2>
</div>
<UserList user={user} filter={filter} />
<UserList user={user} filters={[filter]} />
</>
);
};
@@ -103,7 +108,7 @@ export default function AdminDashboard({user}: Props) {
<h2 className="text-2xl font-semibold">Teachers ({users.filter(filter).length})</h2>
</div>
<UserList user={user} filter={filter} />
<UserList user={user} filters={[filter]} />
</>
);
};
@@ -123,7 +128,7 @@ export default function AdminDashboard({user}: Props) {
<h2 className="text-2xl font-semibold">Country Managers ({users.filter(filter).length})</h2>
</div>
<UserList user={user} filter={filter} />
<UserList user={user} filters={[filter]} />
</>
);
};
@@ -140,7 +145,7 @@ export default function AdminDashboard({user}: Props) {
<h2 className="text-2xl font-semibold">Corporate ({users.filter((x) => x.type === "corporate").length})</h2>
</div>
<UserList user={user} filter={(x) => x.type === "corporate"} />
<UserList user={user} filters={[(x) => x.type === "corporate"]} />
</>
);
@@ -159,7 +164,7 @@ export default function AdminDashboard({user}: Props) {
<h2 className="text-2xl font-semibold">Inactive Students ({users.filter(filter).length})</h2>
</div>
<UserList user={user} filter={filter} />
<UserList user={user} filters={[filter]} />
</>
);
};
@@ -179,7 +184,7 @@ export default function AdminDashboard({user}: Props) {
<h2 className="text-2xl font-semibold">Inactive Corporate ({users.filter(filter).length})</h2>
</div>
<UserList user={user} filter={filter} />
<UserList user={user} filters={[filter]} />
</>
);
};
@@ -378,9 +383,65 @@ export default function AdminDashboard({user}: Props) {
if (shouldReload) reload();
}}
onViewStudents={
selectedUser.type === "corporate" || selectedUser.type === "teacher" ? () => setPage("students") : undefined
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((g) => g.admin === selectedUser.id || g.participants.includes(selectedUser.id))
.flatMap((g) => g.participants)
.includes(x.id),
});
router.push("/list/users");
}
: undefined
}
onViewTeachers={
selectedUser.type === "corporate" || selectedUser.type === "student"
? () => {
appendUserFilters({
id: "view-teachers",
filter: (x: User) => x.type === "teacher",
});
appendUserFilters({
id: "belongs-to-admin",
filter: (x: User) =>
groups
.filter((g) => g.admin === selectedUser.id || g.participants.includes(selectedUser.id))
.flatMap((g) => g.participants)
.includes(x.id),
});
router.push("/list/users");
}
: undefined
}
onViewCorporate={
selectedUser.type === "teacher" || selectedUser.type === "student"
? () => {
appendUserFilters({
id: "view-corporate",
filter: (x: User) => x.type === "corporate",
});
appendUserFilters({
id: "belongs-to-admin",
filter: (x: User) =>
groups
.filter((g) => g.participants.includes(selectedUser.id))
.flatMap((g) => [g.admin, ...g.participants])
.includes(x.id),
});
router.push("/list/users");
}
: undefined
}
onViewTeachers={selectedUser.type === "corporate" ? () => setPage("teachers") : undefined}
user={selectedUser}
/>
</div>