diff --git a/code/README.md b/code/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/code/backend/useful_commands.txt b/code/backend/useful_commands.txt index 69dcabf..e7d4082 100644 --- a/code/backend/useful_commands.txt +++ b/code/backend/useful_commands.txt @@ -1,20 +1,3 @@ -For running the docker image: docker run --rm -p 8001:8001 -e RESULTS_DIR=/app/results -v "/home/logan/repos/DBD/code/backend/results:/app/results" dbd-backend:local -For building the docker image: docker build -t dbd-backend:local ./code/backend - -For running the frontend: docker run --rm -p 8000:8000 dbd-frontend:local -For building the frontend: docker build -t dbd-frontend:local ./code/frontend - -Backend test, no file mount: -For running the docker image: docker run --rm -p 8001:8001 dbd-backend:local - - -Backend run -docker run --rm --network="host" dbd-backend:local - -Frontend run: -docker run --rm --network="host" dbd-frontend:local - - ####################### START HERE ###################################### Build frontend using: docker build -t dbd-frontend:local ./code/frontend diff --git a/code/frontend/src/components/PathGenerationOptions.tsx b/code/frontend/src/components/PathGenerationOptions.tsx index b852342..e7f64c2 100644 --- a/code/frontend/src/components/PathGenerationOptions.tsx +++ b/code/frontend/src/components/PathGenerationOptions.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import type { UploadSystemSettings } from '../types/upload'; interface PathGenerationOptionsProps { @@ -28,6 +28,22 @@ const PathGenerationOptions: React.FC = ({ onCoverageWidthOverrideChange, settings, }) => { + const [headingDraft, setHeadingDraft] = useState(String(pathHeading)); + const [robotWidthDraft, setRobotWidthDraft] = useState(String(robotWidthOverride)); + const [coverageWidthDraft, setCoverageWidthDraft] = useState(String(coverageWidthOverride)); + + useEffect(() => { + setHeadingDraft(String(pathHeading)); + }, [pathHeading]); + + useEffect(() => { + setRobotWidthDraft(String(robotWidthOverride)); + }, [robotWidthOverride]); + + useEffect(() => { + setCoverageWidthDraft(String(coverageWidthOverride)); + }, [coverageWidthOverride]); + return (
diff --git a/code/frontend/src/components/PesticidePrescriptionsView.tsx b/code/frontend/src/components/PesticidePrescriptionsView.tsx index 295c65c..0f6ea83 100644 --- a/code/frontend/src/components/PesticidePrescriptionsView.tsx +++ b/code/frontend/src/components/PesticidePrescriptionsView.tsx @@ -284,6 +284,17 @@ const PesticidePrescriptionsView: React.FC = () => { return computePrescriptionTotalGallons(detailGeojson, getSprayForFeature, override); }, [detailGeojson, getSprayForFeature, detailConfig, draftGpaNone, draftGpaLow, draftGpaHigh]); + const parsedDraftGpaNone = draftGpaNone.trim() === '' ? Number.NaN : Number.parseFloat(draftGpaNone); + const parsedDraftGpaLow = draftGpaLow.trim() === '' ? Number.NaN : Number.parseFloat(draftGpaLow); + const parsedDraftGpaHigh = draftGpaHigh.trim() === '' ? Number.NaN : Number.parseFloat(draftGpaHigh); + const thresholdsAreValid = + Number.isFinite(parsedDraftGpaNone) && + parsedDraftGpaNone >= 0 && + Number.isFinite(parsedDraftGpaLow) && + parsedDraftGpaLow >= 0 && + Number.isFinite(parsedDraftGpaHigh) && + parsedDraftGpaHigh >= 0; + const saveSprayUpdates = useCallback(async () => { if (!selectedTaskId) return; const updates = Object.entries(sprayUpdates).map(([featureId, spray]) => ({ featureId, spray })); @@ -921,6 +932,9 @@ const PesticidePrescriptionsView: React.FC = () => { /> + {!thresholdsAreValid && ( +

All spray thresholds must be numeric values greater than or equal to 0.

+ )} {previewGallonsInModal != null && (

Preview total spray:{' '} @@ -938,7 +952,7 @@ const PesticidePrescriptionsView: React.FC = () => {