import { FC, useEffect, useState } from 'react'; import { v4 as uuid } from 'uuid'; import { RouterProps } from 'react-router'; import { Button } from 'reactstrap'; import { Result } from '../utils/Result'; import { NoMenuLayout } from '../common/NoMenuLayout'; import { StateFlagTimeout, useToggle } from '../utils/helpers/hooks'; import { ServerForm } from './helpers/ServerForm'; import { ImportServersBtnProps } from './helpers/ImportServersBtn'; import { ServerData, ServersMap, ServerWithId } from './data'; import { DuplicatedServersModal } from './helpers/DuplicatedServersModal'; const SHOW_IMPORT_MSG_TIME = 4000; interface CreateServerProps extends RouterProps { createServer: (server: ServerWithId) => void; servers: ServersMap; } const ImportResult = ({ type }: { type: 'error' | 'success' }) => (
{type === 'success' && 'Servers properly imported. You can now select one from the list :)'} {type === 'error' && 'The servers could not be imported. Make sure the format is correct.'}
); const CreateServer = (ImportServersBtn: FC, useStateFlagTimeout: StateFlagTimeout) => ( { servers, createServer, history: { push, goBack } }: CreateServerProps, ) => { const hasServers = !!Object.keys(servers).length; const [ serversImported, setServersImported ] = useStateFlagTimeout(false, SHOW_IMPORT_MSG_TIME); const [ errorImporting, setErrorImporting ] = useStateFlagTimeout(false, SHOW_IMPORT_MSG_TIME); const [ isConfirmModalOpen, toggleConfirmModal ] = useToggle(); const [ serverData, setServerData ] = useState(); const save = () => { if (!serverData) { return; } const id = uuid(); createServer({ ...serverData, id }); push(`/server/${id}`); }; useEffect(() => { const serverExists = Object.values(servers).some( ({ url, apiKey }) => serverData?.url === url && serverData?.apiKey === apiKey, ); serverExists ? toggleConfirmModal() : save(); }, [ serverData ]); return ( Add new server} onSubmit={setServerData}> {!hasServers && } {hasServers && } {serversImported && } {errorImporting && } ); }; export default CreateServer;