优化项目配置逻辑,增强错误处理和状态更新
This commit is contained in:
@@ -51,16 +51,42 @@ export const ProjectProvider: React.FC<{ children: React.ReactNode }> = ({
|
|||||||
setIsConfigured(true);
|
setIsConfigured(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await apiFetch(
|
// Open project backend (simulation model)
|
||||||
|
const openResponse = await apiFetch(
|
||||||
`${config.BACKEND_URL}/openproject/?network=${net}`,
|
`${config.BACKEND_URL}/openproject/?network=${net}`,
|
||||||
{
|
{
|
||||||
method: "POST",
|
method: "POST",
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
if (!response.ok) {
|
if (!openResponse.ok) {
|
||||||
throw new Error(`HTTP ${response.status}`);
|
throw new Error(`Failed to open project: HTTP ${openResponse.status}`);
|
||||||
}
|
}
|
||||||
const data = await response.json();
|
|
||||||
|
// Fetch project metadata
|
||||||
|
const infoResponse = await apiFetch(
|
||||||
|
`${config.BACKEND_URL}/project_info/?network=${net}`,
|
||||||
|
);
|
||||||
|
if (!infoResponse.ok) {
|
||||||
|
console.warn(
|
||||||
|
`Failed to fetch project info: HTTP ${infoResponse.status}`,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const data = await infoResponse.json();
|
||||||
|
|
||||||
|
// Update workspace if different
|
||||||
|
if (data?.gs_workspace && data.gs_workspace !== ws) {
|
||||||
|
setMapWorkspace(data.gs_workspace);
|
||||||
|
localStorage.setItem(
|
||||||
|
"NEXT_PUBLIC_MAP_WORKSPACE",
|
||||||
|
data.gs_workspace,
|
||||||
|
);
|
||||||
|
setCurrentProject((prev) => ({
|
||||||
|
...prev,
|
||||||
|
workspace: data.gs_workspace,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update extent if available
|
||||||
const bbox = Array.isArray(data?.map_extent?.bbox)
|
const bbox = Array.isArray(data?.map_extent?.bbox)
|
||||||
? data.map_extent.bbox.map((value: number) => Number(value))
|
? data.map_extent.bbox.map((value: number) => Number(value))
|
||||||
: null;
|
: null;
|
||||||
@@ -70,8 +96,9 @@ export const ProjectProvider: React.FC<{ children: React.ReactNode }> = ({
|
|||||||
localStorage.removeItem(`${ws}_map_view`);
|
localStorage.removeItem(`${ws}_map_view`);
|
||||||
setCurrentProject((prev) => ({ ...prev, extent: bbox }));
|
setCurrentProject((prev) => ({ ...prev, extent: bbox }));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to open project:", error);
|
console.error("Failed to setup project:", error);
|
||||||
}
|
}
|
||||||
}, [setCurrentProjectId]);
|
}, [setCurrentProjectId]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user