// @flow import React, { useState, useEffect } from 'react'; import Button from 'component/button'; import { Form, FormField } from 'component/common/form'; type Props = { update: ([string, string]) => void, }; const VALID_IPADDRESS_REGEX = new RegExp( '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\.)){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' ); const VALID_HOSTNAME_REGEX = new RegExp( '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(\\.))+([A-Za-z]|[A-Za-z][A-Za-z]*[A-Za-z])$' ); const VALID_PORT_REGEX = new RegExp('^([0-9]){1,5}$'); function ServerInputRow(props: Props) { const { update } = props; const [hostString, setHostString] = useState(''); const [portString, setPortString] = useState(''); const [validServerString, setValidServerString] = useState(false); useEffect(() => { setValidServerString( (VALID_IPADDRESS_REGEX.test(hostString) || VALID_HOSTNAME_REGEX.test(hostString)) && VALID_PORT_REGEX.test(portString) ); }, [hostString, portString, validServerString, setValidServerString]); function onSubmit() { update([hostString, portString]); setHostString(''); setPortString(''); } return ( <Form onSubmit={onSubmit}> <div className="section__actions"> <FormField type="text" label={__('Host')} placeholder={'code.freezepeach.fun'} value={hostString} onChange={e => setHostString(e.target.value)} /> <span className="form-field__conjuction">:</span> <FormField type="number" label={__('Port')} placeholder={'50001'} value={portString} onChange={e => setPortString(String(e.target.value))} /> </div> <div className="section__actions"> <Button type="submit" button="primary" label={__('Add')} disabled={!validServerString} /> </div> </Form> ); } export default ServerInputRow;