Lazy load SEO project diagnostics

This commit is contained in:
DCCONSTRUCTIONS 2026-07-05 17:42:20 +03:00
parent 74abe909bd
commit bcc3d9e00e
1 changed files with 31 additions and 21 deletions

View File

@ -10005,19 +10005,19 @@ export function App() {
setPatchArtifacts(Object.fromEntries(patchEntries));
}
async function loadModelProviderStatuses(projectList: ProjectSummary[]) {
const statusEntries = await Promise.all(
projectList.map(async (project) => {
try {
const result = await fetchModelProviderStatus(project.id);
return [project.id, result.modelProvider] as const;
} catch {
return [project.id, null] as const;
}
})
);
setModelProviderStatuses(Object.fromEntries(statusEntries));
async function loadModelProviderStatusForProject(projectId: string) {
try {
const result = await fetchModelProviderStatus(projectId);
setModelProviderStatuses((currentStatuses) => ({
...currentStatuses,
[projectId]: result.modelProvider
}));
} catch {
setModelProviderStatuses((currentStatuses) => ({
...currentStatuses,
[projectId]: null
}));
}
}
async function loadExternalServices() {
@ -10243,7 +10243,9 @@ export function App() {
try {
const result = await fetchProjects();
setProjects(result.projects);
await Promise.all([
setProjectsLoading(false);
void Promise.all([
loadScanSummaries(result.projects),
loadSemanticAnalyses(result.projects),
loadContextReviews(result.projects),
@ -10258,15 +10260,15 @@ export function App() {
loadSeoStrategies(result.projects),
loadStrategySyntheses(result.projects),
loadStrategyQualityReviews(result.projects),
loadRewritePlans(result.projects),
loadMaterializationContracts(result.projects),
loadRewriteDiffContracts(result.projects),
loadPatchArtifacts(result.projects),
loadModelProviderStatuses(result.projects)
]);
loadRewritePlans(result.projects),
loadMaterializationContracts(result.projects),
loadRewriteDiffContracts(result.projects),
loadPatchArtifacts(result.projects)
]).catch(() => {
// Project rows should remain usable even when a secondary contract endpoint is temporarily unavailable.
});
} catch (error: unknown) {
setProjectsError(getErrorMessage(error, "Не удалось загрузить проекты."));
} finally {
setProjectsLoading(false);
}
}
@ -10782,6 +10784,14 @@ export function App() {
}
}, [activeProjectId, projects, projectsLoading]);
useEffect(() => {
if (!activeProjectId || !isWorkPanelOpen || Object.prototype.hasOwnProperty.call(modelProviderStatuses, activeProjectId)) {
return;
}
void loadModelProviderStatusForProject(activeProjectId);
}, [activeProjectId, isWorkPanelOpen, modelProviderStatuses]);
useEffect(() => {
folderInputRef.current?.setAttribute("webkitdirectory", "");
folderInputRef.current?.setAttribute("directory", "");