From 3c425d288c9880ebad7ab1ef1a47acc6b278368d Mon Sep 17 00:00:00 2001 From: Nicolai Date: Tue, 17 Mar 2026 16:46:28 +0100 Subject: [PATCH] frontend fix --- Dockerfile | 4 ++-- docker-compose.yml | 4 ++-- webapp/frontend/src/App.jsx | 17 +++++++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2e83c45..cae8fba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ FROM python:3.13-slim AS runtime ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ APP_HOST=0.0.0.0 \ - APP_PORT=8000 \ + APP_PORT=8080 \ LOG_LEVEL=info WORKDIR /app @@ -36,6 +36,6 @@ COPY --from=frontend-build /app/webapp/frontend/dist ./webapp/frontend/dist RUN mkdir -p /app/var/jobs VOLUME ["/app/var"] -EXPOSE 8000 +EXPOSE 8080 CMD ["sh", "-c", "uvicorn webapp.backend.main:app --host ${APP_HOST} --port ${APP_PORT} --log-level ${LOG_LEVEL}"] diff --git a/docker-compose.yml b/docker-compose.yml index 7729a64..3856074 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,10 +5,10 @@ services: dockerfile: Dockerfile image: leag-coallog:latest ports: - - "8000:8000" + - "8080:8080" environment: APP_HOST: 0.0.0.0 - APP_PORT: "8000" + APP_PORT: "8080" LOG_LEVEL: info volumes: - ./var:/app/var diff --git a/webapp/frontend/src/App.jsx b/webapp/frontend/src/App.jsx index c32927b..f7c1405 100644 --- a/webapp/frontend/src/App.jsx +++ b/webapp/frontend/src/App.jsx @@ -174,7 +174,7 @@ export default function App() { const [solver, setSolver] = useState("highs"); const [stepSizeTonnes, setStepSizeTonnes] = useState("1000"); const [mipGapPct, setMipGapPct] = useState("5"); - const [maxRuntimeMinutes, setMaxRuntimeMinutes] = useState("10"); + const [maxRuntimeMinutes, setMaxRuntimeMinutes] = useState("10.0"); const [availableSolvers, setAvailableSolvers] = useState({ highs: true, gurobi: false, @@ -189,6 +189,13 @@ export default function App() { const [timerRunning, setTimerRunning] = useState(false); const [cancelPending, setCancelPending] = useState(false); + const formatDecimalWithDot = (value, digits = 1) => { + const normalized = String(value ?? "").replace(",", "."); + const num = Number(normalized); + if (Number.isFinite(num)) return num.toFixed(digits); + return normalized; + }; + const handleSubmit = async (event) => { event.preventDefault(); if (!file) { @@ -777,10 +784,12 @@ export default function App() { type="number" min="0.1" max="1440" - step="1" + step="0.1" value={maxRuntimeMinutes} disabled={jobInProgress} - onChange={(event) => setMaxRuntimeMinutes(event.target.value)} + onChange={(event) => + setMaxRuntimeMinutes(event.target.value.replace(",", ".")) + } /> @@ -814,7 +823,7 @@ export default function App() {

Schrittweite: {jobStepSizeTonnes || stepSizeTonnes} t

MIP Gap: {jobMipGapPct || mipGapPct}%

- Max Laufzeit: {jobMaxRuntimeMinutes || maxRuntimeMinutes} min + Max Laufzeit: {formatDecimalWithDot(jobMaxRuntimeMinutes || maxRuntimeMinutes)} min

{(jobId || logText) && (