import React, { useState } from 'react'; import { DragDropContext, Droppable, Draggable, DropResult } from '@hello-pangea/dnd'; import ToggleSwitch from '../ToggleSwitch'; import { Config, Server } from '../../types'; import RangeSlider from './RangeSlider'; import { TrashIcon } from '../icons'; import { createId } from '../utils/idUtils'; import { parseServerAddress } from '../utils/urlUtils'; interface ServerWidgetTabProps { config: Config; onChange: (updates: Partial) => void; } const ServerWidgetTab: React.FC = ({ config, onChange }) => { const [newServerName, setNewServerName] = useState(''); const [newServerAddress, setNewServerAddress] = useState(''); const updateServerWidget = (updates: Partial) => { onChange({ serverWidget: { ...config.serverWidget, ...updates } }); }; const handleAddServer = () => { if (newServerName.trim() === '' || newServerAddress.trim() === '') return; try { parseServerAddress(newServerAddress); } catch (error) { alert(error instanceof Error && error.message.startsWith('Server') ? error.message : 'Please enter a valid server address, e.g. 192.168.1.10:8080 or https://example.com.'); return; } const newServer: Server = { id: createId(), name: newServerName.trim(), address: newServerAddress.trim(), }; updateServerWidget({ servers: [...config.serverWidget.servers, newServer] }); setNewServerName(''); setNewServerAddress(''); }; const handleRemoveServer = (id: string) => { updateServerWidget({ servers: config.serverWidget.servers.filter((s) => s.id !== id), }); }; const onDragEnd = (result: DropResult) => { if (!result.destination) return; const items = Array.from(config.serverWidget.servers); const [reorderedItem] = items.splice(result.source.index, 1); items.splice(result.destination.index, 0, reorderedItem); updateServerWidget({ servers: items }); }; return (
updateServerWidget({ enabled: checked })} />
{config.serverWidget.enabled && ( <> updateServerWidget({ pingFrequency: value })} />

Servers

{(provided) => (
{config.serverWidget.servers.map((server: Server, index: number) => ( {(provided) => (

{server.name}

{server.address}

)}
))} {provided.placeholder}
)}
setNewServerName(e.target.value)} className="liquid-input p-2.5" /> setNewServerAddress(e.target.value)} className="liquid-input p-2.5" />
)}
); }; export default ServerWidgetTab;