added entries to the grain form for imperial fields, filling the imperial will calculate its metric counterpart

This commit is contained in:
csawatzky 2026-02-27 12:56:46 -06:00
parent 74e7371792
commit 3401cc7c15
4 changed files with 77 additions and 14 deletions

4
package-lock.json generated
View file

@ -43,7 +43,7 @@
"mui-tel-input": "^7.0.0", "mui-tel-input": "^7.0.0",
"notistack": "^3.0.1", "notistack": "^3.0.1",
"openweathermap-ts": "^1.2.10", "openweathermap-ts": "^1.2.10",
"protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#staging", "protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#imperial_bushels",
"query-string": "^9.2.1", "query-string": "^9.2.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-beautiful-dnd": "^13.1.1", "react-beautiful-dnd": "^13.1.1",
@ -11967,7 +11967,7 @@
}, },
"node_modules/protobuf-ts": { "node_modules/protobuf-ts": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#ab9e8d4fd38f9af7802398403d38fddda5eb01da", "resolved": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#7649feaa2222b555fe15fe9e4a19244c23f0e442",
"dependencies": { "dependencies": {
"protobufjs": "^6.8.8" "protobufjs": "^6.8.8"
} }

View file

@ -55,7 +55,7 @@
"mui-tel-input": "^7.0.0", "mui-tel-input": "^7.0.0",
"notistack": "^3.0.1", "notistack": "^3.0.1",
"openweathermap-ts": "^1.2.10", "openweathermap-ts": "^1.2.10",
"protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#staging", "protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#imperial_bushels",
"query-string": "^9.2.1", "query-string": "^9.2.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-beautiful-dnd": "^13.1.1", "react-beautiful-dnd": "^13.1.1",

View file

@ -18,7 +18,9 @@ export default function CustomGrainForm(props: Props) {
const [constantB, setConstantB] = useState("0") const [constantB, setConstantB] = useState("0")
const [constantC, setConstantC] = useState("0") const [constantC, setConstantC] = useState("0")
const [kgPerBushel, setKgPerBushel] = useState("0") const [kgPerBushel, setKgPerBushel] = useState("0")
const [bushelsPerTonne, setBushelsPerTonne] = useState("0") const [bushelsPerTonne, setBushelsPerTonne] = useState("0")//this is metric
const [lbPerBushel, setLbPerBushel] = useState("0")
const [bushelsPerTon, setBushelsPerTon] = useState("0")//this is imperial
const valid = useRef(false) const valid = useRef(false)
useEffect(()=>{ useEffect(()=>{
@ -35,14 +37,25 @@ export default function CustomGrainForm(props: Props) {
} }
},[grainSettings]) },[grainSettings])
const validate = (name: string, group: string, constA: string, constB: string, constC: string, kgPerBushel: string, bushelsPerTonne: string) => { const validate = (
name: string,
group: string,
constA: string,
constB: string,
constC: string,
kgPerBushel: string,
bushelsPerTonne: string,
lbPerBushel: string,
bushelsPerTon: string) => {
if (name === "") return false if (name === "") return false
if (group === "") return false if (group === "") return false
if (isNaN(parseFloat(constA))) return false if (isNaN(parseFloat(constA))) return false
if (isNaN(parseFloat(constB))) return false if (isNaN(parseFloat(constB))) return false
if (isNaN(parseFloat(constC))) return false if (isNaN(parseFloat(constC))) return false
if (isNaN(parseFloat(kgPerBushel))) return false if (isNaN(parseFloat(kgPerBushel))) return false
if (isNaN(parseFloat(lbPerBushel))) return false
if (isNaN(parseFloat(bushelsPerTonne))) return false if (isNaN(parseFloat(bushelsPerTonne))) return false
if (isNaN(parseFloat(bushelsPerTon))) return false
return true return true
} }
@ -64,7 +77,7 @@ export default function CustomGrainForm(props: Props) {
setName(name) setName(name)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
settings.name = name settings.name = name
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne) valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne, lbPerBushel, bushelsPerTon)
settingsChanged(settings) settingsChanged(settings)
}}/> }}/>
<TextField <TextField
@ -77,7 +90,7 @@ export default function CustomGrainForm(props: Props) {
setGroup(group) setGroup(group)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
settings.group = group settings.group = group
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne) valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne, lbPerBushel, bushelsPerTon)
settingsChanged(settings) settingsChanged(settings)
}}/> }}/>
<TextField <TextField
@ -91,7 +104,7 @@ export default function CustomGrainForm(props: Props) {
setEquation(enumVal) setEquation(enumVal)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
settings.equation = enumVal settings.equation = enumVal
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne) valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne, lbPerBushel, bushelsPerTon)
settingsChanged(settings) settingsChanged(settings)
}} }}
select> select>
@ -121,7 +134,7 @@ export default function CustomGrainForm(props: Props) {
onChange={(e) => { onChange={(e) => {
let val = e.target.value let val = e.target.value
setConstantA(val) setConstantA(val)
valid.current = validate(name, group, val, constantB, constantC, kgPerBushel, bushelsPerTonne) valid.current = validate(name, group, val, constantB, constantC, kgPerBushel, bushelsPerTonne, lbPerBushel, bushelsPerTon)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){ if(!isNaN(parseFloat(val))){
settings.a = parseFloat(val) settings.a = parseFloat(val)
@ -139,7 +152,7 @@ export default function CustomGrainForm(props: Props) {
onChange={(e) => { onChange={(e) => {
let val = e.target.value let val = e.target.value
setConstantB(val) setConstantB(val)
valid.current = validate(name, group, constantA, val, constantC, kgPerBushel, bushelsPerTonne) valid.current = validate(name, group, constantA, val, constantC, kgPerBushel, bushelsPerTonne, lbPerBushel, bushelsPerTon)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){ if(!isNaN(parseFloat(val))){
settings.b = parseFloat(val) settings.b = parseFloat(val)
@ -157,7 +170,7 @@ export default function CustomGrainForm(props: Props) {
onChange={(e) => { onChange={(e) => {
let val = e.target.value let val = e.target.value
setConstantC(val) setConstantC(val)
valid.current = validate(name, group, constantA, constantB, val, kgPerBushel, bushelsPerTonne) valid.current = validate(name, group, constantA, constantB, val, kgPerBushel, bushelsPerTonne, lbPerBushel, bushelsPerTon)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){ if(!isNaN(parseFloat(val))){
settings.c = parseFloat(val) settings.c = parseFloat(val)
@ -175,14 +188,40 @@ export default function CustomGrainForm(props: Props) {
onChange={(e) => { onChange={(e) => {
let val = e.target.value let val = e.target.value
setKgPerBushel(val) setKgPerBushel(val)
valid.current = validate(name, group, constantA, constantB, constantC, val, bushelsPerTonne) valid.current = validate(name, group, constantA, constantB, constantC, val, bushelsPerTonne, lbPerBushel, bushelsPerTon)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){ if(!isNaN(parseFloat(val))){
settings.kgPerBushel = parseFloat(val) settings.kgPerBushel = parseFloat(val)
//then calculate the kilograms to pounds and update it as well
let newLb = Math.round((parseFloat(val)*2.205)*100)/100
settings.poundsPerBushel = newLb
setLbPerBushel(newLb.toString())
} }
settingsChanged(settings) settingsChanged(settings)
}} }}
label="kg per Bushel"/> label="kg per Bushel"/>
<TextField
sx={{marginBottom: 2}}
fullWidth
type="number"
value={lbPerBushel}
error={isNaN(parseFloat(lbPerBushel))}
helperText={isNaN(parseFloat(lbPerBushel)) ? "Must be a valid number" : ""}
onChange={(e) => {
let val = e.target.value
setLbPerBushel(val)
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne, val, bushelsPerTon)
let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){
settings.poundsPerBushel = parseFloat(val)
//then calculate the pounds to kilograms and update it as well
let newKg = Math.round((parseFloat(val)/2.205)*100)/100
settings.kgPerBushel = newKg
setKgPerBushel(newKg.toString())
}
settingsChanged(settings)
}}
label="lb per Bushel"/>
<TextField <TextField
sx={{marginBottom: 2}} sx={{marginBottom: 2}}
fullWidth fullWidth
@ -193,14 +232,38 @@ export default function CustomGrainForm(props: Props) {
onChange={(e) => { onChange={(e) => {
let val = e.target.value let val = e.target.value
setBushelsPerTonne(val) setBushelsPerTonne(val)
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, val) valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, val, lbPerBushel, bushelsPerTon)
let settings = cloneDeep(newGrainSettings) let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){ if(!isNaN(parseFloat(val))){
settings.bushelsPerTonne = parseFloat(val) settings.bushelsPerTonne = parseFloat(val)
let newTon = Math.round((parseFloat(val)*1.102)*100)/100
settings.bushelsPerTon = newTon
setBushelsPerTon(newTon.toString())
} }
settingsChanged(settings) settingsChanged(settings)
}} }}
label="Bushels per Tonne"/> label="Bushels per Tonne"/>
<TextField
sx={{marginBottom: 2}}
fullWidth
type="number"
value={bushelsPerTon}
error={isNaN(parseFloat(bushelsPerTon))}
helperText={isNaN(parseFloat(bushelsPerTon)) ? "Must be a valid number" : ""}
onChange={(e) => {
let val = e.target.value
setBushelsPerTon(val)
valid.current = validate(name, group, constantA, constantB, constantC, kgPerBushel, bushelsPerTonne, lbPerBushel, val)
let settings = cloneDeep(newGrainSettings)
if(!isNaN(parseFloat(val))){
settings.bushelsPerTon = parseFloat(val)
let newTonne = Math.round((parseFloat(val)/1.102)*100)/100
settings.bushelsPerTonne = newTonne
setBushelsPerTonne(newTonne.toString())
}
settingsChanged(settings)
}}
label="Bushels per Ton"/>
</React.Fragment> </React.Fragment>
) )
} }

View file

@ -337,7 +337,7 @@ export function getWhitelabel(): WhiteLabel {
return BXT_WHITE_LABEL; return BXT_WHITE_LABEL;
} }
if (window.location.origin.includes("localhost")) { if (window.location.origin.includes("localhost")) {
return STAGING_WHITELABEL; return STREAMLINE_WHITE_LABEL;
} }
if (window.location.origin.includes("staging") || import.meta.env.VITE_LOCAL_STAGING=='true') { if (window.location.origin.includes("staging") || import.meta.env.VITE_LOCAL_STAGING=='true') {
return STAGING_WHITELABEL; return STAGING_WHITELABEL;