Fix Settings crash: temporal dead zone on checkDdnsStatus
Unit Tests / test (push) Successful in 7m37s

checkDdnsStatus was declared via useCallback at line ~526 but referenced
in a useEffect dependency array at line 419 — before its declaration.
JavaScript const/let are not hoisted; accessing them before declaration
throws a ReferenceError (temporal dead zone). In the production build
this surfaced as:

  ReferenceError: Cannot access 'Pn' before initialization

and caused the Settings page to crash blank on load.

Moved the checkDdnsStatus useCallback definition to immediately before
the useEffect that lists it as a dependency.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-09 12:42:16 -04:00
parent c1e93f2058
commit 9ad9fac8dd
+12 -12
View File
@@ -416,6 +416,18 @@ function Settings() {
useEffect(() => { loadAll(); }, [loadAll]); useEffect(() => { loadAll(); }, [loadAll]);
useEffect(() => () => clearInterval(certPollRef.current), []); useEffect(() => () => clearInterval(certPollRef.current), []);
const checkDdnsStatus = useCallback(async () => {
setDdnsStatusLoading(true);
try {
const res = await ddnsAPI.getStatus();
setDdnsStatus(res.data);
} catch {
setDdnsStatus(null);
} finally {
setDdnsStatusLoading(false);
}
}, []);
useEffect(() => { useEffect(() => {
if (domainMode === 'pic_ngo') checkDdnsStatus(); if (domainMode === 'pic_ngo') checkDdnsStatus();
}, [domainMode, checkDdnsStatus]); // eslint-disable-line react-hooks/exhaustive-deps }, [domainMode, checkDdnsStatus]); // eslint-disable-line react-hooks/exhaustive-deps
@@ -523,18 +535,6 @@ function Settings() {
} }
}, [ddnsCfToken, domainName]); }, [ddnsCfToken, domainName]);
const checkDdnsStatus = useCallback(async () => {
setDdnsStatusLoading(true);
try {
const res = await ddnsAPI.getStatus();
setDdnsStatus(res.data);
} catch {
setDdnsStatus(null);
} finally {
setDdnsStatusLoading(false);
}
}, []);
const startCertPolling = useCallback(() => { const startCertPolling = useCallback(() => {
clearInterval(certPollRef.current); clearInterval(certPollRef.current);
setCertAcquiring(true); setCertAcquiring(true);