import React, { useState } from 'react'; import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd'; import ToggleSwitch from '../ToggleSwitch'; import { Config, Server } from '../../types'; interface ServerWidgetTabProps { config: Config; onChange: (updates: Partial) => void; } type RangeStyle = React.CSSProperties & { '--range-progress': string }; const getRangeStyle = (value: number, min: number, max: number): RangeStyle => { const progress = Math.min(100, Math.max(0, ((value - min) / (max - min)) * 100)); return { '--range-progress': `${progress}%` }; }; 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; const newServer: Server = { id: Date.now().toString(), name: newServerName, address: newServerAddress, }; 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: any) => { 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: Number(e.target.value) })} className="liquid-range" style={getRangeStyle(config.serverWidget.pingFrequency, 5, 60)} /> {config.serverWidget.pingFrequency}s

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;