Merge branch 'develop' into feature/exam-generation
This commit is contained in:
@@ -83,7 +83,7 @@ export default function BatchCodeGenerator({user}: {user: User}) {
|
||||
<Button onClick={openFilePicker} isLoading={isLoading} disabled={isLoading}>
|
||||
{filesContent.length > 0 ? filesContent[0].name : "Choose a file"}
|
||||
</Button>
|
||||
{user && (user.type === "developer" || user.type === "owner") && (
|
||||
{user && (user.type === "developer" || user.type === "admin") && (
|
||||
<>
|
||||
<div className="flex -md:flex-row md:flex-col -md:items-center 2xl:flex-row 2xl:items-center justify-between gap-2">
|
||||
<label className="font-normal text-base text-mti-gray-dim">Expiry Date</label>
|
||||
@@ -133,9 +133,9 @@ export default function BatchCodeGenerator({user}: {user: User}) {
|
||||
<Button
|
||||
className="w-44 2xl:w-48"
|
||||
variant="outline"
|
||||
onClick={() => generateCode("owner")}
|
||||
disabled={emails.length === 0 || isLoading || !PERMISSIONS.generateCode.owner.includes(user.type)}>
|
||||
Owner
|
||||
onClick={() => generateCode("admin")}
|
||||
disabled={emails.length === 0 || isLoading || !PERMISSIONS.generateCode.admin.includes(user.type)}>
|
||||
Admin
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -82,13 +82,13 @@ export default function CodeGenerator({user}: {user: User}) {
|
||||
<Button
|
||||
className="w-44 md:w-48"
|
||||
variant="outline"
|
||||
onClick={() => generateCode("owner")}
|
||||
disabled={!PERMISSIONS.generateCode.owner.includes(user.type) || (isExpiryDateEnabled && expiryDate === null)}>
|
||||
Owner
|
||||
onClick={() => generateCode("admin")}
|
||||
disabled={!PERMISSIONS.generateCode.admin.includes(user.type) || (isExpiryDateEnabled && expiryDate === null)}>
|
||||
Admin
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
{user && (user.type === "developer" || user.type === "owner") && (
|
||||
{user && (user.type === "developer" || user.type === "admin") && (
|
||||
<>
|
||||
<div className="flex -md:flex-row md:flex-col -md:items-center 2xl:flex-row 2xl:items-center justify-between gap-2">
|
||||
<label className="font-normal text-base text-mti-gray-dim">Expiry Date</label>
|
||||
|
||||
@@ -51,7 +51,7 @@ const CreatePanel = ({user, users, group, onCreate}: CreateDialogProps) => {
|
||||
const emailUsers = [...new Set(emails)].map((x) => users.find((y) => y.email.toLowerCase() === x)).filter((x) => x !== undefined);
|
||||
const filteredUsers = emailUsers.filter(
|
||||
(x) =>
|
||||
((user.type === "developer" || user.type === "owner" || user.type === "corporate") &&
|
||||
((user.type === "developer" || user.type === "admin" || user.type === "corporate") &&
|
||||
(x?.type === "student" || x?.type === "teacher")) ||
|
||||
(user.type === "teacher" && x?.type === "student"),
|
||||
);
|
||||
@@ -216,7 +216,7 @@ export default function GroupList({user}: {user: User}) {
|
||||
cell: ({row}: {row: {original: Group}}) => {
|
||||
return (
|
||||
<>
|
||||
{(user?.type === "developer" || user?.type === "owner" || user.id === row.original.admin) && (
|
||||
{(user?.type === "developer" || user?.type === "admin" || user.id === row.original.admin) && (
|
||||
<div className="flex gap-2">
|
||||
{editingID !== row.original.id && (
|
||||
<div data-tip="Edit" className="cursor-pointer tooltip" onClick={() => setEditingID(row.original.id)}>
|
||||
|
||||
@@ -162,10 +162,10 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us
|
||||
Admin
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => updateAccountType(row.original, "owner")}
|
||||
onClick={() => updateAccountType(row.original, "admin")}
|
||||
className="text-sm !py-2 !px-4"
|
||||
disabled={row.original.type === "owner" || !PERMISSIONS.generateCode["owner"].includes(user.type)}>
|
||||
Owner
|
||||
disabled={row.original.type === "admin" || !PERMISSIONS.generateCode["admin"].includes(user.type)}>
|
||||
Admin
|
||||
</Button>
|
||||
</div>
|
||||
</Popover.Panel>
|
||||
|
||||
@@ -47,7 +47,7 @@ async function del(req: NextApiRequest, res: NextApiResponse) {
|
||||
const group = {...snapshot.data(), id: snapshot.id} as Group;
|
||||
|
||||
const user = req.session.user;
|
||||
if (user.type === "owner" || user.type === "developer" || user.id === group.admin) {
|
||||
if (user.type === "admin" || user.type === "developer" || user.id === group.admin) {
|
||||
await deleteDoc(snapshot.ref);
|
||||
|
||||
res.status(200).json({ok: true});
|
||||
@@ -69,7 +69,7 @@ async function patch(req: NextApiRequest, res: NextApiResponse) {
|
||||
const group = {...snapshot.data(), id: snapshot.id} as Group;
|
||||
|
||||
const user = req.session.user;
|
||||
if (user.type === "owner" || user.type === "developer" || user.id === group.admin) {
|
||||
if (user.type === "admin" || user.type === "developer" || user.id === group.admin) {
|
||||
await setDoc(snapshot.ref, req.body, {merge: true});
|
||||
|
||||
res.status(200).json({ok: true});
|
||||
|
||||
@@ -23,7 +23,7 @@ import Link from "next/link";
|
||||
import {MODULE_ARRAY} from "@/utils/moduleUtils";
|
||||
import ProfileSummary from "@/components/ProfileSummary";
|
||||
import StudentDashboard from "@/dashboards/Student";
|
||||
import OwnerDashboard from "@/dashboards/Owner";
|
||||
import AdminDashboard from "@/dashboards/Admin";
|
||||
import CorporateDashboard from "@/dashboards/Corporate";
|
||||
import TeacherDashboard from "@/dashboards/Teacher";
|
||||
|
||||
@@ -166,8 +166,8 @@ export default function Home() {
|
||||
{user.type === "student" && <StudentDashboard user={user} />}
|
||||
{user.type === "teacher" && <TeacherDashboard user={user} />}
|
||||
{user.type === "corporate" && <CorporateDashboard user={user} />}
|
||||
{user.type === "owner" && <OwnerDashboard user={user} />}
|
||||
{user.type === "developer" && <OwnerDashboard user={user} />}
|
||||
{user.type === "admin" && <AdminDashboard user={user} />}
|
||||
{user.type === "developer" && <AdminDashboard user={user} />}
|
||||
</Layout>
|
||||
)}
|
||||
</>
|
||||
|
||||
@@ -50,7 +50,7 @@ export default function Admin() {
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>Admin Panel | EnCoach</title>
|
||||
<title>Management Panel | EnCoach</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="A training platform for the IELTS exam provided by the Muscat Training Institute and developed by eCrop."
|
||||
@@ -296,7 +296,7 @@ export default function History({user}: {user: User}) {
|
||||
<Layout user={user}>
|
||||
<div className="w-full flex -xl:flex-col -xl:gap-4 justify-between items-center">
|
||||
<div className="xl:w-3/4">
|
||||
{(user.type === "developer" || user.type === "owner") && (
|
||||
{(user.type === "developer" || user.type === "admin") && (
|
||||
<Select
|
||||
options={users.map((x) => ({value: x.id, label: `${x.name} - ${x.email}`}))}
|
||||
defaultValue={{value: user.id, label: `${user.name} - ${user.email}`}}
|
||||
|
||||
@@ -169,7 +169,7 @@ export default function Stats() {
|
||||
<section className="flex flex-col gap-3">
|
||||
<div className="w-full flex justify-between gap-8 items-center">
|
||||
<>
|
||||
{(user.type === "developer" || user.type === "owner") && (
|
||||
{(user.type === "developer" || user.type === "admin") && (
|
||||
<Select
|
||||
className="w-full"
|
||||
options={users.map((x) => ({value: x.id, label: `${x.name} - ${x.email}`}))}
|
||||
|
||||
Reference in New Issue
Block a user