{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/theme.ts","webpack:///./src/components/Layouts/utils.tsx","webpack:///./src/components/Layouts/MainLayout.tsx","webpack:///./src/images/background.jpg","webpack:///./src/images/logo_n_advisor_2024.png","webpack:///./src/images/logo_pk_advisor_2024.png","webpack:///./src/components/Home/index.tsx","webpack:///./src/images/logo_nasa.png","webpack:///./src/images/logo_nrec.png","webpack:///./src/images/logo_asc.png","webpack:///./src/images/logo_illinois_corn.png","webpack:///./src/images/logo_illinois_farm_bureau.png","webpack:///./src/images/logo_nsf.png","webpack:///./src/images/logo_crop_sciences.png","webpack:///./src/images/logo_nasa_acres.png","webpack:///./src/components/Logos.tsx","webpack:///./src/components/Home/layout.tsx","webpack:///./src/utils/format.ts","webpack:///./src/files/counties.geojson","webpack:///./src/files/districts.geojson","webpack:///./src/components/NAdvisor/config.ts","webpack:///./src/components/Map.tsx","webpack:///./src/components/NAdvisor/Inputs.tsx","webpack:///./src/utils/hooks.ts","webpack:///./src/components/Plots/PlotGrid.tsx","webpack:///./src/components/NAdvisor/Results/Charts/CommonPlotGrid.tsx","webpack:///./src/components/Plots/PlotDots.tsx","webpack:///./src/components/Plots/Legend.tsx","webpack:///./src/components/NAdvisor/Results/Charts/EONRvsYield.tsx","webpack:///./src/components/Plots/PlotBarChart.tsx","webpack:///./src/components/Plots/PlotLine.tsx","webpack:///./src/components/Plots/PlotDiamonds.tsx","webpack:///./src/components/NAdvisor/Results/Charts/ReturnToN.tsx","webpack:///./src/components/NAdvisor/Results/Charts/PercentOfMaxYield.tsx","webpack:///./src/components/Plots/PlotMultipleBarChart.tsx","webpack:///./src/components/NAdvisor/Results/Charts/EONR.tsx","webpack:///./src/components/NAdvisor/Results/InputSummary.tsx","webpack:///./src/components/NAdvisor/Results/MultipleInputsSummary.tsx","webpack:///./src/components/NAdvisor/Results/ResultSummary.tsx","webpack:///./src/components/NAdvisor/Results/MultipleResultsSummary.tsx","webpack:///./src/images/logo_n_advisor.png","webpack:///./src/images/thumbnail-district-1.png","webpack:///./src/images/thumbnail-district-2.png","webpack:///./src/images/thumbnail-district-3.png","webpack:///./src/components/NAdvisor/Results/PrintedResults.tsx","webpack:///./src/components/NAdvisor/Results/Results.tsx","webpack:///./src/components/NAdvisor/index.tsx","webpack:///./src/components/PKAdvisor/config.ts","webpack:///./src/components/PKAdvisor/Results/CSTVPlot.tsx","webpack:///./src/components/PKAdvisor/Inputs.tsx","webpack:///./src/components/PKAdvisor/Results/InputSummary.tsx","webpack:///./src/components/PKAdvisor/Results/ResultSummary.tsx","webpack:///./src/components/PKAdvisor/Results/CropPRemoval.tsx","webpack:///./src/components/PKAdvisor/Results/PrintedResults.tsx","webpack:///./src/components/PKAdvisor/Results/Results.tsx","webpack:///./src/components/PKAdvisor/index.tsx","webpack:///./src/components/NAdvisor/About.tsx","webpack:///./src/components/NAdvisor/layout.tsx","webpack:///./src/components/PKAdvisor/About.tsx","webpack:///./src/components/PKAdvisor/layout.tsx","webpack:///./src/routes.tsx","webpack:///./src/index.tsx"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","theme","createTheme","palette","primary","main","dark","light","contrastText","secondary","info","withLayout","Layout","Component","layoutProps","arguments","undefined","ComponentWithLayout","routeProps","React","createElement","displayName","concat","initialLayoutState","isLoading","userId","clus","layoutStateReducer","state","action","type","clu","properties","clu_id","LayoutStateContext","createContext","_ref","children","header","layoutState","layoutStateDispatch","useReducer","Provider","Box","sx","position","background","zIndex","className","display","alignItems","justifyContent","CircularProgress","Grid","overflow","container","component","minWidth","item","xs","AppBar","margin","fontSize","elevation","Toolbar","height","Home","Fragment","alignContent","minHeight","spacing","backgroundColor","direction","gap","marginTop","Avatar","width","src","logoNAdvisor","variant","textAlign","Typography","Button","Link","to","color","fullWidth","size","flexGrow","padding","logoPKAdvisor","fontWeight","textDecoration","href","target","rel","logoStyle","marginLeft","marginRight","Logos","context","nDescriptionLogos","img","logoNREC","alt","cols","logoNASA","logoNSF","logoILCorn","logoIFB","logoCropSciences","pkDescriptionLogos","logoASC","logoNASAAcres","ImageList","map","logo","ImageListItem","Header","precisionStr","decimals","toLocale","format","precision","parseFloat","LAMBDA_URL","ROTATIONS","cc","cs","N_DATA_SOURCES","openSource","ipcc","N_FERTILIZER","label","price","conversion","initialInputs","district","rotation","nFertilizer","nPrice","nPriceTon","cornPrice","considerNLoss","n2oPrice","n2oDataSource","nLeachingPrice","nLeachingDataSource","initialMultipleInputs","1","2","3","districtMapping","MAP_CENTER","transform","STYLES","counties","Style","stroke","Stroke","districts","selectedDistrict","feature","districtId","isSelected","lines","split","join","fill","Fill","text","Text","font","placement","getBasemap","TileLayer","source","TileWMSSource","url","params","LAYERS","getDistrictsLayer","districtsLayer","VectorLayer","VectorSource","districtsGeoJSON","useSpatialIndex","GeoJSON","dataProjection","featureProjection","style","set","inputsDistrictsLayer","resultsDistrictsLayer","RESULTS_TEXTS","return_to_n","percent_of_max_yield","eonr","eonr_vs_yield","multi_return_to_n","multi_percent_of_max_yield","multi_eonr","multi_eonr_vs_yield","multipleResultColors","MapContext","renderChildren","mapContainer","Children","child","props","nestedChildren","mapcontainer","cloneElement","ref","Map","id","projection","center","zoom","minZoom","maxZoom","extent","controls","layers","updateMap","events","showZoomControls","createRef","mapRef","useRef","useEffect","current","viewOptions","mapControls","defaultControls","extend","OLMap","view","View","entries","forEach","event","handler","on","containerItemStyle","headerStyle","marginBottom","headerStepStyle","inputLabelStyle","textTransform","rotationButtonGroupStyle","tableHeaderStyle","rotationButtonSelectedStyle","borderRadius","border","basemapLayer","countiesLayer","countiesGeoJSON","Inputs","inputs","inputsDispatch","useContext","InputsContext","multipleInputs","multipleInputsDispatch","MultipleInputsContext","inputsRef","previous","multipleInputsRef","setStyle","handleMapClick","useCallback","e","currentInputs","currentMultipleInputs","clickedObject","forEachFeatureAtPixel","pixel","layer","clickedFeature","clickedLayer","clickedDistrict","handleMapMouseMove","hit","getTargetElement","cursor","ArrowForwardIcon","Container","List","flexDirection","ListItemText","primaryTypographyProps","Divider","Paper","square","FormControl","Select","supportMultipleInputs","onChange","MenuItem","_ref2","disableGutters","click","pointermove","ToggleButtonGroup","exclusive","setSupportMultipleInputs","ToggleButton","_ref3","parseInt","_ref4","idx","TableContainer","Table","tableCellClasses","root","borderBottom","TableHead","TableRow","TableCell","TableBody","keys","index","Number","input","TextField","inputProps","min","_ref5","_ref6","_ref7","_ref8","_ref9","_ref10","opacity","pointerEvents","flex","disabled","_ref11","_ref12","_ref13","_ref14","areInputsValid","onClick","handleCalculate","useElementRect","elementRef","INITIAL_RECT","top","right","bottom","left","paddingTop","paddingRight","paddingBottom","paddingLeft","rect","setRect","useState","handleResize","updatedRect","element","getBoundingClientRect","refStyle","getComputedStyle","addEventListener","removeEventListener","PlotContext","PlotGrid","gridRef","xAxisProps","yAxisProps","innerWidth","innerHeight","xAxis","xScale","axis","yAxis","yScale","gEl","select","remove","gridContainer","append","lower","attr","title","titlePadding","textColor","textOpacity","selectAll","filter","CommonPlotGrid","plotWidth","plotHeight","xMin","xMax","yMin","yMax","xTickInterval","yTickInterval","xTitle","yTitle","hideXTickLabels","scale","scaleLinear","domain","range","axisBottom","tickValues","tickSize","tickFormat","axisLeft","PlotDots","radius","strokeOpacity","fillOpacity","gRef","enter","x","y","Legend","itemHeight","itemGap","rowHeight","strokeWidth","dashArray","symbolCenterY","itemGroup","diamondSize","Math","sqrt","EONRvsYield","_props$multipleResult","results","xn","En","en","Opy","ceil","multipleResults","multipleResultsLegend","PlotBarChart","PlotLine","strokeDasharray","line","datum","PlotDiamonds","halfSize","ReturnToN","dataYc","Yc","dataYf","Yf","xMaxYrtn","yMaxYrtn","dataYrtn","Yrtn","legends","sustainabilityElements","N2O_cost","N_leaching_cost","Xmin_default","Xmax_default","dataN2OCost","dataNLeachingCost","Xmin","Xmax","Infinity","multipleYrtnData","multipleMaxYrtn","multipleMinMaxNRate","xMinNRate","xMaxNRate","flat","multiplePriceLegend","_","point","PercentOfMaxYield","dataYpmy","Ypmy","multiplePercentMax","yieldValueAtMRTN","maxYield","max","PlotMultipleBarChart","xTickValues","xTickFormat","xScaleRange","bins","Array","from","Set","flatMap","dataset","sort","a","b","datasetIndices","toString","x0Scale","scaleBand","String","paddingInner","x1Scale","bandwidth","bars","datasetIndex","bin","x0","x1","barWidth","xAxisLabels","binStr","x0Value","xPosition","yPosition","textAnchor","dy","binData","reduce","floor","EONR","d1","d2","count","combinedData","binnedData","columnKeyStyle","columnValueStyle","InputSummary","handleBack","mapThumbnail","trials","startIcon","ArrowBackIcon","toFixed","tableValueStyle","unitStyle","MultipleInputsSummary","orientation","ResultSummary","backgroundSize","backgroundPosition","maxWidth","MRTN_rate_default","MRTN_rate","Yrtn_default","PMY","FM","FC","valueStyle","MultipleResultSummary","MAP_THUMBNAIL_MAPPING","thumbnailDistrict1","thumbnailDistrict2","thumbnailDistrict3","PrintedResults","forwardRef","PAGE_HEIGHT","gridTemplateRows","boxSizing","Stack","Ns","CHART_WIDTH","MultipleResultsSummary","Results","_return_to_n$percent_","_multi_return_to_n$mu","activePlot","updateActivePlot","plotContainerRef","plotContainerRect","printedResultsRef","printedMultipleResultsRef","handlePrint","useReactToPrint","content","handleMultiplePrint","saveChartAsPng","async","canvas","OffscreenCanvas","ctx","getContext","willReadFrequently","svgPlotEl","document","getElementById","svgPlotData","XMLSerializer","serializeToString","Canvg","start","globalCompositeOperation","fillStyle","fillRect","blob","convertToBlob","elem","URL","createObjectURL","download","body","appendChild","removeChild","multipleInputsReducer","inputsReducer","sustainabilityInputKeys","Index","activeView","updateActiveView","updateResults","multipleInputResults","updateMultipleInputResults","isInputValid","every","k","v","includes","values","promises","axios","post","fpr","cpr","fertilizer","consider_n_loss","n2o_price","n2o_price_method","n_leaching_price","n_leaching_price_method","then","response","commonResults","yn","A","Promise","all","catch","console","error","DATA_SOURCES","CROP_TYPES","corn","soybean","FERTILIZER_TYPES","STRATEGIES","sufficiency","build","maintain","dataSource","cropType","fertilizerType","soilTestResult","strategy","expectedYield","yearsToBuild","crop_p_removal","cstv","CSTVPlot","legendFontSize","scatterData","rawData","quadraticData","fittedCurve","quadratic","plateauData","plateau","criticalPoints","soilTestValue","cstvLine","soilTestLine","inputFieldStyle","borderColor","_props$step3Results","needToApplyPK","step3Results","canUseASCData","areStep3InputsValid","handleStep3Calculate","areStep4InputsValid","handleStep4Calculate","pkRemoval","pkRecommendation","fittedLine","parameters","equation","CropPRemoval","fittedLineData","expectedYieldLine","pkRemovalLine","intersectionPoint","r2","part3Results","part4Results","_crop_p_removal$cstv$","updateStep3Results","step4Results","updateStep4Results","notRequiredForStep3","step","plotComponents","x_data","y_data","quadraticX","quadraticY","plateauX","plateauY","fertilizerNeeded","expectedYieldRange","pkRemovalValues","slope","intercept","About","ListItem","modalContent","updateModalContent","justifyItems","IconButton","edge","process","HomeIcon","Modal","open","onClose","routes","exact","MainLayout","HomeHeader","NAdvisor","NAdvisorHeader","PKTool","PKToolHeader","ReactDOM","render","Router","ThemeProvider","path","Route","_extends"],"mappings":"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","file":"js/main-dfc400e8d4a55592a2a2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([725,4]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { createTheme } from '@mui/material/styles';\n\nexport const palette = {\n primary: {\n main: '#04a466',\n dark: '#008955',\n light: '#bbe2d3',\n contrastText: '#fff'\n },\n secondary: {\n main: '#455A64',\n light: '#DFE2E4',\n contrastText: '#000'\n },\n // use this for P/K tool (light blue ish)\n info: {\n main: '#7E98D5',\n light: '#C5D1F1',\n contrastText: '#000'\n }\n};\n\nexport const theme = createTheme({\n palette\n});\n","import React from 'react';\n\nimport type { RouteComponentProps } from 'react-router-dom';\n\n/**\n * A higher-order component that wraps a component with the given Layout\n * @param Layout layout component\n * @param Component the component to wrap in the layout\n * @param layoutProps extra props to pass to the Layout component\n */\nexport const withLayout =
>(\n Layout: React.ComponentType
,\n Component: React.ComponentType,\n layoutProps: P = {} as P\n): ((routeProps: RouteComponentProps) => JSX.Element) => {\n const ComponentWithLayout = (routeProps: RouteComponentProps) => (\n \n \n \n );\n ComponentWithLayout.displayName = `${Component.displayName}With${Layout.displayName}`;\n return ComponentWithLayout;\n};\n","import React from 'react';\nimport AppBar from '@mui/material/AppBar';\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport Toolbar from '@mui/material/Toolbar';\n\nexport const headerHeight = 75;\n\nconst initialLayoutState: Layout.StateType = {\n isLoading: false,\n userId: null,\n clus: {}\n};\n\nconst layoutStateReducer = (\n state: Layout.StateType = initialLayoutState,\n action: Layout.StateAction\n): Layout.StateType => {\n switch (action.type) {\n case 'isLoading':\n return {\n ...state,\n isLoading: action.isLoading\n };\n case 'userId':\n return {\n ...state,\n userId: action.userId\n };\n case 'addCLU':\n return {\n ...state,\n clus: {\n ...state.clus,\n [action.clu.properties.clu_id]: action.clu\n }\n };\n default:\n return state;\n }\n};\n\nexport const LayoutStateContext = React.createContext({} as Layout.StateContextType);\n\ninterface Props {\n children?: React.ReactNode;\n header: React.ReactNode;\n}\n\nconst Layout = ({ children = undefined, header }: Props): JSX.Element => {\n const [layoutState, layoutStateDispatch] = React.useReducer(layoutStateReducer, initialLayoutState);\n\n return (\n \n {layoutState.isLoading ? (\n \n \n \n ) : null}\n \n \n \n {header}\n \n \n\n \n {children}\n \n \n \n );\n};\n\nexport default Layout;\n","export default __webpack_public_path__ + \"files/background-fd25bd0ea094e7acb0cf431d79080bb1.jpg\";","export default __webpack_public_path__ + \"files/logo_n_advisor_2024-7b2155182722b135203269acda3b7d8f.png\";","export default __webpack_public_path__ + \"files/logo_pk_advisor_2024-112b4cd9940e19f2f812bcbfe9e61755.png\";","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport Avatar from '@mui/material/Avatar';\nimport Button from '@mui/material/Button';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nimport background from '../../images/background.jpg';\nimport logoNAdvisor from '../../images/logo_n_advisor_2024.png';\nimport logoPKAdvisor from '../../images/logo_pk_advisor_2024.png';\n\nconst footerHeight = 80;\n\nconst Home = (): JSX.Element => {\n return (\n <>\n \n \n \n \n \n \n \n \n Nitrogen Rate Calculator\n \n \n \n \n \n \n \n Here we nitrogen rate calculator tools for Illinois corn growers. We offer the classic\n MRTN tool to provide Maximum Return To Nitrogen rate (MRTN) and Most Profitable N Rate,\n based on recent N rate research data funded previously by Illinois Nutrient Research &\n Education Council. Our tool supports the input of single crop prices or multiple crop\n prices for flexibility. We are also developing a version that takes sustainability\n metrics into account.\n \n \n \n \n\n \n \n \n \n \n \n \n Phosphorus/Potassium Calculator\n \n \n \n \n \n \n \n Here we provide a tool designed for Illinois farmers that combines open-source data with\n Illinois-specific soil and crop data. The tool serves two primary functions: first,\n determining whether phosphorus (P) or potassium (K) fertilizer is needed based on soil\n test results and crop requirements. Second, providing precise fertilizer application\n rates tailored to different management strategies, such as sufficiency, maintenance, or\n build-up approaches.\n \n \n \n \n \n\n \n Developers from the \n \n National Center for Supercomputing Applications (NCSA)\n \n provided the initial software development for this site. Scientific background, models, and\n terminology has been provided by \n Ziyi Li. Full-stack development has since been taken over\n by \n \n Evan Chen\n \n , a developer in Dr. Kaiyu Guan’s research group at the University of Illinois Urbana-Champaign\n Agroecosystem Sustainability Center. To see funding and collaboration details for specific tools, see\n their respective About pages.\n \n >\n );\n};\n\nexport default Home;\n","export default __webpack_public_path__ + \"files/logo_nasa-82428ab6dacd877bdb8a1ad879ca432c.png\";","export default __webpack_public_path__ + \"files/logo_nrec-a0ea729d2fc67af667c41d73c1e84e00.png\";","export default __webpack_public_path__ + \"files/logo_asc-86025083face3b6f63ac201c07f94b3b.png\";","export default __webpack_public_path__ + \"files/logo_illinois_corn-8bb41d8271ed10d7c0e00ac21ca4ea45.png\";","export default __webpack_public_path__ + \"files/logo_illinois_farm_bureau-e9adec47c145b3c5c45993e29c620b31.png\";","export default __webpack_public_path__ + \"files/logo_nsf-d156ec56aa782f622f0207ed2d5a08f5.png\";","export default __webpack_public_path__ + \"files/logo_crop_sciences-f70c1b06aa778fad4ad009542b188381.png\";","export default __webpack_public_path__ + \"files/logo_nasa_acres-e11b94d74019ca610ca0f30ab40031d3.png\";","import React from 'react';\nimport Box from '@mui/material/Box';\nimport ImageList from '@mui/material/ImageList';\nimport ImageListItem from '@mui/material/ImageListItem';\nimport { Link, Theme } from '@mui/material';\n\nimport logoNASA from '../images/logo_nasa.png';\nimport logoNREC from '../images/logo_nrec.png';\nimport logoASC from '../images/logo_asc.png';\nimport logoILCorn from '../images/logo_illinois_corn.png';\nimport logoIFB from '../images/logo_illinois_farm_bureau.png';\nimport logoNSF from '../images/logo_nsf.png';\nimport logoCropSciences from '../images/logo_crop_sciences.png';\n// import logoHarvest from '../images/logo_harvest.png';\n// import logoICGA from '../images/logo_icga.png';\n// import logoUIUC from '../images/logo_uiuc.png';\nimport logoNASAAcres from '../images/logo_nasa_acres.png';\n\ninterface LogosProps {\n context: 'Header' | 'NDescription' | 'PKDescription';\n}\n\nconst logoStyle = {\n height: (theme: Theme) => theme.spacing(7),\n marginLeft: 3,\n marginRight: 1\n};\n\nconst Logos = ({ context }: LogosProps): JSX.Element => {\n const columns = 20;\n const nDescriptionLogos = [\n { img: logoNREC, alt: 'NREC logo', cols: 5 },\n { img: logoNASA, alt: 'NASA logo', cols: 2 },\n { img: logoNSF, alt: 'NSF logo', cols: 2 },\n { img: logoILCorn, alt: 'Illinois Corn logo', cols: 4 },\n { img: logoIFB, alt: 'IFB logo', cols: 4 },\n { img: logoCropSciences, alt: 'Crop Sciences', cols: 2 }\n ];\n\n const pkDescriptionLogos = [\n { img: logoNSF, alt: 'NSF logo', cols: 10 },\n { img: logoCropSciences, alt: 'Crop Sciences', cols: 10 }\n ];\n\n if (context === 'Header') {\n return (\n \n \n \n \n \n \n \n \n );\n }\n\n if (context === 'PKDescription') {\n return (\n \n {pkDescriptionLogos.map((logo) => (\n \n
\n \n ))}\n \n );\n }\n\n // default: NDescription\n return (\n \n {nDescriptionLogos.map((logo) => (\n \n
\n \n ))}\n \n );\n};\n\nexport default Logos;\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport Logos from '../Logos';\n\nexport const Header = (): JSX.Element => (\n <>\n Tools Home\n \n >\n);\n","import { format } from 'd3-format';\n\nexport const precisionStr = (value: number, decimals = 1, toLocale = true): string =>\n format(`${toLocale ? ',.' : '.'}${decimals}f`)(value);\n\nexport const precision = (value: number, decimals = 1): number => parseFloat(precisionStr(value, decimals, false));\n\nexport const leadingZero = (value: number, zeros = 2): string => format(`0${zeros}d`)(value);\n","export default __webpack_public_path__ + \"files/counties-5c2ab5d7f0320537a8bb6a34e756a224.geojson\";","export default __webpack_public_path__ + \"files/districts-40ce036c6b6c888c90f79cdbeadce7da.geojson\";","import GeoJSON from 'ol/format/GeoJSON';\nimport TileLayer from 'ol/layer/Tile';\nimport VectorLayer from 'ol/layer/Vector';\nimport { transform } from 'ol/proj';\nimport TileWMSSource from 'ol/source/TileWMS';\nimport VectorSource from 'ol/source/Vector';\nimport { Fill, Stroke, Style, Text } from 'ol/style';\n\nimport type { FeatureLike as FeatureType } from 'ol/Feature';\n\nimport countiesGeoJSON from '../../files/counties.geojson';\nimport districtsGeoJSON from '../../files/districts.geojson';\nimport { precision } from '../../utils/format';\n\nexport const LAMBDA_URL = 'https://d2ketrxbl3ytwt.cloudfront.net/lambda-mrtn';\n\nexport const ROTATIONS = {\n cc: 'Following Corn',\n cs: 'Following Soybean'\n};\n\nexport const N_DATA_SOURCES = {\n openSource: 'Open Source',\n ipcc: 'IPCC'\n};\n\n// Support lists of prices for multiple inputs displays\nexport const N_FERTILIZER = [\n {\n label: 'Anhydrous Ammonia (82%)',\n price: [512, 656, 820, 984],\n conversion: 0.000609756\n },\n {\n label: 'UAN (28%)',\n price: [840, 980, 1120, 1260],\n conversion: 0.001785714\n },\n {\n label: 'UAN (32%)',\n price: [860, 1000, 1140, 1280],\n conversion: 0.0015625\n },\n {\n label: 'UAN (45%)',\n price: [920, 1060, 1200, 1340],\n conversion: 0.001111111\n },\n {\n label: 'Ammonium Sulfate (21%)',\n price: [266, 336, 420, 504],\n conversion: 0.002380952\n }\n];\n\nexport const initialInputs: NAdvisor.InputsType = {\n district: '',\n rotation: 'cc',\n nFertilizer: 0,\n nPrice: precision(N_FERTILIZER[0].price[0] * N_FERTILIZER[0].conversion, 2),\n nPriceTon: precision(N_FERTILIZER[0].price[0], 2),\n cornPrice: 4.23,\n considerNLoss: false,\n n2oPrice: 0,\n n2oDataSource: 'openSource',\n nLeachingPrice: 0,\n nLeachingDataSource: 'openSource'\n};\n\nexport const initialMultipleInputs: NAdvisor.MultipleInputsType = {\n 0: {\n district: '',\n rotation: 'cc',\n nFertilizer: 0,\n nPrice: precision(N_FERTILIZER[0].price[0] * N_FERTILIZER[0].conversion, 2),\n nPriceTon: precision(N_FERTILIZER[0].price[0], 2),\n cornPrice: 4.23,\n considerNLoss: false,\n n2oPrice: 0,\n nLeachingPrice: 0,\n n2oDataSource: 'openSource',\n nLeachingDataSource: 'openSource'\n },\n 1: {\n district: '',\n rotation: 'cc',\n nFertilizer: 0,\n nPrice: precision(N_FERTILIZER[0].price[1] * N_FERTILIZER[0].conversion, 2),\n nPriceTon: precision(N_FERTILIZER[0].price[1], 2),\n cornPrice: 4.23,\n considerNLoss: false,\n n2oPrice: 0,\n nLeachingPrice: 0,\n n2oDataSource: 'openSource',\n nLeachingDataSource: 'openSource'\n },\n 2: {\n district: '',\n rotation: 'cc',\n nFertilizer: 0,\n nPrice: precision(N_FERTILIZER[0].price[2] * N_FERTILIZER[0].conversion, 2),\n nPriceTon: precision(N_FERTILIZER[0].price[2], 2),\n cornPrice: 4.23,\n considerNLoss: false,\n n2oPrice: 0,\n nLeachingPrice: 0,\n n2oDataSource: 'openSource',\n nLeachingDataSource: 'openSource'\n },\n 3: {\n district: '',\n rotation: 'cc',\n nFertilizer: 0,\n nPrice: precision(N_FERTILIZER[0].price[3] * N_FERTILIZER[0].conversion, 2),\n nPriceTon: precision(N_FERTILIZER[0].price[3], 2),\n cornPrice: 4.23,\n considerNLoss: false,\n n2oPrice: 0,\n nLeachingPrice: 0,\n n2oDataSource: 'openSource',\n nLeachingDataSource: 'openSource'\n }\n};\n\n// District -> [Region] Illinois Mapping\nexport const districtMapping: { [key: number]: string } = {\n 1: 'Northern Illinois',\n 2: 'Middle Illinois',\n 3: 'Southern Illinois'\n};\n\n// N Advisor map config\nexport const MAP_CENTER = transform([-89.44, 40.08], 'EPSG:4326', 'EPSG:3857');\n\nexport const STYLES = {\n counties: new Style({\n stroke: new Stroke({\n color: '#000',\n width: 1\n })\n }),\n districts:\n (selectedDistrict: string) =>\n (feature: FeatureType): Style => {\n const districtId = feature.get('id');\n const isSelected = districtId === selectedDistrict;\n const text = districtMapping[districtId];\n const lines = text.split(' ').join('\\n'); // split by whitespace to accomodate summary table overflow\n return new Style({\n fill: new Fill({\n color: isSelected ? 'rgba(0, 137, 35, 0.3)' : 'rgba(187, 226, 211, 0.6)'\n }),\n stroke: new Stroke({\n color: isSelected ? '#FF7F50' : '#319FD3',\n width: 1\n }),\n text: new Text({\n text: lines,\n font: '10px Roboto,sans-serif',\n fill: new Fill({\n color: isSelected ? '#FF7F50' : '#000'\n }),\n overflow: true,\n placement: 'point'\n })\n });\n }\n};\n\nexport const getBasemap = (): TileLayer =>\n new TileLayer({\n source: new TileWMSSource({\n url: 'https://basemap.nationalmap.gov/arcgis/services/USGSImageryOnly/MapServer/WMSServer',\n params: { LAYERS: 0 }\n })\n });\n\nexport const getCountiesLayer = (): VectorLayer =>\n new VectorLayer({\n source: new VectorSource({\n url: countiesGeoJSON,\n format: new GeoJSON({\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n })\n }),\n style: STYLES.counties\n });\n\nconst getDistrictsLayer = (): VectorLayer => {\n const districtsLayer = new VectorLayer({\n source: new VectorSource({\n url: districtsGeoJSON,\n useSpatialIndex: true,\n format: new GeoJSON({\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n })\n }),\n style: STYLES.districts('')\n });\n districtsLayer.set('interactive', true);\n return districtsLayer;\n};\nexport const inputsDistrictsLayer = getDistrictsLayer();\nexport const resultsDistrictsLayer = getDistrictsLayer();\n\nexport const RESULTS_TEXTS: { [k: string]: string } = {\n return_to_n:\n 'The MRTN Rate (the x coordinate for the blue point; and the y coordinate for the blue point is the Net Return to N at MRTN Rate) provides the greatest Economic Optimal N Rate (EONR) , which will be the suggested N application rate. This figure demonstrates how MRTN Rate is calculated. Basically, the Net Return to N (blue line) for a selected region under one specific rotation pattern is derived by calculating the differences between gross return from yield increase (green line) and fertilizer cost (orange line). The profitable N rate range (yellow shaded symbol; within $1/acre of the maximum) is also shown on the figure. ',\n percent_of_max_yield:\n 'This figure shows the percentage between each yield across all N rates and the maximum yield. The MRTN rate and the profitable N rate range (within $1/acre of the maximum) are also highlighted. As the N rates increase, the yield increases accordingly. The larger the price ratio (fertilizer price:crop price), the lower the economic rate, and the lower percentage of maximum yield for the MRTN rate.',\n eonr: 'This figure shows the frequency distribution (in 25 lb N increments) of the EONR for all sites in one selected region under one specific rotation. Generally, the MRTN rate should be located in the ENOR range with the highest frequency.',\n eonr_vs_yield:\n 'This figure shows the relationship between the ENOR and the corresponding yield for all experiments in one selected region under one specific rotation.',\n multi_return_to_n:\n 'This figure shows the Return to N for multiple price ratios. The MRTN rate (colored dots) and the profitable N rate range (within $1/acre of the maximum, gray triangles) are also highlighted. ',\n multi_percent_of_max_yield:\n 'This figure shows the percentage between each yield across N rates and the maximum yield. The MRTN rates for each price ratio are highlighted by the colored diamonds. As N rates increase, the yield increases accordingly. The larger the price ratio (fertilizer price:crop price), the lower the economic rate, and the lower percentage of maximum yield for the MRTN rate.',\n multi_eonr:\n 'This figure shows the frequency distribution (in 25 lb N increments) of the EONR for all sites in one selected region under one specific rotation. Each price ratio is represented by a different color.',\n multi_eonr_vs_yield:\n 'This figure shows the relationship between the ENOR and the corresponding yield for all experiments in one selected region under one specific rotation.'\n};\n\nexport const multipleResultColors: { [key: number]: string } = {\n 0: '#C7C4FF',\n 1: '#D48A9F',\n 2: '#B9D49A',\n 3: '#F0B39A'\n};\n","import React from 'react';\nimport { Map as OLMap, View } from 'ol';\nimport { defaults as defaultControls, Control } from 'ol/control';\nimport { Extent } from 'ol/extent';\nimport GroupLayer from 'ol/layer/Group';\nimport Layer from 'ol/layer/Layer';\n\nimport type { MapBrowserEvent } from 'ol';\nimport type { Coordinate } from 'ol/coordinate';\nimport type { ViewOptions } from 'ol/View';\nimport { Box, SxProps } from '@mui/system';\n\ninterface Props {\n children?: JSX.Element;\n id?: string;\n className?: string;\n projection?: string;\n zoom?: number;\n center?: [number, number] | Coordinate;\n minZoom?: number;\n maxZoom?: number;\n extent?: Extent;\n controls?: Control[];\n layers?: Array;\n updateMap?: (map: OLMap) => void;\n events?: { [k: string]: (e: MapBrowserEvent) => void };\n sx?: SxProps;\n showZoomControls?: boolean;\n}\n\nexport const MapContext = React.createContext<{ map?: OLMap }>({});\n\nconst renderChildren = (mapContainer: React.RefObject, children: JSX.Element): JSX.Element[] => {\n return React.Children.map(children, (child) => {\n if (!child || !child.props) {\n return child;\n }\n\n const nestedChildren = child.props.children ? renderChildren(mapContainer, child.props.children) : [];\n\n if (child.props.mapcontainer) {\n return React.cloneElement(\n child,\n {\n ref: mapContainer\n },\n [...nestedChildren]\n );\n }\n\n if (nestedChildren.length) {\n return React.cloneElement(child, { children: nestedChildren });\n }\n return child;\n });\n};\n\nconst Map = (props: Props): JSX.Element => {\n const {\n children = null,\n id = '',\n className = '',\n projection = 'EPSG:3857',\n center = [0, 0],\n zoom = 7,\n minZoom = 0,\n maxZoom = 28,\n extent = null,\n controls = [],\n layers = [],\n updateMap = null,\n events = null,\n sx = {},\n showZoomControls = true\n } = props;\n\n const mapContainer = React.createRef();\n const mapRef = React.useRef();\n\n React.useEffect(() => {\n if (mapContainer.current) {\n const viewOptions: ViewOptions = {\n projection,\n center,\n zoom,\n minZoom,\n maxZoom\n };\n\n if (extent) {\n viewOptions.extent = extent;\n }\n\n const mapControls = defaultControls({\n zoom: showZoomControls // conditionally include the Zoom control, change made given new open layers version\n }).extend(controls);\n\n const map = new OLMap({\n target: mapContainer.current,\n view: new View(viewOptions),\n layers,\n controls: mapControls\n });\n\n mapRef.current = map;\n\n if (events) {\n Object.entries(events).forEach(([event, handler]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n map.on(event as any, handler);\n });\n }\n\n if (updateMap) {\n updateMap(map);\n }\n }\n }, []);\n\n return (\n \n {children ? (\n \n {renderChildren(mapContainer, children)}\n \n ) : null}\n \n );\n};\n\nexport default Map;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport FormControl from '@mui/material/FormControl';\nimport Grid from '@mui/material/Grid';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Paper from '@mui/material/Paper';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport List from '@mui/material/List';\nimport ListItemText from '@mui/material/ListItemText';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell, { tableCellClasses } from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport Divider from '@mui/material/Divider';\nimport { Theme } from '@mui/material';\n\nimport type { MapBrowserEvent } from 'ol';\nimport type { FeatureLike as FeatureType } from 'ol/Feature';\nimport type { Layer as LayerType, VectorTile as VectorTileType } from 'ol/layer';\n\nimport {\n MAP_CENTER,\n N_FERTILIZER,\n ROTATIONS,\n STYLES,\n getBasemap,\n getCountiesLayer,\n inputsDistrictsLayer,\n districtMapping\n} from './config';\n\nimport Map from '../Map';\nimport { InputsContext, MultipleInputsContext } from './index';\n\nconst containerItemStyle = {\n 'padding': 2,\n 'display': 'flex',\n '& > *': {\n flexGrow: 1,\n padding: 2\n }\n};\n\nconst headerStyle = {\n height: 62,\n alignItems: 'center',\n backgroundColor: 'primary.light',\n padding: (theme: Theme) => `0 ${theme.spacing(2)}`,\n marginBottom: 4\n};\n\nconst headerStepStyle = {\n ...headerStyle,\n display: 'flex',\n marginRight: 2\n};\n\nconst inputLabelStyle = {\n marginTop: 2,\n textTransform: 'uppercase'\n};\n\nconst rotationButtonGroupStyle = {\n backgroundColor: 'secondary.light',\n width: '100%'\n};\n\nconst tableHeaderStyle = {\n fontSize: '12px',\n fontWeight: '400',\n textTransform: 'uppercase'\n};\n\nconst rotationButtonSelectedStyle = {\n 'lineHeight': '1.3rem',\n 'textTransform': 'none',\n 'margin': 1,\n 'color': 'secondary.main',\n 'border': 'none',\n 'borderRadius': '0.5 !important',\n '&.Mui-selected': {\n color: (theme: Theme) => `${theme.palette.primary.main} !important`,\n borderRadius: (theme: Theme) => `${theme.spacing(0.5)} !important`,\n border: (theme: Theme) => `2px solid ${theme.palette.primary.main} !important`,\n backgroundColor: '#fff !important'\n }\n};\n\ninterface Props {\n areInputsValid: boolean;\n handleCalculate: () => void;\n supportMultipleInputs: boolean;\n setSupportMultipleInputs: (value: boolean) => void;\n}\n\nconst basemapLayer = getBasemap();\nconst countiesLayer = getCountiesLayer();\n\nconst Inputs = (props: Props): JSX.Element => {\n const { inputs, inputsDispatch } = React.useContext(InputsContext);\n const { multipleInputs, multipleInputsDispatch } =\n React.useContext(MultipleInputsContext);\n\n const inputsRef = React.useRef<{ previous: NAdvisor.InputsType; current: NAdvisor.InputsType }>({\n previous: inputs,\n current: inputs\n });\n\n const multipleInputsRef = React.useRef<{\n previous: NAdvisor.MultipleInputsType;\n current: NAdvisor.MultipleInputsType;\n }>({\n previous: multipleInputs,\n current: multipleInputs\n });\n\n // Update district map on dropdown selection for single inputs\n React.useEffect(() => {\n const previous = inputsRef.current.current;\n\n if (previous.district !== inputs.district) {\n // Update styling of districts\n inputsDistrictsLayer.setStyle(STYLES.districts(inputs.district));\n }\n\n inputsRef.current = {\n previous,\n current: inputs\n };\n }, [inputs]);\n\n // Update district map on dropdown selection for multiple inputs\n React.useEffect(() => {\n const previous = multipleInputsRef.current.current;\n\n if (previous[0].district !== multipleInputs[0].district) {\n inputsDistrictsLayer.setStyle(STYLES.districts(multipleInputs[0].district));\n }\n\n multipleInputsRef.current = {\n previous,\n current: multipleInputs\n };\n }, [multipleInputs]);\n\n const handleMapClick = React.useCallback(\n (e: MapBrowserEvent) => {\n const currentInputs = inputsRef.current.current;\n const currentMultipleInputs = multipleInputsRef.current.current;\n\n const clickedObject: [FeatureType, LayerType] | null | undefined = e.map.forEachFeatureAtPixel(\n e.pixel,\n (feature, layer) => (layer.get('interactive') ? [feature, layer] : null)\n );\n\n if (clickedObject && currentMultipleInputs) {\n const [clickedFeature, clickedLayer] = clickedObject;\n const clickedDistrict = clickedFeature.get('id');\n // Update the district for both inputs and multipleInputs\n if (currentMultipleInputs[0].district !== clickedDistrict) {\n multipleInputsDispatch({ type: 'district', value: clickedDistrict });\n (clickedLayer as VectorTileType).setStyle(STYLES.districts(clickedDistrict));\n }\n if (currentInputs.district !== clickedDistrict) {\n inputsDispatch({ type: 'district', value: clickedDistrict });\n (clickedLayer as VectorTileType).setStyle(STYLES.districts(clickedDistrict));\n }\n }\n },\n [inputsRef, multipleInputsRef]\n );\n\n // Updated version of OpenLayers to 7.2.2 to fix the warning on forEachFeatureAtPixel\n const handleMapMouseMove = React.useCallback(\n (e: MapBrowserEvent) => {\n const hit = e.map.forEachFeatureAtPixel(e.pixel, () => {\n return true;\n });\n if (hit) {\n e.map.getTargetElement().style.cursor = 'pointer';\n } else {\n e.map.getTargetElement().style.cursor = '';\n }\n },\n [inputsRef, multipleInputsRef]\n );\n\n return (\n \n \n \n \n Get Started Here!\n \n \n \n \n MRTN Tool Instructions\n \n \n \n 1. Select the district in which your farm is located.\n \n \n 2. Enter management practices.\n \n \n First, select the appropriate crop rotation pattern Then, select the nitrogen fertilizer\n product and input the nitrogen price per ton, nitrogen price per pound, and corn grain\n price per bushel.\n \n \n Default price values are already entered. Please make changes to reflect the actual\n current price.\n \n \n 3. Input sustainability metrics (optional)\n \n \n If you want the calculation to factor sustainability metrics, input them here. This is\n only supported for single price inputs.\n \n \n 4. Click the calculate button to see results.\n \n \n If you input nitrogen or corn prices input nitrogen or corn prices that are unreasonable\n (e.g. too high or low), you may get unreasonable figures. If this occurs, please rerun\n using a more realistic price.\n \n \n \n \n This tool supports both single and multiple price input. Swich using the\n button under management practices input. Resulting calculations and figures will be\n generated using all prices.\n \n
\n \n \n \n \n \n \n \n \n 1\n \n Select the district in which your farm is located.\n \n\n \n \n Select A District\n \n \n \n\n \n \n \n \n \n \n :nth-of-type(1)': {\n flexGrow: 0,\n marginBottom: 3\n },\n '& > :nth-of-type(2)': {\n flexGrow: 1,\n marginBottom: 3\n },\n '& > :nth-of-type(3)': {\n flexGrow: 0\n }\n }}\n item\n xs={4}\n >\n \n \n \n 2\n \n Enter management practices\n \n\n \n \n \n Price Mode\n \n {\n props.setSupportMultipleInputs(value);\n }}\n >\n \n Single\n \n \n Multiple\n \n \n \n \n \n Corn Rotation\n \n {\n if (props.supportMultipleInputs) {\n multipleInputsDispatch({ type: 'rotation', value });\n } else {\n inputsDispatch({ type: 'rotation', value });\n }\n }}\n >\n \n {ROTATIONS.cc}\n \n \n {ROTATIONS.cs}\n \n \n \n \n\n \n \n N Fertilizer\n \n \n \n {props.supportMultipleInputs ? (\n <>\n \n \n \n \n N Price ($/Ton)\n N Price ($/lb N)\n Corn Price ($/bu)\n \n \n \n {Object.keys(multipleInputs).map((key) => {\n const index = Number(key);\n const input = multipleInputs[index];\n return (\n \n \n \n multipleInputsDispatch({\n type: 'nPriceTon',\n value: parseFloat(value),\n index\n })\n }\n />\n \n \n \n multipleInputsDispatch({\n type: 'nPrice',\n value: parseFloat(value),\n index\n })\n }\n />\n \n \n \n multipleInputsDispatch({\n type: 'cornPrice',\n value: parseFloat(value),\n index\n })\n }\n />\n \n \n );\n })}\n \n
\n \n >\n ) : (\n <>\n \n \n Nitrogen Price ($/Ton)\n \n \n inputsDispatch({\n type: 'nPriceTon',\n value: parseFloat(value)\n })\n }\n />\n \n \n \n Nitrogen Price ($/lb N)\n \n \n inputsDispatch({\n type: 'nPrice',\n value: parseFloat(value)\n })\n }\n />\n \n \n \n Corn Price ($/bu)\n \n \n inputsDispatch({\n type: 'cornPrice',\n value: parseFloat(value)\n })\n }\n />\n \n >\n )}\n \n\n {/* Sustainability metrics inputs supported only for single price (not multiple price) */}\n \n \n \n 3\n \n Sustainability metrics\n \n {\n inputsDispatch({ type: 'considerNLoss', value });\n }}\n >\n \n No Consideration (Default)\n \n \n Considering N Loss\n \n \n \n \n \n N2O Data Source\n \n \n \n \n \n N2O Price ($/lb N)\n \n \n inputsDispatch({\n type: 'n2oPrice',\n value: parseFloat(value)\n })\n }\n disabled={!inputs.considerNLoss}\n />\n \n \n \n \n \n N Leaching Data Source\n \n \n \n \n \n N Leaching Price ($/lb N)\n \n \n inputsDispatch({\n type: 'nLeachingPrice',\n value: parseFloat(value)\n })\n }\n disabled={!inputs.considerNLoss}\n />\n \n \n \n\n \n \n \n 4\n \n \n Run the tool\n \n \n \n \n \n \n );\n};\n\nexport default Inputs;\n","import React from 'react';\n\n/**\n * A custom hook that receives an `Element` ref and returns an `ElementRect` objects.\n * The hook handles changes in the element position and size and returns those relevant attributes such\n * as top, left, width, and height in the `ElementRect` object.\n * This is handled via `handleResize` event listener. This event listener is added on component mount\n * and removed on unmount.\n * @returns {ElementRect} an `ElementRect` object\n */\nexport const useElementRect = (elementRef: React.RefObject): ElementRect => {\n const INITIAL_RECT: ElementRect = {\n width: null,\n height: null,\n top: null,\n right: null,\n bottom: null,\n left: null,\n marginTop: null,\n marginRight: null,\n marginBottom: null,\n marginLeft: null,\n paddingTop: null,\n paddingRight: null,\n paddingBottom: null,\n paddingLeft: null\n };\n\n const [rect, setRect] = React.useState(INITIAL_RECT);\n\n const handleResize = () => {\n let updatedRect = INITIAL_RECT;\n const element = elementRef.current;\n if (element) {\n const { width, height, top, bottom, right, left } = element.getBoundingClientRect();\n const refStyle = window.getComputedStyle(element);\n const paddingTop = parseFloat(refStyle.paddingTop);\n const paddingRight = parseFloat(refStyle.paddingRight);\n const paddingBottom = parseFloat(refStyle.paddingBottom);\n const paddingLeft = parseFloat(refStyle.paddingLeft);\n const marginTop = parseFloat(refStyle.marginTop);\n const marginRight = parseFloat(refStyle.marginRight);\n const marginBottom = parseFloat(refStyle.marginBottom);\n const marginLeft = parseFloat(refStyle.marginLeft);\n\n updatedRect = {\n width,\n height,\n top,\n right,\n bottom,\n left,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft\n };\n }\n setRect(updatedRect);\n };\n\n React.useEffect(() => {\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return rect;\n};\n","import React from 'react';\nimport { select } from 'd3-selection';\n\nimport type { Axis, AxisDomain } from 'd3-axis';\n\nexport const PlotContext = React.createContext({} as Plot.Context);\n\ninterface Props {\n children?: React.ReactNode;\n width: number;\n height: number;\n marginTop?: number;\n marginBottom?: number;\n marginLeft?: number;\n marginRight?: number;\n xAxisProps: {\n axis: (width: number, height: number) => [Axis, Plot.xScale];\n key?: string | number;\n title?: string;\n titlePadding?: number;\n textColor?: string;\n textOpacity?: number;\n };\n yAxisProps: {\n axis: (width: number, height: number) => [Axis, Plot.yScale];\n key?: string | number;\n title?: string;\n titlePadding?: number;\n textColor?: string;\n textOpacity?: number;\n };\n}\n\nconst PlotGrid = (\n props: Props\n): JSX.Element => {\n const gridRef = React.useRef(null);\n\n const {\n children,\n width,\n height,\n marginTop = 0,\n marginBottom = 0,\n marginRight = 0,\n marginLeft = 0,\n xAxisProps,\n yAxisProps\n } = props;\n\n const innerWidth = width - marginLeft - marginRight;\n const innerHeight = height - marginBottom - marginTop;\n\n const [xAxis, xScale] = xAxisProps.axis(innerWidth, innerHeight);\n const [yAxis, yScale] = yAxisProps.axis(innerWidth, innerHeight);\n\n React.useEffect(() => {\n if (gridRef.current) {\n const gEl = select(gridRef.current);\n gEl.select('.gridContainer').remove();\n\n const gridContainer = gEl.append('g').lower().attr('class', 'gridContainer');\n\n // Add X axis\n gridContainer\n .append('g')\n .attr('class', 'grid')\n .attr('transform', `translate(0,${innerHeight})`)\n .call(xAxis);\n\n if (xAxisProps.title) {\n gridContainer\n .append('text')\n .attr('class', 'xTitle')\n .attr('x', innerWidth / 2)\n .attr('y', innerHeight + (xAxisProps.titlePadding || 0))\n .attr('text-anchor', 'middle')\n .attr('fill', xAxisProps.textColor || 'currentColor')\n .attr('fill-opacity', xAxisProps.textOpacity || 0.3)\n .attr('color', '#000')\n .attr('font-size', '16px')\n .text(xAxisProps.title);\n }\n\n // Add Y axis\n gridContainer.append('g').attr('class', 'grid').call(yAxis);\n\n if (yAxisProps.title) {\n gridContainer\n .append('text')\n .attr('class', 'yTitle')\n .attr('transform', 'rotate(-90)')\n .attr('y', -(xAxisProps.titlePadding || 0))\n .attr('x', -(innerHeight / 2))\n .attr('text-anchor', 'middle')\n .attr('fill', yAxisProps.textColor || 'currentColor')\n .attr('fill-opacity', yAxisProps.textOpacity || 0.3)\n .attr('color', '#000')\n .attr('font-size', '16px')\n .text(yAxisProps.title);\n }\n\n gridContainer\n .selectAll('.grid')\n .selectAll('g.tick')\n .selectAll('line')\n .attr('stroke', '#DFE2E4')\n .attr('stroke-opacity', 0.7)\n .attr('shape-rendering', 'crispEdges');\n\n gridContainer\n .selectAll('.grid')\n .selectAll('g.tick')\n .filter(':nth-child(2), :last-child')\n .selectAll('line')\n .attr('stroke', '#455A64');\n\n gridContainer.selectAll('.grid').selectAll('path').attr('stroke-width', 0);\n }\n });\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default PlotGrid;\n","import React, { ReactNode } from 'react';\nimport { axisBottom, axisLeft, range, scaleLinear } from 'd3';\nimport PlotGrid from '../../../Plots/PlotGrid';\n\ninterface Props {\n children?: ReactNode;\n width: number;\n height: number;\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n xTickInterval: number;\n yTickInterval: number;\n xTitle: string;\n yTitle: string;\n hideXTickLabels?: boolean; // optionally hide x tick labels (for multiple EONR histogram)\n}\n\nconst CommonPlotGrid = (props: Props): JSX.Element => {\n const {\n children,\n width: plotWidth,\n height: plotHeight,\n xMin,\n xMax,\n yMin,\n yMax,\n xTickInterval,\n yTickInterval,\n xTitle,\n yTitle,\n hideXTickLabels\n } = props;\n\n return (\n {\n const scale = scaleLinear().domain([xMin, xMax]).range([0, width]);\n const axis = axisBottom(scale);\n const tickValues = range(xMin, xMax, xTickInterval);\n if (tickValues[tickValues.length - 1] !== xMax) {\n tickValues.push(xMax);\n }\n axis.tickValues(tickValues).tickSize(-height);\n\n if (hideXTickLabels) {\n axis.tickFormat(() => ''); // Hide tick labels if needed\n }\n\n return [axis, scale];\n },\n title: xTitle,\n titlePadding: 35,\n textOpacity: 1\n }}\n yAxisProps={{\n axis: (width, height) => {\n const scale = scaleLinear().domain([yMin, yMax]).range([height, 0]);\n const axis = axisLeft(scale);\n const tickValues = range(yMin, yMax, yTickInterval);\n if (tickValues[tickValues.length - 1] !== yMax) {\n tickValues.push(yMax);\n }\n axis.tickValues(tickValues).tickSize(-width);\n return [axis, scale];\n },\n title: yTitle,\n titlePadding: 40,\n textOpacity: 1\n }}\n >\n {children}\n \n );\n};\n\nexport default CommonPlotGrid;\n","import React from 'react';\nimport { select } from 'd3-selection';\n\nimport { PlotContext } from './PlotGrid';\n\ninterface Props {\n data: Plot.Datum[];\n radius?: number;\n stroke?: string;\n strokeOpacity?: number;\n fill?: string;\n fillOpacity?: number;\n}\n\nconst PlotDots = (props: Props): JSX.Element => {\n const { data, radius = 10, stroke = '#204c70', strokeOpacity = 1, fill = '#4682b4', fillOpacity = 0.3 } = props;\n\n const { xScale, yScale } = React.useContext(PlotContext);\n\n const gRef = React.useRef(null);\n\n React.useEffect(() => {\n if (gRef.current) {\n const gEl = select(gRef.current);\n gEl.selectAll('*').remove();\n\n // Enter\n gEl.selectAll('.dot')\n .data(data)\n .enter()\n .append('circle')\n .attr('class', 'dot')\n .attr('cx', (d) => xScale(d.x))\n .attr('cy', (d) => yScale(d.y))\n .attr('r', radius)\n .attr('stroke', stroke)\n .attr('stroke-opacity', strokeOpacity)\n .attr('fill', fill)\n .attr('fill-opacity', fillOpacity);\n }\n });\n\n return ;\n};\n\nexport default PlotDots;\n","import React from 'react';\nimport { select } from 'd3-selection';\n\ninterface Props {\n data: Plot.LegendDatum[];\n width: number;\n itemHeight: number;\n itemGap?: number;\n x?: number;\n y?: number;\n marginTop?: number;\n marginBottom?: number;\n marginRight?: number;\n marginLeft?: number;\n}\n\nconst Legend = (props: Props): JSX.Element => {\n const {\n width,\n itemHeight,\n itemGap = 15,\n x = 0,\n y = 0,\n marginTop = 0,\n marginBottom = 0,\n marginRight = 0,\n marginLeft = 0,\n data\n } = props;\n\n const rowHeight = itemHeight + itemGap;\n const height = data.length * rowHeight;\n\n const innerWidth = width - marginLeft - marginRight;\n const innerHeight = height - itemGap - marginTop - marginBottom;\n\n const gRef = React.useRef(null);\n\n React.useEffect(() => {\n if (gRef.current) {\n const gEl = select(gRef.current);\n gEl.selectAll('*').remove();\n\n gEl.append('text')\n .attr('x', 0)\n .attr('y', 15)\n .attr('text-decoration', 'underline')\n .attr('font-size', 16)\n .text('Legend');\n\n data.forEach(\n ({ label, type, color, width: strokeWidth = 2, opacity = 1, size = 16, dashArray = 'none' }, idx) => {\n const baseY = itemGap + (idx + 1) * rowHeight;\n const symbolCenterY = baseY - itemHeight / 2;\n\n // Create a group for each legend item, support centering dynamic text size\n const itemGroup = gEl.append('g').attr('transform', `translate(0,${symbolCenterY})`);\n\n if (type === 'line') {\n itemGroup\n .append('line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', 20)\n .attr('y2', 0)\n .attr('stroke', color)\n .attr('stroke-width', strokeWidth)\n .attr('stroke-opacity', opacity)\n .attr('stroke-dasharray', dashArray);\n } else if (type === 'polygon') {\n itemGroup\n .append('rect')\n .attr('x', 0)\n .attr('y', -itemHeight / 2)\n .attr('width', 20)\n .attr('height', itemHeight)\n .attr('fill', color)\n .attr('fill-opacity', opacity);\n } else if (type === 'diamond') {\n const diamondSize = itemHeight / Math.sqrt(2);\n itemGroup\n .append('rect')\n .attr('x', 10 - diamondSize / 2)\n .attr('y', -diamondSize / 2)\n .attr('width', diamondSize)\n .attr('height', diamondSize)\n .attr('transform', 'rotate(45, 10, 0)')\n .attr('fill', color)\n .attr('fill-opacity', opacity);\n } else if (type === 'dot') {\n itemGroup\n .append('circle')\n .attr('cx', 10)\n .attr('cy', 0)\n .attr('r', itemHeight / 2)\n .attr('fill', color)\n .attr('fill-opacity', opacity);\n } else if (type === 'vertical-line') {\n itemGroup\n .append('line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', 20)\n .attr('y2', 0)\n .attr('stroke', color)\n .attr('stroke-width', strokeWidth)\n .attr('stroke-opacity', opacity)\n .attr('stroke-dasharray', dashArray)\n .attr('transform', 'rotate(90, 10, 0)');\n }\n\n // Add text with dynamic vertical alignment\n itemGroup\n .append('text')\n .text(label)\n .attr('x', 25)\n .attr('y', 0)\n .attr('font-size', size)\n .attr('dominant-baseline', 'middle') // This centers text vertically\n .attr('alignment-baseline', 'middle'); // For broader browser support\n }\n );\n }\n });\n\n return (\n \n );\n};\n\nexport default Legend;\n","import React from 'react';\nimport CommonPlotGrid from './CommonPlotGrid';\nimport PlotDots from '../../../Plots/PlotDots';\nimport Legend from '../../../Plots/Legend';\nimport { multipleResultColors } from '../../config';\n\ninterface Props {\n results?: NAdvisor.ResultsType;\n multipleResults?: NAdvisor.ResultsType[];\n width: number;\n height: number;\n}\n\nconst EONRvsYield = (props: Props): JSX.Element => {\n // if we have a single result, plot it\n if (props.results) {\n const { results, width, height } = props;\n const xMin = results.xn[0];\n const xMax = 275;\n\n const xTickInterval = 50;\n const yTickInterval = 50;\n\n const yMin = 0;\n let yMax = 0;\n\n const data = results.En.map((en, idx) => {\n const y = results.Opy[idx];\n if (y > yMax) {\n yMax = y;\n }\n return { x: en, y };\n });\n yMax = Math.ceil(yMax * 0.022) * 50;\n\n return (\n \n );\n }\n // Multiple Results EONR vs Yield plot here (iterate through each result)\n const multipleResults = props.multipleResults ?? [];\n const { width, height } = props;\n const xMin = multipleResults.length > 0 ? multipleResults[0].xn[0] : 0;\n const xMax = 275;\n\n const xTickInterval = 50;\n const yTickInterval = 50;\n\n const yMin = 0;\n let yMax = 0;\n\n // Determine yMax across all results\n multipleResults.forEach((result) => {\n result.Opy.forEach((y) => {\n if (y > yMax) {\n yMax = y;\n }\n });\n });\n yMax = Math.ceil(yMax * 0.022) * 50;\n\n const multipleResultsLegend: Plot.LegendDatum[] = [\n { label: 'Price 1 Sites', color: multipleResultColors[0], type: 'dot' },\n { label: 'Price 2 Sites', color: multipleResultColors[1], type: 'dot' },\n { label: 'Price 3 Sites', color: multipleResultColors[2], type: 'dot' },\n { label: 'Price 4 Sites', color: multipleResultColors[3], type: 'dot' }\n ];\n\n return (\n \n );\n};\n\nexport default EONRvsYield;\n","import React from 'react';\nimport { select } from 'd3-selection';\n\nimport { PlotContext } from './PlotGrid';\n\ninterface Props {\n data: Plot.Datum[];\n width?: number;\n padding?: number;\n stroke?: string;\n strokeWidth?: number;\n strokeOpacity?: number;\n fill?: string;\n fillOpacity?: number;\n}\n\nconst PlotBarChart = (props: Props): JSX.Element => {\n const {\n data,\n width = 20,\n padding = 0,\n stroke = '#204c70',\n strokeWidth = 1,\n strokeOpacity = 1,\n fill = '#4682b4',\n fillOpacity = 0.3\n } = props;\n\n const { xScale, yScale, height } = React.useContext(PlotContext);\n\n const gRef = React.useRef(null);\n\n React.useEffect(() => {\n if (gRef.current) {\n const gEl = select(gRef.current);\n gEl.selectAll('*').remove();\n\n // Enter\n gEl.selectAll('.bar')\n .data(data)\n .enter()\n .append('rect')\n .attr('class', 'bar')\n .attr('y', (d) => yScale(d.y))\n .attr('x', (d) => xScale(d.x) + 0.5 * padding * xScale(width))\n .attr('width', xScale(width) * (1 - padding))\n .attr('height', (d) => height - yScale(d.y))\n .attr('stroke', stroke)\n .attr('stroke-width', strokeWidth)\n .attr('stroke-opacity', strokeOpacity)\n .attr('fill', (d) => d.color || fill) // use fill color property if available\n .attr('fill-opacity', fillOpacity);\n }\n });\n\n return ;\n};\n\nexport default PlotBarChart;\n","import React from 'react';\nimport { select } from 'd3-selection';\nimport { line } from 'd3-shape';\n\nimport { PlotContext } from './PlotGrid';\n\ninterface Props {\n data: Plot.Datum[];\n stroke?: string;\n strokeWidth?: number;\n strokeOpacity?: number;\n fill?: string;\n fillOpacity?: number;\n strokeDasharray?: string; // support dashed lines (needed for PK tool) e.g., '2, 2' is 2px dash, 2px gap\n}\n\nconst PlotLine = ({\n data,\n stroke = '#000',\n strokeWidth = 1,\n strokeOpacity = 1,\n fill = '#000',\n fillOpacity = 0.3,\n strokeDasharray = 'none'\n}: Props): JSX.Element => {\n const { xScale, yScale } = React.useContext(PlotContext);\n const gRef = React.useRef(null);\n\n const l = line<{ x: number | string; y: number }>();\n\n React.useEffect(() => {\n if (gRef.current) {\n const gEl = select(gRef.current);\n gEl.selectAll('*').remove();\n gEl.append('path')\n .datum(data)\n .attr('fill', fill)\n .attr('fill-opacity', fillOpacity)\n .attr('stroke', stroke)\n .attr('stroke-width', strokeWidth)\n .attr('stroke-opacity', strokeOpacity)\n .attr('stroke-dasharray', strokeDasharray)\n .attr(\n 'd',\n l.x((d) => xScale(d.x)).y((d) => yScale(d.y))\n );\n }\n });\n return ;\n};\n\nexport default PlotLine;\n","// Support plotting diamonds for the multipleResults plots.\nimport React from 'react';\nimport { select } from 'd3-selection';\n\nimport { PlotContext } from './PlotGrid';\n\ninterface Props {\n data: Plot.Datum[];\n size?: number;\n stroke?: string;\n strokeOpacity?: number;\n fill?: string;\n fillOpacity?: number;\n}\n\nconst PlotDiamonds = (props: Props): JSX.Element => {\n const { data, size = 10, stroke = '#204c70', strokeOpacity = 1, fill = '#4682b4', fillOpacity = 0.3 } = props;\n\n const { xScale, yScale } = React.useContext(PlotContext);\n\n const gRef = React.useRef(null);\n\n React.useEffect(() => {\n if (gRef.current) {\n const gEl = select(gRef.current);\n gEl.selectAll('*').remove();\n\n // Enter\n gEl.selectAll('.diamond')\n .data(data)\n .enter()\n .append('polygon')\n .attr('class', 'diamond')\n .attr('points', (d) => {\n const x = xScale(d.x);\n const y = yScale(d.y);\n const halfSize = size / 2;\n return `${x},${y - halfSize} ${x + halfSize},${y} ${x},${y + halfSize} ${x - halfSize},${y}`;\n })\n .attr('stroke', stroke)\n .attr('stroke-opacity', strokeOpacity)\n .attr('fill', fill)\n .attr('fill-opacity', fillOpacity);\n }\n });\n\n return ;\n};\n\nexport default PlotDiamonds;\n","import React from 'react';\nimport PlotBarChart from '../../../Plots/PlotBarChart';\nimport PlotLine from '../../../Plots/PlotLine';\nimport PlotDots from '../../../Plots/PlotDots';\nimport PlotDiamonds from '../../../Plots/PlotDiamonds';\nimport Legend from '../../../Plots/Legend';\nimport CommonPlotGrid from './CommonPlotGrid';\nimport { multipleResultColors } from '../../config';\nimport { InputsContext } from '../../index';\n\ninterface Props {\n results?: NAdvisor.ResultsType;\n multipleResults?: NAdvisor.ResultsType[];\n width: number;\n height: number;\n}\n\nconst ReturnToN = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n // if we have a single result, plot it\n if (props.results) {\n const { results, width, height } = props;\n const xMin = results.xn[0];\n const xMax = results.xn[results.xn.length - 1];\n\n const xTickInterval = 50;\n const yTickInterval = 50;\n\n const yMin = 0;\n let yMax = 0;\n\n const dataYc = results.Yc.map((y, i) => {\n if (y > yMax) {\n yMax = y;\n }\n return { x: results.xn[i], y };\n });\n const dataYf = results.Yf.map((y, i) => {\n if (y > yMax) {\n yMax = y;\n }\n return { x: results.xn[i], y };\n });\n let xMaxYrtn = 0;\n let yMaxYrtn = 0;\n const dataYrtn = results.Yrtn.map((y, i) => {\n const x = results.xn[i];\n if (y > yMax) {\n yMax = y;\n }\n if (y > yMaxYrtn) {\n yMaxYrtn = y;\n xMaxYrtn = x;\n }\n // Unsure if this is a bug or not, but some sustainability metrics may cause y < 0 which looks bad on the plot\n if (y < 0) {\n return { x, y: 0 };\n }\n return { x, y };\n });\n yMax = Math.ceil(yMax * 0.022) * 50;\n\n const legends: Plot.LegendDatum[] = [\n { label: 'Gross Return to N', color: '#1AB146', type: 'line', width: 4 },\n { label: 'Net Return to N', color: '#0C64AB', type: 'line', width: 4 },\n { label: 'Fertilizer N Cost', color: '#EC7E41', type: 'line', width: 4 },\n {\n label: inputs.considerNLoss ? 'N Rate Range (Sust.)' : 'Profitable N Rate Range',\n color: '#F9E776',\n type: 'polygon',\n opacity: 0.8\n },\n {\n label: inputs.considerNLoss ? 'Max Return to N (Sust.)' : 'Max Return to N',\n color: '#0C64AB',\n type: 'dot'\n }\n ];\n\n // Conditionally render additional sustainability elements if supported by inputs/results\n const sustainabilityElements = [];\n if (\n inputs.considerNLoss &&\n results.N2O_cost &&\n results.N_leaching_cost &&\n results.Xmin_default &&\n results.Xmax_default\n ) {\n const dataN2OCost = results.N2O_cost.map((y, i) => ({ x: results.xn[i], y }));\n const dataNLeachingCost = results.N_leaching_cost.map((y, i) => ({ x: results.xn[i], y }));\n\n sustainabilityElements.push(\n ,\n ,\n \n );\n\n legends.push(\n { label: 'Default N Rate Range', color: '#A3E4D7', type: 'polygon', opacity: 0.8 },\n { label: 'N2O Cost', color: '#FF5733', type: 'line', width: 2, dashArray: '5,5' },\n { label: 'N Leaching Cost', color: '#C70039', type: 'line', width: 2, dashArray: '5,5' }\n );\n }\n\n return (\n \n );\n }\n\n // Otherwise, assumes we have multipleResults\n const multipleResults = props.multipleResults ?? [];\n const { width, height } = props;\n\n let xMin = Infinity;\n let xMax = -Infinity;\n const yMin = 0;\n let yMax = 0;\n\n // Collect the data to power net return to N lines\n const multipleYrtnData = multipleResults.map((result, index) => {\n const dataYrtn = result.Yrtn.map((y, i) => {\n const x = result.xn[i];\n if (x < xMin) xMin = x;\n if (x > xMax) xMax = x;\n if (y > yMax) yMax = y;\n return { x, y };\n });\n return { dataYrtn, color: multipleResultColors[index] };\n });\n\n // Collect the data to power the max return to N points\n const multipleMaxYrtn = multipleResults.map((result, index) => {\n let xMaxYrtn = 0;\n let yMaxYrtn = 0;\n result.Yrtn.forEach((y, i) => {\n const x = result.xn[i];\n if (y > yMaxYrtn) {\n yMaxYrtn = y;\n xMaxYrtn = x;\n }\n });\n return { x: xMaxYrtn, y: yMaxYrtn, color: multipleResultColors[index] };\n });\n\n // Collect the data to power the min and max N rate range points (within $1 of MRTN)\n const multipleMinMaxNRate = multipleResults\n .map((result) => {\n const xMinNRate = result.xn[result.Xmin];\n const xMaxNRate = result.xn[result.Xmax];\n return [\n { x: xMinNRate, y: result.Yrtn[result.Xmin] },\n { x: xMaxNRate, y: result.Yrtn[result.Xmax] }\n ];\n })\n .flat();\n\n yMax = Math.ceil(yMax * 0.022) * 50;\n\n // Multiple price legends\n const multiplePriceLegend: Plot.LegendDatum[] = [];\n\n // Add the return to N lines\n multipleResults.forEach((_, index) => {\n multiplePriceLegend.push({\n label: `Price ${index + 1} Return to N`,\n color: multipleResultColors[index],\n type: 'line',\n width: 4\n });\n });\n\n // Add the max return to N dots\n multipleResults.forEach((_, index) => {\n multiplePriceLegend.push({\n label: `Price ${index + 1} Max Return to N`,\n color: multipleResultColors[index],\n type: 'dot'\n });\n });\n\n // Add the profitable N rate range diamond entry to legends\n multiplePriceLegend.push({\n label: 'Profitable N Rate Range',\n color: 'gray',\n type: 'diamond'\n });\n\n return (\n \n );\n};\n\nexport default ReturnToN;\n","import React from 'react';\nimport PlotBarChart from '../../../Plots/PlotBarChart';\nimport PlotLine from '../../../Plots/PlotLine';\nimport PlotDiamonds from '../../../Plots/PlotDiamonds';\nimport Legend from '../../../Plots/Legend';\nimport CommonPlotGrid from './CommonPlotGrid';\nimport { multipleResultColors } from '../../config';\n\ninterface Props {\n results?: NAdvisor.ResultsType;\n multipleResults?: NAdvisor.ResultsType[];\n width: number;\n height: number;\n}\n\nconst PercentOfMaxYield = (props: Props): JSX.Element => {\n // if we have a single result, plot it\n if (props.results) {\n const { results, width, height } = props;\n const xMin = results.xn[0];\n const xMax = results.xn[results.xn.length - 1];\n\n const xTickInterval = 50;\n const yTickInterval = 50;\n\n const yMin = 0;\n let yMax = 0;\n\n const dataYpmy = results.Ypmy.map((y, i) => {\n if (y > yMax) {\n yMax = y;\n }\n return { x: results.xn[i], y };\n });\n yMax = Math.min(Math.ceil(yMax * 0.022) * 50, 110); // maximum y-value will be 110%\n\n const legends: Plot.LegendDatum[] = [{ label: 'Return to N', color: '#0C64AB', type: 'line', width: 4 }];\n\n return (\n \n );\n }\n // multiple results % max yield plot with diamond representing % max yield at each price point\n const multipleResults = props.multipleResults ?? [];\n const { width, height } = props;\n\n // Collect all max MRTN points from multipleResults\n const multiplePercentMax = multipleResults.map((result, index) => {\n let xMaxYrtn = 0;\n let yMaxYrtn = 0;\n let yieldValueAtMRTN = 0;\n const maxYield = Math.max(...result.Ypmy); // Find the maximum yield\n\n // find max yield point (x, y) and it's yield value at MRTN\n result.Yrtn.forEach((y, i) => {\n const x = result.xn[i];\n if (y > yMaxYrtn) {\n yMaxYrtn = y;\n xMaxYrtn = x;\n yieldValueAtMRTN = result.Ypmy[i];\n }\n });\n const percentOfMaxYield = (yieldValueAtMRTN / maxYield) * 100;\n return { x: xMaxYrtn, y: percentOfMaxYield, color: multipleResultColors[index] };\n });\n\n // constants for % max yield line, copied from single result plot and use idx-0 for now\n const xMin = multipleResults[0].xn[0];\n const xMax = multipleResults[0].xn[multipleResults[0].xn.length - 1];\n\n const xTickInterval = 50;\n const yTickInterval = 50;\n\n const yMin = 0;\n let yMax = 0;\n\n const dataYpmy = multipleResults[0].Ypmy.map((y, i) => {\n if (y > yMax) {\n yMax = y;\n }\n return { x: multipleResults[0].xn[i], y };\n });\n yMax = Math.min(Math.ceil(yMax * 0.022) * 50, 110); // maximum y-value will be 110%\n\n const multipleResultsLegend: Plot.LegendDatum[] = [\n { label: 'Return to N', color: '#0C64AB', type: 'line', width: 4 }\n ];\n\n multipleResults.forEach((_, index) => {\n multipleResultsLegend.push({\n label: `Price ${index + 1} Max Return to N`,\n color: multipleResultColors[index],\n type: 'diamond'\n });\n });\n\n return (\n \n );\n};\n\nexport default PercentOfMaxYield;\n","// New multi-histogram EONR plot (four bars in each bin, colored by price)\nimport React from 'react';\nimport { scaleBand } from 'd3-scale';\nimport { PlotContext } from './PlotGrid';\n\ninterface Props {\n data: Plot.Datum[][]; // each inner array is the binned data for a single result\n padding?: number;\n stroke?: string;\n strokeWidth?: number;\n strokeOpacity?: number;\n fillOpacity?: number;\n xTickValues?: number[];\n xTickFormat?: (value: number) => string;\n}\n\nconst PlotMultipleBarChart: React.FC = ({\n data,\n padding = 0.05,\n stroke = 'none',\n strokeWidth = 0,\n strokeOpacity = 1,\n fillOpacity = 1,\n xTickValues,\n xTickFormat\n}) => {\n const { xScale, yScale } = React.useContext(PlotContext);\n const xScaleRange = xScale.range();\n\n // extract all unique bins and sort them\n const bins = Array.from(new Set(data.flatMap((dataset) => dataset.map((d) => Number(d.x))))).sort((a, b) => a - b);\n\n const tickValues = xTickValues || bins;\n const datasetIndices = data.map((_, index) => index.toString());\n const x0Scale = scaleBand().domain(bins.map(String)).range(xScaleRange).paddingInner(padding);\n const x1Scale = scaleBand().domain(datasetIndices).range([0, x0Scale.bandwidth()]).padding(padding);\n\n // create bars for each result\n const bars = data.flatMap(\n (dataset, datasetIndex) =>\n dataset.map((datum) => {\n const bin = String(datum.x);\n const x0 = x0Scale(bin);\n const x1 = x1Scale(datasetIndex.toString());\n\n if (x0 === undefined || x1 === undefined) {\n return null;\n }\n\n const x = x0 + x1;\n const y = yScale(datum.y);\n const height = yScale(0) - y;\n const barWidth = x1Scale.bandwidth();\n\n return (\n \n );\n })\n // eslint-disable-next-line function-paren-newline\n );\n\n // place x-axis labels beneath each group of bars (ranges e.g., 0-25, 25-50, etc.)\n const xAxisLabels = tickValues.map((bin) => {\n const binStr = String(bin);\n const x0Value = x0Scale(binStr);\n const xPosition = x0Value !== undefined ? x0Value + x0Scale.bandwidth() / 2 : 0;\n const yPosition = yScale(0) + 5;\n\n const label = xTickFormat ? xTickFormat(bin) : binStr;\n\n return (\n \n {label}\n \n );\n });\n\n return (\n \n {bars}\n {xAxisLabels}\n \n );\n};\n\nexport default PlotMultipleBarChart;\n","import React from 'react';\nimport PlotBarChart from '../../../Plots/PlotBarChart';\nimport PlotMultipleBarChart from '../../../Plots/PlotMultipleBarChart';\nimport CommonPlotGrid from './CommonPlotGrid';\nimport Legend from '../../../Plots/Legend';\nimport { multipleResultColors } from '../../config';\n\ninterface Props {\n results?: NAdvisor.ResultsType;\n multipleResults?: NAdvisor.ResultsType[];\n width: number;\n height: number;\n}\n\n// Refactor binning into a reusable function\nconst binData = (data: number[]): { [k: number]: number } => {\n return data.reduce((bins: { [k: number]: number }, value) => {\n const bin = Math.floor(value * 0.04) * 25; // 0.04 is 0.999 * 25, which makes sure the upper range is inclusive and lower range is exclusive\n bins[bin] = (bins[bin] || 0) + 1;\n return bins;\n }, {});\n};\n\nconst EONR = (props: Props): JSX.Element => {\n if (props.results) {\n const { results, width, height } = props;\n const xMin = results.xn[0];\n\n const xTickInterval = 50;\n const yTickInterval = 5;\n\n const yMin = 0;\n let yMax = 0;\n\n const data = Object.entries(binData(results.En))\n .sort((d1, d2) => Number(d1[0]) - Number(d2[0]))\n .map(([bin, count]) => {\n const y = (100 * count) / results.En.length;\n if (y > yMax) {\n yMax = y;\n }\n return { x: bin, y };\n });\n const maxBin = Number(data[data.length - 1].x) + 25;\n const xMax = maxBin;\n yMax = Math.ceil(yMax * 0.022) * 50;\n\n return (\n \n );\n }\n\n const multipleResults = props.multipleResults ?? [];\n const { width, height } = props;\n\n // Collect the data for each result\n const allData = multipleResults.map((result, index) => {\n const binnedData = binData(result.En);\n return Object.entries(binnedData)\n .sort((d1, d2) => Number(d1[0]) - Number(d2[0]))\n .map(([bin, count]) => {\n const y = (100 * count) / result.En.length;\n return { x: bin, y, color: multipleResultColors[index] };\n });\n });\n\n // Combine all data into a single dataset\n const combinedData: Plot.Datum[][] = allData;\n\n // Extract bins for x-axis labels\n const bins = Array.from(new Set(combinedData.flatMap((dataset) => dataset.map((d) => Number(d.x))))).sort(\n (a, b) => a - b\n );\n\n const xMin = 0;\n const xMax = Math.max(...bins) + 25;\n const yMax = Math.ceil(Math.max(...combinedData.flat().map((d) => d.y)) * 0.022) * 50;\n\n // Define a legend for each price point (color)\n const multipleResultsLegend: Plot.LegendDatum[] = [\n { label: 'Price 1 Sites', color: multipleResultColors[0], type: 'polygon' },\n { label: 'Price 2 Sites', color: multipleResultColors[1], type: 'polygon' },\n { label: 'Price 3 Sites', color: multipleResultColors[2], type: 'polygon' },\n { label: 'Price 4 Sites', color: multipleResultColors[3], type: 'polygon' }\n ];\n\n return (\n \n );\n};\n\nexport default EONR;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nimport Map from '../../Map';\nimport {\n MAP_CENTER,\n N_FERTILIZER,\n N_DATA_SOURCES,\n ROTATIONS,\n getBasemap,\n resultsDistrictsLayer,\n districtMapping\n} from '../config';\nimport { InputsContext } from '../index';\n\nconst basemapLayer = getBasemap();\n\nconst columnKeyStyle = {\n color: 'secondary.main'\n};\n\nconst columnValueStyle = {\n fontWeight: 500\n};\n\ninterface Props {\n handleBack?: () => void;\n mapThumbnail?: string;\n trials: number;\n}\n\nconst InputSummary = (props: Props): JSX.Element => {\n const { handleBack, mapThumbnail, trials } = props;\n const { inputs } = React.useContext(InputsContext);\n\n return (\n \n {handleBack && (\n } onClick={handleBack}>\n Return to input\n \n )}\n *': {\n paddingRight: 0\n }\n }}\n display=\"flex\"\n >\n {mapThumbnail ? (\n
\n ) : (\n \n )}\n \n ANALYSIS INPUTS\n \n \n \n District\n \n \n {districtMapping[Number(inputs.district)]}\n \n \n \n \n Number of Trials\n \n \n {trials}\n \n \n \n \n Rotation\n \n \n {`Corn ${ROTATIONS[inputs.rotation]}`}\n \n \n \n \n N Fertilizer\n \n \n {N_FERTILIZER[inputs.nFertilizer].label}\n \n \n \n \n N Price\n \n \n {inputs.nPrice} $/lb N ({inputs.nPriceTon} $/Ton)\n \n \n \n \n Corn Price\n \n \n {inputs.cornPrice} $/BU\n \n \n {inputs.considerNLoss ? (\n <>\n \n \n N2O Price\n \n \n {inputs.n2oPrice.toFixed(2)} $/lb N\n \n \n \n \n N Leaching Price\n \n \n {inputs.nLeachingPrice.toFixed(2)} $/lb N\n \n \n \n \n N2O Data\n \n \n {N_DATA_SOURCES[inputs.n2oDataSource]}\n \n \n \n \n N Leaching Data\n \n \n {N_DATA_SOURCES[inputs.nLeachingDataSource]}\n \n \n >\n ) : (\n \n \n Price Ratio\n \n \n {(inputs.nPrice / inputs.cornPrice).toFixed(2)}\n \n \n )}\n \n \n \n \n );\n};\n\nexport default InputSummary;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableRow from '@mui/material/TableRow';\nimport Divider from '@mui/material/Divider';\n\nimport Map from '../../Map';\nimport {\n MAP_CENTER,\n N_FERTILIZER,\n ROTATIONS,\n getBasemap,\n resultsDistrictsLayer,\n districtMapping,\n multipleResultColors\n} from '../config';\nimport { MultipleInputsContext } from '../index';\n\nconst basemapLayer = getBasemap();\n\nconst columnKeyStyle = {\n color: 'secondary.main',\n fontSize: '12px',\n fontWeight: 500\n};\n\nconst columnValueStyle = {\n fontWeight: 500,\n fontSize: '12px'\n};\n\nconst tableValueStyle = {\n fontWeight: 600,\n fontSize: '12px'\n};\n\nconst unitStyle = {\n fontSize: '10px',\n color: 'text.secondary',\n fontWeight: 500\n};\n\ninterface Props {\n handleBack?: () => void;\n mapThumbnail?: string;\n trials: number;\n}\n\nconst MultipleInputsSummary = (props: Props): JSX.Element => {\n const { handleBack, mapThumbnail, trials } = props;\n const { multipleInputs } = React.useContext(MultipleInputsContext);\n\n return (\n \n {handleBack && (\n \n \n } onClick={handleBack}>\n Return to input\n \n \n \n ANALYSIS INPUTS\n \n \n )}\n *': {\n paddingRight: 0\n }\n }}\n display=\"flex\"\n >\n {mapThumbnail ? (\n
\n ) : (\n \n )}\n \n \n \n \n \n District\n \n \n {districtMapping[Number(multipleInputs[0].district)]}\n \n \n \n \n Number of Trials\n \n \n {trials}\n \n \n \n \n Rotation\n \n \n {ROTATIONS[multipleInputs[0].rotation]}\n \n \n \n \n N Fertilizer\n \n \n {N_FERTILIZER[multipleInputs[0].nFertilizer].label}\n \n \n \n \n \n \n \n \n \n \n \n N Price (lb)\n \n {Object.keys(multipleInputs).map((key) => (\n \n \n {multipleInputs[Number(key)].nPrice}\n \n \n $/lb N\n \n \n ))}\n \n \n \n Corn Price\n \n {Object.keys(multipleInputs).map((key) => (\n \n \n {multipleInputs[Number(key)].cornPrice}\n \n \n $/BU\n \n \n ))}\n \n \n \n Price Ratio\n \n {Object.keys(multipleInputs).map((key) => (\n \n \n {(\n multipleInputs[Number(key)].nPrice /\n multipleInputs[Number(key)].cornPrice\n ).toFixed(2)}\n \n \n ))}\n \n \n
\n \n \n \n \n \n \n \n );\n};\n\nexport default MultipleInputsSummary;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nimport { precision, precisionStr } from '../../../utils/format';\nimport { N_FERTILIZER } from '../config';\nimport { InputsContext } from '../index';\n\nconst columnKeyStyle = {\n color: 'secondary.main'\n};\n\nconst columnValueStyle = {\n fontWeight: 500\n};\n\ninterface Props {\n results: NAdvisor.ResultsType;\n}\n\nconst ResultSummary = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n const { results } = props;\n\n // Conditionally render parts of results summary depending on whether we consider sustianability metrics\n return (\n <>\n {inputs.considerNLoss && results.Xmin_default !== undefined && results.Xmax_default !== undefined ? (\n \n PROFITABLE N RATE RANGES\n \n \n \n MRTN Sustainability:{' '}\n \n {precisionStr(results.xn[results.Xmin], 2)}-\n {precisionStr(results.xn[results.Xmax], 2)}\n \n \n (lb N/acre)\n \n \n \n MRTN:{' '}\n \n {precisionStr(results.xn[results.Xmin_default], 2)}-\n {precisionStr(results.xn[results.Xmax_default], 2)}\n \n \n (lb N/acre)\n \n \n \n ) : (\n \n PROFITABLE N RATE RANGE\n \n \n {precisionStr(results.xn[results.Xmin], 2)}-{precisionStr(results.xn[results.Xmax], 2)}\n \n (lb N/acre)\n \n \n )}\n\n \n \n OTHER RESULTS\n \n \n \n \n MRTN Rate\n \n {inputs.considerNLoss && results.MRTN_rate_default !== undefined ? (\n \n {precisionStr(results.MRTN_rate_default, 2)} lb N/acre\n \n ) : (\n \n {precisionStr(results.MRTN_rate, 2)} lb N/acre\n \n )}\n \n \n \n Net Return to N at MRTN Rate\n \n {inputs.considerNLoss && results.Yrtn_default !== undefined ? (\n \n {precisionStr(Math.max(...results.Yrtn_default, 2))} $ N/acre\n \n ) : (\n \n {precisionStr(Math.max(...results.Yrtn), 2)} $ N/acre\n \n )}\n \n \n \n % of Maximum Yield at MRTN Rate\n \n \n {precision(results.PMY)}%\n \n \n \n \n {N_FERTILIZER[inputs.nFertilizer].label} at MRTN Rate\n \n \n {precision(results.FM, 2)} lb product/acre\n \n \n \n \n {N_FERTILIZER[inputs.nFertilizer].label} Cost at MRTN Rate\n \n \n {precision(results.FC, 2)} $/acre\n \n \n {inputs.considerNLoss && (\n <>\n \n \n MRTN Sustainability Rate\n \n \n {precisionStr(results.MRTN_rate, 2)} lb N/acre\n \n \n \n \n Net Return to N at MRTN Sustainability Rate\n \n \n {precisionStr(Math.max(...results.Yrtn), 2)} $ N/acre\n \n \n >\n )}\n \n \n >\n );\n};\n\nexport default ResultSummary;\n","import React from 'react';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableRow from '@mui/material/TableRow';\n\nimport { precision, precisionStr } from '../../../utils/format';\nimport { N_FERTILIZER, multipleResultColors } from '../config';\nimport { MultipleInputsContext } from '../index';\n\ninterface Props {\n multipleResults: NAdvisor.ResultsType[];\n}\n\nconst columnKeyStyle = {\n color: 'secondary.main',\n fontSize: '0.8rem'\n};\n\nconst valueStyle = {\n fontWeight: 600,\n fontSize: '14px'\n};\n\nconst unitStyle = {\n fontSize: '0.6rem',\n color: 'text.secondary',\n fontWeight: 500\n};\n\nconst MultipleResultSummary = (props: Props): JSX.Element => {\n const { multipleInputs } = React.useContext(MultipleInputsContext);\n const { multipleResults } = props;\n\n return (\n <>\n \n \n PROFITABLE N RATE RANGES\n \n \n \n \n \n {multipleResults.map((result, index) => {\n const key = `range-${index}`;\n return (\n \n \n {precisionStr(result.xn[result.Xmin], 0)} -{' '}\n {precisionStr(result.xn[result.Xmax], 0)}\n \n \n lb N/acre\n \n \n );\n })}\n \n \n
\n \n \n \n \n OTHER RESULTS\n \n \n \n \n \n \n MRTN Rate\n {multipleResults.map((result, index) => {\n const key = `mrtn-${index}`;\n return (\n \n \n {precisionStr(result.MRTN_rate, 2)}\n \n \n lb N/acre\n \n \n );\n })}\n \n \n Net Return to N*\n {multipleResults.map((result, index) => {\n const key = `net-return-${index}`;\n return (\n \n \n {precisionStr(Math.max(...result.Yrtn), 2)}\n \n \n $/acre\n \n \n );\n })}\n \n \n % of Max. Yield*\n {multipleResults.map((result, index) => {\n const key = `yield-${index}`;\n return (\n \n \n {precision(result.PMY)}%\n \n \n );\n })}\n \n \n \n {N_FERTILIZER[multipleInputs[0].nFertilizer].label}*\n \n {multipleResults.map((result, index) => {\n const key = `fertilizer-${index}`;\n return (\n \n \n {precision(result.FM, 2)}\n \n \n lb/acre\n \n \n );\n })}\n \n \n \n {N_FERTILIZER[multipleInputs[0].nFertilizer].label} Cost*\n \n {multipleResults.map((result, index) => {\n const key = `cost-${index}`;\n return (\n \n \n {precision(result.FC, 2)}\n \n \n $/acre\n \n \n );\n })}\n \n \n
\n \n \n \n *at MRTN rate\n \n \n >\n );\n};\n\nexport default MultipleResultSummary;\n","export default __webpack_public_path__ + \"files/logo_n_advisor-ec8b40884b482f8efaf41b651a61579c.png\";","export default __webpack_public_path__ + \"files/thumbnail-district-1-2d39a5d9a1a98873a644a25ee761de17.png\";","export default __webpack_public_path__ + \"files/thumbnail-district-2-81a32e34e472cb2391374bf4021890f4.png\";","export default __webpack_public_path__ + \"files/thumbnail-district-3-651c95679e309dd8946fdda80afea6cf.png\";","import React from 'react';\nimport Container from '@mui/material/Container';\nimport Typography from '@mui/material/Typography';\nimport { Avatar, Box, Stack } from '@mui/material';\n\nimport { RESULTS_TEXTS, STYLES, resultsDistrictsLayer } from '../config';\nimport { InputsContext } from '../index';\nimport EONRvsYield from './Charts/EONRvsYield';\nimport ReturnToN from './Charts/ReturnToN';\nimport PercentOfMaxYield from './Charts/PercentOfMaxYield';\nimport EONR from './Charts/EONR';\nimport InputSummary from './InputSummary';\nimport MultipleInputsSummary from './MultipleInputsSummary';\nimport ResultSummary from './ResultSummary';\nimport MultipleResultsSummary from './MultipleResultsSummary';\nimport Logos from '../../Logos';\nimport logoNAdvisor from '../../../images/logo_n_advisor.png';\nimport thumbnailDistrict1 from '../../../images/thumbnail-district-1.png';\nimport thumbnailDistrict2 from '../../../images/thumbnail-district-2.png';\nimport thumbnailDistrict3 from '../../../images/thumbnail-district-3.png';\n\nconst PAGE_WIDTH = 1020;\nconst PAGE_HEIGHT = 1320;\nconst CHART_WIDTH = 960;\nconst CHART_HEIGHT = 400;\n\nconst MAP_THUMBNAIL_MAPPING: Record = {\n 1: thumbnailDistrict1,\n 2: thumbnailDistrict2,\n 3: thumbnailDistrict3\n};\n\ninterface Props {\n results?: NAdvisor.ResultsType;\n multipleResults?: NAdvisor.ResultsType[];\n}\n\nconst PrintedResults = React.forwardRef(function PrintedResults(props, ref) {\n const { inputs } = React.useContext(InputsContext);\n\n resultsDistrictsLayer.setStyle(STYLES.districts(inputs.district));\n\n const { results, multipleResults } = props;\n\n // Conditionally return the results based on the type of results (single or multiple)\n return (\n <>\n {results && (\n \n *': { padding: 2 } }} className=\"fullwidth\" padding={6} boxSizing=\"border-box\">\n \n \n \n Nitrogen Rate Calculator\n \n \n \n About the MRTN Tool\n \n This report contains the calculation results, based on the inputs listed below, from the\n Maximum Return To Nitrogen rate (MRTN) tool for Illinois corn growers. The MRTN tool is to\n provide Maximum Return To N (largest net benefits) and Most Profitable N Rate, based on\n recent N rate research data funded previously by Illinois Nutrient Research & Education\n Council. Generally, MRTN gets the Most Profitable N Rate by finding the N rate leading to\n the largest net benefits, which are calculated by considering both the yield benefits and\n fertilizer cost. The yield benefits are estimated based on the nitrogen-yield response curve\n and the corn price. The MRTN approach is widely used in many Midwest states as the corn N\n rate guidelines.\n \n Inputs\n \n Results\n \n \n \n \n \n \n Return To Nitrogen\n \n \n \n \n \n {RESULTS_TEXTS.return_to_n}\n \n \n \n \n % of Max Yield\n \n \n \n \n \n {RESULTS_TEXTS.percent_of_max_yield}\n \n \n \n \n \n \n \n \n ENOR Frequency\n \n \n \n \n \n {RESULTS_TEXTS.eonr}\n \n \n \n \n ENOR vs. Yield\n \n \n \n \n \n {RESULTS_TEXTS.eonr_vs_yield}\n \n \n \n \n \n )}\n {multipleResults && (\n \n *': { padding: 2 } }} className=\"fullwidth\" padding={6} boxSizing=\"border-box\">\n \n \n \n Nitrogen Rate Calculator\n \n \n \n About the MRTN Tool\n \n This report contains the calculation results, based on the inputs listed below, from the\n Maximum Return To Nitrogen rate (MRTN) tool for Illinois corn growers. The MRTN tool is to\n provide Maximum Return To N (largest net benefits) and Most Profitable N Rate, based on\n recent N rate research data funded previously by Illinois Nutrient Research & Education\n Council. Generally, MRTN gets the Most Profitable N Rate by finding the N rate leading to\n the largest net benefits, which are calculated by considering both the yield benefits and\n fertilizer cost. The yield benefits are estimated based on the nitrogen-yield response curve\n and the corn price. The MRTN approach is widely used in many Midwest states as the corn N\n rate guidelines.\n \n Inputs\n \n Results\n \n \n \n \n \n \n Return To Nitrogen\n \n \n \n \n \n {RESULTS_TEXTS.multi_return_to_n}\n \n \n \n \n % of Max Yield\n \n \n \n \n \n {RESULTS_TEXTS.multi_percent_of_max_yield}\n \n \n \n \n \n \n \n \n ENOR Frequency\n \n \n \n \n \n {RESULTS_TEXTS.multi_eonr}\n \n \n \n \n ENOR vs. Yield\n \n \n \n \n \n {RESULTS_TEXTS.multi_eonr_vs_yield}\n \n \n \n \n \n )}\n >\n );\n});\n\nexport default PrintedResults;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport Typography from '@mui/material/Typography';\nimport { Stack, Theme } from '@mui/material';\nimport { useReactToPrint } from 'react-to-print';\n\nimport { Canvg } from 'canvg';\nimport { useElementRect } from '../../../utils/hooks';\nimport { RESULTS_TEXTS, STYLES, resultsDistrictsLayer } from '../config';\nimport { InputsContext } from '../index';\nimport EONRvsYield from './Charts/EONRvsYield';\nimport ReturnToN from './Charts/ReturnToN';\nimport PercentOfMaxYield from './Charts/PercentOfMaxYield';\nimport EONR from './Charts/EONR';\nimport InputSummary from './InputSummary';\nimport MultipleInputsSummary from './MultipleInputsSummary';\nimport ResultSummary from './ResultSummary';\nimport MultipleResultsSummary from './MultipleResultsSummary';\nimport PrintedResults from './PrintedResults';\n\nconst containerItemStyle = {\n padding: 2,\n paddingRight: 0\n};\n\nconst rotationButtonGroupStyle = {\n backgroundColor: 'secondary.light',\n width: '100%'\n};\n\nconst rotationButtonSelectedStyle = {\n 'lineHeight': '1rem',\n 'textTransform': 'none',\n 'margin': 1,\n 'color': 'secondary.main',\n 'border': 'none',\n 'borderRadius': '0.5 !important',\n '&.Mui-selected': {\n color: (theme: Theme) => `${theme.palette.primary.main} !important`,\n borderRadius: (theme: Theme) => `${theme.spacing(0.5)} !important`,\n border: (theme: Theme) => `2px solid ${theme.palette.primary.main} !important`,\n backgroundColor: '#fff !important'\n }\n};\n\ninterface Props {\n results?: NAdvisor.ResultsType;\n multipleResults?: NAdvisor.ResultsType[];\n handleBack: () => void;\n}\n\nconst Results = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n\n // Default to return_to_n for single price results, multi_return_to_n for multiple price results\n const [activePlot, updateActivePlot] = React.useState(props.multipleResults ? 'multi_return_to_n' : 'return_to_n');\n\n const plotContainerRef = React.useRef(null);\n const plotContainerRect = useElementRect(plotContainerRef);\n\n // For now, this is fine because we update both inputs and multipleInputs with district selections\n resultsDistrictsLayer.setStyle(STYLES.districts(inputs.district));\n\n const printedResultsRef = React.useRef(null);\n const printedMultipleResultsRef = React.useRef(null);\n\n const handlePrint = useReactToPrint({\n content: () => printedResultsRef.current\n });\n\n const handleMultiplePrint = useReactToPrint({\n content: () => printedMultipleResultsRef.current\n });\n\n const { results, multipleResults } = props;\n\n const saveChartAsPng = async () => {\n const canvas = new OffscreenCanvas(0, 0);\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n if (!ctx) {\n return;\n }\n\n const svgPlotEl = document.getElementById('svg-plot');\n if (!svgPlotEl) {\n return;\n }\n\n const svgPlotData = new XMLSerializer().serializeToString(svgPlotEl);\n const v = await Canvg.from(ctx, svgPlotData);\n v.start();\n\n ctx.globalCompositeOperation = 'destination-over';\n ctx.fillStyle = '#FFF';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n const blob = await canvas.convertToBlob({ type: 'image/jpeg' });\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = `${activePlot}.jpeg`;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n };\n\n // Temporary debug for multiple results\n // useEffect(() => {\n // if (multipleResults) {\n // console.log(multipleResults);\n // }\n // }, [multipleResults]);\n\n return (\n <>\n {results && (\n \n \n *': { padding: 2 } }} className=\"fullwidth\" square elevation={1}>\n \n \n Results\n \n \n \n \n \n \n \n \n \n \n \n \n updateActivePlot(value)}\n >\n \n Return to Nitrogen\n \n \n % of Max Yield\n \n \n EONR Frequency\n \n \n EONR vs. Yield\n \n \n \n {{\n return_to_n: (\n \n ),\n percent_of_max_yield: (\n \n ),\n eonr: (\n \n ),\n eonr_vs_yield: (\n \n )\n }[activePlot] ?? null}\n \n \n {activePlot && (\n \n )}\n \n \n {RESULTS_TEXTS[activePlot]}\n \n \n \n \n )}\n {multipleResults && (\n \n \n *': { padding: 2 } }} className=\"fullwidth\" square elevation={1}>\n \n \n \n \n \n \n \n \n \n \n \n \n updateActivePlot(value)}\n >\n \n Return to Nitrogen\n \n \n % of Max Yield\n \n \n EONR Frequency\n \n \n EONR vs. Yield\n \n \n \n {{\n multi_return_to_n: (\n \n ),\n multi_percent_of_max_yield: (\n \n ),\n multi_eonr: (\n \n ),\n multi_eonr_vs_yield: (\n \n )\n }[activePlot] ?? null}\n \n \n {activePlot && (\n \n )}\n \n \n {RESULTS_TEXTS[activePlot]}\n \n \n \n \n )}\n >\n );\n};\n\nexport default Results;\n","import React from 'react';\nimport axios from 'axios';\n\nimport { precision } from '../../utils/format';\nimport { LayoutStateContext } from '../Layouts/MainLayout';\nimport Inputs from './Inputs';\nimport Results from './Results/Results';\nimport {\n LAMBDA_URL,\n initialInputs,\n initialMultipleInputs,\n inputsDistrictsLayer,\n resultsDistrictsLayer,\n N_FERTILIZER,\n STYLES\n} from './config';\n\n// Handles multiple inputs for prices by taking the index from iteration\nconst multipleInputsReducer = (\n state: NAdvisor.MultipleInputsType = initialMultipleInputs,\n action: NAdvisor.MultipleInputsAction\n): NAdvisor.MultipleInputsType => {\n switch (action.type) {\n // for fertilizer (and default case), iterate over all keys and update (one value across them all)\n case 'nFertilizer':\n return Object.keys(state).reduce((multipleInputs, key) => {\n multipleInputs[Number(key)] = {\n ...state[Number(key)],\n nFertilizer: action.value,\n nPriceTon: precision(N_FERTILIZER[action.value].price[Number(key)], 2),\n nPrice: precision(\n N_FERTILIZER[action.value].price[Number(key)] * N_FERTILIZER[action.value].conversion,\n 2\n )\n };\n return multipleInputs;\n }, {} as NAdvisor.MultipleInputsType);\n case 'nPrice':\n return {\n ...state,\n [action.index]: {\n ...state[action.index],\n nPrice: precision(action.value, 2),\n nPriceTon: precision(action.value / N_FERTILIZER[state[action.index].nFertilizer].conversion, 2)\n }\n };\n case 'nPriceTon':\n return {\n ...state,\n [action.index]: {\n ...state[action.index],\n nPrice: precision(action.value * N_FERTILIZER[state[action.index].nFertilizer].conversion, 2),\n nPriceTon: precision(action.value, 2)\n }\n };\n case 'cornPrice':\n return {\n ...state,\n [action.index]: {\n ...state[action.index],\n cornPrice: action.value\n }\n };\n default:\n return Object.keys(state).reduce((multipleInputs, key) => {\n multipleInputs[Number(key)] = {\n ...state[Number(key)],\n [action.type]: action.value\n };\n return multipleInputs;\n }, {} as NAdvisor.MultipleInputsType);\n }\n};\n\nconst inputsReducer = (\n state: NAdvisor.InputsType = initialInputs,\n action: NAdvisor.InputAction\n): NAdvisor.InputsType => {\n switch (action.type) {\n case 'nFertilizer':\n return {\n ...state,\n nFertilizer: action.value,\n nPriceTon: precision(N_FERTILIZER[action.value].price[0], 2),\n nPrice: precision(N_FERTILIZER[action.value].price[0] * N_FERTILIZER[action.value].conversion, 2)\n };\n case 'nPrice':\n return {\n ...state,\n nPrice: precision(action.value, 2),\n nPriceTon: precision(action.value / N_FERTILIZER[state.nFertilizer].conversion, 2)\n };\n case 'nPriceTon':\n return {\n ...state,\n nPrice: precision(action.value * N_FERTILIZER[state.nFertilizer].conversion, 2),\n nPriceTon: precision(action.value, 2)\n };\n case 'n2oPrice':\n return {\n ...state,\n n2oPrice: precision(action.value, 2)\n };\n case 'nLeachingPrice':\n return {\n ...state,\n nLeachingPrice: precision(action.value, 2)\n };\n default:\n return {\n ...state,\n [action.type]: action.value\n };\n }\n};\n\nexport const InputsContext = React.createContext({} as NAdvisor.InputsContextType);\nexport const MultipleInputsContext = React.createContext(\n {} as NAdvisor.MultipleInputsContextType\n);\n\nconst sustainabilityInputKeys = ['n2oPrice', 'n2oDataSource', 'nLeachingPrice', 'nLeachingDataSource', 'considerNLoss'];\n\nconst Index = (): JSX.Element => {\n const { layoutStateDispatch } = React.useContext(LayoutStateContext);\n\n React.useEffect(\n () => () => {\n // Clean up the map on unmount\n inputsDistrictsLayer.setStyle(STYLES.districts(''));\n resultsDistrictsLayer.setStyle(STYLES.districts(''));\n },\n []\n );\n\n const [inputs, inputsDispatch] = React.useReducer(inputsReducer, initialInputs);\n\n const [multipleInputs, multipleInputsDispatch] = React.useReducer(multipleInputsReducer, initialMultipleInputs);\n\n const [activeView, updateActiveView] = React.useState<'inputs' | 'results'>('inputs');\n\n const [results, updateResults] = React.useState();\n\n // Handle calculation and storage of multiple results\n const [multipleInputResults, updateMultipleInputResults] = React.useState([]);\n\n // We want to manage the state of the multiple inputs in the parent component (pass from inputs -> parent -> results)\n const [supportMultipleInputs, setSupportMultipleInputs] = React.useState(false);\n\n // Handle input validation for single and multiple inputs\n const areInputsValid = (): boolean => {\n const isInputValid = (input: NAdvisor.InputsType): boolean => {\n if (input.considerNLoss) {\n return Object.entries(input).every(([k, v]) => (k === 'nFertilizer' ? v > -1 : v));\n }\n // if we aren't considering sustainability metrics, no need to validate the parameters for that part\n return Object.entries(input).every(([k, v]) => {\n if (sustainabilityInputKeys.includes(k)) {\n return true;\n }\n return k === 'nFertilizer' ? v > -1 : v;\n });\n };\n\n if (supportMultipleInputs) {\n return Object.values(multipleInputs).every(isInputValid);\n }\n\n return isInputValid(inputs);\n };\n\n // Handle calculation of results and API calls for single and multiple inputs, using Lambda instead of DataWolf now\n const handleCalculate = () => {\n if (areInputsValid()) {\n layoutStateDispatch({ type: 'isLoading', isLoading: true });\n\n if (supportMultipleInputs) {\n const promises = Object.values(multipleInputs).map((input, index) => {\n return axios\n .post(LAMBDA_URL, {\n rotation: input.rotation,\n fpr: input.nPrice,\n cpr: input.cornPrice,\n district: parseInt(input.district, 10),\n fertilizer: input.nFertilizer,\n consider_n_loss: input.considerNLoss,\n n2o_price: input.n2oPrice,\n n2o_price_method: input.n2oDataSource,\n n_leaching_price: input.nLeachingPrice,\n n_leaching_price_method: input.nLeachingDataSource\n })\n .then((response) => {\n const commonResults = {\n yn: response.data.yn,\n En: response.data.En,\n Opy: response.data.Opy,\n MRTN_rate: response.data.MRTN_rate,\n PMY: response.data.PMY,\n FM: response.data.FM,\n FC: response.data.FC,\n Ns: response.data.Ns,\n xn: response.data.xn,\n Yc: response.data.Yc,\n Yf: response.data.Yf,\n Yrtn: response.data.Yrtn,\n Ypmy: response.data.Ypmy,\n A: response.data.A,\n Xmin: response.data.Xmin,\n Xmax: response.data.Xmax\n };\n // we technically don't consider N loss in the multiple input case, but this logic will be here in case of future revisions\n if (input.considerNLoss) {\n multipleInputResults[index] = {\n ...commonResults,\n N2O_cost: response.data.N2O_cost,\n N_leaching_cost: response.data.N_leaching_cost,\n Xmin_default: response.data.Xmin_default,\n Xmax_default: response.data.Xmax_default,\n MRTN_rate_default: response.data.MRTN_rate_default\n } as NAdvisor.ResultsType;\n } else {\n multipleInputResults[index] = commonResults as NAdvisor.ResultsType;\n }\n updateMultipleInputResults([...multipleInputResults]);\n });\n });\n\n Promise.all(promises)\n .then(() => {\n updateActiveView('results');\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n })\n .catch((e) => {\n console.error(`Error with MRTN multiple input processing: ${e}`);\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n });\n } else {\n axios\n .post(LAMBDA_URL, {\n rotation: inputs.rotation,\n fpr: inputs.nPrice,\n cpr: inputs.cornPrice,\n district: parseInt(inputs.district, 10),\n fertilizer: inputs.nFertilizer,\n consider_n_loss: inputs.considerNLoss,\n n2o_price: inputs.n2oPrice,\n n2o_price_method: inputs.n2oDataSource,\n n_leaching_price: inputs.nLeachingPrice,\n n_leaching_price_method: inputs.nLeachingDataSource\n })\n .then((response) => {\n const commonResults = {\n yn: response.data.yn,\n En: response.data.En,\n Opy: response.data.Opy,\n MRTN_rate: response.data.MRTN_rate,\n PMY: response.data.PMY,\n FM: response.data.FM,\n FC: response.data.FC,\n Ns: response.data.Ns,\n xn: response.data.xn,\n Yc: response.data.Yc,\n Yf: response.data.Yf,\n Yrtn: response.data.Yrtn,\n Ypmy: response.data.Ypmy,\n A: response.data.A,\n Xmin: response.data.Xmin,\n Xmax: response.data.Xmax\n };\n\n if (inputs.considerNLoss) {\n updateResults({\n ...commonResults,\n N2O_cost: response.data.N2O_cost,\n N_leaching_cost: response.data.N_leaching_cost,\n Xmin_default: response.data.Xmin_default,\n Xmax_default: response.data.Xmax_default,\n MRTN_rate_default: response.data.MRTN_rate_default,\n Yrtn_default: response.data.Yrtn_default\n } as NAdvisor.ResultsType);\n } else {\n updateResults(commonResults as NAdvisor.ResultsType);\n }\n updateActiveView('results');\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n })\n .catch((e) => {\n console.error(`Error with MRTN single input processing: ${e}`);\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n });\n }\n }\n };\n\n const renderResultsView = () => {\n if (supportMultipleInputs && multipleInputResults) {\n return updateActiveView('inputs')} />;\n }\n return updateActiveView('inputs')} />;\n };\n\n return (\n \n \n {activeView === 'results' && (results || multipleInputResults) ? (\n renderResultsView()\n ) : (\n \n )}\n \n \n );\n};\n\nexport default Index;\n","import GeoJSON from 'ol/format/GeoJSON';\nimport TileLayer from 'ol/layer/Tile';\nimport VectorLayer from 'ol/layer/Vector';\nimport { transform } from 'ol/proj';\nimport TileWMSSource from 'ol/source/TileWMS';\nimport VectorSource from 'ol/source/Vector';\nimport { Fill, Stroke, Style, Text } from 'ol/style';\nimport type { FeatureLike as FeatureType } from 'ol/Feature';\n\nimport countiesGeoJSON from '../../files/counties.geojson';\nimport districtsGeoJSON from '../../files/districts.geojson';\n\nexport const LAMBDA_URL = 'https://d2ketrxbl3ytwt.cloudfront.net/lambda-pk';\n\nexport const DATA_SOURCES = {\n openSource: 'Open Source',\n asc: 'ASC'\n};\n\nexport const CROP_TYPES = {\n corn: 'Corn',\n soybean: 'Soybean'\n};\n\nexport const FERTILIZER_TYPES = {\n p: 'Phosphorus',\n k: 'Potassium'\n};\n\nexport const STRATEGIES = {\n sufficiency: 'Sufficiency',\n build: 'Build',\n maintain: 'Maintain'\n};\n\nexport const initialInputs: PKAdvisor.InputsType = {\n district: '',\n dataSource: 'openSource',\n cropType: 'corn',\n fertilizerType: 'p',\n soilTestResult: 0,\n strategy: 'sufficiency',\n expectedYield: 0,\n yearsToBuild: 0\n};\n\n// District -> [Region] Illinois Mapping\nexport const districtMapping: { [key: number]: string } = {\n 1: 'Northern Illinois',\n 2: 'Middle Illinois',\n 3: 'Southern Illinois'\n};\n\n// P/K Advisor map config\nexport const MAP_CENTER = transform([-89.44, 40.08], 'EPSG:4326', 'EPSG:3857');\n\nexport const STYLES = {\n counties: new Style({\n stroke: new Stroke({\n color: '#000',\n width: 1\n })\n }),\n districts:\n (selectedDistrict: string) =>\n (feature: FeatureType): Style => {\n const districtId = feature.get('id');\n const isSelected = districtId === selectedDistrict;\n const text = districtMapping[districtId];\n const lines = text.split(' ').join('\\n');\n\n return new Style({\n fill: new Fill({\n color: isSelected ? 'rgba(0, 137, 35, 0.3)' : 'rgba(187, 226, 211, 0.6)'\n }),\n stroke: new Stroke({\n color: isSelected ? '#7E98D5' : '#C5D1F1',\n width: 1\n }),\n text: new Text({\n text: lines,\n font: '10px Roboto,sans-serif',\n fill: new Fill({\n color: isSelected ? '#C5D1F1' : '#000'\n }),\n overflow: true,\n placement: 'point'\n })\n });\n }\n};\n\nexport const getBasemap = (): TileLayer =>\n new TileLayer({\n source: new TileWMSSource({\n url: 'https://basemap.nationalmap.gov/arcgis/services/USGSImageryOnly/MapServer/WMSServer',\n params: { LAYERS: 0 }\n })\n });\n\nexport const getCountiesLayer = (): VectorLayer =>\n new VectorLayer({\n source: new VectorSource({\n url: countiesGeoJSON,\n format: new GeoJSON({\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n })\n }),\n style: STYLES.counties\n });\n\nconst getDistrictsLayer = (): VectorLayer => {\n const districtsLayer = new VectorLayer({\n source: new VectorSource({\n url: districtsGeoJSON,\n useSpatialIndex: true,\n format: new GeoJSON({\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n })\n }),\n style: STYLES.districts('')\n });\n districtsLayer.set('interactive', true);\n return districtsLayer;\n};\nexport const inputsDistrictsLayer = getDistrictsLayer();\nexport const resultsDistrictsLayer = getDistrictsLayer();\n\nexport const RESULTS_TEXTS: { [k: string]: string } = {\n crop_p_removal:\n 'This figure shows phosphorus (P2O5) or potassium (K2O) removal (lb/acre) related to crop yield (bu/acre).',\n cstv: 'This figure shows percent of maximum yield (%) response to soil test P levels (ppm).'\n};\n","import React from 'react';\nimport PlotLine from '../../Plots/PlotLine';\nimport PlotDots from '../../Plots/PlotDots';\nimport Legend from '../../Plots/Legend';\nimport CommonPlotGrid from '../../NAdvisor/Results/Charts/CommonPlotGrid';\nimport { InputsContext } from '../index';\nimport { FERTILIZER_TYPES } from '../config';\n\ninterface Props {\n results: PKAdvisor.Part3ResultsType;\n width: number;\n height: number;\n legendFontSize: number;\n}\n\nconst CSTVPlot = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n const { results, width, height, legendFontSize } = props;\n\n // Convert raw data points for scatter plot\n const scatterData = results.rawData.x.map((x, i) => ({\n x,\n y: results.rawData.y[i]\n }));\n\n // Generate points for quadratic curve\n const quadraticData = results.fittedCurve.quadratic.x.map((x, i) => ({\n x,\n y: results.fittedCurve.quadratic.y[i]\n }));\n\n // Generate points for plateau line\n const plateauData = results.fittedCurve.plateau.x.map((x, i) => ({\n x,\n y: results.fittedCurve.plateau.y[i]\n }));\n\n // Calculate plot boundaries\n const xMin = 0;\n const xMax = Math.max(...results.rawData.x, results.criticalPoints.cstv, results.criticalPoints.soilTestValue);\n const yMin = Math.floor(Math.min(...results.fittedCurve.quadratic.y, ...results.rawData.y) / 10) * 10; // round down to nearest 10\n const yMax = Math.ceil(Math.max(...results.rawData.y) / 10) * 10 + 10; // round up to nearest 10\n\n // Create vertical lines for CSTV and soil test value\n const cstvLine = [\n { x: results.criticalPoints.cstv, y: yMin },\n { x: results.criticalPoints.cstv, y: yMax }\n ];\n\n const soilTestLine = [\n { x: results.criticalPoints.soilTestValue, y: yMin },\n { x: results.criticalPoints.soilTestValue, y: yMax }\n ];\n\n const legends: Plot.LegendDatum[] = [\n { label: 'Original Data', color: '#4285F4', type: 'dot', opacity: 0.7, size: legendFontSize },\n { label: 'Quadratic Fit', color: '#DB4437', type: 'line', width: 3, dashArray: '2, 2', size: legendFontSize },\n { label: 'Plateau Fit', color: '#04A466', type: 'line', width: 2, size: legendFontSize },\n {\n label: `CSTV (${results.criticalPoints.cstv.toFixed(2)})`,\n color: '#666666',\n type: 'line',\n dashArray: '2, 2',\n width: 3,\n size: legendFontSize\n },\n {\n label: `Soil Test Value (${results.criticalPoints.soilTestValue})`,\n color: '#DB4437',\n type: 'line',\n size: legendFontSize\n }\n ];\n\n return (\n \n );\n};\n\nexport default CSTVPlot;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport FormControl from '@mui/material/FormControl';\nimport Grid from '@mui/material/Grid';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Paper from '@mui/material/Paper';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport List from '@mui/material/List';\nimport ListItemText from '@mui/material/ListItemText';\nimport Divider from '@mui/material/Divider';\nimport { Theme } from '@mui/material';\n\nimport type { MapBrowserEvent } from 'ol';\nimport type { FeatureLike as FeatureType } from 'ol/Feature';\nimport type { Layer as LayerType, VectorTile as VectorTileType } from 'ol/layer';\nimport CSTVPlot from './Results/CSTVPlot';\n// import { precision } from '../../utils/format';\n\nimport {\n DATA_SOURCES,\n CROP_TYPES,\n FERTILIZER_TYPES,\n STRATEGIES,\n MAP_CENTER,\n STYLES,\n getBasemap,\n getCountiesLayer,\n inputsDistrictsLayer,\n districtMapping\n} from './config';\n\nimport Map from '../Map';\nimport { InputsContext } from './index';\n\nconst containerItemStyle = {\n 'padding': 2,\n 'display': 'flex',\n '& > *': {\n flexGrow: 1,\n padding: 2\n }\n};\n\nconst headerStyle = {\n height: 62,\n alignItems: 'center',\n backgroundColor: 'info.light',\n padding: (theme: Theme) => `0 ${theme.spacing(2)}`,\n marginBottom: 4\n};\n\nconst headerStepStyle = {\n ...headerStyle,\n display: 'flex',\n marginRight: 2\n};\n\nconst inputLabelStyle = {\n marginTop: 0,\n textTransform: 'uppercase'\n};\n\nconst rotationButtonGroupStyle = {\n backgroundColor: 'secondary.light',\n marginBottom: '1rem',\n justifyContent: 'left'\n};\n\n// same as theme.palette.info.main, on text field focus\nconst inputFieldStyle = {\n '& .MuiOutlinedInput-root': { '&.Mui-focused fieldset': { borderColor: '#7E98D5' } }\n};\n\n// const tableHeaderStyle = {\n// fontSize: '12px',\n// fontWeight: '400',\n// textTransform: 'uppercase'\n// };\n\nconst rotationButtonSelectedStyle = {\n 'lineHeight': '1.3rem',\n 'textTransform': 'none',\n 'margin': 1,\n 'color': 'info.main',\n 'border': 'none',\n 'borderRadius': '0.5 !important',\n '&.Mui-selected': {\n color: (theme: Theme) => `${theme.palette.info.main} !important`,\n borderRadius: (theme: Theme) => `${theme.spacing(0.5)} !important`,\n border: (theme: Theme) => `2px solid ${theme.palette.info.main} !important`,\n backgroundColor: '#fff !important'\n }\n};\n\ninterface Props {\n areStep3InputsValid: boolean;\n areStep4InputsValid: boolean;\n handleStep3Calculate: () => void;\n handleStep4Calculate: () => void;\n step3Results?: PKAdvisor.Part3ResultsType;\n}\n\nconst basemapLayer = getBasemap();\nconst countiesLayer = getCountiesLayer();\n\nconst Inputs = (props: Props): JSX.Element => {\n const { inputs, inputsDispatch } = React.useContext(InputsContext);\n\n const inputsRef = React.useRef<{ previous: PKAdvisor.InputsType; current: PKAdvisor.InputsType }>({\n previous: inputs,\n current: inputs\n });\n\n // track whether step four is needed, should be an outcome of step three's computation\n const needToApplyPK = props.step3Results?.needToApplyPK;\n\n // only combinatin of crop type and fertilizer type that has enough data for ASC for fitting\n const canUseASCData = inputs.cropType === 'soybean' && inputs.fertilizerType === 'k';\n\n // Update district map on dropdown selection for single inputs\n React.useEffect(() => {\n const previous = inputsRef.current.current;\n\n if (previous.district !== inputs.district) {\n // Update styling of districts\n inputsDistrictsLayer.setStyle(STYLES.districts(inputs.district));\n }\n\n inputsRef.current = {\n previous,\n current: inputs\n };\n }, [inputs]);\n\n const handleMapClick = React.useCallback(\n (e: MapBrowserEvent) => {\n const currentInputs = inputsRef.current.current;\n\n const clickedObject: [FeatureType, LayerType] | null | undefined = e.map.forEachFeatureAtPixel(\n e.pixel,\n (feature, layer) => (layer.get('interactive') ? [feature, layer] : null)\n );\n\n if (clickedObject) {\n const [clickedFeature, clickedLayer] = clickedObject;\n const clickedDistrict = clickedFeature.get('id');\n if (currentInputs.district !== clickedDistrict) {\n inputsDispatch({ type: 'district', value: clickedDistrict });\n (clickedLayer as VectorTileType).setStyle(STYLES.districts(clickedDistrict));\n }\n }\n },\n [inputsRef]\n );\n\n // Updated version of OpenLayers to 7.2.2 to fix the warning on forEachFeatureAtPixel\n const handleMapMouseMove = React.useCallback(\n (e: MapBrowserEvent) => {\n const hit = e.map.forEachFeatureAtPixel(e.pixel, () => {\n return true;\n });\n if (hit) {\n e.map.getTargetElement().style.cursor = 'pointer';\n } else {\n e.map.getTargetElement().style.cursor = '';\n }\n },\n [inputsRef]\n );\n\n return (\n \n \n \n \n Get Started Here!\n \n \n \n \n P/K Tool Instructions\n \n \n \n 1. Select the district in which your farm is located.\n \n \n 2. Enter input information.\n \n \n Select your crop type and fertilizer type. To check if you need to apply fertilizer,\n provide a soil test value result (0-24 inch; 0-0.6 m).If enough data is available, you\n may choose to calculate using ASC data or open sourced data.\n \n \n 3. Calculate to see if fertilizer application is needed.\n \n \n If you do not need to apply fertilizer, step four will be disabled. Upon re-running step\n three calculations, step four may be enabled if fertilizer is deemed necessary.\n \n \n 4. Calculate fertilizer application amount.\n \n \n Choose a recommendation method and input a target bu/ac yield, then click calculate.\n \n \n \n \n For reasonable results, input values within standard ranges. For example, corn yields\n are generally 170–200 bu/acre, soybean yields are generally 45–80 bu/acre.\n \n
\n \n \n \n \n \n \n \n \n 1\n \n Select Farm District\n \n\n \n \n Select A District\n \n \n \n\n \n \n \n \n \n \n :nth-of-type(1)': {\n flexGrow: 0,\n marginBottom: 3\n },\n '& > :nth-of-type(2)': {\n flexGrow: 1,\n marginBottom: 3\n },\n '& > :nth-of-type(3)': {\n flexGrow: 0\n }\n }}\n item\n xs={5}\n >\n \n \n \n 2\n \n Select and Enter Inputs\n \n \n \n \n Data Source\n \n {\n if (canUseASCData) {\n inputsDispatch({ type: 'dataSource', value });\n } else {\n // If ASC data is not available, always use open source data\n inputsDispatch({ type: 'dataSource', value: 'openSource' });\n }\n }}\n >\n \n {DATA_SOURCES.openSource}\n \n\n {/* Only show ASC option if crop type is soybean and fertilizer type is K, otherwise not enough data */}\n {canUseASCData && (\n \n {DATA_SOURCES.asc}\n \n )}\n \n \n\n \n \n Crop Type\n \n {\n inputsDispatch({ type: 'cropType', value });\n // Ensure we use open source data if the crop type is not soybean\n if (value !== 'soybean') {\n inputsDispatch({ type: 'dataSource', value: 'openSource' });\n }\n }}\n >\n \n {CROP_TYPES.corn}\n \n \n {CROP_TYPES.soybean}\n \n \n \n\n \n \n Fertilizer Type (P, K)\n \n {\n inputsDispatch({ type: 'fertilizerType', value });\n // Ensure we use open source data if the fertilizer type is not K\n if (value !== 'k') {\n inputsDispatch({ type: 'dataSource', value: 'openSource' });\n }\n }}\n >\n \n {FERTILIZER_TYPES.p}\n \n \n {FERTILIZER_TYPES.k}\n \n \n \n \n \n \n Soil {inputs.fertilizerType} Test Result (PPM)\n \n \n inputsDispatch({\n type: 'soilTestValue',\n value: parseFloat(value)\n })\n }\n sx={inputFieldStyle}\n />\n \n \n\n \n \n \n 3\n \n \n \n Need to Apply Fertilizer?\n {/* Inform user if fertilizer needed via conditional highlighted and boxed text */}\n {props.step3Results && (\n \n {needToApplyPK ? 'Yes, Soil Test Value < CSTV ' : 'No, Soil Test Value ≥ CSTV'}\n \n )}\n \n \n \n \n \n {props.step3Results && (\n \n )}\n \n \n\n \n \n \n 4\n \n \n \n {needToApplyPK ? 'How Much Fertilizer to Apply?' : 'No Fertilizer Needed'}\n \n {inputs.strategy === 'build' && (\n \n \n Years To Build\n \n \n inputsDispatch({\n type: 'yearsToBuild',\n value: parseFloat(value)\n })\n }\n disabled={inputs.strategy !== 'build'}\n sx={inputFieldStyle}\n />\n \n )}\n \n \n \n \n \n Expected Yield (bushels/acre)\n \n \n inputsDispatch({\n type: 'expectedYield',\n value: parseFloat(value)\n })\n }\n disabled={!needToApplyPK}\n sx={inputFieldStyle}\n />\n \n \n \n Strategy\n \n {\n inputsDispatch({ type: 'strategy', value });\n }}\n disabled={!needToApplyPK}\n >\n \n {STRATEGIES.sufficiency}\n \n \n {STRATEGIES.build}\n \n \n {STRATEGIES.maintain}\n \n \n \n \n \n \n \n {/* {props.step4Results && console.log(props.step4Results)} */}\n \n \n \n );\n};\n\nexport default Inputs;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nimport Map from '../../Map';\nimport {\n MAP_CENTER,\n CROP_TYPES,\n FERTILIZER_TYPES,\n STRATEGIES,\n getBasemap,\n resultsDistrictsLayer,\n districtMapping\n} from '../config';\nimport { InputsContext } from '../index';\nimport { precision } from '../../../utils/format';\n\nconst basemapLayer = getBasemap();\n\nconst columnKeyStyle = {\n color: 'secondary.main'\n};\n\nconst columnValueStyle = {\n fontWeight: 500\n};\n\ninterface Props {\n handleBack?: () => void;\n mapThumbnail?: string;\n cstv: number;\n}\n\nconst InputSummary = (props: Props): JSX.Element => {\n const { handleBack, mapThumbnail, cstv } = props;\n const { inputs } = React.useContext(InputsContext);\n\n return (\n \n {handleBack && (\n } onClick={handleBack}>\n Return to input\n \n )}\n *': {\n paddingRight: 0\n }\n }}\n display=\"flex\"\n >\n {mapThumbnail ? (\n
\n ) : (\n \n )}\n \n ANALYSIS INPUTS\n \n \n \n District\n \n \n {districtMapping[Number(inputs.district)]}\n \n \n \n \n Crop Type\n \n \n {CROP_TYPES[inputs.cropType]}\n \n \n \n \n Fertilizer Type\n \n \n {FERTILIZER_TYPES[inputs.fertilizerType]}\n \n \n \n \n Soil Test Value\n \n \n {inputs.soilTestResult} ppm\n \n \n \n \n CSTV\n \n \n {precision(cstv, 2)} ppm\n \n \n \n \n Strategy\n \n \n {STRATEGIES[inputs.strategy]}\n \n \n \n \n Expected Yield\n \n \n {inputs.expectedYield} bu/acre\n \n \n {inputs.strategy === 'build' && (\n \n \n Years to Build\n \n \n {inputs.yearsToBuild} years\n \n \n )}\n \n \n \n \n );\n};\n\nexport default InputSummary;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nimport { precisionStr } from '../../../utils/format';\nimport { FERTILIZER_TYPES } from '../config';\nimport { InputsContext } from '../index';\n\nconst columnKeyStyle = {\n color: 'secondary.main'\n};\n\nconst columnValueStyle = {\n fontWeight: 500\n};\n\ninterface Props {\n results: PKAdvisor.Part4ResultsType;\n}\n\nconst ResultSummary = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n const { results } = props;\n\n return (\n <>\n \n FERTILIZER REMOVAL\n \n \n {precisionStr(results.pkRemoval, 2)} lb/acre of {FERTILIZER_TYPES[inputs.fertilizerType]}\n \n \n \n \n \n OTHER RESULTS\n \n \n \n \n Recommended {FERTILIZER_TYPES[inputs.fertilizerType]} Rate\n \n \n {precisionStr(results.pkRecommendation, 2)} lb/acre\n \n \n \n \n Line of Best Fit\n \n \n {results.fittedLine.parameters.equation}\n \n \n \n \n The CSTV tool guides farmers on the timing of phosphorus (P) and potassium (K) applications without\n specifying the quantity. The application rate depends on factors such as the farmer‘s management\n approach. The Sufficiency approach applies nutrients based on expected removal from crop yield,\n while the Build and Maintain approaches aim to increase soil test values over time by fertilizing\n both the soil and the crop.\n \n \n >\n );\n};\n\nexport default ResultSummary;\n","import React from 'react';\nimport PlotLine from '../../Plots/PlotLine';\nimport PlotDots from '../../Plots/PlotDots';\nimport Legend from '../../Plots/Legend';\nimport CommonPlotGrid from '../../NAdvisor/Results/Charts/CommonPlotGrid';\nimport { InputsContext } from '../index';\nimport { FERTILIZER_TYPES, CROP_TYPES } from '../config';\n\ninterface Props {\n results: PKAdvisor.Part4ResultsType;\n width: number;\n height: number;\n}\n\nconst CropPRemoval = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n const { results, width, height } = props;\n\n // Convert raw data points for scatter plot\n const scatterData = results.rawData.x.map((x, i) => ({\n x,\n y: results.rawData.y[i]\n }));\n\n // Generate points for fitted line, ensuring no negative values\n const fittedLineData = results.fittedLine.x\n .map((x, i) => ({\n x,\n y: results.fittedLine.y[i]\n }))\n .filter((point) => point.x >= 0 && point.y >= 0);\n\n // Calculate plot boundaries\n const xMin = 0;\n const xMax = Math.ceil(Math.max(...results.rawData.x) / 10) * 10 + 10; // round up to nearest 10\n const yMin = 0;\n const yMax = Math.ceil(Math.max(...results.rawData.y) / 10) * 10 + 10; // round up to nearest 10\n\n // Create horizontal and vertical lines\n const expectedYieldLine = [\n { x: results.expectedYield, y: yMin },\n { x: results.expectedYield, y: yMax }\n ];\n\n const pkRemovalLine = [\n { x: xMin, y: results.pkRemoval },\n { x: xMax, y: results.pkRemoval }\n ];\n\n // Point for the intersection\n const intersectionPoint = [{ x: results.expectedYield, y: results.pkRemoval }];\n\n const legends: Plot.LegendDatum[] = [\n { label: 'Simulated Data', color: '#4285F4', type: 'dot', opacity: 0.5 },\n {\n label: `Fitted Line (R² = ${results.r2.toFixed(2)})`,\n color: '#04A466',\n type: 'line',\n width: 2\n },\n {\n label: `Expected Yield (${results.expectedYield.toFixed(2)} bu/acre)`,\n color: '#FF0000',\n type: 'vertical-line',\n dashArray: '3, 3',\n width: 2\n },\n {\n label: `P/K Removal (${results.pkRemoval.toFixed(2)} lb/acre)`,\n color: '#FF0000',\n type: 'line',\n dashArray: '3, 3',\n width: 2\n },\n {\n label: `Removal Point (${results.expectedYield.toFixed(2)}, ${results.pkRemoval.toFixed(2)})`,\n color: '#FF0000',\n type: 'dot'\n }\n ];\n\n return (\n \n );\n};\n\nexport default CropPRemoval;\n","import React from 'react';\nimport Container from '@mui/material/Container';\nimport Typography from '@mui/material/Typography';\nimport { Avatar, Box, Stack } from '@mui/material';\n\nimport { RESULTS_TEXTS, STYLES, resultsDistrictsLayer } from '../config';\nimport { InputsContext } from '../index';\nimport InputSummary from './InputSummary';\nimport ResultSummary from './ResultSummary';\nimport Logos from '../../Logos';\nimport logoPKAdvisor from '../../../images/logo_pk_advisor_2024.png';\nimport thumbnailDistrict1 from '../../../images/thumbnail-district-1.png';\nimport thumbnailDistrict2 from '../../../images/thumbnail-district-2.png';\nimport thumbnailDistrict3 from '../../../images/thumbnail-district-3.png';\nimport CSTVPlot from './CSTVPlot';\nimport CropPRemoval from './CropPRemoval';\n\nconst PAGE_WIDTH = 1020;\nconst PAGE_HEIGHT = 1320;\nconst CHART_WIDTH = 960;\nconst CHART_HEIGHT = 400;\n\nconst MAP_THUMBNAIL_MAPPING: Record = {\n 1: thumbnailDistrict1,\n 2: thumbnailDistrict2,\n 3: thumbnailDistrict3\n};\n\ninterface Props {\n part3Results?: PKAdvisor.Part3ResultsType;\n part4Results?: PKAdvisor.Part4ResultsType;\n}\n\nconst PrintedResults = React.forwardRef(function PrintedResults(props, ref) {\n const { inputs } = React.useContext(InputsContext);\n\n resultsDistrictsLayer.setStyle(STYLES.districts(inputs.district));\n\n const { part3Results, part4Results } = props;\n\n // Conditionally return the results based on the type of results (single or multiple)\n return (\n <>\n {part3Results && part4Results && (\n \n *': { padding: 2 } }} className=\"fullwidth\" padding={6} boxSizing=\"border-box\">\n \n \n \n P/K Fertilizer Calculator\n \n \n \n About the P/K Tool\n \n Here we provide a tool designed for Illinois farmers that combines open-source data with\n Illinois-specific soil and crop data. The tool serves two primary functions: first,\n determining whether phosphorus (P) or potassium (K) fertilizer is needed based on soil test\n results and crop requirements. Second, providing precise fertilizer application rates\n tailored to different management strategies, such as sufficiency, maintenance, or build-up\n approaches.This decision-support tool aims to optimize nutrient management for Illinois\n farmers by integrating localized data and best practices.\n \n Inputs\n \n Results\n \n \n \n \n \n \n Crop P Removal\n \n \n \n \n \n {RESULTS_TEXTS.return_to_n}\n \n \n \n \n CSTV Plot\n \n \n \n \n \n {RESULTS_TEXTS.percent_of_max_yield}\n \n \n \n \n \n )}\n >\n );\n});\n\nexport default PrintedResults;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Container from '@mui/material/Container';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport Typography from '@mui/material/Typography';\nimport { Stack, Theme } from '@mui/material';\nimport { useReactToPrint } from 'react-to-print';\n\nimport { Canvg } from 'canvg';\nimport { useElementRect } from '../../../utils/hooks';\nimport { RESULTS_TEXTS, STYLES, resultsDistrictsLayer } from '../config';\nimport { InputsContext } from '../index';\n\nimport InputSummary from './InputSummary';\nimport ResultSummary from './ResultSummary';\nimport PrintedResults from './PrintedResults';\nimport CSTVPlot from './CSTVPlot';\nimport CropPRemoval from './CropPRemoval';\n\nconst containerItemStyle = {\n padding: 2,\n paddingRight: 0\n};\n\nconst rotationButtonGroupStyle = {\n backgroundColor: 'secondary.light',\n width: '100%'\n};\n\nconst rotationButtonSelectedStyle = {\n 'lineHeight': '1.3rem',\n 'textTransform': 'none',\n 'margin': 1,\n 'color': 'info.main',\n 'border': 'none',\n 'borderRadius': '0.5 !important',\n '&.Mui-selected': {\n color: (theme: Theme) => `${theme.palette.info.main} !important`,\n borderRadius: (theme: Theme) => `${theme.spacing(0.5)} !important`,\n border: (theme: Theme) => `2px solid ${theme.palette.info.main} !important`,\n backgroundColor: '#fff !important'\n }\n};\n\ninterface Props {\n part3Results?: PKAdvisor.Part3ResultsType;\n part4Results?: PKAdvisor.Part4ResultsType;\n handleBack: () => void;\n}\n\nconst Results = (props: Props): JSX.Element => {\n const { inputs } = React.useContext(InputsContext);\n\n const [activePlot, updateActivePlot] = React.useState('crop_p_removal');\n\n const plotContainerRef = React.useRef(null);\n const plotContainerRect = useElementRect(plotContainerRef);\n\n // For now, this is fine because we update both inputs and multipleInputs with district selections\n resultsDistrictsLayer.setStyle(STYLES.districts(inputs.district));\n\n const printedResultsRef = React.useRef(null);\n\n const handlePrint = useReactToPrint({\n content: () => printedResultsRef.current\n });\n\n const { part3Results, part4Results } = props;\n\n const saveChartAsPng = async () => {\n const canvas = new OffscreenCanvas(0, 0);\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n if (!ctx) {\n return;\n }\n\n const svgPlotEl = document.getElementById('svg-plot');\n if (!svgPlotEl) {\n return;\n }\n\n const svgPlotData = new XMLSerializer().serializeToString(svgPlotEl);\n const v = await Canvg.from(ctx, svgPlotData);\n v.start();\n\n ctx.globalCompositeOperation = 'destination-over';\n ctx.fillStyle = '#FFF';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n const blob = await canvas.convertToBlob({ type: 'image/jpeg' });\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = `${activePlot}.jpeg`;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n };\n\n return (\n <>\n {part3Results && part4Results && (\n \n \n *': { padding: 2 } }} className=\"fullwidth\" square elevation={1}>\n \n \n Results\n \n \n \n \n \n \n \n \n \n \n \n \n updateActivePlot(value)}\n >\n \n Crop P Removal\n \n \n CSTV Plot\n \n \n \n {{\n crop_p_removal: (\n \n ),\n cstv: (\n \n )\n }[activePlot] ?? null}\n \n \n {activePlot && (\n \n )}\n \n \n {RESULTS_TEXTS[activePlot]}\n \n \n \n \n )}\n >\n );\n};\n\nexport default Results;\n","import React from 'react';\nimport axios from 'axios';\n\nimport { precision } from '../../utils/format';\nimport { LayoutStateContext } from '../Layouts/MainLayout';\nimport Inputs from './Inputs';\nimport Results from './Results/Results';\nimport { initialInputs, inputsDistrictsLayer, resultsDistrictsLayer, LAMBDA_URL, STYLES } from './config';\n\nconst inputsReducer = (\n state: PKAdvisor.InputsType = initialInputs,\n action: PKAdvisor.InputAction\n): PKAdvisor.InputsType => {\n switch (action.type) {\n case 'soilTestValue':\n return {\n ...state,\n soilTestResult: precision(action.value, 2)\n };\n case 'expectedYield':\n return {\n ...state,\n expectedYield: precision(action.value, 2)\n };\n case 'yearsToBuild':\n return {\n ...state,\n yearsToBuild: precision(action.value, 0)\n };\n default:\n return {\n ...state,\n [action.type]: action.value\n };\n }\n};\n\nexport const InputsContext = React.createContext({} as PKAdvisor.InputsContextType);\n\nconst Index = (): JSX.Element => {\n const { layoutStateDispatch } = React.useContext(LayoutStateContext);\n\n React.useEffect(\n () => () => {\n // Clean up the map on unmount\n inputsDistrictsLayer.setStyle(STYLES.districts(''));\n resultsDistrictsLayer.setStyle(STYLES.districts(''));\n },\n []\n );\n\n const [inputs, inputsDispatch] = React.useReducer(inputsReducer, initialInputs);\n\n const [activeView, updateActiveView] = React.useState<'inputs' | 'results'>('inputs');\n\n const [step3Results, updateStep3Results] = React.useState();\n const [step4Results, updateStep4Results] = React.useState();\n\n // some fields are not necessary for step three, so exclude from validation\n const notRequiredForStep3 = ['strategy', 'expectedYield', 'yearsToBuild']; // from types.d.ts\n const areStep3InputsValid = (): boolean => {\n const isS3InputValid = (input: PKAdvisor.InputsType): boolean =>\n Object.entries(input).every(\n ([k, v]) => notRequiredForStep3.includes(k) || (k === 'soilTestResult' ? v > -1 : v)\n );\n\n return isS3InputValid(inputs);\n };\n\n // input validation for step four (all fields are required)\n const areStep4InputsValid = (): boolean => {\n const isS4InputValid = (input: PKAdvisor.InputsType): boolean =>\n Object.entries(input).every(([k, v]) => {\n if (k === 'soilTestResult') {\n return v >= 0;\n }\n if ((k === 'yearsToBuild' && input.strategy === 'build') || k === 'expectedYield') {\n return v > 0;\n }\n if (k === 'strategy') {\n return ['sufficiency', 'build', 'maintain'].includes(v);\n }\n return v || v > -1; // can't return v because some values like 0 are falsy but valid\n });\n return isS4InputValid(inputs);\n };\n\n // call our Lambda with step three calculations\n const handleStep3Calculate = () => {\n if (areStep3InputsValid()) {\n layoutStateDispatch({ type: 'isLoading', isLoading: true });\n axios\n .post(LAMBDA_URL, {\n step: 3,\n district: inputs.district,\n dataSource: inputs.dataSource,\n cropType: inputs.cropType,\n fertilizerType: inputs.fertilizerType,\n soilTestResult: inputs.soilTestResult\n })\n .then((response) => {\n updateStep3Results({\n rawData: {\n x: response.data.plotComponents.x_data,\n y: response.data.plotComponents.y_data\n },\n fittedCurve: {\n quadratic: {\n x: response.data.plotComponents.quadraticX,\n y: response.data.plotComponents.quadraticY\n },\n plateau: {\n x: response.data.plotComponents.plateauX,\n y: response.data.plotComponents.plateauY\n }\n },\n criticalPoints: {\n cstv: response.data.cstv,\n soilTestValue: inputs.soilTestResult\n },\n needToApplyPK: response.data.fertilizerNeeded\n } as PKAdvisor.Part3ResultsType);\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n })\n .catch((error) => {\n updateStep3Results(undefined);\n console.error('Error fetching step 3 results:', error);\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n });\n }\n };\n\n const handleStep4Calculate = () => {\n if (areStep4InputsValid()) {\n layoutStateDispatch({ type: 'isLoading', isLoading: true });\n axios\n .post(LAMBDA_URL, {\n step: 4,\n district: inputs.district,\n dataSource: inputs.dataSource,\n cropType: inputs.cropType,\n fertilizerType: inputs.fertilizerType,\n soilTestResult: inputs.soilTestResult,\n cstv: step3Results?.criticalPoints.cstv,\n expectedYield: inputs.expectedYield,\n strategy: inputs.strategy,\n yearsToBuild: inputs.yearsToBuild\n })\n .then((response) => {\n updateStep4Results({\n pkRecommendation: response.data.pkRecommendation,\n rawData: {\n x: response.data.rawData.x,\n y: response.data.rawData.y\n },\n expectedYieldRange: response.data.expectedYieldRange,\n pkRemovalValues: response.data.pkRemovalValues,\n expectedYield: response.data.expectedYield,\n pkRemoval: response.data.pkRemoval,\n r2: response.data.r2,\n fittedLine: {\n x: response.data.fittedLine.x,\n y: response.data.fittedLine.y,\n parameters: {\n slope: response.data.fittedLine.parameters.slope,\n intercept: response.data.fittedLine.parameters.intercept,\n equation: response.data.fittedLine.parameters.equation\n }\n }\n } as PKAdvisor.Part4ResultsType);\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n updateActiveView('results');\n })\n .catch((error) => {\n console.error('Error fetching step 4 results:', error);\n layoutStateDispatch({ type: 'isLoading', isLoading: false });\n });\n }\n };\n\n const renderResultsView = () => {\n return (\n updateActiveView('inputs')}\n />\n );\n };\n\n return (\n \n {activeView === 'results' && step4Results ? (\n renderResultsView()\n ) : (\n \n )}\n \n );\n};\n\nexport default Index;\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\n\nimport Logos from '../Logos';\n\nconst About = (): JSX.Element => {\n return (\n <>\n What is Nitrogen Rate Calculator?\n \n Here we provide the classic Maximum Return To Nitrogen rate (MRTN) tool for Illinois corn growers. The\n MRTN tool is to provide Maximum Return To N (largest net benefits) and Most Profitable N Rate, based on\n recent N rate research data funded previously by Illinois Nutrient Research & Education Council.\n Generally, MRTN gets the Most Profitable N Rate by finding the N rate leading to the largest net\n benefits, which are calculated by considering both the yield benefits and fertilizer cost. The yield\n benefits are estimated based on the nitrogen-yield response curve and the corn price. The MRTN approach\n is widely used in many Midwest states as the corn N rate guidelines.\n \n \n Major Funders and Collaborators\n \n \n \n This project is funded by \n \n Illinois Nutrient Research & Education Council (NREC)\n \n and a seed project by NASA Harvest Program, with close collaboration of Illinois Corn Growers\n Association and Illinois Farm Bureau. For the MRTN tool, we are working with Dr. Emerson Nafziger to\n provide the scientific foundation. \n \n National Center for Supercomputing Applications (NCSA)\n \n provided initial major software development, which has since been taken over by{' '}\n \n Evan Chen\n \n , a developer in Dr. Kaiyu Guan’s research group at the University of Illinois Urbana-Champaign.\n Illinois Corn Growers Association and Illinois Farm Bureau provide outreach to Illinois growers. For any\n questions, please contact: \n Ziyi Li.\n \n \n Definitions and Terminology\n \n \n \n EONR:\n Economic Optimum N Rate: the x-coordinate of the Net Return curve maximum value for a specific\n experiment, region, and rotation.\n \n \n MRTN:\n Maximum Return to N rate, the N rate where the economic net return to N application is\n maximized.\n \n \n Maximum Yield:\n The yield where application of more N does not result in yield increase.\n \n \n Net Return:\n The value of corn grain produced (averaging multi-year Nitrogen-yield response) minus the N\n fertilization cost.\n \n \n Price Ratio:\n The ratio of N fertilizer price to corn grain price ($/lb:$/bu).\n \n \n Site:\n The land area occupied by a N rate trial, either replicated small plots in a specific field\n area or replicated field-length strips.\n \n \n Gross (Yield) Return:\n The value of corn grain increases due to N application.\n \n
\n >\n );\n};\n\nexport default About;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport Avatar from '@mui/material/Avatar';\nimport Box from '@mui/material/Box';\nimport Container from '@mui/material/Container';\nimport IconButton from '@mui/material/IconButton';\nimport Modal from '@mui/material/Modal';\nimport Typography from '@mui/material/Typography';\nimport HomeIcon from '@mui/icons-material/Home';\n\nimport logoNAdvisor from '../../images/logo_n_advisor_2024.png';\nimport Logos from '../Logos';\nimport About from './About';\n\nexport const Header = (): JSX.Element => {\n const [modalContent, updateModalContent] = React.useState<'about'>();\n\n return (\n \n \n \n \n \n \n Nitrogen Rate Calculator\n \n \n updateModalContent('about')}\n >\n About\n \n updateModalContent(undefined)}>\n {modalContent === 'about' ? : }\n \n \n );\n};\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\n\nimport Logos from '../Logos';\n\nconst About = (): JSX.Element => {\n return (\n <>\n What is P/K Calculator?\n \n Here we provide a tool designed for Illinois farmers that combines open-source data with\n Illinois-specific soil and crop data. The tool serves two primary functions: first, determining whether\n phosphorus (P) or potassium (K) fertilizer is needed based on soil test results and crop requirements.\n Second, providing precise fertilizer application rates tailored to different management strategies, such\n as sufficiency, maintenance, or build-up approaches.This decision-support tool aims to optimize nutrient\n management for Illinois farmers by integrating localized data and best practices.\n \n \n Major Funders and Collaborators\n \n \n \n This project is funded by the \n \n National Science Foundation\n \n . For this tool, full-stack software development was done by \n \n Evan Chen\n \n , a developer in Dr. Kaiyu Guan’s research group at the University of Illinois Urbana-Champaign.\n Scientific development and foundations were provided by{' '}\n Ziyi Li.\n \n \n Definitions and Terminology\n \n \n \n CSTV:\n Critical Soil Test Value, the minimum soil test level of phosphorus (P) or potassium (K) at\n which no additional fertilizer is required to achieve 95-100% of the maximum crop yield.\n \n \n Maximum Crop Yield:\n Yield without nutrients stress.\n \n \n Soil Test:\n Soil P or K test values within crop root zones (0-24 inch; 0-0.6 m) based on methods such as\n (P: Bray-1, Mehlich-3, or Olsen; K: Ammonium Acetate, HNO3, or Mehlich-3).\n \n \n Expected Yield:\n The anticipated crop yield based on historical yield data, expressed as a specific target\n (e.g., bu/acre) and used as input for determining fertilizer application rates.\n \n \n P/K Removal:\n The amount of phosphorus (P) or potassium (K) taken up by a crop and removed from the field\n through harvest.\n \n \n Recommended P/K Rate:\n The amount of phosphorus (P) or potassium (K) fertilizer suggested for application to achieve\n the expected yield or maintaining or improving (build up) soil fertility.\n \n \n Sufficiency (Strategy)\n Fertilizing the crop, rates based on likelihood of achieving a yield response.\n \n \n Build/Maintain (Strategy)\n Fertilizing the soil, rates based on increasing soil test values to defined level then\n adjusting the rate to maintain soil test values at the critical level.\n \n
\n \n Results: Recommendation vs. Removal\n \n \n P/K removal is how much P/K removed from crop harvest. This is based on the fitted linear relationship\n between expected crop yield and corresponding P/K removal from yield harvest. However, P/K\n recommendation is how much P/K you need to apply as P/K fertilizer (based on different methods like\n Sufficiency/Build/Maintain) to compensate for the P/K removal. Generally P/K recommendation is larger\n than P/K removal.\n \n >\n );\n};\n\nexport default About;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport Avatar from '@mui/material/Avatar';\nimport Box from '@mui/material/Box';\nimport Container from '@mui/material/Container';\nimport IconButton from '@mui/material/IconButton';\nimport Modal from '@mui/material/Modal';\nimport Typography from '@mui/material/Typography';\nimport HomeIcon from '@mui/icons-material/Home';\n\nimport logoPKAdvisor from '../../images/logo_pk_advisor_2024.png';\nimport Logos from '../Logos';\nimport About from './About';\n\nexport const Header = (): JSX.Element => {\n const [modalContent, updateModalContent] = React.useState<'about'>();\n\n return (\n \n \n \n \n \n \n P/K Rate Calculator\n \n \n updateModalContent('about')}\n >\n About\n \n updateModalContent(undefined)}>\n {modalContent === 'about' ? : }\n \n \n );\n};\n","import React from 'react';\n\nimport type { RouteProps } from 'react-router-dom';\n\nimport { withLayout } from './components/Layouts/utils';\nimport MainLayout from './components/Layouts/MainLayout';\nimport Home from './components/Home';\nimport { Header as HomeHeader } from './components/Home/layout';\nimport NAdvisor from './components/NAdvisor';\nimport PKTool from './components/PKAdvisor';\nimport { Header as NAdvisorHeader } from './components/NAdvisor/layout';\nimport { Header as PKToolHeader } from './components/PKAdvisor/layout';\n\nconst routes: { [key: string]: RouteProps } = {\n '': {\n exact: true,\n component: withLayout(MainLayout, Home, { header: })\n },\n 'nitrogen-advisor': { exact: true, component: withLayout(MainLayout, NAdvisor, { header: }) },\n 'pk-tool': { exact: true, component: withLayout(MainLayout, PKTool, { header: }) }\n};\n\nexport default routes;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter as Router, Route } from 'react-router-dom';\nimport { ThemeProvider } from '@mui/material/styles';\nimport * as Sentry from '@sentry/react';\nimport { Integrations } from '@sentry/tracing';\n\nimport { theme } from './theme';\nimport routes from './routes';\n\nif (process.env.SENTRY_DSN) {\n Sentry.init({\n dsn: process.env.SENTRY_DSN,\n integrations: [new Integrations.BrowserTracing()],\n tracesSampleRate: 0\n });\n}\n\nReactDOM.render(\n \n \n {Object.entries(routes).map(([path, props]) => (\n \n ))}\n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}