import { faFileDownload as exportIcon, faPlus as plusIcon } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import type { TimeoutToggle } from '@shlinkio/shlink-frontend-kit'; import { Button, Result, SearchInput, SimpleCard, Table } from '@shlinkio/shlink-frontend-kit'; import type { FC } from 'react'; import { useMemo, useState } from 'react'; import { NoMenuLayout } from '../common/NoMenuLayout'; import { withDependencies } from '../container/context'; import { ImportServersBtn } from './helpers/ImportServersBtn'; import { withoutSelectedServer } from './helpers/withoutSelectedServer'; import { ManageServersRow } from './ManageServersRow'; import { useServers } from './reducers/servers'; import type { ServersExporter } from './services/ServersExporter'; export type ManageServersProps = { ServersExporter: ServersExporter; useTimeoutToggle: TimeoutToggle; }; const SHOW_IMPORT_MSG_TIME = 4000; const ManageServersBase: FC = withoutSelectedServer(({ ServersExporter: serversExporter, useTimeoutToggle, }) => { const { servers } = useServers(); const [searchTerm, setSearchTerm] = useState(''); const allServers = useMemo(() => Object.values(servers), [servers]); const filteredServers = useMemo( () => allServers.filter(({ name, url }) => `${name} ${url}`.toLowerCase().match(searchTerm.toLowerCase())), [allServers, searchTerm], ); const hasAutoConnect = allServers.some(({ autoConnect }) => !!autoConnect); const [errorImporting, setErrorImporting] = useTimeoutToggle({ delay: SHOW_IMPORT_MSG_TIME }); return (
Import servers {filteredServers.length > 0 && ( )}
{hasAutoConnect && ( Auto-connect )} NameBase URLOptions )}> {!filteredServers.length && ( No servers found. )} {filteredServers.map((server) => ( ))}
{errorImporting && (
The servers could not be imported. Make sure the format is correct.
)}
); }); export const ManageServers = withDependencies(ManageServersBase, ['ServersExporter', 'useTimeoutToggle']);