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