From 3168036bca967d3c43bbd81d0d11ae1949465f15 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 11 Nov 2025 10:49:40 -0600 Subject: [PATCH] web: implement onSolve --- web/frontend/.env | 1 + .../components/CaseBuilder/CaseBuilder.tsx | 28 +++++++++++++++++-- .../src/components/Common/Forms/DataTable.tsx | 1 - web/frontend/src/index.tsx | 2 +- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/web/frontend/.env b/web/frontend/.env index 9bacaf5..0a6ce97 100644 --- a/web/frontend/.env +++ b/web/frontend/.env @@ -1 +1,2 @@ FAST_REFRESH=false +REACT_APP_BACKEND_URL=http://localhost:9000 diff --git a/web/frontend/src/components/CaseBuilder/CaseBuilder.tsx b/web/frontend/src/components/CaseBuilder/CaseBuilder.tsx index 003f83e..124bd88 100644 --- a/web/frontend/src/components/CaseBuilder/CaseBuilder.tsx +++ b/web/frontend/src/components/CaseBuilder/CaseBuilder.tsx @@ -13,6 +13,7 @@ import "tabulator-tables/dist/css/tabulator.min.css"; import "../Common/Forms/Tables.css"; import { useState } from "react"; import Footer from "./Footer"; +import * as pako from "pako"; import { offerDownload } from "../Common/io"; import { preprocess } from "../../core/Operations/preprocessing"; import Toast from "../Common/Forms/Toast"; @@ -91,8 +92,31 @@ const CaseBuilder = () => { setAndSaveScenario(undoStack[undoStack.length - 1]!, false); }; - const onSolve = () => { - console.log("Solve!"); + const onSolve = async () => { + // Compress scenario + const jsonString = JSON.stringify(scenario); + const compressed = pako.gzip(jsonString); + + // POST to backend + const backendUrl = process.env.REACT_APP_BACKEND_URL; + const response = await fetch(`${backendUrl}/submit`, { + method: "POST", + headers: { + "Content-Type": "application/gzip", + }, + body: compressed, + }); + + // Error handling + if (!response.ok) { + setToastMessage("Failed to submit file. See console for more details."); + console.log(response); + return; + } + + // Parse response + const data = await response.json(); + console.log(data.job_id); }; return ( diff --git a/web/frontend/src/components/Common/Forms/DataTable.tsx b/web/frontend/src/components/Common/Forms/DataTable.tsx index 25f7602..9c4a460 100644 --- a/web/frontend/src/components/Common/Forms/DataTable.tsx +++ b/web/frontend/src/components/Common/Forms/DataTable.tsx @@ -142,7 +142,6 @@ export const generateTableData = ( case "lineContingency": if (contingencyLines === null) { contingencyLines = getContingencyTransmissionLines(scenario); - console.log(contingencyLines); } entry[spec.title] = contingencyLines.has(entryName); break; diff --git a/web/frontend/src/index.tsx b/web/frontend/src/index.tsx index 394e674..66e22b4 100644 --- a/web/frontend/src/index.tsx +++ b/web/frontend/src/index.tsx @@ -8,7 +8,7 @@ import React from "react"; import ReactDOM from "react-dom/client"; import reportWebVitals from "./reportWebVitals"; import CaseBuilder from "./components/CaseBuilder/CaseBuilder"; -import { BrowserRouter, Routes, Route, Navigate } from "react-router"; +import { BrowserRouter, Navigate, Route, Routes } from "react-router"; const root = ReactDOM.createRoot( document.getElementById("root") as HTMLElement,