Renamed the admin type to corporate

This commit is contained in:
Tiago Ribeiro
2023-10-27 00:43:05 +01:00
parent 15f8d25bc9
commit 0aefbb85ec
11 changed files with 38 additions and 237 deletions

View File

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

View File

@@ -103,10 +103,10 @@ export default function OwnerDashboard({user}: Props) {
<BsArrowLeft className="text-xl" />
<span>Back</span>
</div>
<h2 className="text-2xl font-semibold">Corporate ({users.filter((x) => x.type === "admin").length})</h2>
<h2 className="text-2xl font-semibold">Corporate ({users.filter((x) => x.type === "corporate").length})</h2>
</div>
<UserList user={user} filter={(x) => x.type === "admin"} />
<UserList user={user} filter={(x) => x.type === "corporate"} />
</>
);
@@ -131,7 +131,7 @@ export default function OwnerDashboard({user}: Props) {
};
const InactiveCorporateList = () => {
const filter = (x: User) => x.type === "admin" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate));
const filter = (x: User) => x.type === "corporate" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate));
return (
<>
@@ -177,7 +177,7 @@ export default function OwnerDashboard({user}: Props) {
<BsPersonFillGear className="text-mti-purple-light text-6xl" />
<span className="flex flex-col gap-1 items-center text-xl">
<span className="text-lg">Corporate</span>
<span className="font-semibold text-mti-purple">{users.filter((x) => x.type === "admin").length}</span>
<span className="font-semibold text-mti-purple">{users.filter((x) => x.type === "corporate").length}</span>
</span>
</div>
<div className="bg-white rounded-xl shadow p-4 flex flex-col gap-4 items-center w-52 h-52 justify-center cursor-pointer hover:shadow-xl transition ease-in-out duration-300">
@@ -207,7 +207,7 @@ export default function OwnerDashboard({user}: Props) {
<span className="flex flex-col gap-1 items-center text-xl">
<span className="text-lg text-center">Inactive Corporate</span>
<span className="font-semibold text-mti-rose">
{users.filter((x) => x.type === "admin" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate))).length}
{users.filter((x) => x.type === "corporate" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate))).length}
</span>
</span>
</div>
@@ -229,7 +229,7 @@ export default function OwnerDashboard({user}: Props) {
<span className="p-4">Latest corporate</span>
<div className="flex flex-col items-start h-96 overflow-scroll scrollbar-hide">
{users
.filter((x) => x.type === "admin")
.filter((x) => x.type === "corporate")
.sort((a, b) => dateSorter(a, b, "asc", "registrationDate"))
.map((x) => (
<UserDisplay key={x.id} {...x} />
@@ -240,7 +240,7 @@ export default function OwnerDashboard({user}: Props) {
<span className="p-4">Disabled Corporate</span>
<div className="flex flex-col items-start h-96 overflow-scroll scrollbar-hide">
{users
.filter((x) => x.type === "admin" && x.isDisabled)
.filter((x) => x.type === "corporate" && x.isDisabled)
.map((x) => (
<UserDisplay key={x.id} {...x} />
))}
@@ -282,7 +282,7 @@ export default function OwnerDashboard({user}: Props) {
{users
.filter(
(x) =>
x.type === "admin" &&
x.type === "corporate" &&
x.subscriptionExpirationDate &&
moment().isAfter(moment(x.subscriptionExpirationDate).subtract(30, "days")),
)
@@ -307,9 +307,9 @@ export default function OwnerDashboard({user}: Props) {
if (shouldReload) reload();
}}
onViewStudents={
selectedUser.type === "admin" || selectedUser.type === "teacher" ? () => setPage("students") : undefined
selectedUser.type === "corporate" || selectedUser.type === "teacher" ? () => setPage("students") : undefined
}
onViewTeachers={selectedUser.type === "admin" ? () => setPage("teachers") : undefined}
onViewTeachers={selectedUser.type === "corporate" ? () => setPage("teachers") : undefined}
{...selectedUser}
/>
</div>

View File

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

View File

@@ -24,7 +24,7 @@ export default function BatchCodeGenerator({user}: {user: User}) {
});
useEffect(() => {
if (user && (user.type === "admin" || user.type === "teacher")) {
if (user && (user.type === "corporate" || user.type === "teacher")) {
setExpiryDate(user.subscriptionExpirationDate || null);
}
}, [user]);
@@ -126,8 +126,8 @@ export default function BatchCodeGenerator({user}: {user: User}) {
<Button
className="w-44 2xl:w-48"
variant="outline"
onClick={() => generateCode("admin")}
disabled={emails.length === 0 || isLoading || !PERMISSIONS.generateCode.admin.includes(user.type)}>
onClick={() => generateCode("corporate")}
disabled={emails.length === 0 || isLoading || !PERMISSIONS.generateCode.corporate.includes(user.type)}>
Admin
</Button>
<Button

View File

@@ -17,7 +17,7 @@ export default function CodeGenerator({user}: {user: User}) {
const [isExpiryDateEnabled, setIsExpiryDateEnabled] = useState(true);
useEffect(() => {
if (user && (user.type === "admin" || user.type === "teacher")) {
if (user && (user.type === "corporate" || user.type === "teacher")) {
setExpiryDate(user.subscriptionExpirationDate || null);
}
}, [user]);
@@ -75,8 +75,8 @@ export default function CodeGenerator({user}: {user: User}) {
<Button
className="w-44 2xl:w-48"
variant="outline"
onClick={() => generateCode("admin")}
disabled={!PERMISSIONS.generateCode.admin.includes(user.type) || (isExpiryDateEnabled && expiryDate === null)}>
onClick={() => generateCode("corporate")}
disabled={!PERMISSIONS.generateCode.corporate.includes(user.type) || (isExpiryDateEnabled && expiryDate === null)}>
Admin
</Button>
<Button

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 === "admin") &&
((user.type === "developer" || user.type === "owner" || user.type === "corporate") &&
(x?.type === "student" || x?.type === "teacher")) ||
(user.type === "teacher" && x?.type === "student"),
);
@@ -140,7 +140,7 @@ export default function GroupList({user}: {user: User}) {
}, [showDisclosure]);
useEffect(() => {
if (user && (user.type === "admin" || user.type === "teacher")) {
if (user && (user.type === "corporate" || user.type === "teacher")) {
setFilterByUser(true);
}
}, [user]);

View File

@@ -31,7 +31,9 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us
useEffect(() => {
if (user && users) {
const filterUsers =
user.type === "admin" || user.type === "student" ? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id)) : users;
user.type === "corporate" || user.type === "student"
? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id))
: users;
const filteredUsers = filter ? filterUsers.filter(filter) : filterUsers;
@@ -141,9 +143,9 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us
Teacher
</Button>
<Button
onClick={() => updateAccountType(row.original, "admin")}
onClick={() => updateAccountType(row.original, "corporate")}
className="text-sm !py-2 !px-4"
disabled={row.original.type === "admin" || !PERMISSIONS.generateCode["admin"].includes(user.type)}>
disabled={row.original.type === "corporate" || !PERMISSIONS.generateCode["corporate"].includes(user.type)}>
Admin
</Button>
<Button

View File

@@ -163,7 +163,7 @@ export default function Home() {
<Layout user={user}>
{user.type === "student" && <StudentDashboard user={user} />}
{user.type === "teacher" && <StudentDashboard user={user} />}
{user.type === "admin" && <StudentDashboard user={user} />}
{user.type === "corporate" && <StudentDashboard user={user} />}
{user.type === "owner" && <StudentDashboard user={user} />}
{user.type === "developer" && <OwnerDashboard user={user} />}
</Layout>

View File

@@ -278,7 +278,7 @@ export default function History({user}: {user: User}) {
}}
/>
)}
{(user.type === "admin" || user.type === "teacher") && groups.length > 0 && (
{(user.type === "corporate" || user.type === "teacher") && groups.length > 0 && (
<Select
options={users
.filter((x) => groups.flatMap((y) => y.participants).includes(x.id))

View File

@@ -184,7 +184,7 @@ export default function Stats() {
}}
/>
)}
{(user.type === "admin" || user.type === "teacher") && groups.length > 0 && (
{(user.type === "corporate" || user.type === "teacher") && groups.length > 0 && (
<Select
className="w-full"
options={users

View File

@@ -1,201 +0,0 @@
import {Type, User} from "@/interfaces/user";
interface Permissions {
createUser: {[key in Type]: boolean};
deleteUser: {[key in Type]: boolean};
manageUser: {[key in Type]: boolean};
viewUsers: {[key in Type]: boolean};
viewStats: boolean;
viewUserStats: boolean;
viewClassStats: boolean;
createClass: boolean;
manageClass: boolean;
deleteClass: boolean;
}
const permissions: {[key in Type]: Permissions} = {
student: {
createUser: {
admin: false,
developer: false,
owner: false,
student: false,
teacher: false,
},
deleteUser: {
admin: false,
developer: false,
owner: false,
student: false,
teacher: false,
},
manageUser: {
admin: false,
developer: false,
owner: false,
student: false,
teacher: false,
},
viewUsers: {
admin: false,
developer: false,
owner: false,
student: false,
teacher: false,
},
createClass: false,
deleteClass: false,
manageClass: false,
viewStats: true,
viewUserStats: false,
viewClassStats: false,
},
teacher: {
createUser: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: false,
},
deleteUser: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: false,
},
manageUser: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: false,
},
viewUsers: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: false,
},
createClass: true,
deleteClass: true,
manageClass: true,
viewStats: true,
viewUserStats: true,
viewClassStats: true,
},
admin: {
createUser: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: true,
},
deleteUser: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: true,
},
manageUser: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: true,
},
viewUsers: {
admin: false,
developer: false,
owner: false,
student: true,
teacher: true,
},
createClass: true,
deleteClass: true,
manageClass: true,
viewStats: true,
viewUserStats: true,
viewClassStats: true,
},
owner: {
createUser: {
admin: true,
developer: false,
owner: false,
student: true,
teacher: true,
},
deleteUser: {
admin: true,
developer: false,
owner: false,
student: true,
teacher: true,
},
manageUser: {
admin: true,
developer: false,
owner: false,
student: true,
teacher: true,
},
viewUsers: {
admin: true,
developer: false,
owner: false,
student: true,
teacher: true,
},
createClass: true,
deleteClass: true,
manageClass: true,
viewStats: true,
viewUserStats: true,
viewClassStats: true,
},
developer: {
createUser: {
admin: true,
developer: true,
owner: true,
student: true,
teacher: true,
},
deleteUser: {
admin: true,
developer: true,
owner: true,
student: true,
teacher: true,
},
manageUser: {
admin: true,
developer: true,
owner: true,
student: true,
teacher: true,
},
viewUsers: {
admin: true,
developer: true,
owner: true,
student: true,
teacher: true,
},
createClass: true,
deleteClass: true,
manageClass: true,
viewStats: true,
viewUserStats: true,
viewClassStats: true,
},
};
export default function getPermissions(user: User) {
return permissions[user.type];
}