import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import { Server } from '@/types'; import ServerCard from '@/components/ServerCard'; import AddServerForm from '@/components/AddServerForm'; import EditServerForm from '@/components/EditServerForm'; import { useServerData } from '@/hooks/useServerData'; import DxtUploadForm from '@/components/DxtUploadForm'; import JSONImportForm from '@/components/JSONImportForm'; const ServersPage: React.FC = () => { const { t } = useTranslation(); const navigate = useNavigate(); const { servers, error, setError, isLoading, handleServerAdd, handleServerEdit, handleServerRemove, handleServerToggle, handleServerReload, triggerRefresh } = useServerData({ refreshOnMount: true }); const [editingServer, setEditingServer] = useState(null); const [isRefreshing, setIsRefreshing] = useState(false); const [showDxtUpload, setShowDxtUpload] = useState(false); const [showJsonImport, setShowJsonImport] = useState(false); const handleEditClick = async (server: Server) => { const fullServerData = await handleServerEdit(server); if (fullServerData) { setEditingServer(fullServerData); } }; const handleEditComplete = () => { setEditingServer(null); triggerRefresh(); }; const handleRefresh = async () => { setIsRefreshing(true); try { triggerRefresh(); // Add a slight delay to make the spinner visible await new Promise(resolve => setTimeout(resolve, 500)); } finally { setIsRefreshing(false); } }; const handleDxtUploadSuccess = (_serverConfig: any) => { // Close upload dialog and refresh servers setShowDxtUpload(false); triggerRefresh(); }; const handleJsonImportSuccess = () => { // Close import dialog and refresh servers setShowJsonImport(false); triggerRefresh(); }; return (

{t('pages.servers.title')}

{error && (

{error}

)} {isLoading ? (

{t('app.loading')}

) : servers.length === 0 ? (

{t('app.noServers')}

) : (
{servers.map((server, index) => ( ))}
)} {editingServer && ( setEditingServer(null)} /> )} {showDxtUpload && ( setShowDxtUpload(false)} /> )} {showJsonImport && ( setShowJsonImport(false)} /> )}
); }; export default ServersPage;