Renamed the Owner to Admin

This commit is contained in:
Tiago Ribeiro
2023-11-20 23:46:43 +00:00
parent 13c8459d4b
commit 52d4b831ae
14 changed files with 56 additions and 49 deletions

View File

@@ -90,7 +90,14 @@ export default function Sidebar({path, navDisabled = false, focusMode = false, u
<Nav disabled={disableNavigation} Icon={BsGraphUp} label="Stats" path={path} keyPath="/stats" isMinimized={isMinimized} />
<Nav disabled={disableNavigation} Icon={BsClockHistory} label="Record" path={path} keyPath="/record" isMinimized={isMinimized} />
{userType !== "student" && (
<Nav disabled={disableNavigation} Icon={BsShieldFill} label="Admin" path={path} keyPath="/admin" isMinimized={isMinimized} />
<Nav
disabled={disableNavigation}
Icon={BsShieldFill}
label="Management"
path={path}
keyPath="/manage"
isMinimized={isMinimized}
/>
)}
</div>
<div className="xl:hidden -xl:flex flex-col gap-3">
@@ -100,7 +107,7 @@ export default function Sidebar({path, navDisabled = false, focusMode = false, u
<Nav disabled={disableNavigation} Icon={BsGraphUp} label="Stats" path={path} keyPath="/stats" isMinimized={true} />
<Nav disabled={disableNavigation} Icon={BsClockHistory} label="Record" path={path} keyPath="/record" isMinimized={true} />
{userType !== "student" && (
<Nav disabled={disableNavigation} Icon={BsShieldFill} label="Admin" path={path} keyPath="/admin" isMinimized={true} />
<Nav disabled={disableNavigation} Icon={BsShieldFill} label="Management" path={path} keyPath="/manage" isMinimized={true} />
)}
</div>

View File

@@ -234,7 +234,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers}:
</div>
</div>
</div>
{(loggedInUser.type === "developer" || loggedInUser.type === "owner") && (
{(loggedInUser.type === "developer" || loggedInUser.type === "admin") && (
<>
<Divider className="w-full" />
<div className="flex flex-col md:flex-row gap-8 w-full">
@@ -259,7 +259,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers}:
<option value="teacher">Teacher</option>
<option value="corporate">Corporate</option>
<option value="agent">Country Agent</option>
<option value="owner">Owner</option>
<option value="admin">Admin</option>
<option value="developer">Developer</option>
</select>
</div>

View File

@@ -2,38 +2,38 @@ import {Type} from "@/interfaces/user";
export const PERMISSIONS = {
generateCode: {
student: ["corporate", "developer", "owner"],
teacher: ["corporate", "developer", "owner"],
corporate: ["owner", "developer"],
owner: ["developer", "owner"],
agent: ["developer", "owner"],
student: ["corporate", "developer", "admin"],
teacher: ["corporate", "developer", "admin"],
corporate: ["admin", "developer"],
admin: ["developer", "admin"],
agent: ["developer", "admin"],
developer: ["developer"],
},
deleteUser: {
student: ["teacher", "corporate", "developer", "owner"],
teacher: ["corporate", "developer", "owner"],
corporate: ["owner", "developer"],
owner: ["developer", "owner"],
agent: ["developer", "owner"],
student: ["teacher", "corporate", "developer", "admin"],
teacher: ["corporate", "developer", "admin"],
corporate: ["admin", "developer"],
admin: ["developer", "admin"],
agent: ["developer", "admin"],
developer: ["developer"],
},
updateUser: {
student: ["teacher", "corporate", "developer", "owner"],
teacher: ["corporate", "developer", "owner"],
corporate: ["owner", "developer"],
owner: ["developer", "owner"],
agent: ["developer", "owner"],
student: ["teacher", "corporate", "developer", "admin"],
teacher: ["corporate", "developer", "admin"],
corporate: ["admin", "developer"],
admin: ["developer", "admin"],
agent: ["developer", "admin"],
developer: ["developer"],
},
updateExpiryDate: {
student: ["developer", "owner"],
teacher: ["developer", "owner"],
corporate: ["owner", "developer"],
owner: ["developer", "owner"],
agent: ["developer", "owner"],
student: ["developer", "admin"],
teacher: ["developer", "admin"],
corporate: ["admin", "developer"],
admin: ["developer", "admin"],
agent: ["developer", "admin"],
developer: ["developer"],
},
examManagement: {
delete: ["developer", "owner"],
delete: ["developer", "admin"],
},
};

View File

@@ -16,7 +16,7 @@ interface Props {
user: User;
}
export default function OwnerDashboard({user}: Props) {
export default function AdminDashboard({user}: Props) {
const [page, setPage] = useState("");
const [selectedUser, setSelectedUser] = useState<User>();
const [showModal, setShowModal] = useState(false);

View File

@@ -80,5 +80,5 @@ export interface Group {
disableEditing?: boolean;
}
export type Type = "student" | "teacher" | "corporate" | "owner" | "developer" | "agent";
export const userTypes: Type[] = ["student", "teacher", "corporate", "owner", "developer", "agent"];
export type Type = "student" | "teacher" | "corporate" | "admin" | "developer" | "agent";
export const userTypes: Type[] = ["student", "teacher", "corporate", "admin", "developer", "agent"];

View File

@@ -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>
)}

View File

@@ -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>

View File

@@ -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)}>

View File

@@ -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>

View File

@@ -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});

View File

@@ -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>
)}
</>

View File

@@ -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."

View File

@@ -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}`}}

View File

@@ -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}`}))}