import { FC, useEffect, useState } from 'react'; import { v4 as uuid } from 'uuid'; import { Button } from 'reactstrap'; import { useNavigate } from 'react-router-dom'; import { Result } from '../utils/Result'; import { NoMenuLayout } from '../common/NoMenuLayout'; import { TimeoutToggle, useGoBack, 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 { createServers: (servers: 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.'}
); export const CreateServer = (ImportServersBtn: FC, useTimeoutToggle: TimeoutToggle) => ( { servers, createServers }: CreateServerProps, ) => { const navigate = useNavigate(); const goBack = useGoBack(); const hasServers = !!Object.keys(servers).length; const [serversImported, setServersImported] = useTimeoutToggle(false, SHOW_IMPORT_MSG_TIME); const [errorImporting, setErrorImporting] = useTimeoutToggle(false, SHOW_IMPORT_MSG_TIME); const [isConfirmModalOpen, toggleConfirmModal] = useToggle(); const [serverData, setServerData] = useState(); const save = () => { if (!serverData) { return; } const id = uuid(); createServers([{ ...serverData, id }]); navigate(`/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 && } ); };