fix: handle user deletion

This commit is contained in:
Aarnav Tale
2026-03-14 14:59:34 -04:00
parent e255407115
commit 55ddbe0987
3 changed files with 8 additions and 3 deletions
@@ -10,9 +10,10 @@ import MenuOptions from "./menu";
interface HeadplaneUserRowProps {
user: HeadplaneUserData;
headscaleUsers: { id: string; name: string; claimed: boolean }[];
isSelf?: boolean;
}
export default function HeadplaneUserRow({ user, headscaleUsers }: HeadplaneUserRowProps) {
export default function HeadplaneUserRow({ user, headscaleUsers, isSelf }: HeadplaneUserRowProps) {
const isOnline = user.machines.some((machine) => machine.online);
const lastSeen = user.machines.reduce(
(acc, machine) => Math.max(acc, new Date(machine.lastSeen).getTime()),
@@ -66,6 +67,7 @@ export default function HeadplaneUserRow({ user, headscaleUsers }: HeadplaneUser
<MenuOptions
currentLink={user.headscaleUserId ?? undefined}
headscaleUsers={headscaleUsers}
isSelf={isSelf}
user={user}
/>
</td>
+3 -2
View File
@@ -12,11 +12,12 @@ interface MenuProps {
user: HeadplaneUserData;
headscaleUsers: { id: string; name: string; claimed: boolean }[];
currentLink?: string;
isSelf?: boolean;
}
type Modal = "delete" | "reassign" | "link" | null;
export default function UserMenu({ user, headscaleUsers, currentLink }: MenuProps) {
export default function UserMenu({ user, headscaleUsers, currentLink, isSelf }: MenuProps) {
const [modal, setModal] = useState<Modal>(null);
const isLinked = currentLink !== undefined;
@@ -80,7 +81,7 @@ export default function UserMenu({ user, headscaleUsers, currentLink }: MenuProp
<MenuItem onClick={() => setModal("link")}>
{isLinked ? "Change linked user" : "Link Headscale user"}
</MenuItem>
{user.linkedHeadscaleUser && (
{user.linkedHeadscaleUser && !isSelf && (
<>
<MenuSeparator />
<MenuItem variant="danger" onClick={() => setModal("delete")}>
+2
View File
@@ -128,6 +128,7 @@ export async function loader({ request, context }: Route.LoaderArgs) {
return {
writable: writablePermission,
currentUserId: principal.kind === "oidc" ? principal.user.id : undefined,
oidc: context.config.oidc ? { issuer: context.config.oidc.issuer } : undefined,
magic,
apiError,
@@ -186,6 +187,7 @@ export default function Page({ loaderData }: Route.ComponentProps) {
>
{loaderData.headplaneUsers.map((user) => (
<HeadplaneUserRow
isSelf={user.id === loaderData.currentUserId}
key={user.id}
headscaleUsers={loaderData.headscaleUsersForLink}
user={user}