fix(ui): подтверждать переключение адресов Firewall
This commit is contained in:
1 parent
131ecb8668
commit
0c460d4767
5 files changed
+80
-7
No files matched your search
@@ -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) }}
|
||||
|
||||
Reference in new issue
Block a user