import * as React from "react"; import type { Workspace } from "@/features/workspaces/types"; import { deriveWorkspaceName, normalizeRelayUrl, } from "@/features/workspaces/workspaceStorage"; import { Button } from "@/shared/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/shared/ui/dialog"; import { Input } from "@/shared/ui/input"; type AddWorkspaceDialogProps = { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (workspace: Workspace) => void; }; export function AddWorkspaceDialog({ open, onOpenChange, onSubmit, }: AddWorkspaceDialogProps) { const [name, setName] = React.useState(""); const [relayUrl, setRelayUrl] = React.useState(""); const [token, setToken] = React.useState(""); const [nsec, setNsec] = React.useState(""); const handleClose = React.useCallback(() => { onOpenChange(false); setName(""); setRelayUrl(""); setToken(""); setNsec(""); }, [onOpenChange]); const handleSubmit = React.useCallback( (e: React.FormEvent) => { e.preventDefault(); if (!relayUrl.trim()) { return; } const workspace: Workspace = { id: crypto.randomUUID(), name: name.trim() || deriveWorkspaceName(relayUrl.trim()), relayUrl: normalizeRelayUrl(relayUrl.trim()), token: token.trim() || undefined, nsec: nsec.trim() || undefined, addedAt: new Date().toISOString(), }; onSubmit(workspace); handleClose(); }, [name, relayUrl, token, nsec, onSubmit, handleClose], ); return ( Add Workspace Connect to another Sprout relay. Each workspace has its own channels, messages, and identity.
setRelayUrl(e.target.value)} placeholder="wss://relay.example.com" type="text" value={relayUrl} />
setName(e.target.value)} placeholder="My Workspace" type="text" value={name} />
setToken(e.target.value)} placeholder="sprout_..." type="password" value={token} />
setNsec(e.target.value)} placeholder="nsec1..." type="password" value={nsec} />
); }