From 701409f235716e5a3392f3f485df3d50c6fcf0ec Mon Sep 17 00:00:00 2001 From: core Date: Thu, 1 Feb 2024 14:04:11 -0500 Subject: [PATCH] role assignment, slight visual changes to role display --- .../vaccs/[id]/roster/+page.server.ts | 9 ++++ .../[id]/roster/data-table-actions.svelte | 53 +++++++++++++++++++ .../vaccs/[id]/roster/data-table-user.svelte | 34 ++++++------ 3 files changed, 80 insertions(+), 16 deletions(-) diff --git a/src/routes/dashboard/vaccs/[id]/roster/+page.server.ts b/src/routes/dashboard/vaccs/[id]/roster/+page.server.ts index 1cb2453..ee98257 100644 --- a/src/routes/dashboard/vaccs/[id]/roster/+page.server.ts +++ b/src/routes/dashboard/vaccs/[id]/roster/+page.server.ts @@ -75,6 +75,14 @@ export const load: PageServerLoad = async ({ fetch, cookies, params }) => { let vaccs = await prisma.vacc.findMany(); + let all_roles = await prisma.role.findMany(); + + altered_roster = altered_roster.sort((a, b) => { + if (a.name < b.name) return -1; + else if (a.name > b.name) return 1; + else return 0; + }); + return { load_error: false, home_users: altered_roster, @@ -82,6 +90,7 @@ export const load: PageServerLoad = async ({ fetch, cookies, params }) => { user: user, roles: user_roles, form: await superValidate(formSchema), + all_roles: all_roles, }; }; diff --git a/src/routes/dashboard/vaccs/[id]/roster/data-table-actions.svelte b/src/routes/dashboard/vaccs/[id]/roster/data-table-actions.svelte index d95a4e0..fcf17ee 100644 --- a/src/routes/dashboard/vaccs/[id]/roster/data-table-actions.svelte +++ b/src/routes/dashboard/vaccs/[id]/roster/data-table-actions.svelte @@ -15,6 +15,41 @@ export let user: User; let cert_issue_open = false; + + async function toggleRole( + cid: string, + existing_roles: string[], + new_role: string, + ) { + let new_roles = []; + if (existing_roles.includes(new_role)) { + for (let item of existing_roles) { + if (item != new_role) { + new_roles.push(item); + } + } + } else { + new_roles = existing_roles; + new_roles.push(new_role); + } + let data = new URLSearchParams(); + data.set("user", cid); + data.set("roles", new_roles.join(",")); + + let resp = await fetch("?/set_roles", { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: data.toString(), + }); + if (!resp.ok) { + throw new Error( + "server returned error response, see console for details", + ); + } + await invalidateAll(); + } @@ -47,6 +82,24 @@ Issue certificate {/if} + {#if can($page.data.roles, $page.data.vacc_id, $page.data.user.vaccId, `vacc.${$page.data.vacc_id}.role.assign`)} + + Toggle Roles + + Toggle Roles + + {#each $page.data.all_roles as role} + { + await toggleRole(user.id, user.roleIds, role.id); + }} + checked={user.roleIds.includes(role.id)}> + {role.name} + + {/each} + + + {/if} diff --git a/src/routes/dashboard/vaccs/[id]/roster/data-table-user.svelte b/src/routes/dashboard/vaccs/[id]/roster/data-table-user.svelte index 7ea6c2a..b14e0c0 100644 --- a/src/routes/dashboard/vaccs/[id]/roster/data-table-user.svelte +++ b/src/routes/dashboard/vaccs/[id]/roster/data-table-user.svelte @@ -13,19 +13,21 @@ export let user: User; -{user.name} -{#each user.roleIds as role} - {#if role === ROLE_DEVELOPER_ID} - Developer - {:else if role === ROLE_DIVISION_DIRECTOR_ID} - Division Director - {:else if role === ROLE_DIVISION_STAFF_ID} - Division Staff - {:else if role === ROLE_VACC_DIRECTOR_ID} - vACC Director - {:else if role === ROLE_VACC_STAFF_ID} - vACC Staff - {:else if role === ROLE_MENTOR_ID} - Mentor - {/if} -{/each} +
+ {user.name} + {#each user.roleIds as role} + {#if role === ROLE_DEVELOPER_ID} + Developer + {:else if role === ROLE_DIVISION_DIRECTOR_ID} + Division Director + {:else if role === ROLE_DIVISION_STAFF_ID} + Division Staff + {:else if role === ROLE_VACC_DIRECTOR_ID} + vACC Director + {:else if role === ROLE_VACC_STAFF_ID} + vACC Staff + {:else if role === ROLE_MENTOR_ID} + Mentor + {/if} + {/each} +