import { Form, useFetcher, Link } from '@remix-run/react' import { Dispatch, SetStateAction, useState, useEffect } from 'react' import { PlusIcon, ServerIcon, KeyIcon } from '@primer/octicons-react' import { cn } from '~/utils/cn' import Code from '~/components/Code' import Dialog from '~/components/Dialog' import TextField from '~/components/TextField' import Select from '~/components/Select' import Menu from '~/components/Menu' import Spinner from '~/components/Spinner' import { toast } from '~/components/Toaster' import { Machine, User } from '~/types' export interface NewProps { server: string users: User[] } export default function New(data: NewProps) { const fetcher = useFetcher<{ success?: boolean }>() const mkeyState = useState(false) const [mkey, setMkey] = useState('') const [user, setUser] = useState('') const [toasted, setToasted] = useState(false) useEffect(() => { if (!fetcher.data || toasted) { return } if (fetcher.data.success) { toast('Registered new machine') } else { toast('Failed to register machine due to an invalid key') } setToasted(true) }, [fetcher.data, toasted, mkey]) return ( <> {close => ( <> Register Machine Key The machine key is given when you run {' '} tailscale up --login-server= {data.server} {' '} on your device. { fetcher.submit(e.currentTarget) close() }}>
Cancel {fetcher.state === 'idle' ? undefined : ( )} Register
)}
Add Device Register Machine Key Generate Pre-auth Key ) }