lazy load admin ui data by page
This commit is contained in:
+41
-12
@@ -551,11 +551,29 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function refreshLiveData() {
|
async function loadPageData(targetPage: PageKey, { incrementalLogs = true } = {}) {
|
||||||
|
if (targetPage === "requests") {
|
||||||
|
await loadRequests();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (targetPage === "profiles") {
|
||||||
|
await loadProfiles();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (targetPage === "logs") {
|
||||||
|
await loadLogs(incrementalLogs && latestLogSeq > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function refreshLiveData(targetPage: PageKey = page) {
|
||||||
if (restoreRequested || switchingTo) {
|
if (restoreRequested || switchingTo) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await Promise.all([loadStatus(false), loadRequests(), loadProfiles(), loadLogs(true)]);
|
const tasks: Array<Promise<unknown>> = [loadStatus(false)];
|
||||||
|
if (targetPage !== "overview" && targetPage !== "rules") {
|
||||||
|
tasks.push(loadPageData(targetPage, { incrementalLogs: true }));
|
||||||
|
}
|
||||||
|
await Promise.all(tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -580,19 +598,28 @@ export default function App() {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
Promise.all([loadStatus(true), loadRequests(), loadProfiles(), loadLogs(false)]).catch((error) => {
|
loadStatus(true).catch((error) => {
|
||||||
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const timer = window.setInterval(() => {
|
const timer = window.setInterval(() => {
|
||||||
refreshLiveData().catch((error) => {
|
refreshLiveData().catch((error) => {
|
||||||
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
||||||
});
|
});
|
||||||
}, 2500);
|
}, 2500);
|
||||||
return () => window.clearInterval(timer);
|
return () => window.clearInterval(timer);
|
||||||
});
|
}, [page, requestQuery, requestFilter, latestLogSeq, restoreRequested, switchingTo]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (page === "overview" || page === "rules") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
loadPageData(page, { incrementalLogs: false }).catch((error) => {
|
||||||
|
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
||||||
|
});
|
||||||
|
}, [page]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (page !== "profiles" || !shouldSyncProfileFormToActive) {
|
if (page !== "profiles" || !shouldSyncProfileFormToActive) {
|
||||||
@@ -631,7 +658,6 @@ export default function App() {
|
|||||||
});
|
});
|
||||||
setStatus(payload);
|
setStatus(payload);
|
||||||
setRuleForm(ruleFormFromStatus(payload));
|
setRuleForm(ruleFormFromStatus(payload));
|
||||||
await Promise.all([loadRequests(), loadLogs(false)]);
|
|
||||||
setRuleMessage({ text: "配置已保存,并已对当前 gateway 立即生效。", tone: "success" });
|
setRuleMessage({ text: "配置已保存,并已对当前 gateway 立即生效。", tone: "success" });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
setRuleMessage({ text: error instanceof Error ? error.message : String(error), tone: "error" });
|
setRuleMessage({ text: error instanceof Error ? error.message : String(error), tone: "error" });
|
||||||
@@ -639,13 +665,16 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (page !== "requests") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const timer = window.setTimeout(() => {
|
const timer = window.setTimeout(() => {
|
||||||
loadRequests().catch((error) => {
|
loadRequests().catch((error) => {
|
||||||
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
setRuleMessage({ text: error?.message || String(error), tone: "error" });
|
||||||
});
|
});
|
||||||
}, 180);
|
}, 180);
|
||||||
return () => window.clearTimeout(timer);
|
return () => window.clearTimeout(timer);
|
||||||
}, [requestQuery, requestFilter]);
|
}, [page, requestQuery, requestFilter]);
|
||||||
|
|
||||||
async function saveProfile(event: FormEvent) {
|
async function saveProfile(event: FormEvent) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -780,7 +809,7 @@ export default function App() {
|
|||||||
if (payload.config?.profile_name === profileName) {
|
if (payload.config?.profile_name === profileName) {
|
||||||
setSwitchingTo("");
|
setSwitchingTo("");
|
||||||
setShouldSyncProfileFormToActive(true);
|
setShouldSyncProfileFormToActive(true);
|
||||||
Promise.all([loadStatus(true), loadRequests(), loadProfiles(), loadLogs(false)]).catch(() => {});
|
Promise.all([loadStatus(true), loadProfiles()]).catch(() => {});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
Reference in New Issue
Block a user