fix tunnel modal bug

Kim committed Mar 13, 2026 at 13:43 UTC 06705b8db50f05b014094ba75205f3b649608703
1 file changed +19 -7
frontend/src/components/TunnelCommandModal.tsx
+19 -7
@@ -27,6 +27,7 @@ export function TunnelCommandModal({ trigger }: TunnelCommandModalProps) {
27 return "https://localhost:4017";
28 }, []);
29
30 + const [open, setOpen] = useState(false);
31 const [target, setTarget] = useState(defaultHost);
32 const [name, setName] = useState("");
33 const [relayUrls, setRelayUrls] = useState<string[]>([currentOrigin]);
@@ -95,17 +96,13 @@ export function TunnelCommandModal({ trigger }: TunnelCommandModalProps) {
96 currentOrigin
97 ).toString();
98 const localhostRelay = isLocalRelayOrigin(currentOrigin);
98 - const installerDefaultsMatch =
99 - defaultRelays &&
100 - relayUrls.length === 1 &&
101 - relayUrls[0] === currentOrigin;
99
100 const exposeArgs: string[] = [];
101
102 if (nameVal !== "") {
103 exposeArgs.push(`--name ${formatToken(nameVal, os)}`);
104 }
108 - if (!installerDefaultsMatch) {
105 + if (relayUrls.length > 0) {
106 exposeArgs.push(`--relays ${formatToken(relayUrlVal, os)}`);
107 }
108 if (!defaultRelays) {
@@ -148,8 +145,23 @@ export function TunnelCommandModal({ trigger }: TunnelCommandModalProps) {
145 }
146 };
147
148 + const handleOpenChange = (nextOpen: boolean) => {
149 + setOpen(nextOpen);
150 + if (!nextOpen) {
151 + return;
152 + }
153 + setTarget(defaultHost);
154 + setName("");
155 + setRelayUrls([currentOrigin]);
156 + setDefaultRelays(true);
157 + setUrlInput("");
158 + setCopied(false);
159 + setOs("unix");
160 + setThumbnailURL("");
161 + };
162 +
163 return (
152 - <Dialog>
164 + <Dialog open={open} onOpenChange={handleOpenChange}>
165 <DialogTrigger asChild>
166 {trigger || (
167 <Button className="cursor-pointer">
@@ -157,7 +169,7 @@ export function TunnelCommandModal({ trigger }: TunnelCommandModalProps) {
169 </Button>
170 )}
171 </DialogTrigger>
160 - <DialogContent className="sm:max-w-[510px] rounded-sm max-h-[85vh] overflow-y-auto">
172 + <DialogContent className="sm:max-w-[520px] rounded-sm max-h-[85vh] overflow-y-auto">
173 <DialogHeader>
174 <DialogTitle className="flex items-center gap-2">
175 <Terminal className="w-5 h-5" />