fix(ui): show display names in lists

Closes HP-549.
This commit is contained in:
Aarnav Tale
2026-06-22 20:22:50 -04:00
parent 12cee9763e
commit 18263e4878
3 changed files with 13 additions and 6 deletions
+1
View File
@@ -11,6 +11,7 @@
- Added support for proxy authentication via `server.proxy_auth` (closes [#353](https://github.com/tale/headplane/issues/353)).
- Added automatic role assignment for new OIDC users via `oidc.default_role` and IdP-provided role claims via `oidc.role_claim` (closes [#352](https://github.com/tale/headplane/issues/352)).
- Fixed the DNS page crashing when Headscale has no Split DNS nameservers configured (closes [#570](https://github.com/tale/headplane/issues/570)).
- User lists now show Headscale display names while preserving usernames as secondary text (closes [#571](https://github.com/tale/headplane/issues/571)).
---
@@ -27,6 +27,11 @@ export default function HeadplaneUserRow({
);
const displayName = user.linkedHeadscaleUser?.displayName || user.name || user.email || user.sub;
const displayUsername =
user.linkedHeadscaleUser?.displayName &&
user.linkedHeadscaleUser.displayName !== user.linkedHeadscaleUser.name
? user.linkedHeadscaleUser.name
: undefined;
const displayEmail = user.linkedHeadscaleUser?.email ?? user.email;
return (
@@ -40,6 +45,7 @@ export default function HeadplaneUserRow({
)}
<div className="ml-4">
<p className="leading-snug font-semibold">{displayName}</p>
{displayUsername && <p className="text-sm opacity-50">{displayUsername}</p>}
{displayEmail && <p className="text-sm opacity-50">{displayEmail}</p>}
{!user.headscaleUserId && (
<p className="text-xs text-amber-600 dark:text-amber-400">Not linked</p>
@@ -17,22 +17,22 @@ export default function HeadscaleUserRow({ user, writable }: HeadscaleUserRowPro
(acc, machine) => Math.max(acc, new Date(machine.lastSeen).getTime()),
0,
);
const displayName = user.displayName || user.name;
const displayUsername =
user.displayName && user.displayName !== user.name ? user.name : undefined;
return (
<tr className="group hover:bg-mist-50 dark:hover:bg-mist-950" key={user.id}>
<td className="py-2 pl-0.5">
<div className="flex items-center">
{user.profilePicUrl ? (
<img
alt={user.name || user.displayName}
className="h-10 w-10 rounded-full"
src={user.profilePicUrl}
/>
<img alt={displayName} className="h-10 w-10 rounded-full" src={user.profilePicUrl} />
) : (
<CircleUser className="h-10 w-10" />
)}
<div className="ml-4">
<p className="leading-snug font-semibold">{user.name || user.displayName}</p>
<p className="leading-snug font-semibold">{displayName}</p>
{displayUsername && <p className="text-sm opacity-50">{displayUsername}</p>}
{user.email && <p className="text-sm opacity-50">{user.email}</p>}
</div>
</div>