Skip to content

Commit 9f12bd8

Browse files
authored
Merge pull request #23 from encryption4all/feat/admin-users-per-org
feat(admin): show users per organisation on org detail page
2 parents 0a94f99 + d202745 commit 9f12bd8

2 files changed

Lines changed: 56 additions & 7 deletions

File tree

src/lib/server/services/admin.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,18 +61,19 @@ export async function getOrganizationWithRequests(orgId: string) {
6161
.where(eq(changeRequests.orgId, orgId))
6262
.orderBy(desc(changeRequests.requestedAt));
6363

64+
const orgUsers = await db
65+
.select()
66+
.from(users)
67+
.where(eq(users.orgId, orgId))
68+
.orderBy(users.fullName);
69+
6470
// Load contact person if set
6571
let contactPerson = null;
6672
if (orgs[0].contactUserId) {
67-
const result = await db
68-
.select()
69-
.from(users)
70-
.where(eq(users.id, orgs[0].contactUserId))
71-
.limit(1);
72-
contactPerson = result[0] ?? null;
73+
contactPerson = orgUsers.find((u) => u.id === orgs[0].contactUserId) ?? null;
7374
}
7475

75-
return { organization: orgs[0], requests, contactPerson };
76+
return { organization: orgs[0], requests, contactPerson, users: orgUsers };
7677
}
7778

7879
export async function approveChangeRequest(

src/routes/(admin)/admin/organizations/[id]/+page.svelte

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,42 @@
4040
</div>
4141
{/if}
4242

43+
<section class="users">
44+
<h2>Users <span class="count">({data.users.length})</span></h2>
45+
{#if data.users.length === 0}
46+
<p class="empty">No users belong to this organisation yet.</p>
47+
{:else}
48+
<div class="table-wrap">
49+
<table>
50+
<thead>
51+
<tr>
52+
<th>Name</th>
53+
<th>Email</th>
54+
<th>Phone</th>
55+
<th>Contact</th>
56+
</tr>
57+
</thead>
58+
<tbody>
59+
{#each data.users as u (u.id)}
60+
<tr>
61+
<td>{u.fullName}</td>
62+
<td>{u.email}</td>
63+
<td>{u.phone ?? ''}</td>
64+
<td>
65+
{#if data.organization.contactUserId === u.id}
66+
<span class="badge">Contact person</span>
67+
{:else}
68+
69+
{/if}
70+
</td>
71+
</tr>
72+
{/each}
73+
</tbody>
74+
</table>
75+
</div>
76+
{/if}
77+
</section>
78+
4379
{#if data.requests.length > 0}
4480
<section class="requests">
4581
<h2>Change Requests</h2>
@@ -151,6 +187,18 @@
151187
152188
.admin-actions { margin-bottom: 2rem; }
153189
190+
.users {
191+
margin-bottom: 2rem;
192+
h2 { margin-bottom: 1rem; }
193+
.count { font-size: var(--pg-font-size-sm); color: var(--pg-text-secondary); font-weight: var(--pg-font-weight-regular); }
194+
.empty { color: var(--pg-text-secondary); font-size: var(--pg-font-size-sm); }
195+
.table-wrap { overflow-x: auto; }
196+
table { width: 100%; border-collapse: collapse; font-size: var(--pg-font-size-sm); }
197+
th, td { text-align: left; padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--pg-strong-background); }
198+
th { font-size: var(--pg-font-size-xs); color: var(--pg-text-secondary); text-transform: uppercase; font-weight: var(--pg-font-weight-medium); font-family: var(--pg-font-family); }
199+
.badge { background: rgba(22, 163, 74, 0.12); color: #16a34a; font-size: var(--pg-font-size-xs); font-weight: var(--pg-font-weight-bold); padding: 3px 10px; border-radius: 100px; text-transform: uppercase; font-family: var(--pg-font-family); }
200+
}
201+
154202
.requests h2 { margin-bottom: 1rem; }
155203
156204
.request-card {

0 commit comments

Comments
 (0)