/** * Port Forwarding Edit Panel * Form for editing an existing port forwarding rule */ import { ChevronDown,Copy,Trash2 } from 'lucide-react'; import React from 'react'; import { useI18n } from '../../application/i18n/I18nProvider'; import { Host,PortForwardingRule } from '../../domain/models'; import { DistroAvatar } from '../DistroAvatar'; import { TrafficDiagram } from '../TrafficDiagram'; import { AsideActionMenu, AsideActionMenuItem, AsidePanel, AsidePanelContent, AsidePanelFooter, type AsidePanelLayout, type AsidePanelResizeProps, } from '../ui/aside-panel'; import { Button } from '../ui/button'; import { Input } from '../ui/input'; import { Label } from '../ui/label'; import { Switch } from '../ui/switch'; export interface EditPanelProps extends AsidePanelResizeProps { rule: PortForwardingRule; draft: Partial; hosts: Host[]; onDraftChange: (updates: Partial) => void; onSave: () => void; onClose: () => void; onDuplicate: () => void; onDelete: () => void; onOpenHostSelector: () => void; layout?: AsidePanelLayout; } export const EditPanel: React.FC = ({ rule, draft, hosts, onDraftChange, onSave, onClose, onDuplicate, onDelete, onOpenHostSelector, layout = 'inline', resizable = false, persistWidthStorageKey, resizeAriaLabel, }) => { const { t } = useI18n(); const selectedHost = hosts.find(h => h.id === draft.hostId); return ( } onClick={onDuplicate} > {t('action.duplicate')} } variant="destructive" onClick={onDelete} > {t('action.delete')} } > {/* Traffic Diagram */}
{/* Label */}
onDraftChange({ label: e.target.value })} />
{/* Local Port */}
onDraftChange({ localPort: parseInt(e.target.value) || undefined })} />
{/* Bind Address */}
onDraftChange({ bindAddress: e.target.value })} />
{/* Intermediate Host - for all types */}
{/* Destination - for local/remote only */} {(draft.type === 'local' || draft.type === 'remote') && ( <>
onDraftChange({ remoteHost: e.target.value })} />
onDraftChange({ remotePort: parseInt(e.target.value) || undefined })} />
)} {/* Auto Start Toggle */}

{t('pf.form.autoStartDesc')}

onDraftChange({ autoStart: checked })} />
); }; export default EditPanel;