finished the supported grain view for desktop and the mobile view for both
This commit is contained in:
parent
cd283a0ea1
commit
eef687746e
2 changed files with 179 additions and 43 deletions
|
|
@ -1,7 +1,7 @@
|
|||
import {MenuItem, TextField } from "@mui/material"
|
||||
import { cloneDeep } from "lodash"
|
||||
import { pond } from "protobuf-ts/pond"
|
||||
import React, { useEffect, useState } from "react"
|
||||
import React, { useEffect, useRef, useState } from "react"
|
||||
|
||||
interface Props {
|
||||
grainSettings?: pond.GrainSettings
|
||||
|
|
@ -19,6 +19,7 @@ export default function CustomGrainForm(props: Props) {
|
|||
const [constantC, setConstantC] = useState("0")
|
||||
const [kgPerBushel, setKgPerBushel] = useState("0")
|
||||
const [bushelsPerTonne, setBushelsPerTonne] = useState("0")
|
||||
const valid = useRef(false)
|
||||
|
||||
useEffect(()=>{
|
||||
if(grainSettings){
|
||||
|
|
@ -34,20 +35,20 @@ export default function CustomGrainForm(props: Props) {
|
|||
}
|
||||
},[grainSettings])
|
||||
|
||||
const invalid = () => {
|
||||
if (name === "") return true
|
||||
if (group === "") return true
|
||||
if (isNaN(parseFloat(constantA))) return true
|
||||
if (isNaN(parseFloat(constantB))) return true
|
||||
if (isNaN(parseFloat(constantA))) return true
|
||||
if (isNaN(parseFloat(kgPerBushel))) return true
|
||||
if (isNaN(parseFloat(bushelsPerTonne))) return true
|
||||
return false
|
||||
const validate = (name: string, group: string, constA: string, constB: string, constC: string, kgPerBushel: string, bushelsPerTonne: string) => {
|
||||
if (name === "") return false
|
||||
if (group === "") return false
|
||||
if (isNaN(parseFloat(constA))) return false
|
||||
if (isNaN(parseFloat(constB))) return false
|
||||
if (isNaN(parseFloat(constC))) return false
|
||||
if (isNaN(parseFloat(kgPerBushel))) return false
|
||||
if (isNaN(parseFloat(bushelsPerTonne))) return false
|
||||
return true
|
||||
}
|
||||
|
||||
const settingsChanged = (newSettings: pond.GrainSettings) => {
|
||||
setNewGrainSettings(newSettings)
|
||||
onGrainSettingsChange(newSettings, !invalid())
|
||||
onGrainSettingsChange(newSettings, valid.current)
|
||||
}
|
||||
|
||||
const grainForm = () => {
|
||||
|
|
@ -63,6 +64,7 @@ export default function CustomGrainForm(props: Props) {
|
|||
setName(name)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.name = name
|
||||
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne)
|
||||
settingsChanged(settings)
|
||||
}}/>
|
||||
<TextField
|
||||
|
|
@ -75,6 +77,7 @@ export default function CustomGrainForm(props: Props) {
|
|||
setGroup(group)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.group = group
|
||||
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne)
|
||||
settingsChanged(settings)
|
||||
}}/>
|
||||
<TextField
|
||||
|
|
@ -88,6 +91,7 @@ export default function CustomGrainForm(props: Props) {
|
|||
setEquation(enumVal)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.equation = enumVal
|
||||
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne)
|
||||
settingsChanged(settings)
|
||||
}}
|
||||
select>
|
||||
|
|
@ -117,11 +121,12 @@ export default function CustomGrainForm(props: Props) {
|
|||
onChange={(e) => {
|
||||
let val = e.target.value
|
||||
setConstantA(val)
|
||||
valid.current = validate(name, group, val, constantB, constantC, kgPerBushel, bushelsPerTonne)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
if(!isNaN(parseFloat(val))){
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.a = parseFloat(val)
|
||||
settingsChanged(settings)
|
||||
}
|
||||
settingsChanged(settings)
|
||||
}}
|
||||
label="Constant A"/>
|
||||
<TextField
|
||||
|
|
@ -134,11 +139,12 @@ export default function CustomGrainForm(props: Props) {
|
|||
onChange={(e) => {
|
||||
let val = e.target.value
|
||||
setConstantB(val)
|
||||
valid.current = validate(name, group, constantA, val, constantC, kgPerBushel, bushelsPerTonne)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
if(!isNaN(parseFloat(val))){
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.b = parseFloat(val)
|
||||
settingsChanged(settings)
|
||||
}
|
||||
settingsChanged(settings)
|
||||
}}
|
||||
label="Constant B"/>
|
||||
<TextField
|
||||
|
|
@ -151,11 +157,12 @@ export default function CustomGrainForm(props: Props) {
|
|||
onChange={(e) => {
|
||||
let val = e.target.value
|
||||
setConstantC(val)
|
||||
valid.current = validate(name, group, constantA, constantB, val, kgPerBushel, bushelsPerTonne)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
if(!isNaN(parseFloat(val))){
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.c = parseFloat(val)
|
||||
settingsChanged(settings)
|
||||
}
|
||||
settingsChanged(settings)
|
||||
}}
|
||||
label="Constant C"/>
|
||||
<TextField
|
||||
|
|
@ -168,11 +175,12 @@ export default function CustomGrainForm(props: Props) {
|
|||
onChange={(e) => {
|
||||
let val = e.target.value
|
||||
setKgPerBushel(val)
|
||||
valid.current = validate(name, group, constantA, constantB, constantC, val, bushelsPerTonne)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
if(!isNaN(parseFloat(val))){
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.kgPerBushel = parseFloat(val)
|
||||
settingsChanged(settings)
|
||||
}
|
||||
settingsChanged(settings)
|
||||
}}
|
||||
label="kg per Bushel"/>
|
||||
<TextField
|
||||
|
|
@ -185,11 +193,12 @@ export default function CustomGrainForm(props: Props) {
|
|||
onChange={(e) => {
|
||||
let val = e.target.value
|
||||
setBushelsPerTonne(val)
|
||||
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, val)
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
if(!isNaN(parseFloat(val))){
|
||||
let settings = cloneDeep(newGrainSettings)
|
||||
settings.bushelsPerTonne = parseFloat(val)
|
||||
settingsChanged(settings)
|
||||
}
|
||||
settingsChanged(settings)
|
||||
}}
|
||||
label="Bushels per Tonne"/>
|
||||
</React.Fragment>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue