调整环境变量参数,支持项目切换

This commit is contained in:
JIANG
2026-02-11 12:07:29 +08:00
parent 03e5f1456c
commit 8b6198a2ac
7 changed files with 106 additions and 44 deletions
+26 -6
View File
@@ -1,7 +1,7 @@
"use client";
import React, { createContext, useContext, useEffect, useState } from "react";
import { useSession } from "next-auth/react";
import { config, NETWORK_NAME, setMapWorkspace, setNetworkName } from "@/config/config";
import { config, NETWORK_NAME, setMapWorkspace, setNetworkName, setMapExtent } from "@/config/config";
import { ProjectSelector } from "@/components/project/ProjectSelector";
interface ProjectContextType {
@@ -25,23 +25,43 @@ export const ProjectProvider: React.FC<{ children: React.ReactNode }> = ({
// Check localStorage
const savedWorkspace = localStorage.getItem("NEXT_PUBLIC_MAP_WORKSPACE");
const savedNetwork = localStorage.getItem("NEXT_PUBLIC_NETWORK_NAME");
const savedExtent = localStorage.getItem("NEXT_PUBLIC_MAP_EXTENT");
// If we have saved config, use it.
if (savedWorkspace && savedNetwork) {
applyConfig(savedWorkspace, savedNetwork);
applyConfig(
savedWorkspace,
savedNetwork,
savedExtent ? savedExtent.split(",").map(Number) : undefined,
);
}
}, []);
const applyConfig = (ws: string, net: string) => {
const applyConfig = async (ws: string, net: string, extent?: number[]) => {
setMapWorkspace(ws);
setNetworkName(net);
if (extent) {
setMapExtent(extent);
localStorage.setItem("NEXT_PUBLIC_MAP_EXTENT", extent.join(","));
// Reset extent cache
localStorage.removeItem(`${ws}_map_view`);
}
setCurrentProject({ workspace: ws, networkName: net });
// Save to localStorage
localStorage.setItem("NEXT_PUBLIC_MAP_WORKSPACE", ws);
localStorage.setItem("NEXT_PUBLIC_NETWORK_NAME", net);
setIsConfigured(true);
try {
await fetch(`${config.BACKEND_URL}/openproject/?network=${net}`, {
method: "POST",
});
} catch (error) {
console.error("Failed to open project:", error);
}
};
// Only show selector if authenticated and not configured
@@ -49,7 +69,7 @@ export const ProjectProvider: React.FC<{ children: React.ReactNode }> = ({
return (
<ProjectSelector
open={true}
onSelect={(ws, net) => applyConfig(ws, net)}
onSelect={(ws, net, extent) => applyConfig(ws, net, extent)}
/>
);
}