fix(ui): подтверждать переключение адресов Firewall

This commit is contained in:
Denozordec committed 2026-09-30 09:59:36 +07:00
1 parent 131ecb8668
commit 0c460d4767
5 files changed
+80 -7

No files matched your search

+17 -4
View File
@@ -722,6 +722,7 @@ function AddressListsTab({
onEdit,
onDelete,
showServer = false,
mutationsDisabled = false,
}: {
entries: AddressListEntry[]
onAdd: () => void
@@ -730,6 +731,7 @@ function AddressListsTab({
onEdit: (entry: AddressListEntry) => void
onDelete: (entry: AddressListEntry) => void
showServer?: boolean
mutationsDisabled?: boolean
}) {
const [search, setSearch] = useState("")
const [listFilter, setListFilter] = useState("all")
@@ -816,7 +818,7 @@ function AddressListsTab({
⏱ {e.timeout}
</span>
)}
<FormToggle checked={!e.disabled} onChange={() => onToggle(e)} />
<FormToggle checked={!e.disabled} disabled={mutationsDisabled} onChange={() => onToggle(e)} />
<DropdownMenu>
<DropdownMenuTrigger render={
<Button variant="ghost" size="icon" className="size-7 shrink-0">
@@ -825,7 +827,7 @@ function AddressListsTab({
} />
<DropdownMenuContent side="bottom" align="end">
<DropdownMenuItem onClick={() => onEdit(e)}><PencilIcon className="size-4" />Редактировать</DropdownMenuItem>
<DropdownMenuItem onClick={() => onToggle(e)}>
<DropdownMenuItem disabled={mutationsDisabled} onClick={() => onToggle(e)}>
<PowerIcon className="size-4" />{e.disabled ? "Включить" : "Отключить"}
</DropdownMenuItem>
<DropdownMenuSeparator />
@@ -2313,17 +2315,27 @@ function FirewallPageInner() {
}
async function toggleAddr(e: AddressListEntry) {
if (toggleLock.current || busy || historyRestoring) return
if (isLive) {
const key = addressKey(e)
if (!key) return
toggleLock.current = true
setTogglePending(true)
setToggleError(null)
setToggleStatus(`Ожидание изменения адреса ${e.address} (${e.list})…`)
try {
await apiFetch("/api/firewall/address-lists", {
const result = await apiFetch<{ ok: boolean }>("/api/firewall/address-lists", {
method: "PATCH",
body: JSON.stringify({ ...key, disabled: !e.disabled }),
})
if (result?.ok !== true) throw new Error("Сервер не подтвердил изменение адреса")
await loadLive()
} catch (err) {
toast.error(err instanceof Error ? err.message : "Не удалось переключить запись")
setToggleError(`${e.address} (${e.list}): ${err instanceof Error ? err.message : "Не удалось переключить запись"}`)
} finally {
toggleLock.current = false
setTogglePending(false)
setToggleStatus(null)
}
return
}
@@ -2544,6 +2556,7 @@ function FirewallPageInner() {
{chainGroup === "address-lists" ? (
<AddressListsTab
entries={familyAddrLists}
mutationsDisabled={togglePending || busy || historyRestoring}
onAdd={() => openAddAddr()}
onAddToList={(list) => openAddAddr(list)}
onToggle={(e) => { void toggleAddr(e) }}