diff --git a/apps/gui/next-env.d.ts b/apps/gui/next-env.d.ts index 9edff1c..c4b7818 100644 --- a/apps/gui/next-env.d.ts +++ b/apps/gui/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/gui/src/app/config/page.tsx b/apps/gui/src/app/config/page.tsx index c27aa6e..b49b27c 100644 --- a/apps/gui/src/app/config/page.tsx +++ b/apps/gui/src/app/config/page.tsx @@ -29,7 +29,7 @@ export default function ConfigPage() { const [loading, setLoading] = useState(true); const [error, setError] = useState(""); - const [selectedInstanceId, setSelectedInstanceId] = useState("new"); + const [selectedInstanceId, setSelectedInstanceId] = useState(null); const [editName, setEditName] = useState(""); const [editProvider, setEditProvider] = useState("google-genai"); const [editKey, setEditKey] = useState(""); @@ -37,7 +37,13 @@ export default function ConfigPage() { const [editIsActive, setEditIsActive] = useState(false); useEffect(() => { - if (selectedInstanceId === "new") { + if (selectedInstanceId === null) { + setEditName(""); + setEditProvider("google-genai"); + setEditKey(""); + setEditModel("gemini-2.5-flash"); + setEditIsActive(false); + } else if (selectedInstanceId === "new") { setEditName(""); const defaultProvider = "google-genai"; setEditProvider(defaultProvider); @@ -144,14 +150,14 @@ export default function ConfigPage() { }; const handleDelete = async () => { - if (selectedInstanceId === "new") return; + if (selectedInstanceId === "new" || selectedInstanceId === null) return; if (!confirm("Are you sure you want to delete this provider instance?")) return; try { setLoading(true); setError(""); await deleteProviderInstance(selectedInstanceId); - setSelectedInstanceId("new"); + setSelectedInstanceId(null); await loadInstances(); await loadMappings(); } catch (err) { @@ -234,123 +240,129 @@ export default function ConfigPage() { {/* 70% area */}
-
-
-

- {selectedInstanceId === "new" - ? "Create New Provider Instance" - : `Configure: ${editName}`} -

- -
- - setEditName(e.target.value)} - placeholder="e.g. Gemini - Production" - required - className="w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm outline-none transition-[border-color,box-shadow] focus:border-blue-500 focus:ring-3 focus:ring-blue-500/15" - /> -
- -
- - - {editProvider && availableProviders.length > 0 && ( - - {availableProviders.find((p) => p.id === editProvider)?.description} - - )} -
- -
- - setEditKey(e.target.value)} - placeholder={ - selectedInstanceId === "new" - ? "AIzaSy..." - : "•••••••• (unchanged)" - } - required={selectedInstanceId === "new"} - className="w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm outline-none transition-[border-color,box-shadow] focus:border-blue-500 focus:ring-3 focus:ring-blue-500/15" - /> -
- -
- - setEditModel(e.target.value)} - placeholder="e.g. gemini-2.5-flash, gemini-2.5-pro" - className="w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm outline-none transition-[border-color,box-shadow] focus:border-blue-500 focus:ring-3 focus:ring-blue-500/15" - /> -
- -
- setEditIsActive(e.target.checked)} - className="h-4 w-4 cursor-pointer" - /> - -
+ {selectedInstanceId === null ? ( +
+ Press + to add or select an existing Instance to edit
+ ) : ( + +
+

+ {selectedInstanceId === "new" + ? "Create New Provider Instance" + : `Configure: ${editName}`} +

-
-
- {selectedInstanceId !== "new" && ( -
+ +
+ + + {editProvider && availableProviders.length > 0 && ( + + {availableProviders.find((p) => p.id === editProvider)?.description} + + )} +
+ +
+ + setEditKey(e.target.value)} + placeholder={ + selectedInstanceId === "new" + ? "AIzaSy..." + : "•••••••• (unchanged)" + } + required={selectedInstanceId === "new"} + className="w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm outline-none transition-[border-color,box-shadow] focus:border-blue-500 focus:ring-3 focus:ring-blue-500/15" + /> +
+ +
+ + setEditModel(e.target.value)} + placeholder="e.g. gemini-2.5-flash, gemini-2.5-pro" + className="w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm outline-none transition-[border-color,box-shadow] focus:border-blue-500 focus:ring-3 focus:ring-blue-500/15" + /> +
+ +
+ setEditIsActive(e.target.checked)} + className="h-4 w-4 cursor-pointer" + /> + +
+
+ +
+
+ {selectedInstanceId !== "new" && ( + + )} +
+
+ - )} +
-
- -
-
- + + )}
@@ -382,7 +394,7 @@ export default function ConfigPage() { onChange={(e) => handleUpdateMapping(task.key, e.target.value)} className="w-full rounded border border-gray-300 bg-white px-2 py-1.5 text-xs" > - + {instances.map((inst) => (