From 9cf13e3f26da89fa752ab04989ab8b423ed174df Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Mon, 23 Dec 2024 09:55:03 +0000 Subject: [PATCH] ENCOA-294 & ENCOA-293 --- src/pages/(admin)/Lists/UserList.tsx | 12 ++++++++---- src/pages/dashboard/corporate.tsx | 1 - src/pages/dashboard/mastercorporate.tsx | 1 - src/pages/dashboard/teacher.tsx | 1 - src/pages/entities/[id]/roles/[role].tsx | 1 + src/resources/entityPermissions.ts | 6 ++++-- 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx index f32611f8..63ac86e9 100644 --- a/src/pages/(admin)/Lists/UserList.tsx +++ b/src/pages/(admin)/Lists/UserList.tsx @@ -24,6 +24,7 @@ import { WithLabeledEntities } from "@/interfaces/entity"; import Table from "@/components/High/Table"; import useEntities from "@/hooks/useEntities"; import { useAllowedEntities } from "@/hooks/useEntityPermissions"; +import { findAllowedEntities } from "@/utils/permissions"; const columnHelper = createColumnHelper>(); const searchFields = [["name"], ["email"], ["entities", ""]]; @@ -45,8 +46,6 @@ export default function UserList({ const { users, reload } = useEntitiesUsers(type) const { entities } = useEntities() - const { balance } = useUserBalance(); - const isAdmin = useMemo(() => ["admin", "developer"].includes(user?.type), [user?.type]) const entitiesViewStudents = useAllowedEntities(user, entities, "view_students") @@ -65,6 +64,8 @@ export default function UserList({ const entitiesEditMasterCorporates = useAllowedEntities(user, entities, "edit_mastercorporates") const entitiesDeleteMasterCorporates = useAllowedEntities(user, entities, "delete_mastercorporates") + const entitiesDownloadUsers = useAllowedEntities(user, entities, "download_user_list") + const appendUserFilters = useFilterStore((state) => state.appendUserFilter); const router = useRouter(); @@ -342,7 +343,10 @@ export default function UserList({ ]; const downloadExcel = (rows: WithLabeledEntities[]) => { - const csv = exportListToExcel(rows); + if (entitiesDownloadUsers.length === 0) return toast.error("You are not allowed to download the user list.") + + const allowedRows = rows.filter(r => mapBy(r.entities, 'id').some(e => mapBy(entitiesDownloadUsers, 'id').includes(e))) + const csv = exportListToExcel(allowedRows); const element = document.createElement("a"); const file = new Blob([csv], { type: "text/csv" }); @@ -437,7 +441,7 @@ export default function UserList({ data={displayUsers} columns={(!showDemographicInformation ? defaultColumns : demographicColumns) as any} searchFields={searchFields} - onDownload={downloadExcel} + onDownload={entitiesDownloadUsers.length > 0 ? downloadExcel : undefined} /> diff --git a/src/pages/dashboard/corporate.tsx b/src/pages/dashboard/corporate.tsx index 40b9c8a2..817658b4 100644 --- a/src/pages/dashboard/corporate.tsx +++ b/src/pages/dashboard/corporate.tsx @@ -124,7 +124,6 @@ export default function Dashboard({ user, users, userCounts, entities, assignmen value={`${entities.length} - ${totalCount}/${totalLicenses}`} color="purple" /> - {allowedEntityStatistics.length > 0 && ( router.push("/statistical")} diff --git a/src/pages/dashboard/mastercorporate.tsx b/src/pages/dashboard/mastercorporate.tsx index d34f9e1c..ef8cfb52 100644 --- a/src/pages/dashboard/mastercorporate.tsx +++ b/src/pages/dashboard/mastercorporate.tsx @@ -133,7 +133,6 @@ export default function Dashboard({ user, users, userCounts, entities, assignmen value={`${entities.length} - ${totalCount}/${totalLicenses}`} color="purple" /> - {allowedStudentPerformance.length > 0 && ( router.push("/users/performance")} diff --git a/src/pages/dashboard/teacher.tsx b/src/pages/dashboard/teacher.tsx index 0d3a880c..56fd56da 100644 --- a/src/pages/dashboard/teacher.tsx +++ b/src/pages/dashboard/teacher.tsx @@ -96,7 +96,6 @@ export default function Dashboard({ user, users, entities, assignments, stats, g value={groups.length} color="purple" /> - {allowedStudentPerformance.length > 0 && ( router.push("/users/performance")} diff --git a/src/pages/entities/[id]/roles/[role].tsx b/src/pages/entities/[id]/roles/[role].tsx index 26bb26be..40c8f37c 100644 --- a/src/pages/entities/[id]/roles/[role].tsx +++ b/src/pages/entities/[id]/roles/[role].tsx @@ -47,6 +47,7 @@ const USER_MANAGEMENT: PermissionLayout[] = [ { label: "Create Users in Batch", key: "create_user_batch" }, { label: "Create a Single Code", key: "create_code" }, { label: "Create Codes in Batch", key: "create_code_batch" }, + { label: "Download User List", key: "download_user_list" }, { label: "View Code List", key: "view_code_list" }, { label: "Delete Code", key: "delete_code" }, ] diff --git a/src/resources/entityPermissions.ts b/src/resources/entityPermissions.ts index 0a2d85ce..9bbeab9d 100644 --- a/src/resources/entityPermissions.ts +++ b/src/resources/entityPermissions.ts @@ -60,7 +60,8 @@ export type RolePermission = "download_statistics_report" | "edit_grading_system" | "view_student_performance" | - "upload_classroom" + "upload_classroom" | + "download_user_list" export const DEFAULT_PERMISSIONS: RolePermission[] = [ "view_students", @@ -134,5 +135,6 @@ export const ADMIN_PERMISSIONS: RolePermission[] = [ "download_statistics_report", "edit_grading_system", "view_student_performance", - "upload_classroom" + "upload_classroom", + "download_user_list" ]