@@ -865,7 +840,7 @@ const defaultAddrForm = {
}
function AddressListSheet({
- open, onClose, initial, family, onSave, saving = false, error,
+ open, onClose, initial, family, onSave, saving = false, error, returnFocus,
}: {
open: boolean
onClose: () => void
@@ -874,24 +849,28 @@ function AddressListSheet({
onSave: (payload: { list: string; address: string; comment?: string; timeout?: string; disabled?: boolean }) => void
saving?: boolean
error?: string | null
+ returnFocus?: () => HTMLElement | null
}) {
const isNew = !initial?.id
const [form, setForm] = useState(defaultAddrForm)
+ const [formContext, setFormContext] = useState({ open: false, initial })
- useEffect(() => {
- if (!open) return
- setForm({
- list: initial?.list ?? "",
- address: initial?.address ?? "",
- comment: initial?.comment ?? "",
- timeout: initial?.timeout ?? "",
- enabled: !(initial?.disabled ?? false),
- })
- }, [open, initial])
+ if (formContext.open !== open || formContext.initial !== initial) {
+ setFormContext({ open, initial })
+ if (open) {
+ setForm({
+ list: initial?.list ?? "",
+ address: initial?.address ?? "",
+ comment: initial?.comment ?? "",
+ timeout: initial?.timeout ?? "",
+ enabled: !(initial?.disabled ?? false),
+ })
+ }
+ }
return (
{ if (!v && !saving) onClose() }}>
-
+
{isNew ? "Запись address-list" : "Редактировать запись"}
@@ -1986,7 +1965,7 @@ function FirewallPageInner() {
const [deleteError, setDeleteError] = useState(null)
const [selectedServerId, setSelectedServerId] = useState(serverFromQuery ?? ALL_SERVERS_ID)
- const appliedQueryRef = useRef(false)
+ const [queryApplied, setQueryApplied] = useState(false)
const [chainGroup, setChainGroup] = useState("filter")
const [chainFilter, setChainFilter] = useState("all")
@@ -2109,14 +2088,10 @@ function FirewallPageInner() {
const displayAddrLists = isLive ? liveAddrLists : mockAddrLists
const displayServers = isLive ? liveServers : mockServers
- useEffect(() => {
- if (appliedQueryRef.current || !serverFromQuery) return
- if (displayServers.length === 0) return
- if (displayServers.some((s) => s.id === serverFromQuery)) {
- setSelectedServerId(serverFromQuery)
- }
- appliedQueryRef.current = true
- }, [displayServers, serverFromQuery])
+ if (!queryApplied && serverFromQuery && displayServers.length > 0) {
+ if (displayServers.some(server => server.id === serverFromQuery)) setSelectedServerId(serverFromQuery)
+ setQueryApplied(true)
+ }
const scopedRules = useMemo(() => {
if (selectedServerId === ALL_SERVERS_ID) return displayRules
@@ -2585,7 +2560,7 @@ function FirewallPageInner() {
-