|
1 | 1 | import { Cog, Ellipsis, SquareTerminal } from "lucide-react"; |
2 | 2 | import { useState } from "react"; |
| 3 | +import { useSubmit } from "react-router"; |
3 | 4 |
|
4 | 5 | import Button from "~/components/button"; |
5 | 6 | import { Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger } from "~/components/menu"; |
6 | 7 | import type { User } from "~/types"; |
7 | 8 | import cn from "~/utils/cn"; |
8 | | -import { PopulatedNode } from "~/utils/node-info"; |
| 9 | +import { isNoExpiry, type PopulatedNode } from "~/utils/node-info"; |
9 | 10 |
|
10 | 11 | import Delete from "../dialogs/delete"; |
11 | 12 | import Expire from "../dialogs/expire"; |
@@ -35,6 +36,7 @@ export default function MachineMenu({ |
35 | 36 | existingTags, |
36 | 37 | supportsNodeOwnerChange, |
37 | 38 | }: MenuProps) { |
| 39 | + const submit = useSubmit(); |
38 | 40 | const [modal, setModal] = useState<Modal>(null); |
39 | 41 | const supportsTailscaleSSH = node.hostInfo?.sshHostKeys && node.hostInfo?.sshHostKeys.length > 0; |
40 | 42 |
|
@@ -156,15 +158,31 @@ export default function MachineMenu({ |
156 | 158 | </MenuTrigger> |
157 | 159 | <MenuContent> |
158 | 160 | <MenuItem onClick={() => setModal("rename")}>Edit machine name</MenuItem> |
| 161 | + <MenuItem |
| 162 | + onClick={() => |
| 163 | + submit( |
| 164 | + { |
| 165 | + action_id: "toggle_expiry", |
| 166 | + node_id: node.id, |
| 167 | + disableExpiry: !isNoExpiry(node.expiry), |
| 168 | + }, |
| 169 | + { method: "post" }, |
| 170 | + ) |
| 171 | + } |
| 172 | + > |
| 173 | + {isNoExpiry(node.expiry) ? "Enable" : "Disable"} key expiry |
| 174 | + </MenuItem> |
159 | 175 | <MenuItem onClick={() => setModal("routes")}>Edit route settings</MenuItem> |
160 | 176 | <MenuItem onClick={() => setModal("tags")}>Edit ACL tags</MenuItem> |
161 | 177 | {supportsNodeOwnerChange && ( |
162 | 178 | <MenuItem onClick={() => setModal("move")}>Change owner</MenuItem> |
163 | 179 | )} |
164 | 180 | <MenuSeparator /> |
165 | | - <MenuItem variant="danger" disabled={node.expired} onClick={() => setModal("expire")}> |
166 | | - Expire |
167 | | - </MenuItem> |
| 181 | + {!isNoExpiry(node.expiry) && ( |
| 182 | + <MenuItem variant="danger" disabled={node.expired} onClick={() => setModal("expire")}> |
| 183 | + Expire |
| 184 | + </MenuItem> |
| 185 | + )} |
168 | 186 | <MenuItem variant="danger" onClick={() => setModal("remove")}> |
169 | 187 | Remove |
170 | 188 | </MenuItem> |
|
0 commit comments