mirror of
https://github.com/tale/headplane.git
synced 2026-08-19 17:36:19 +00:00
badefc7f85
In Headscale 0.28+, nodes can be registered with tag-only preauth keys which have no associated user. This change updates the Machine type to make user optional and adds null checks throughout the codebase where node.user is accessed. Fixes tag node operations (rename, add tags) that previously failed with 'Unexpected Server Error' when accessing node.user.providerId on nodes without a user association. Refs: #432
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { Key, useState } from "react";
|
|
|
|
import type { Machine, User } from "~/types";
|
|
|
|
import Dialog from "~/components/Dialog";
|
|
import Select from "~/components/Select";
|
|
|
|
interface MoveProps {
|
|
machine: Machine;
|
|
users: User[];
|
|
isOpen: boolean;
|
|
setIsOpen: (isOpen: boolean) => void;
|
|
}
|
|
|
|
export default function Move({ machine, users, isOpen, setIsOpen }: MoveProps) {
|
|
const [userId, setUserId] = useState<Key | null>(machine.user?.id ?? null);
|
|
|
|
return (
|
|
<Dialog isOpen={isOpen} onOpenChange={setIsOpen}>
|
|
<Dialog.Panel isDisabled={userId === machine.user?.id}>
|
|
<Dialog.Title>Change the owner of {machine.givenName}</Dialog.Title>
|
|
<Dialog.Text>The owner of the machine is the user associated with it.</Dialog.Text>
|
|
<input name="action_id" type="hidden" value="reassign" />
|
|
<input name="node_id" type="hidden" value={machine.id} />
|
|
<input name="user_id" type="hidden" value={userId?.toString()} />
|
|
<Select
|
|
defaultSelectedKey={machine.user?.id}
|
|
isRequired
|
|
label="Owner"
|
|
name="user"
|
|
onSelectionChange={(key) => {
|
|
setUserId(key);
|
|
}}
|
|
placeholder="Select a user"
|
|
>
|
|
{users.map((user) => (
|
|
<Select.Item key={user.id}>
|
|
{user.name || user.displayName || user.email || user.id}
|
|
</Select.Item>
|
|
))}
|
|
</Select>
|
|
</Dialog.Panel>
|
|
</Dialog>
|
|
);
|
|
}
|