-
Latest corporate
-
+
+
Latest corporate
+
{users
.filter((x) => x.type === "admin")
.sort((a, b) => dateSorter(a, b, "asc", "registrationDate"))
- .slice(0, (users.filter((x) => x.type === "admin").length - 1) / 2)
.map((x) => (
-
-

-
- {x.name}
- {x.email}
-
-
+
))}
-
+
+
Disabled Corporate
+
+ {users
+ .filter((x) => x.type === "admin" && x.isDisabled)
+ .map((x) => (
+
+ ))}
+
+
+
+
Students expiring in 1 month
+
+ {users
+ .filter(
+ (x) =>
+ x.type === "student" &&
+ x.subscriptionExpirationDate &&
+ moment().isAfter(moment(x.subscriptionExpirationDate).subtract(30, "days")),
+ )
+ .map((x) => (
+
+ ))}
+
+
+
+
Teachers expiring in 1 month
+
+ {users
+ .filter(
+ (x) =>
+ x.type === "teacher" &&
+ x.subscriptionExpirationDate &&
+ moment().isAfter(moment(x.subscriptionExpirationDate).subtract(30, "days")),
+ )
+ .map((x) => (
+
+ ))}
+
+
+
+
Corporate expiring in 1 month
+
+ {users
+ .filter(
+ (x) =>
+ x.type === "admin" &&
+ x.subscriptionExpirationDate &&
+ moment().isAfter(moment(x.subscriptionExpirationDate).subtract(30, "days")),
+ )
+ .map((x) => (
+
+ ))}
+
+
+
+ >
+ );
+
+ return (
+ <>
+
setSelectedUser(undefined)}>
+ <>
+ {selectedUser && (
+
+ {
+ setSelectedUser(undefined);
+ if (shouldReload) reload();
+ }}
+ {...selectedUser}
+ />
+
+ )}
+ >
+
+ {page === "students" &&
}
+ {page === "teachers" &&
}
+ {page === "corporate" &&
}
+ {page === "inactiveStudents" &&
}
+ {page === "inactiveCorporate" &&
}
+ {page === "" &&
}
>
);
}
diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx
index 0e9f118e..584d3b90 100644
--- a/src/pages/(admin)/Lists/UserList.tsx
+++ b/src/pages/(admin)/Lists/UserList.tsx
@@ -10,17 +10,20 @@ import clsx from "clsx";
import {capitalize, reverse} from "lodash";
import moment from "moment";
import {Fragment, useEffect, useState} from "react";
-import {BsArrowDown, BsArrowDownUp, BsArrowUp, BsCheck, BsCheckCircle, BsFillExclamationOctagonFill, BsPerson, BsTrash} from "react-icons/bs";
+import {BsArrowDown, BsArrowDownUp, BsArrowUp, BsCheck, BsCheckCircle, BsEye, BsFillExclamationOctagonFill, BsPerson, BsTrash} from "react-icons/bs";
import {toast} from "react-toastify";
import {countries, TCountries} from "countries-list";
import countryCodes from "country-codes-list";
+import Modal from "@/components/Modal";
+import UserCard from "@/components/UserCard";
const columnHelper = createColumnHelper
();
-export default function UserList({user}: {user: User}) {
+export default function UserList({user, filter}: {user: User; filter?: (user: User) => boolean}) {
const [showDemographicInformation, setShowDemographicInformation] = useState(false);
const [sorter, setSorter] = useState();
const [displayUsers, setDisplayUsers] = useState([]);
+ const [selectedUser, setSelectedUser] = useState();
const {users, reload} = useUsers();
const {groups} = useGroups(user ? user.id : undefined);
@@ -30,7 +33,9 @@ export default function UserList({user}: {user: User}) {
const filterUsers =
user.type === "admin" || user.type === "student" ? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id)) : users;
- setDisplayUsers([...filterUsers.sort(sortFunction)]);
+ const filteredUsers = filter ? filterUsers.filter(filter) : filterUsers;
+
+ setDisplayUsers([...filteredUsers.sort(sortFunction)]);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [user, users, sorter, groups]);
@@ -186,7 +191,16 @@ export default function UserList({user}: {user: User}) {
) as any,
- cell: (info) => info.getValue(),
+ cell: ({row, getValue}) => (
+ (PERMISSIONS.updateExpiryDate[row.original.type].includes(user.type) ? setSelectedUser(row.original) : null)}>
+ {getValue()}
+
+ ),
}),
columnHelper.accessor("demographicInformation.country", {
header: (
@@ -251,7 +265,16 @@ export default function UserList({user}: {user: User}) {
) as any,
- cell: (info) => info.getValue(),
+ cell: ({row, getValue}) => (
+ (PERMISSIONS.updateExpiryDate[row.original.type].includes(user.type) ? setSelectedUser(row.original) : null)}>
+ {getValue()}
+
+ ),
}),
columnHelper.accessor("email", {
header: (
@@ -260,7 +283,16 @@ export default function UserList({user}: {user: User}) {
) as any,
- cell: (info) => info.getValue(),
+ cell: ({row, getValue}) => (
+ (PERMISSIONS.updateExpiryDate[row.original.type].includes(user.type) ? setSelectedUser(row.original) : null)}>
+ {getValue()}
+
+ ),
}),
columnHelper.accessor("type", {
header: (
@@ -397,6 +429,21 @@ export default function UserList({user}: {user: User}) {
return (
+
setSelectedUser(undefined)}>
+ <>
+ {selectedUser && (
+
+ {
+ setSelectedUser(undefined);
+ if (shouldReload) reload();
+ }}
+ {...selectedUser}
+ />
+
+ )}
+ >
+
{table.getHeaderGroups().map((headerGroup) => (