diff --git a/app/(main)/firewall/page.tsx b/app/(main)/firewall/page.tsx index f7078da1..382c503e 100644 --- a/app/(main)/firewall/page.tsx +++ b/app/(main)/firewall/page.tsx @@ -486,7 +486,7 @@ function generateRsc(rules: FirewallRule[], timestamp?: string): string { // ─── Rule Sheet ─────────────────────────────────────────────────────────────── -function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, saving = false }: { +function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, saving = false, error }: { open: boolean onClose: () => void initialRule: Partial | null @@ -494,6 +494,7 @@ function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, sav family: IpFamily onSave: (payload: RuleWritePayload) => void saving?: boolean + error?: string | null }) { const isNew = !initialRule?.id const [form, setForm] = useState(defaultForm) @@ -530,8 +531,8 @@ function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, sav : ["accept", "drop", "reject", "fasttrack-connection", "add-src-to-address-list", "add-dst-to-address-list", "passthrough"] return ( - { if (!v) onClose() }}> - + { if (!v && !saving) onClose() }}> + {isNew ? "Новое правило" : "Редактировать правило"} @@ -539,7 +540,7 @@ function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, sav -
+
{/* Chain + Action */}
@@ -616,7 +617,7 @@ function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, sav

Log

Записывать совпадения в системный лог

- set("log", v)} /> + set("log", v)} />
{form.log && ( @@ -636,7 +637,7 @@ function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, sav

Правило включено

Отключённые правила сохраняются, но не применяются

- set("enabled", v)} /> + set("enabled", v)} /> {/* CLI preview */} @@ -669,10 +670,12 @@ function RuleSheet({ open, onClose, initialRule, chainGroup, family, onSave, sav ].filter(Boolean).join("\n")} - + + {saving &&

Ожидание результата сохранения…

} + {error &&

{error}

} - }>Отмена + }>Отмена