/** * PluginSettingsModal - Modal dialog for editing a plugin's settings. * Dynamically renders fields from the plugin's settingsSchema. * @see specs/prd-web.md Section M13 */ 'use client' import { useState } from 'react' import { X } from '@phosphor-icons/react' import { SaveButton } from '@/components/admin/save-button' import { SettingsField } from '@/components/admin/plugins/settings-field' import type { Plugin } from '@/lib/api/types' import type { SaveStatus } from '@/hooks/use-save-state' interface PluginSettingsModalProps { plugin: Plugin onClose: () => void onSave: (settings: Record) => void saveStatus: SaveStatus } export function PluginSettingsModal({ plugin, onClose, onSave, saveStatus, }: PluginSettingsModalProps) { const [values, setValues] = useState>(() => ({ ...plugin.settings, })) const handleChange = (key: string, value: boolean | string | number) => { setValues((prev) => ({ ...prev, [key]: value })) } return (

{plugin.displayName} Settings

{Object.entries(plugin.settingsSchema ?? {}).map(([key, schema]) => ( handleChange(key, val)} /> ))}
onSave(values)} className="px-3 py-1.5" />
) }