{"version":3,"sources":["components/ErosionCalculator.js","elements/NumberBox.js","components/input/TreeInputOptions.js","elements/PorosityNumberBox.js","components/input/ChannelParametersInputOptions.js","components/input/CatchmentInputOptions.js","components/input/IdealVegetationInputOptions.js","components/input/CriticalShearStressOptions.js","components/input/WoodTransportOptions.js","components/InputPanel.js","components/Header.js","components/Footer.js","components/getErosionDataset.js","elements/Chart.js","components/tabs/ErosionTab.js","components/getFlowHeightDataset.js","components/getQsedDataset.js","elements/DualLegend.js","elements/FlowChart.js","components/tabs/FlowHeightTab.js","components/getTransportDataset.js","components/tabs/TransportTab.js","serviceWorker.js","components/updatePWAAlert.js","App.js","index.js"],"names":["convertToArray","data","Array","size","fill","map","_","id","get","createTree","Module","distance","dbh","height","species","position","Vec3","speciesObj","SpeciesFactory","GetByString","tree","Tree","SetDBH","SetHeight","calculateErosion","type","inputParameters","randomSeed","input","Input","catchmentArea","returnPeriod","SetReturnPeriod","SetCatchmentArea","discharge","duration","SetDischarge","SetDuration","bankHeight","console","log","SetManningCoefficient","manningCoefficient","SetChannelWidth","channelWidth","SetChannelSlope","channelSlope","SetBankAngleInner","innerBankSlope","SetBankAngleOuter","outerBankSlope","SetBendRadius","bendRadius","SetBankHeightInner","bankHeightInner","SetBankHeightOuter","bankHeightOuter","SetD50BankInner","d50Inner","SetD50BankInnerSD","d50InnerSD","SetD50BankOuter","d50Outer","SetD50BankOuterSD","d50OuterSD","SetDensityFluid","fluidDensity","SetPorosityBed","d50Porosity","SetPorosityBedSD","sigmad50nsed","SetD50Bed","d50SedimentBed","SetD50BedSD","sigmad50sed","SetD84BedFactor","d84BedFactor","SetD90BedFactor","d90BedFactor","SetBaseFlow","baseFlow","SetHydrographFactor","hydrographAscendingFactor","SetMeanChannelSlope","meanChannelInclination","erosionCoefficientChanged","SetErosionCoefficient","erosionCoefficient","transportTree","InnerBankTreeDistance","diameterOfLog","lengthOfLog","InnerBankTreeSpecies","SetTreeInnerTransport","SetTreeOuterTransport","ErosionType","NoVegetation","Vegetation","SetTreeInner","InnerBankTreeDBH","InnerBankTreeHeight","SetTreeOuter","OuterBankTreeDistance","OuterBankTreeDBH","OuterBankTreeHeight","OuterBankTreeSpecies","IdealVegetation","alpha_i","dbh_i","idealVegetationTimeInterval","alpha_o","dbh_o","criticalShearStressModel","SetShieldsModel","createInputObject","SetRandomSeed","returnObject","GetRandomSeed","hydrograph","Hydrograph","shields","Paphitis","Brownlie","criticalShearStressUserDefinedPaInner","UserDefined","criticalShearStressUserDefinedPaOuter","Error","getShieldsObject","to_string","shieldsLocation","BankLocation","SetInner","inner","SetOuter","outer","erosion","ErosionFactory","BuildWithShields","ComputeErosion","GetErosionInner","GetErosionOuter","GetChannelParameters","GetFlowHeight","hydrographArray","GetHydrograph","Math","max","maxIndex","indexOf","W","H","beta_i","PI","beta_o","area_of_channel","tan","appliedShearStressOuter","GetAppliedShearStress","GetTauAOuter","maxAppliedShearStressOuter","indexOfAppliedShearStress","criticalShearStressOuter","GetCriticalShearStress","GetTauCOuter","appliedShearStressInner","GetTauAInner","maxAppliedShearStressInner","criticalShearStressInner","GetTauCInner","maxcriticalShearStressInner","maxcriticalShearStressOuter","concat","GetErosionCoefficient","GetRARInnerPercent","GetRAROuterPercent","transportCapacityInner","GetWoodTransport","GetTransportCapacityInner","transportCapacityOuter","GetTransportCapacityOuter","i","length","GetSedimentTransport","GetQsed","GetQsedMin","GetQsedMax","delete","nIterations","NumberBox","props","label","unit","disabled","onChangeCallback","onChange","value","name","step","isInvalid","feedback","required","undefined","info","controlId","replace","React","createElement","Form","Group","Label","OverlayTrigger","transition","delay","show","hide","overlay","Tooltip","_ref","ref","triggerHandler","Button","Object","assign","tabIndex","variant","className","FontAwesomeIcon","forwardedRef","icon","faInfoCircle","InputGroup","Control","min","onFocus","self","event","target","select","Append","Text","Feedback","TreeInputOptions","parameters","handleTextBoxOnChange","cardName","refName","Card","Header","Body","Container","Row","Col","md","sm","as","getSedimentLabelBed","getD84BedFactor","getD90BedFactor","showModal","setShowModal","useState","onClick","Modal","centered","onHide","closeButton","width","src","style","fontSize","verticalAlign","PorosityNumberBox","rel","href","CatchmentInputOptions","updateParameters","selectedPair","setSelectedPair","getExponentLabel","base","exp","extra","Check","checked","invalidState","DBHPrecision","a","isFinite","e","p","round","precision","idealVegetationUseTimeInterval","toPrecision","invalid","CriticalShearStressOptions","getSigmaD50Sed","location","getSedimentLabel","WoodTransportOptions","InputPanel","idealVegetationUseTreeSize","parseFloat","onSubmit","setError","preventDefault","stopPropagation","submit","lg","marginBottom","ChannelParameterInputOptions","inline","IdealVegetationInputOptions","calculationName","handleClose","Navbar","bg","Brand","alt","handleShow","Title","version","Footer","color","overflowWrap","marginRight","paddingTop","paddingBottom","convertErosionToDataset","dataset","skipAmount","hidden","totals","push","erosionTotal","x","y","borderColor","pointRadius","erosionTotal1","erosionTotal2","inners","erosionInner","borderDash","erosionInner1","erosionInner2","outers","erosionOuter","erosionOuter1","erosionOuter2","datasets","metrics","maxShearStressInner","maxShearStressOuter","maxRARPercentageInner","maxRARPercentageOuter","totalErosionInner","totalErosionOuter","NibiousChart","chartObjects","isLandscape","setIsLandscape","window","innerHeight","innerWidth","index","shouldAdaptToMobile","isMobile","setScreenOrientation","orientation","useEffect","addEventListener","ctx","document","getElementById","myChart","Chart","options","bezierCurve","elements","point","radius","responsive","aspectRatio","scales","beginAtZero","ticks","stepSize","title","text","display","yLabel","autoSkip","y1","y1Label","interaction","mode","plugins","legend","labels","boxHeight","filter","item","chart","includes","legendItem","datasetIndex","ci","this","line","getDatasetMeta","line1","line2","visible","update","tooltip","enabled","intersect","borderWidth","callbacks","context","substring","isNaN","formattedValue","destroy","removeEventListener","margin","register","ScatterController","LineElement","PointElement","LinearScale","CategoryScale","Legend","beforeDraw","canvas","getContext","save","globalCompositeOperation","fillStyle","fillRect","restore","DisplayErosionMetrics","showRAR","arguments","Table","striped","bordered","hover","toFixed","ErosionTab","setChartObjects","xLabels","noVeggie","veggie","idealVeggie","returnData","noVeggieDataset","veggieDataset","idealVeggieDataset","getErosionDataset","d","key","toString","HiddenExportTable","convertDatasetToMetrics","maxDischarge","areaOfChannelAtMaxDischarge","convertFlowHeightToDataset","flowHeight","row","col","yAxisID","reducer","acc","currentValue","totalSedimmentVolume","qsed","reduce","minTotalSedimmentVolume","qsedmin","maxTotalSedimmentVolume","qsedmax","convertQSedToDataset","pluginName","isNullOrUndef","toFontString","font","family","weight","chartInstance","boundingRect","chartArea","clientX","left","clientY","top","right","bottom","isEventInBoundaries","config","forEach","realPosition","MatrixLegendPlugin","events","beforeInit","requiredFields","warn","keys","field","checkPluginConfiguration","afterEvent","args","changed","beforeLayout","layout","padding","afterDraw","rows","cols","base_y","total_length","col_name_length","measureText","row_x_adj","base_x","row_y_adj","fillText","textSize","dataset_index","printed_col","start_x","line_length","start_y","actualBoundingBoxAscent","mouseClickLocation","beginPath","strokeStyle","setLineDash","lineWidth","moveTo","lineTo","stroke","closePath","FlowHeightTab","flowHeightObject","returnSets","getFlowHeightDataset","qsedObject","qSednoVeggie","qSedveggie","qSedidealVeggie","getQSedDataset","splice","combinedChartObjects","inputs","stream_power","density_of_water","DisplayFlowHeightMetrics","convertTranportToDataset","transportCapacity","TransportTab","getTransportDataset","isLocalhost","Boolean","hostname","match","navigator","URL","process","origin","swUrl","fetch","headers","then","response","contentType","status","serviceWorker","ready","registration","unregister","reload","registerValidSW","catch","checkValidServiceWorker","onupdatefound","installingWorker","installing","onstatechange","state","controller","onUpdate","onSuccess","error","UpdatePWAAlert","showReload","setShowReload","waitingWorker","setWaitingWorker","onSWUpdate","waiting","Alert","reloadPage","postMessage","App","tabKey","setTabKey","bankforNETParameters","setBankforNETParameters","InnerBankTreeIdealDBH","OuterBankTreeIdealDBH","InnerBankTreeIdealHeight","OuterBankTreeIdealHeight","Number","Date","getFullYear","getMonth","getDate","getTime","getTempRunName","setDatasets","warningText","setWarningText","errorText","setErrorText","showMobileInfo","setShowMobileInfo","backdrop","textAlign","Spinner","animation","fluid","dismissible","onClose","Tab","mountOnEnter","unmountOnExit","defaultActiveKey","activeKey","onSelect","k","Nav","Item","Link","eventKey","Content","Pane","createBankForNET","scroll","behavior","BankforNETModule","noveggieData","err","getExceptionMessage","ErosionCalculator","errorMsg","msg","zip","JSZip","folder","table","csvData","table_id","separator","querySelectorAll","csv","j","innerText","val","join","csv_string","convert_table_as_csv","file","input_params","param","param_units","generateCharts","charts","generateAsync","content","saveAs","getChart","originalOnComplete","onComplete","chartName","imageBase64","toBase64Image","slice","reset","resize","render","base64","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.b2b24dcb.chunk.js","sourcesContent":["\n\n\nfunction convertToArray(data) {\n\treturn new Array(data.size()).fill(0).map((_, id) => data.get(id));\n}\n\nfunction createTree(Module, distance, dbh, height, species) {\n\tconst position = new Module.Vec3(distance, 0, 0);\n\tconst speciesObj = Module.SpeciesFactory.GetByString(\"AlnusIncana\");\n\tconst tree = new Module.Tree(position, speciesObj);\n\ttree.SetDBH(dbh);\n\ttree.SetHeight(height);\n\treturn tree;\n}\n\nfunction createInputObject(Module, type, inputParameters) {\n\t// Basic Parameters\n\tconst input = new Module.Input();\n\n\tif(inputParameters.catchmentArea !== \"\" && inputParameters.returnPeriod !== \"\") {\n\t\tinput.SetReturnPeriod(inputParameters.returnPeriod);\n\t\tinput.SetCatchmentArea(inputParameters.catchmentArea);\n\t} else if(inputParameters.discharge !== \"\" && inputParameters.duration !== \"\") {\n\t\tinput.SetDischarge(inputParameters.discharge);\n\t\tinput.SetDuration(inputParameters.duration);\n\t} else if(inputParameters.discharge !== \"\" && inputParameters.catchmentArea !== \"\") {\n\t\tinput.SetDischarge(inputParameters.discharge);\n\t\tinput.SetCatchmentArea(inputParameters.catchmentArea);\n\t} else if (inputParameters.catchmentArea !== \"\" && inputParameters.bankHeight === \"\") {\n\t\t // Catch the bank height case\n\t\tinput.SetCatchmentArea(inputParameters.catchmentArea);\n\t}\n\telse {\n\t\tconsole.log(\"Incorrect input parameters. Wrong pair\");\n\t\tthrow \"Incorrect input parameters. Wrong pair\";\n\t}\n\n\tinput.SetManningCoefficient(inputParameters.manningCoefficient);\n\tinput.SetChannelWidth(inputParameters.channelWidth);\n\tinput.SetChannelSlope(inputParameters.channelSlope);\n\tinput.SetBankAngleInner(inputParameters.innerBankSlope);\n\tinput.SetBankAngleOuter(inputParameters.outerBankSlope);\n\tinput.SetBendRadius(inputParameters.bendRadius);\n\tinput.SetBankHeightInner(inputParameters.bankHeightInner);\n\tinput.SetBankHeightOuter(inputParameters.bankHeightOuter);\n\tinput.SetD50BankInner(inputParameters.d50Inner);\n\tinput.SetD50BankInnerSD(inputParameters.d50InnerSD);\n\tinput.SetD50BankOuter(inputParameters.d50Outer);\n\tinput.SetD50BankOuterSD(inputParameters.d50OuterSD);\n\tinput.SetDensityFluid(inputParameters.fluidDensity);\n\tinput.SetPorosityBed(inputParameters.d50Porosity);\n\tinput.SetPorosityBedSD(inputParameters.sigmad50nsed);\n\tinput.SetD50Bed(inputParameters.d50SedimentBed);\n\tinput.SetD50BedSD(inputParameters.sigmad50sed);\n\tinput.SetD84BedFactor(inputParameters.d84BedFactor);\n\tinput.SetD90BedFactor(inputParameters.d90BedFactor);\n\tinput.SetBaseFlow(inputParameters.baseFlow);\n\tinput.SetHydrographFactor(inputParameters.hydrographAscendingFactor);\n\n\n\n\tinput.SetMeanChannelSlope(inputParameters.meanChannelInclination);\n\n\tif (inputParameters.erosionCoefficientChanged) {\n\t\tinput.SetErosionCoefficient(inputParameters.erosionCoefficient)\n\t}\n\n\n\tconst transportTree = createTree(Module,\n\t\tinputParameters.InnerBankTreeDistance,\n\t\tinputParameters.diameterOfLog,\n\t\tinputParameters.lengthOfLog,\n\t\tinputParameters.InnerBankTreeSpecies);\n\n\tinput.SetTreeInnerTransport(transportTree);\n\tinput.SetTreeOuterTransport(transportTree);\n\n\tswitch(type) {\n\t\tcase Module.ErosionType.NoVegetation:\n\t\tcase Module.ErosionType.Vegetation:\n\t\t\tinput.SetTreeInner(createTree(Module,\n\t\t\t\tinputParameters.InnerBankTreeDistance,\n\t\t\t\tinputParameters.InnerBankTreeDBH,\n\t\t\t\tinputParameters.InnerBankTreeHeight,\n\t\t\t\tinputParameters.InnerBankTreeSpecies));\n\t\n\t\t\tinput.SetTreeOuter(createTree(Module,\n\t\t\t\tinputParameters.OuterBankTreeDistance,\n\t\t\t\tinputParameters.OuterBankTreeDBH,\n\t\t\t\tinputParameters.OuterBankTreeHeight,\n\t\t\t\tinputParameters.OuterBankTreeSpecies));\n\n\t\t\tbreak;\n\t\tcase Module.ErosionType.IdealVegetation:\n\t\t\tconst alpha_i = inputParameters.InnerBankTreeHeight / inputParameters.InnerBankTreeDBH;\n\t\t\tconst dbh_i = inputParameters.InnerBankTreeDBH + (inputParameters.idealVegetationTimeInterval * 0.004);\n\t\t\tinput.SetTreeInner(createTree(Module,\n\t\t\t\tinputParameters.InnerBankTreeDistance,\n\t\t\t\tdbh_i,\n\t\t\t\talpha_i * dbh_i,\n\t\t\t\tinputParameters.InnerBankTreeSpecies));\n\n\t\t\tconst alpha_o = inputParameters.OuterBankTreeHeight / inputParameters.OuterBankTreeDBH;\n\t\t\tconst dbh_o = inputParameters.OuterBankTreeDBH + (inputParameters.idealVegetationTimeInterval * 0.004);\n\t\t\tinput.SetTreeOuter(createTree(Module,\n\t\t\t\tinputParameters.OuterBankTreeDistance,\n\t\t\t\tdbh_o,\n\t\t\t\talpha_o * dbh_o,\n\t\t\t\tinputParameters.OuterBankTreeSpecies));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log(\"****WE GOT PROBLEMS*****\");\n\t}\n\t\n\tif (inputParameters.criticalShearStressModel === \"paphitis\") {\n\t\tinput.SetShieldsModel(\"Paphitis\");\n\t} else if (inputParameters.criticalShearStressModel === \"brownlie\") {\n\t\tinput.SetShieldsModel(\"Brownlie\");\n\t} else if (inputParameters.criticalShearStressModel === \"userDefined\") {\n\t\tinput.SetShieldsModel(\"userDefined\");\n\t} \n\n\treturn input;\n}\n\n\nfunction getShieldsObject(Module, inputParameters) {\n\tif (inputParameters.criticalShearStressModel === \"paphitis\") {\n\t\treturn { \"inner\": [\n\t\t\t\t\t\t\tnew Module.Paphitis(0.188, 1.0, 0.0475),\n\t\t\t\t\t\t\tnew Module.Paphitis(0.28, 1.2, 0.0750),\n\t\t\t\t\t\t\tnew Module.Paphitis(0.075, 0.5, 0.0300)\n\t\t\t\t\t\t],\n\t\t\t\t\"outer\": [\n\t\t\t\t\tnew Module.Paphitis(0.188, 1.0, 0.0475),\n\t\t\t\t\tnew Module.Paphitis(0.28, 1.2, 0.0750),\n\t\t\t\t\tnew Module.Paphitis(0.075, 0.5, 0.0300)\n\t\t\t\t]}\n\t} else if (inputParameters.criticalShearStressModel === \"brownlie\") {\n\t\treturn { \"inner\": [new Module.Brownlie()], \"outer\": [new Module.Brownlie()] };\n\n\t} else if (inputParameters.criticalShearStressModel === \"userDefined\") {\n\t\tconsole.log(inputParameters.criticalShearStressUserDefinedPaInner);\n\t\treturn { \"inner\": [new Module.UserDefined(inputParameters.criticalShearStressUserDefinedPaInner)], \"outer\": [new Module.UserDefined(inputParameters.criticalShearStressUserDefinedPaOuter)]};\n\t} else {\n\t\tthrow new Error(\"Invalid Critical Shear Stress Model Used\");\n\t}\n}\n\n\nfunction calculateErosion(Module, type, inputParameters, randomSeed) {\n\t// Create Input\n\tconst input = createInputObject(Module, type, inputParameters);\n\n\tif (randomSeed !== null) {\n\t\tinput.SetRandomSeed(randomSeed);\n\t}\n\n\tconst newRandomSeed = input.GetRandomSeed();\n\n\tconst returnObject = {\n\t\t\"randomSeed\": newRandomSeed\n\t};\n\n\t// Create Hydrograph\n\tconst hydrograph = new Module.Hydrograph(input)\n\n\t// Create Shields\n\tconst shields = getShieldsObject(Module, inputParameters);\n\n\t// Internally we don't differentiate between Ideal and Vegetation\n\tif (type === Module.ErosionType.IdealVegetation) {\n\t\ttype = Module.ErosionType.Vegetation\n\t}\n\n\tconsole.log(input.to_string());\n\n\tlet shieldsLocation = new Module.BankLocation();\n\tshieldsLocation.SetInner(shields.inner[0]);\n\tshieldsLocation.SetOuter(shields.outer[0]);\n\n\t// Build erosion class\n\tlet erosion = Module.ErosionFactory.BuildWithShields(type, input, hydrograph, shieldsLocation);\n\n\t// Compute Erosion\n\treturnObject[\"erosionTotal\"] = convertToArray(erosion.ComputeErosion(1));\n\t\n\treturnObject[\"erosionInner\"] = convertToArray(erosion.GetErosionInner());\n\treturnObject[\"erosionOuter\"] = convertToArray(erosion.GetErosionOuter());\n\n\treturnObject[\"flowHeight\"] = convertToArray(erosion.GetChannelParameters().GetFlowHeight());\n\n\tconst hydrographArray = convertToArray(erosion.GetHydrograph().GetHydrograph());\n\treturnObject[\"maxDischarge\"] = Math.max(...hydrographArray)\n\n\t//Get area of channel at max discharge\n\tconst maxIndex = hydrographArray.indexOf(returnObject[\"maxDischarge\"]);\n\n\t// Need to add inner erosiuon and outer erosion at peak flow! peak flow inner/outer erosion\n\tconst W = returnObject[\"erosionInner\"][maxIndex] + returnObject[\"erosionOuter\"][maxIndex] + inputParameters.channelWidth;\n\n\t// This should be the max flow height height...\n\tconst H = returnObject[\"flowHeight\"][maxIndex];\n\n\t//Area of channel\n\t// Get betaT\n\tconst beta_i = inputParameters.innerBankSlope * Math.PI / 180.0;\n\tconst beta_o = inputParameters.outerBankSlope * Math.PI / 180.0;\n\tconst betaT = 1.0 / Math.tan(beta_i) + 1.0 / Math.tan(beta_o);\n\tconst area_of_channel = H / 2.0 * (2.0 * W + H * betaT);\n\treturnObject[\"areaOfChannelAtMaxDischarge\"] = area_of_channel;\n\n\t// Find max Applied shear stress outer\n\tconst appliedShearStressOuter = convertToArray(erosion.GetAppliedShearStress().GetTauAOuter());\n\tconst maxAppliedShearStressOuter = Math.max(...appliedShearStressOuter);\n\tlet indexOfAppliedShearStress = appliedShearStressOuter.indexOf(maxAppliedShearStressOuter)\n\tconst criticalShearStressOuter = convertToArray(erosion.GetCriticalShearStress().GetTauCOuter())[indexOfAppliedShearStress];\n\n\treturnObject[\"maxAppliedShearStressOuter\"] = maxAppliedShearStressOuter;\n\treturnObject[\"criticalShearStressOuter\"] = criticalShearStressOuter;\n\n\t// Find max Applied shear stress outer\n\tconst appliedShearStressInner = convertToArray(erosion.GetAppliedShearStress().GetTauAInner());\n\tconst maxAppliedShearStressInner = Math.max(...appliedShearStressInner);\n\tindexOfAppliedShearStress = appliedShearStressInner.indexOf(maxAppliedShearStressInner)\n\t\n\tconst criticalShearStressInner = convertToArray(erosion.GetCriticalShearStress().GetTauCInner())[indexOfAppliedShearStress];\n\tconst maxcriticalShearStressInner = Math.max(...convertToArray(erosion.GetCriticalShearStress().GetTauCInner()));\n\tconst maxcriticalShearStressOuter = Math.max(...convertToArray(erosion.GetCriticalShearStress().GetTauCOuter()));\n\n\n\n\n\tconsole.log(`${type == Module.ErosionType.Vegetation ? \"Vegie\" : \"No Veggie\"}: \"Max Applied Shear Stress Inner\": ${maxAppliedShearStressInner}`)\n\tconsole.log(`${type == Module.ErosionType.Vegetation ? \"Vegie\" : \"No Veggie\"}: \"Max Applied Shear Stress Outer\": ${maxAppliedShearStressOuter}`)\n\tconsole.log(`${type == Module.ErosionType.Vegetation ? \"Vegie\" : \"No Veggie\"}: \"Max Critical Shear Stress Inner\": ${maxcriticalShearStressInner}`)\n\tconsole.log(`${type == Module.ErosionType.Vegetation ? \"Vegie\" : \"No Veggie\"}: \"Max Critical Shear Stress Outer\": ${maxcriticalShearStressOuter}`)\n\n\n\tconsole.log(`${type == Module.ErosionType.Vegetation ? \"Vegie\" : \"No Veggie\"}: \"Erosion Coefficient\": ${inputParameters.erosionCoefficient}`)\n\tconsole.log(`${type == Module.ErosionType.Vegetation ? \"Vegie\" : \"No Veggie\"}: \"Erosion Coefficient\": ${input.GetErosionCoefficient()}`)\n\n\treturnObject[\"maxAppliedShearStressInner\"] = maxAppliedShearStressInner;\n\treturnObject[\"criticalShearStressInner\"] = criticalShearStressInner;\n\n\treturnObject[\"maxRARPercentageInner\"] = Math.max(...convertToArray(erosion.GetCriticalShearStress().GetRARInnerPercent()));\n\treturnObject[\"maxRARPercentageOuter\"] = Math.max(...convertToArray(erosion.GetCriticalShearStress().GetRAROuterPercent()));\n\n\n\tconst transportCapacityInner = convertToArray(erosion.GetWoodTransport().GetTransportCapacityInner());\n\tconst transportCapacityOuter = convertToArray(erosion.GetWoodTransport().GetTransportCapacityOuter());\n\n\treturnObject[\"transportCapacity\"] = [];\n\n\tfor(var i = 0; i < transportCapacityInner.length; i++) {\n\t\treturnObject[\"transportCapacity\"][i] = (transportCapacityInner[i] + transportCapacityOuter[i]) / 2.0;\n\t}\n\t\n\treturnObject[\"qsed\"] = convertToArray(erosion.GetSedimentTransport().GetQsed());\n\treturnObject[\"qsedmin\"] = convertToArray(erosion.GetSedimentTransport().GetQsedMin());\n\treturnObject[\"qsedmax\"] = convertToArray(erosion.GetSedimentTransport().GetQsedMax());\n\n\thydrograph.delete();\n\terosion.delete();\n\tshields.inner[0].delete()\n\tshields.outer[0].delete()\n\n\t// Compute other erosions for shields\n\tfor(let i = 1; i < shields.inner.length; i++) {\n\n\t\t// Create Hydrograph\n\t\tconst hydrograph = new Module.Hydrograph(input)\n\n\t\tlet shieldsLocation = new Module.BankLocation();\n\t\tshieldsLocation.SetInner(shields.inner[i]);\n\t\tshieldsLocation.SetOuter(shields.outer[i]);\n\n\t\t// Build erosion class\n\t\tlet erosion = Module.ErosionFactory.BuildWithShields(type, input, hydrograph, shieldsLocation);\n\n\t\tconst nIterations = inputParameters.criticalShearStressModel === \"paphitis\" ? 1 : 10;\n\n\t\t// Compute Erosion\n\t\treturnObject[\"erosionTotal\" + i] = convertToArray(erosion.ComputeErosion(nIterations));\n\t\treturnObject[\"erosionInner\" + i] = convertToArray(erosion.GetErosionInner());\n\t\treturnObject[\"erosionOuter\" + i] = convertToArray(erosion.GetErosionOuter());\n\n\t\thydrograph.delete();\n\t\terosion.delete();\n\t\tshields.inner[i].delete()\n\t\tshields.outer[i].delete()\n\n\n\t\t\n\t}\n\n\tconsole.log(input.to_string());\n\n\tinput.delete();\n\n\treturn returnObject;\n}\n\nexport default function ErosionCalculator(inputParameters) {\n\ttry{\n\t\treturn window.createBankForNET().then((Module) => {\n\t\t\twindow.BankforNETModule = Module;\n\t\t\ttry {\n\t\t\t\t// No Vegetation\n\t\t\t\tconst noveggieData = calculateErosion(Module, Module.ErosionType.NoVegetation, inputParameters, 1);\n\t\n\t\t\t\t// Vegetation\n\t\t\t\tconst veggieData = noveggieData; //calculateErosion(Module, Module.ErosionType.Vegetation, inputParameters, noveggieData.randomSeed);\t\t\n\t\n\t\n\t\t\t\tconst idealVeggieData = noveggieData; //calculateErosion(Module, Module.ErosionType.IdealVegetation, inputParameters, noveggieData.randomSeed);\n\t\t\t\treturn {\n\t\t\t\t\t\"noVeggie\" : noveggieData,\n\t\t\t\t\t\"veggie\" : veggieData,\n\t\t\t\t\t\"idealVeggie\": idealVeggieData\n\t\t\t\t};\n\t\t\t} catch(err) {\n\t\t\t\tconsole.log(err);\n\t\t\t\treturn {\n\t\t\t\t\t\"error\": err,\n\t\t\t\t\t\"errorMsg\": Module.getExceptionMessage(err).toString()\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t})\n\t} catch(err) {\n\t\tconsole.log(err);\n\t}\t\n\t;\n}\n","import React from 'react';\nimport Form from 'react-bootstrap/Form';\nimport InputGroup from 'react-bootstrap/InputGroup';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Button from 'react-bootstrap/Button';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { FontAwesomeIcon }from '@fortawesome/react-fontawesome';\nimport { faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\nexport default function NumberBox(props) {\n\n\t\n\tconst label = props.label;\n\tconst unit = props.unit;\n\tconst disabled = props.disabled\n\tconst onChangeCallback = props.onChange;\n\tconst value = props.value;\n\tconst name = props.name;\n\tconst step = props.step || \"any\";\n\tconst isInvalid = props.isInvalid;\n\tconst feedback = props.feedback;\n\tconst required = props.required === undefined ? true : props.required;\n\tconst info = props.info;\n\n\tvar controlId;\n\tif(props.controlId === undefined) {\n\t\tcontrolId = label.replace(/ +/g, \"\");\n\t} else {\n\t\tcontrolId = props.controlId;\n\t}\n\t\n\tfunction onFocusCallback(self, event) {\n\t\t/*\n\t\t * When a box is clicked (onFocus event), it should select all the\n\t\t * values inside it. This will make it easier for students. This was\n\t\t * requested on issue #127\n\t\t */\n\t\tself.target.select();\n\t}\n\t\t\n\treturn(\n\t\t\n\t\t\t\n\t\t\t\t{label}\n\n\t\t\t\t{ info && {info}}>\n\t\t\t\t{({ ref, ...triggerHandler }) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t }\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{unit}\n\t\t\t\t\n\t\t\t\t{feedback}\n\t\t\t\n\t\t\n\t);\n}","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport Form from \"react-bootstrap/Form\";\nimport NumberBox from \"../../elements/NumberBox\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\n\nexport default function TreeInputOptions(props) {\n const parameters = props.parameters;\n const handleTextBoxOnChange = props.handleTextBoxOnChange;\n const cardName = props.name;\n\n const refName = cardName.replace(/\\s+/g, \"\");\n\n return (\n \n {cardName}\n \n \n \n \n \n \n \n parameters[refName + \"Distance\"]}\n feedback=\"Distance must be greater than half the channel width\"\n required\n unit=\"m\"\n step=\"0.01\"\n name={refName + \"Distance\"}\n value={parameters[refName + \"Distance\"]}\n onChange={handleTextBoxOnChange}\n />\n \n \n\n \n \n \n Tree Species\n \n {/*\n */}\n \n {/*\n \n \n \n \n \n \n \n */}\n \n \n \n \n \n \n \n );\n}\n","import React from 'react';\nimport Form from 'react-bootstrap/Form';\nimport InputGroup from 'react-bootstrap/InputGroup';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Button from 'react-bootstrap/Button';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { FontAwesomeIcon }from '@fortawesome/react-fontawesome';\nimport { faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\nexport default function NumberBox(props) {\n\n\t\n\tconst label = props.label;\n\tconst unit = props.unit;\n\tconst disabled = props.disabled\n\tconst onChangeCallback = props.onChange;\n\tconst value = props.value;\n\tconst name = props.name;\n\tconst step = props.step || \"any\";\n\tconst isInvalid = props.isInvalid;\n\tconst feedback = props.feedback;\n\tconst required = props.required === undefined ? true : props.required;\n\tconst info = props.info;\n\n\tvar controlId;\n\tif(props.controlId === undefined) {\n\t\tcontrolId = label.replace(/ +/g, \"\");\n\t} else {\n\t\tcontrolId = props.controlId;\n\t}\n\t\n\tfunction onFocusCallback(self, event) {\n\t\t/*\n\t\t * When a box is clicked (onFocus event), it should select all the\n\t\t * values inside it. This will make it easier for students. This was\n\t\t * requested on issue #127\n\t\t */\n\t\tself.target.select();\n\t}\n\t\t\n\treturn(\n\t\t\n\t\t\t\n\t\t\t\t{label}\n\n\t\t\t\t{ info && {info}}>\n\t\t\t\t{({ ref, ...triggerHandler }) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t }\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{unit}\n\t\t\t\t\n\t\t\t\t{feedback}\n\t\t\t\n\t\t\n\t);\n}","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport NumberBox from \"../../elements/NumberBox\";\nimport PorosityNumberBox from \"../../elements/PorosityNumberBox\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport Modal from 'react-bootstrap/Modal';\nimport './ChannelParametersInputOptions.css';\n\nfunction getSedimentLabelBed() {\n return (\n \n D\n sed\n 50\n \n \n );\n}\n\nfunction getSigmaD50Sed() {\n return (\n \n σD\n sed\n 50\n \n \n );\n}\n\nfunction getD84BedFactor() {\n return (\n \n D\n sed\n 84\n \n \n );\n}\n\nfunction getD90BedFactor() {\n return (\n \n D\n sed\n 90\n \n \n );\n}\n\nfunction getSigmaNsed() {\n return (\n \n σn\n sed\n \n \n );\n}\n\nfunction getSedimentLabelBedPorosity() {\n return (\n \n n\n sed\n \n \n );\n}\n\nfunction getSedimentLabelBedPorosityInfo() {\n return (\n Sediment porosity of transported sediment (Tognacca 1999 and Rickenmann 2014)\"\n );\n}\n\nfunction getD84BedFactorInfo() {\n return (\n Multiplying factor to compute {getD84BedFactor()} from {getSedimentLabelBed()}\n );\n}\n\nfunction getD90BedFactorInfo() {\n return (\n Multiplying factor to compute {getD90BedFactor()} from {getSedimentLabelBed()}\n );\n}\n\nfunction getManningCoefficientLabel() {\n // m^(1/3)/s\n return (\n \n s/m1/3\n \n );\n}\n\n\nexport default function TreeInputOptions(props) {\n const [showModal, setShowModal] = React.useState(false);\n const parameters = props.parameters;\n const handleTextBoxOnChange = props.handleTextBoxOnChange;\n\n return (\n \n \n Channel Parameters{\" \"}\n \n \n \n setShowModal(false)}>\n \n Channel Parameters Help\n \n \n
\n

Channel Parameter Diagram

\n \n
\n

Tree Parameter Diagram

\n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n { /* n_sed */}\n \n \n \n \n \n \n \n
\n
\n );\n}\n","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport Form from \"react-bootstrap/Form\";\nimport NumberBox from \"../../elements/NumberBox\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\n\nexport default function CatchmentInputOptions(props) {\n const parameters = props.parameters;\n const handleTextBoxOnChange = props.handleTextBoxOnChange;\n\tconst updateParameters = props.updateParameters;\n\tconst [selectedPair, setSelectedPair] = React.useState(1);\n\n function getExponentLabel(base, exp, extra) {\n return (\n

\n {base}{exp}{extra}\n

\n );\n } \n\n return (\n \n Catchment\n \n \n \n \n \n {\n setSelectedPair(0);\n updateParameters({\n ...parameters,\n discharge: \"\",\n duration: \"\",\n });\n }}\n />\n {\n setSelectedPair(1);\n updateParameters({\n ...parameters,\n catchmentArea: \"\",\n returnPeriod: \"\",\n });\n }}\n />\n {\n setSelectedPair(2);\n updateParameters({\n ...parameters,\n duration: \"\",\n returnPeriod: \"\",\n });\n }}\n />\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n\n \n \n { parameters.erosionCoefficientChanged = true; handleTextBoxOnChange(event)} }\n />\n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport NumberBox from \"../../elements/NumberBox\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\n\nexport default function TreeInputOptions(props) {\n const parameters = props.parameters\n const handleTextBoxOnChange = props.handleTextBoxOnChange\n const cardName = props.name;\n const refName = cardName.replace(/\\s+/g, '');\n const invalidState = parameters[refName + \"DBH\"] === \"\";\n\n\n function precision(a) {\n if (!isFinite(a)) return 0;\n var e = 1, p = 1;\n while (Math.round(a * e) / e !== a) { e *= 10; p++; }\n\n return p;\n }\n\n const DBHPrecision = invalidState ? 1 : precision(parameters[refName + \"DBH\"]);\n\n function getDBH() {\n\n if (invalidState) {\n return 0;\n }\n\n // Use the time interval equation\n // DBH = DBH_0 * (1 + years *0.004)\n if (parameters.idealVegetationUseTimeInterval) {\n parameters[refName + \"IdealDBH\"] = (parameters[refName + \"DBH\"] + (parameters.idealVegetationTimeInterval * 0.004)).toPrecision(DBHPrecision);\n }\n\n return parameters[refName + \"IdealDBH\"];\n }\n\n const dbh = getDBH()\n\n return (\n \n {cardName}\n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport Form from \"react-bootstrap/Form\";\nimport NumberBox from \"../../elements/NumberBox\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\n\nexport default function CriticalShearStressOptions(props) {\n const parameters = props.parameters;\n const handleTextBoxOnChange = props.handleTextBoxOnChange;\n\n function getTauCOuterLabel() {\n return (\n

\n Outer User Defined τc\n

\n );\n } \n function getTauCInnerLabel() {\n return (\n

\n Inner User Defined τc\n

\n );\n } \n\n function getSigmaD50Sed(location) {\n return (\n \n {location} σD\n bank\n 50\n \n \n );\n }\n \n \n function getSedimentLabel(extra) {\n return (\n \n {extra} D\n bank\n 50\n \n \n );\n }\n\n return (\n \n Critical Shear Stress\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Model\n \n \n \n \n \n \n \n \n \n \n { parameters[\"criticalShearStressModel\"] === \"userDefined\" &&\n \n {getTauCInnerLabel()}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n }\n \n \n { parameters[\"criticalShearStressModel\"] === \"userDefined\" &&\n \n {getTauCOuterLabel()}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n }\n \n
\n
\n
\n
\n );\n}\n\n","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport NumberBox from \"../../elements/NumberBox\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\n\nexport default function WoodTransportOptions(props) {\n const parameters = props.parameters;\n const handleTextBoxOnChange = props.handleTextBoxOnChange;\n\n return (\n \n Wood Transport\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\n","import React from \"react\";\nimport Card from \"react-bootstrap/Card\";\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport TreeInputOptions from \"./input/TreeInputOptions\";\nimport ChannelParameterInputOptions from \"./input/ChannelParametersInputOptions\";\nimport CatchmentInputOptions from \"./input/CatchmentInputOptions\";\nimport IdealVegetationInputOptions from \"./input/IdealVegetationInputOptions\";\nimport NumberBox from \"../elements/NumberBox\";\nimport CriticalShearStressOptions from './input/CriticalShearStressOptions';\nimport WoodTransportOptions from \"./input/WoodTransportOptions\";\n\nexport default function InputPanel(props) {\n const updateParameters = props.updateParameters;\n const parameters = props.parameters;\n\n function handleTextBoxOnChange(event) {\n if (\n event.target.name === \"InnerTreeSpecies\" ||\n event.target.name === \"OuterTreeSpecies\" ||\n event.target.name === \"criticalShearStressModel\" ||\n event.target.name === \"calculationName\"\n ) {\n updateParameters({\n ...parameters,\n [event.target.name]: event.target.value,\n });\n } else if (event.target.name === \"idealVegetationUseTimeInterval\") {\n updateParameters({\n ...parameters,\n [event.target.name]: event.target.checked,\n idealVegetationUseTreeSize: !event.target.checked,\n });\n } else if (event.target.name === \"idealVegetationUseTreeSize\") {\n updateParameters({\n ...parameters,\n [event.target.name]: event.target.checked,\n idealVegetationUseTimeInterval: !event.target.checked,\n });\n } else if (event.target.name === \"criticalShearStressUserDefinedPaOuterCustom\") {\n updateParameters({\n ...parameters,\n \"criticalShearStressUserDefinedPaOuter\":\n event.target.value === \"\"\n ? event.target.value\n : parseFloat(event.target.value)\n });\n } else if (event.target.name === \"criticalShearStressUserDefinedPaInnerCustom\") {\n updateParameters({\n ...parameters,\n \"criticalShearStressUserDefinedPaInner\":\n event.target.value === \"\"\n ? event.target.value\n : parseFloat(event.target.value)\n });\n } else {\n updateParameters({\n ...parameters,\n [event.target.name]:\n event.target.value === \"\"\n ? event.target.value\n : parseFloat(event.target.value)\n });\n }\n }\n\n function onFormSubmit(event) {\n if (\n parameters.channelWidth / 2 > parameters.InnerBankTreeDistance\n ) {\n props.setError(\"Check Inner Tree Distance Parameter\");\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (\n parameters.channelWidth / 2 > parameters.OuterBankTreeDistance\n ) {\n props.setError(\"Check Outer Tree Distance Parameter\");\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n event.preventDefault();\n props.submit();\n }\n\n return (\n
\n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n Vegetation\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n Ideal Vegetation\n \n \n \n \n \n \n \n \n \n {parameters.idealVegetationUseTimeInterval && (\n \n \n \n Time Interval Options\n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n Calculation Information\n \n \n Calculation Name\n \n { event.target.select(); }}\n />\n \n \n \n \n\n \n \n \n \n \n \n
\n );\n}\n/*\n* - Catchment area + Return period (catchmentArea, returnPeriod)\n* - Discharge + duration (discharge, duration)\n* - Catchment area + discharge\n\n*/\n","import React from \"react\";\nimport Navbar from \"react-bootstrap/Navbar\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport {version} from '../globals.json';\n\nexport default function Header() {\n const [showModal, setShowModal] = React.useState(false);\n\n const handleShow = () => setShowModal(true);\n const handleClose = () => setShowModal(false);\n\n return (\n \n \n BankforNET\n by \n \n \n \n \n \n\n \n \n About BankForNET {version}\n \n\n \n

BankforNET

\n\n

\n Copyright (c) 2020-2023 CoSci LLC, USA\n\t\t\t\t\t\t
\n <software@cosci-llc.com>\n

\n\n\t\t\t\t\t

\n End user license agreement located here\n

\n\n

\n Full copyright and attributions located here\n

\n
\n\n \n \n \n
\n
\n );\n}\n","import React from 'react';\nimport \"./Footer.css\";\n\nexport default function Footer() {\n\treturn (\n\t\t\n\t);\n}\n","\n\nfunction convertErosionToDataset(dataset, skipAmount, label, color, hidden) {\n\n\tconst totals = []\n\n\ttotals.push({\n\t\ttype: 'line',\n\t\tfill: false,\n\t\tdata: dataset.erosionTotal.map(function(e, i) { return { x: i, y: e } }),\n\t\tborderColor: color,\n\t\tlabel: \"Total \" + label,\n\t\tpointRadius: 0,\n\t\thidden: hidden\n\t});\n\n\tif (dataset.erosionTotal1 !== undefined) {\n\t\ttotals.push({\n\t\t\ttype: 'line',\n\t\t\tfill: false,\n\t\t\tdata: dataset.erosionTotal1.map(function(e, i) { return { x: i, y: e } }),\n\t\t\tborderColor: color,\n\t\t\tlabel: \"_(2) Total \" + label,\n\t\t\tpointRadius: 0,\n\t\t\thidden: hidden\n\t\t});\n\t}\n\n\tif (dataset.erosionTotal2 !== undefined) {\n\t\ttotals.push({\n\t\t\ttype: 'line',\n\t\t\tfill: false,\n\t\t\tdata: dataset.erosionTotal2.map(function(e, i) { return { x: i, y: e } }),\n\t\t\tborderColor: color,\n\t\t\tlabel: \"_(3) Total \" + label,\n\t\t\tpointRadius: 0,\n\t\t\thidden: hidden\n\t\t});\n\t}\n\n\tconst inners = [];\n\tinners.push({\t\n\t\ttype: 'line',\n\t\tfill: false,\n\t\tdata: dataset.erosionInner.map(function(e, i) { return { x: i, y: e } }),\n\t\tborderColor: color,\n\t\tlabel: \"Inner \" + label,\n\t\tpointRadius: 0,\n\t\tborderDash: [5, 15],\n\t\thidden: hidden\n\t});\n\n\tif (dataset.erosionInner1 !== undefined) {\n\t\tinners.push({\n\t\t\ttype: 'line',\n\t\t\tfill: false,\n\t\t\tdata: dataset.erosionInner1.map(function(e, i) { return { x: i, y: e } }),\n\t\t\tborderColor: color,\n\t\t\tlabel: \"_(1) Inner \" + label,\n\t\t\tpointRadius: 0,\n\t\t\tborderDash: [5, 15],\n\t\t\thidden: hidden\n\t\t});\n\t}\n\n\tif (dataset.erosionInner2 !== undefined) {\n\t\tinners.push({\n\t\t\ttype: 'line',\n\t\t\tfill: false,\n\t\t\tdata: dataset.erosionInner2.map(function(e, i) { return { x: i, y: e } }),\n\t\t\tborderColor: color,\n\t\t\tlabel: \"_(2) Inner \" + label,\n\t\t\tpointRadius: 0,\n\t\t\tborderDash: [5, 15],\n\t\t\thidden: hidden\n\t\t});\n\t}\n\n\tconst outers = [];\n\touters.push({\n\t\ttype: 'line',\n\t\tfill: false,\n\t\tdata: dataset.erosionOuter.map(function(e, i) { return { x: i, y: e } }),\n\t\tborderColor: color,\n\t\tlabel: \"Outer \" + label,\n\t\tpointRadius: 0,\n\t\tborderDash: [2, 5],\n\t\thidden: hidden\n\t});\n\n\tif (dataset.erosionOuter1 !== undefined) {\n\t\touters.push({\n\t\t\ttype: 'line',\n\t\t\tfill: false,\n\t\t\tdata: dataset.erosionOuter1.map(function(e, i) { return { x: i, y: e } }),\n\t\t\tborderColor: color,\n\t\t\tlabel: \"_(1) Outer \" + label,\n\t\t\tpointRadius: 0,\n\t\t\tborderDash: [2, 5],\n\t\t\thidden: hidden\n\t\t});\n\t}\n\n\tif (dataset.erosionOuter2 !== undefined) {\n\t\touters.push({\n\t\t\ttype: 'line',\n\t\t\tfill: false,\n\t\t\tdata: dataset.erosionOuter2.map(function(e, i) { return { x: i, y: e } }),\n\t\t\tborderColor: color,\n\t\t\tlabel: \"_(2) Outer \" + label,\n\t\t\tpointRadius: 0,\n\t\t\tborderDash: [2, 5],\n\t\t\thidden: hidden\n\t\t});\n\t}\n\n\treturn {\n\t\tdatasets: [ ...totals,\n\t\t\t...inners,\n\t\t\t...outers],\n\t\tmetrics: {\n\t\t\tmaxShearStressInner: dataset.maxAppliedShearStressInner,\n\t\t\tmaxShearStressOuter: dataset.maxAppliedShearStressOuter,\n\t\t\tmaxRARPercentageInner: dataset.maxRARPercentageInner,\n\t\t\tmaxRARPercentageOuter: dataset.maxRARPercentageOuter,\n\t\t\tcriticalShearStressInner: dataset.criticalShearStressInner,\n\t\t\tcriticalShearStressOuter: dataset.criticalShearStressOuter,\n\t\t\ttotalErosionInner: Math.max(...dataset.erosionInner),\n\t\t\ttotalErosionOuter: Math.max(...dataset.erosionOuter),\n\t\t}\n\t};\n}\n\nconst yLabel = \"Erosion [m]\"\n\nexport default function getErosionDataset(datasets, skipAmount) {\n\t//Datasets\n\tconst noVeggie = datasets.noVeggie;\n\tconst veggie = datasets.veggie;\n\tconst idealVeggie = datasets.idealVeggie;\n\n\tconst returnData = []\n\t\n\tconst noVeggieDataset = convertErosionToDataset(noVeggie, skipAmount, \"No Vegetation\", \"#000000\", true);\n\tconst veggieDataset = convertErosionToDataset(veggie, skipAmount, \"Vegetation\", \"#00AF00\", false);\n\tconst idealVeggieDataset = convertErosionToDataset(idealVeggie, skipAmount, \"Ideal Vegetation\", 'orange', true);\n\t\n\treturnData.push(...noVeggieDataset.datasets)\n\treturnData.push(...veggieDataset.datasets)\n\treturnData.push(...idealVeggieDataset.datasets)\n\n\n\n\treturn [{ \n\t\t\tyLabel: yLabel,\n\t\t\tdatasets: returnData},\n\n\t\t\t{\n\t\t\t\tnoVeggie: noVeggieDataset.metrics,\n\t\t\t\tveggie: veggieDataset.metrics,\n\t\t\t\tidealVeggie: idealVeggieDataset.metrics\n\t\t\t}\n\t\t\n\t\t]\n\t\n}\n","import React, {useEffect} from \"react\";\nimport { Chart, ScatterController, LineElement, PointElement, LinearScale, CategoryScale, Title, Legend, Tooltip } from \"chart.js\";\nimport { isMobile } from \"react-device-detect\";\n\n\nconst backgroundPlugin = {\n id: 'custom_canvas_background_color',\n beforeDraw: (chart) => {\n const ctx = chart.canvas.getContext('2d');\n ctx.save();\n ctx.globalCompositeOperation = 'destination-over';\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, chart.width, chart.height);\n ctx.restore();\n }\n};\n\n\nChart.register(ScatterController, LineElement, PointElement, LinearScale, CategoryScale, Legend, Title, Tooltip, backgroundPlugin);\n\nexport default function NibiousChart(props) {\n const chartObjects = props.chartObjects;\n const [isLandscape, setIsLandscape] = React.useState(window.innerHeight < window.innerWidth);\n\n let max = 0;\n for (let index in chartObjects.datasets) {\n const dataset = chartObjects.datasets[index][\"data\"];\n max = Math.max(max, ...dataset);\n }\n\n const shouldAdaptToMobile = isMobile && !isLandscape;\n\n function setScreenOrientation(event) {\n setIsLandscape(event.target.orientation === 0 ? false : true);\n }\n\n useEffect(() => {\n window.addEventListener(\"resize\", setScreenOrientation);\n\n const ctx = document.getElementById(props.id);\n\n const myChart = new Chart(ctx, {\n type: 'scatter',\n data: {\n datasets: chartObjects.datasets\n },\n options: {\n bezierCurve: false,\n \n elements: {\n point: {\n radius: 0\n },\n }, \n responsive: true,\n aspectRatio: shouldAdaptToMobile ? 1 : 2,\n scales: {\n x: {\n beginAtZero: true,\n type: 'linear',\n ticks: {\n stepSize: 60\n },\n title: {\n text: \"Time [min]\",\n display: true,\n },\n },\n y: {\n type: 'linear',\n position: 'left',\n title: {\n text: chartObjects.yLabel,\n display: true,\n },\n ticks: {\n autoSkip: true\n },\n },\n y1: {\n type: 'linear',\n position: 'right',\n display: chartObjects.y1Label !== undefined ? true : false,\n title: {\n text: chartObjects.y1Label,\n display: true,\n },\n ticks: {\n autoSkip: true\n },\n }\n },\n interaction: {\n mode: 'index'\n },\n plugins: {\n legend: {\n display: true,\n position: \"bottom\",\n labels: {\n boxHeight: 0,\n filter: function(item, chart) {\n return !item.text.includes('_');\n }\n },\n onClick: function(e, legendItem) { // need to hide index +1 and index +2 for additional lines\n let index = legendItem.datasetIndex;\n let ci = this.chart;\n\n let line = ci.getDatasetMeta(index);\n let line1 = ci.getDatasetMeta(index + 1);\n let line2 = ci.getDatasetMeta(index + 2);\n\n line.hidden = line.hidden === null ? line.visible : !line.hidden;\n\n if(line1.label !== undefined && line1.label.includes(\"_\")) {\n line1.hidden = line1.hidden === null ? line1.visible : !line1.hidden;\n }\n\n if(line2.label !== undefined && line2.label.includes(\"_\")) {\n line2.hidden = line2.hidden === null ? line2.visible : !line2.hidden;\n }\n\n ci.update();\n },\n },\n tooltip: {\n enabled: true,\n intersect: true,\n boxHeight: 1,\n borderWidth: 5,\n position: \"nearest\",\n callbacks: {\n label: function(context) {\n var label = context.dataset.label || '';\n\n if (label) {\n if(label.includes(\"_\")) {\n label = label.substring(1)\n }\n label += ': ';\n }\n if (!isNaN(context.formattedValue)) {\n label += context.formattedValue;\n }\n return label;\n }\n }\n }\n }\n }\n });\n\n return function cleanup() {\n myChart.destroy()\n window.removeEventListener(\"resize\", setScreenOrientation);\n };\n }, [props.chartObjects, shouldAdaptToMobile]);\n\n return (\n\n
\n \n
\n );\n}\n","import React, { useEffect } from \"react\";\nimport getErosionDataset from \"../getErosionDataset\";\nimport Chart from \"../../elements/Chart\";\nimport Table from \"react-bootstrap/Table\";\n\n\nfunction DisplayErosionMetrics(data, showRAR=true, type) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { showRAR && \n \n \n \n \n \n }\n \n \n \n \n \n \n \n \n \n \n \n
Inner BankOuter Bank
Max Applied Shear Stress (Pa){data.maxShearStressInner.toFixed(2)}{data.maxShearStressOuter.toFixed(2)}
Max RAR Percentage{data.maxRARPercentageInner.toFixed(2)}{data.maxRARPercentageOuter.toFixed(2)}
Critical Shear Stress (Pa){data.criticalShearStressInner.toFixed(2)}{data.criticalShearStressOuter.toFixed(2)}
Total Erosion (m){data.totalErosionInner.toFixed(2)}{data.totalErosionOuter.toFixed(2)}
\n );\n}\n\nfunction HiddenExportTable(noVeggie, veggie, idealVeggie) {\n\n const data = [ noVeggie, veggie, idealVeggie];\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n {\n data.map((d, i) => {\n return \n })\n }\n \n \n \n )\n}\n\nexport default function ErosionTab(props) {\n const [chartObjects, setChartObjects] = React.useState({\n xLabels: [],\n datasets: [],\n });\n const skipAmount = 1;\n\n useEffect(() => {\n if (props.datasets.length === 0) {\n return;\n\t\t}\n\n setChartObjects(getErosionDataset(props.datasets, skipAmount));\n }, [props.datasets]);\n\n if (\n chartObjects.xLabels !== undefined\n ) {\n return null;\n }\n\n\treturn (\n\t\t
\n\t\t\t

Erosion

\n\t\t\t\n\t\t\t
\n\t\t\t

No Vegetation Metrics

\n\t\t\t{DisplayErosionMetrics(chartObjects[1].noVeggie, false, \"NoVegetation\")}\n\t\t\t

Vegetation Metrics

\n\t\t\t{DisplayErosionMetrics(chartObjects[1].veggie, true, \"Vegetation\")}\n\t\t\t

Ideal Vegetation Metrics

\n\t\t\t{DisplayErosionMetrics(chartObjects[1].idealVeggie, true, \"IdealVegetation\")}\n {HiddenExportTable(chartObjects[1].noVeggie, chartObjects[1].veggie, chartObjects[1].idealVeggie)}\n\t\t
\n\t);\n\n}","\n\nfunction convertDatasetToMetrics(dataset) {\n\treturn {\n\t\tmaxDischarge: dataset.maxDischarge,\n\t\tareaOfChannelAtMaxDischarge: dataset.areaOfChannelAtMaxDischarge\n\t}\n}\n\nfunction convertFlowHeightToDataset(dataset, skipAmount, label, color) {\n\n\treturn {\n\t\ttype: 'line',\n\t\tfill: false,\n\t\tdata: dataset.flowHeight.map(function(e, i) { return { x: i, y: e } }),\n\t\tborderColor: color,\n\t\tlabel: label,\n\t\tpointRadius: 0,\n\t\trow: 'Flow Height',\n\t\tcol: label,\n\t\tyAxisID: 'y'\n\t}\n}\n\n\nexport default function getFlowHeightDataset(datasets, skipAmount) {\n\t\n\t//Datasets\n\tconst noVeggie = datasets.noVeggie;\n\tconst veggie = datasets.veggie;\n\tconst idealVeggie = datasets.idealVeggie;\n\n\tconst returnSets = [];\n\t\n\treturnSets.push(convertFlowHeightToDataset(noVeggie, skipAmount, \"No Vegetation\", 'red'));\n\treturnSets.push(convertFlowHeightToDataset(veggie, skipAmount, \"Vegetation\", 'blue'));\n\treturnSets.push(convertFlowHeightToDataset(idealVeggie, skipAmount, \"Ideal Vegetation\", 'green'));\n\t\n\treturn { yLabel:\"Flow Height [m]\",\n\t datasets: returnSets, metrics: {\n\t\tnoVeggie: convertDatasetToMetrics(noVeggie),\n\t\tveggie: convertDatasetToMetrics(veggie),\n\t\tidealVeggie: convertDatasetToMetrics(idealVeggie),\n\t}};\n}\n","\nfunction convertDatasetToMetrics(dataset) {\n\tconst reducer = (acc, currentValue) => acc + currentValue;\n\t\n\treturn {\n\t\ttotalSedimmentVolume: dataset.qsed.reduce(reducer) * 60,\n\t\tminTotalSedimmentVolume: dataset.qsedmin.reduce(reducer) * 60,\n\t\tmaxTotalSedimmentVolume: dataset.qsedmax.reduce(reducer) * 60\n\n\t}\n}\n\nfunction convertQSedToDataset(dataset, skipAmount, label, color) {\n\n\treturn {\n\t\ttype: 'line',\n\t\tfill: false,\n\t\tdata: dataset.qsed.map(function(e, i) { return { x: i, y: e } }),\n\t\tborderColor: color,\n\t\tlabel: label + \"Qsed\",\n\t\tpointRadius: 0,\n\t\tyAxisID: 'y1',\n\t\trow: 'Qsed',\n\t\tcol: label,\n\t\tborderDash: [2, 5],\n\t\thidden: false\n\t}\n}\n\nexport default function getQSedDataset(datasets, skipAmount) {\n\t\n\t//Datasets\n\tconst noVeggie = datasets.noVeggie;\n\tconst veggie = datasets.veggie;\n\tconst idealVeggie = datasets.idealVeggie;\n\n\tconst returnSets = [];\n\t\n\treturnSets.push(convertQSedToDataset(noVeggie, skipAmount, \"No Vegetation\", 'red'));\n\treturnSets.push(convertQSedToDataset(veggie, skipAmount, \"Vegetation\" , 'blue'));\n\treturnSets.push(convertQSedToDataset(idealVeggie, skipAmount, \"Ideal Vegetation\", 'green'));\n\n\treturn {\n\t datasets: returnSets, metrics: {\n\t\tqSednoVeggie: convertDatasetToMetrics(noVeggie),\n\t\tqSedveggie: convertDatasetToMetrics(veggie),\n\t\tqSedidealVeggie: convertDatasetToMetrics(idealVeggie),\n\t},\n\ty1Label: \"Qsed [m³/s]\"\n\n\n};\n}\n","const pluginName = 'chartjs-plugin-matrix-legend';\nconst padding = 15;\nconst line_length = 40;\n\n/**\n * Checks if configuration contains all required fields\n * @param {Chart} chartInstance \n */\n function checkPluginConfiguration(chartInstance) {\n\tconst requiredFields = { }\n\n\tif (!(pluginName in chartInstance.options.plugins)) {\n\t\t\tconsole.warn(\"Options are missing configuration for the 'axislegend' plugin.\")\n\t\t\tchartInstance.options.plugins[pluginName] = {}\n\t}\n\n\tObject.keys(requiredFields).forEach((field) => {\n\t\t\tif (!(field in chartInstance.options.plugins[pluginName])) {\n\t\t\t\t\tconsole.warn(\"Plugin '\" + pluginName + \"' configuration is missing '\" + field + \"', using default value.\")\n\t\t\t\t\tchartInstance.options.plugins[pluginName][field] = requiredFields[field]\n\t\t\t}\n\t})\n}\n\nfunction isNullOrUndef(value) {\n\treturn value === null || typeof value === 'undefined';\n}\n\nfunction toFontString(font) {\n\tif (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n\t\treturn null;\n\t}\n\treturn (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\nfunction isEventInBoundaries(event, chart) {\n\n\tconst boundingRect = chart.chartArea;\n\n\tconst x = event.clientX - boundingRect.left\n\tconst y = event.clientY - boundingRect.top\n\n\t// NOTE: the Y axis is switched\n\tif (x < chart.chartArea.left || x > chart.chartArea.right ||\n\t\t\ty < chart.chartArea.top || y > chart.chartArea.bottom) {\n\t\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunction onClick(chartInstance, event) {\n\t\n\tif (!isEventInBoundaries(event, chartInstance)) {\n\t\t\treturn\n\t}\n\tconsole.log(\"MOUSE DOWN!\");\n\tconsole.log(chartInstance);\n\tconst boundingRect = chartInstance.chartArea;\n\tconsole.log(boundingRect);\n\tconst location = { x: event.event.x , y: event.event.y }\n\t\n\t// Find the clicked area\n\tchartInstance.config.data.datasets.forEach((dataset) => {\n\t\t\n\t\t// Was click inside the box for the dataset?\n\n\t\t// was it within the x coords?\n\t\tif (location.x < dataset.realPosition.x || location.x > dataset.realPosition.x + line_length) {\n\t\t\treturn; //Nope\n\t\t}\n\n\t\t// was it within the y coords?\n\t\tif (location.y < dataset.realPosition.y - 10 || location.y > dataset.realPosition.y + 10) {\n\t\t\treturn; //Nope\n\t\t}\n\n\t\t\n\t\tdataset.hidden = dataset.hidden === null ? dataset.visible : !dataset.hidden;\n\t\tchartInstance.update();\n\t\treturn true\n\t\t\n\t});\n}\n\n\n\nconst MatrixLegendPlugin = {\n\tid: pluginName,\n\tevents: { \"click\": onClick },\n\n\tbeforeInit: (chartInstance) => {\n\t\t\tcheckPluginConfiguration(chartInstance)\n\n\t\t\tconst legend = chartInstance.options.plugins.legend\n\t\t\tif (legend.display && legend.position === \"top\") {\n\t\t\t\t\tconsole.warn(\"When using the axis legend plugin, the legend must not be at the top, or the legend must be disabled. Moving legend to the bottom.\")\n\t\t\t\t\tchartInstance.options.legend.position = \"bottom\"\n\t\t\t}\n\t},\n\n\tafterEvent: (chartInstance, args) => {\n\t\t\t\n\t\t\tif(args.event.type === \"click\") {\n\t\t\t\tconsole.log(args);\n\t\t\t\tonClick(chartInstance, args);\n\t\t\t\targs.changed = true;\n\t\t\t\treturn;\n\t\t\t}\n\t},\n\n\n\tbeforeLayout: (chartInstance) => {\n\t\t\tchartInstance.options.layout.padding.bottom = 100;\n\t},\n\n\tafterDraw: (chartInstance) => {\n\n\t\t\t// Divide data up into rows...\n\t\t\tconst rows = {};\n\t\t\tchartInstance.config.data.datasets.forEach((dataset) => {\n\t\t\t\tif (dataset.row in rows) {\n\t\t\t\t\trows[dataset.row].push(dataset);\n\t\t\t\t} else {\n\t\t\t\t\trows[dataset.row] = [dataset];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Get cols\n\t\t\tconst cols = {};\n\t\t\tchartInstance.config.data.datasets.forEach((dataset) => {\n\t\t\t\tif (!(dataset.col in cols)) {\n\t\t\t\t\tcols[dataset.col] = {\"x\": -1, \"y\": -1, \"size\": 0};\n\t\t\t\t} \n\t\t\t});\n\n\t\t\tconst base_y = chartInstance.scales.x.bottom + padding;\n\t\t\t\n\t\t\tconst ctx = chartInstance.ctx;\n\n\t\t\tlet total_length = 0;\n\t\t\tlet col_name_length = 0;\n\t\t\t// Get length of each category\n\t\t\tfor (let col in cols) {\n\t\t\t\tcol_name_length += ctx.measureText(col).width + 10;\n\t\t\t}\n\n\t\t\tfor (let row in rows) {\n\t\t\t\t// Print the label\n\t\t\t\tconst textSize = ctx.measureText(row);\n\t\t\t\tlet row_x_adj = textSize.width + col_name_length;\n\t\t\t\tif (row_x_adj > total_length) {\n\t\t\t\t\ttotal_length = row_x_adj;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst base_x = chartInstance.width/2 - total_length/2;\n\n\t\t\t\n\n\t\t\t// Now print out row by row. We will be printing columns when we run\n\t\t\t// into them. This will make it easier to keep track of what is going \n\t\t\t// on and it should be faster hopefully.\n\t\t\tlet row_y_adj = 15;\n\t\t\tctx.save();\n\n\t\t\tfor (let row in rows) {\n\t\t\t\tlet row_x_adj = 0;\n\t\t\t\t// Print the label\n\t\t\t\tctx.font = toFontString(chartInstance.options.font);\n\t\t\t\tctx.fillStyle = \"#666\";\n\t\t\t\tctx.fillText(row, base_x, base_y + row_y_adj);\n\t\t\t\tconst textSize = ctx.measureText(row);\n\t\t\t\trow_x_adj += textSize.width;\n\n\t\t\t\t// Move over and print each category\n\t\t\t\tfor (let dataset_index in rows[row]) {\n\t\t\t\t\tconst dataset = rows[row][dataset_index];\n\t\t\t\t\tif(cols[dataset.col].x === -1) { // Print a new column\n\n\t\t\t\t\t\t//Check for next available spot\n\t\t\t\t\t\tlet x = base_x + row_x_adj + 10;\n\t\t\t\t\t\tfor (let printed_col in cols) {\n\t\t\t\t\t\t\t//We have already printed a column -- find the farthest out\n\t\t\t\t\t\t\tif (cols[printed_col].x !== -1) {\n\t\t\t\t\t\t\t\tif (cols[printed_col].x >= x) {\n\t\t\t\t\t\t\t\t\tx = cols[printed_col].x + cols[printed_col].size.width + 10;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcols[dataset.col].x = x;\n\t\t\t\t\t\tcols[dataset.col].y = base_y;\n\t\t\t\t\t\tcols[dataset.col].size = ctx.measureText(dataset.col);\n\n\t\t\t\t\t\tctx.font = toFontString(chartInstance.options.font);\n\t\t\t\t\t\tctx.fillStyle = \"#666\";\n\t\t\t\t\t\tctx.fillText(dataset.col, cols[dataset.col].x, cols[dataset.col].y)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst start_x = cols[dataset.col].x + cols[dataset.col].size.width/2 - line_length/2;\n\t\t\t\t\tconst start_y = base_y + row_y_adj - cols[dataset.col].size.actualBoundingBoxAscent/2;\n\n\t\t\t\t\tif (chartInstance.options.plugins[pluginName].mouseClickLocation !== undefined) {\n\t\t\t\t\t\tif(chartInstance.options.plugins[pluginName].mouseClickLocation.x)\n\n\t\t\t\t\t\tchartInstance.options.plugins[pluginName].mouseClickLocation = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t// Now move underneath the column and draw the line!\n\t\t\t\t\tctx.strokeStyle = dataset.borderColor;\n\t\t\t\t\tif (dataset.borderDash !== undefined) {\n\t\t\t\t\t\tctx.setLineDash(dataset.borderDash);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.setLineDash([]);\n\t\t\t\t\t}\n\t\t\t\t\tctx.lineWidth = 3;\n\t\t\t\t\tctx.moveTo(start_x, start_y);\n\t\t\t\t\tctx.lineTo(start_x + line_length, start_y);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tif(dataset.hidden) {\n\t\t\t\t\t\tctx.strokeStyle = '#666';\n\t\t\t\t\t\tctx.lineWidth = 1;\n\t\t\t\t\t\tctx.setLineDash([]);\n\t\t\t\t\t\tctx.moveTo(start_x, start_y - 5);\n\t\t\t\t\t\tctx.lineTo(start_x + line_length, start_y + 5);\n\n\t\t\t\t\t\tctx.moveTo(start_x, start_y + 5);\n\t\t\t\t\t\tctx.lineTo(start_x + line_length, start_y - 5);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t\t// Add bounding box info to storage for click events later\n\t\t\t\t\tdataset.realPosition = { \"x\": start_x, \"y\": start_y }\n\n\t\t\t\t}\n\n\t\t\t\trow_y_adj += textSize.actualBoundingBoxAscent + 10;\n\t\t\t}\n\n\t\t\tctx.strokeStyle = '';\n\t\t\tctx.restore();\n\t}\n}\n\nexport default MatrixLegendPlugin\n","import React, {useEffect} from \"react\";\nimport { Chart, ScatterController, LineElement, PointElement, LinearScale, CategoryScale, Title, Tooltip } from \"chart.js\";\nimport MatrixLegendPlugin from './DualLegend';\nimport { isMobile } from \"react-device-detect\";\n\n\nexport default function NibiousChart(props) {\n const chartObjects = props.chartObjects;\n const [isLandscape, setIsLandscape] = React.useState(window.innerHeight < window.innerWidth);\n\n let max = 0;\n for (let index in chartObjects.datasets) {\n const dataset = chartObjects.datasets[index][\"data\"];\n max = Math.max(max, ...dataset);\n }\n\n const shouldAdaptToMobile = isMobile && !isLandscape;\n\n function setScreenOrientation(event) {\n setIsLandscape(event.target.orientation === 0 ? false : true);\n }\n\n useEffect(() => {\n window.addEventListener(\"resize\", setScreenOrientation);\n\n const ctx = document.getElementById(props.id);\n\n const myChart = new Chart(ctx, {\n plugins: [ScatterController, LineElement, PointElement, LinearScale, CategoryScale, MatrixLegendPlugin, Title, Tooltip],\n type: 'scatter',\n data: {\n datasets: chartObjects.datasets\n },\n options: {\n responsive: true,\n aspectRatio: shouldAdaptToMobile ? 1 : 2,\n scales: {\n x: {\n beginAtZero: true,\n type: 'linear',\n ticks: {\n stepSize: 60\n },\n title: {\n text: \"Time [min]\",\n display: true,\n },\n },\n y: {\n type: 'linear',\n position: 'left',\n title: {\n text: chartObjects.yLabel,\n display: true,\n },\n ticks: {\n autoSkip: true\n },\n },\n y1: {\n type: 'linear',\n position: 'right',\n display: chartObjects.y1Label !== undefined ? true : false,\n title: {\n text: chartObjects.y1Label,\n display: true,\n },\n ticks: {\n autoSkip: true\n },\n }\n },\n interaction: {\n mode: 'index'\n },\n plugins: {\n legend: {\n display: false,\n position: \"bottom\",\n labels: {\n boxHeight: 0,\n filter: function(item, chart) {\n return !item.text.includes('_');\n }\n },\n onClick: function(e, legendItem) { // need to hide index +1 and index +2 for additional lines\n let index = legendItem.datasetIndex;\n let ci = this.chart;\n\n let line = ci.getDatasetMeta(index);\n let line1 = ci.getDatasetMeta(index + 1);\n let line2 = ci.getDatasetMeta(index + 2);\n\n line.hidden = line.hidden === null ? line.visible : !line.hidden;\n\n if(line1.label !== undefined && line1.label.includes(\"_\")) {\n line1.hidden = line1.hidden === null ? line1.visible : !line1.hidden;\n }\n\n if(line2.label !== undefined && line2.label.includes(\"_\")) {\n line2.hidden = line2.hidden === null ? line2.visible : !line2.hidden;\n }\n\n ci.update();\n },\n },\n tooltip: {\n enabled: true,\n intersect: true,\n boxHeight: 1,\n borderWidth: 5,\n position: \"nearest\",\n callbacks: {\n label: function(context) {\n var label = context.dataset.label || '';\n\n if (label) {\n if(label.includes(\"_\")) {\n label = label.substring(1)\n }\n label += ': ';\n }\n if (!isNaN(context.formattedValue)) {\n label += context.formattedValue;\n }\n return label;\n }\n }\n }\n }\n }\n });\n\n return function cleanup() {\n myChart.destroy()\n window.removeEventListener(\"resize\", setScreenOrientation);\n };\n }, [props.chartObjects, shouldAdaptToMobile]);\n\n // minHeight: isLandscape ? \"100vh\" : \"100vh\", minWidth: isLandscape ? \"100%\" : \"90vw\"\n return (\n
\n \n
\n );\n}\n","import React, { useEffect } from \"react\";\nimport getFlowHeightDataset from \"../getFlowHeightDataset\";\nimport getQSedDataset from \"../getQsedDataset\";\nimport Chart from \"../../elements/FlowChart\";\nimport Table from \"react-bootstrap/Table\";\n\nfunction DisplayFlowHeightMetrics(maxDischarge, areaOfChannelAtMaxDischarge, inputs) {\n\n //====BEGIN AREA OF CHANNEL CALC====\n \n\n //Area of channel\n const area_of_channel = areaOfChannelAtMaxDischarge;\n\n //====END AREA OF CHANNEL CALC====\n\n //====BEGIN Steam power calc =====\n \n const density_of_water = 999\n const gravity = 9.81\n const stream_power = density_of_water * gravity * maxDischarge * inputs.channelSlope;\n //====END Steam power calc =====\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Values
Max Water Discharge (m3/s){maxDischarge.toFixed(2)}
Mean Flow Velocity at Peak Flow (m/s){(maxDischarge/area_of_channel).toFixed(2)}
Stream Power at Peak Flow (W){stream_power.toFixed(2)}
\n );\n}\n\nfunction DisplaySedimentMetrics(metrics) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
No VegetationVegetationIdeal Vegetation
Total Sediment Volume (m3){metrics.qSednoVeggie.totalSedimmentVolume.toFixed(2)}{metrics.qSedveggie.totalSedimmentVolume.toFixed(2)}{metrics.qSedidealVeggie.totalSedimmentVolume.toFixed(2)}
Minimum Total Sediment Volume (m3){metrics.qSednoVeggie.minTotalSedimmentVolume.toFixed(2)}{metrics.qSedveggie.minTotalSedimmentVolume.toFixed(2)}{metrics.qSedidealVeggie.minTotalSedimmentVolume.toFixed(2)}
Maximum Total Sediment Volume (m3){metrics.qSednoVeggie.maxTotalSedimmentVolume.toFixed(2)}{metrics.qSedveggie.maxTotalSedimmentVolume.toFixed(2)}{metrics.qSedidealVeggie.maxTotalSedimmentVolume.toFixed(2)}
\n );\n}\n\nexport default function FlowHeightTab(props) {\n const [chartObjects, setChartObjects] = React.useState({\n xLabels: [],\n datasets: [],\n });\n const skipAmount = 1;\n\n useEffect(() => {\n if (props.datasets.length === 0) {\n return;\n\t\t}\n\t\tconst flowHeightObject = getFlowHeightDataset(props.datasets, skipAmount); \n\n const qsedObject = getQSedDataset(props.datasets, skipAmount);\n\n flowHeightObject.datasets.splice(1, 0, qsedObject.datasets[0]);\n flowHeightObject.datasets.splice(3, 0, qsedObject.datasets[1]);\n flowHeightObject.datasets.splice(5, 0, qsedObject.datasets[2]);\n \n \n const combinedChartObjects = {\n yLabel : flowHeightObject.yLabel,\n datasets: flowHeightObject.datasets,\n metrics: {\n ...flowHeightObject.metrics,\n ...qsedObject.metrics\n },\n y1Label: qsedObject.y1Label\n }\n\n setChartObjects(combinedChartObjects);\n }, [props.datasets]);\n\n if (\n chartObjects.xLabels !== undefined &&\n chartObjects.xLabels.length === 0\n ) {\n return null;\n }\n\n\treturn( \n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t

Flow Height Metrics

\n\t\t\t{DisplayFlowHeightMetrics(chartObjects.metrics.veggie.maxDischarge, chartObjects.metrics.veggie.areaOfChannelAtMaxDischarge, props.inputs)}\n
\n

Sediment Metrics

\n {DisplaySedimentMetrics(chartObjects.metrics)}\n\t
\n\t);\n}\n","\n\n\nfunction convertTranportToDataset(dataset, skipAmount, label, color) {\n\tconst inner = {\n\t\ttype: 'line',\n\t\tfill: false,\n\t\tdata: dataset.transportCapacity.map(function(e, i) { return { x: i, y: e } }),\n\t\tborderColor: color[0],\n\t\tlabel: label,\n\t\tpointRadius: 0\n\t};\n\t\n\treturn inner;\n}\n\nconst yLabel = \"Transport capacity\"\n\nexport default function getTransportDataset(datasets, skipAmount) {\n\t//Datasets\n\tconst noVeggie = datasets.noVeggie;\n\tconst veggie = datasets.veggie;\n\tconst idealVeggie = datasets.idealVeggie;\n\t\n\tconst veggieDataset = convertTranportToDataset(veggie, skipAmount, \"Vegetation\", ['green', 'purple']);\n\tconst idealVeggieDataset = convertTranportToDataset(idealVeggie, skipAmount, \"Ideal Vegetation\", ['orange', 'black']);\n\n\treturn [\n\t\t{ \n\t\t\tyLabel: yLabel,\n\t\t\tdatasets: [\n\t\t\t\tveggieDataset,\n\t\t\t\tidealVeggieDataset\n\t\t\t]\n\t\t}\t\n\t];\n}\n","import React, { useEffect } from \"react\";\nimport getTransportDataset from \"../getTransportDataset\";\nimport Chart from \"../../elements/Chart\";\n\nexport default function TransportTab(props) {\n const [chartObjects, setChartObjects] = React.useState({\n xLabels: [],\n datasets: [],\n });\n const skipAmount = 1;\n\n useEffect(() => {\n if (props.datasets.length === 0) {\n return;\n\t\t}\n\t\t\n setChartObjects(getTransportDataset(props.datasets, skipAmount));\n }, [props.datasets]);\n\n if (\n chartObjects.xLabels !== undefined\n ) {\n return null;\n }\n\n\treturn (\n\t\t
\n\t\t\t

Wood Transport

\n\t\t\t\n\t\t\t
\n\t\t
\n\t);\n\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport * as serviceWorker from '../serviceWorker';\nimport Alert from 'react-bootstrap/Alert';\n\nexport default function UpdatePWAAlert() {\n\n\tconst [showReload, setShowReload] = React.useState(false);\n\tconst [waitingWorker, setWaitingWorker] = React.useState(null);\n\n\tconst onSWUpdate = (registration) => {\n\t\tsetShowReload(true);\n\t\tsetWaitingWorker(registration.waiting);\n\t};\n\n\tReact.useEffect(() => {\n\t\tserviceWorker.register({ onUpdate: onSWUpdate });\n\t}, []);\n\n\tconst reloadPage = () => {\n\t\tif(waitingWorker !== null) {\n\t\t\twaitingWorker.postMessage({ type: 'SKIP_WAITING' });\n\t\t}\n\t\t\n\t\tsetShowReload(false);\n\t\twindow.location.reload(true);\n\t};\n\n\treturn (\n\t\t\n \tClick here to update the page!\n \t\n\t);\n\n}\n\n\n\n\n","import React from 'react';\nimport './App.css';\nimport ErosionCalculator from './components/ErosionCalculator';\nimport InputPanel from './components/InputPanel';\nimport Container from 'react-bootstrap/Container';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Header from './components/Header';\nimport Footer from './components/Footer';\nimport Alert from 'react-bootstrap/Alert';\nimport Tab from 'react-bootstrap/Tab';\nimport ErosionTab from './components/tabs/ErosionTab';\nimport FlowHeightTab from './components/tabs/FlowHeightTab';\nimport TransportTab from './components/tabs/TransportTab';\nimport UpdatePWAAlert from './components/updatePWAAlert';\nimport { isMobile } from \"react-device-detect\";\nimport Modal from 'react-bootstrap/Modal';\nimport Spinner from 'react-bootstrap/Spinner';\nimport { Button, Nav } from 'react-bootstrap';\nimport JSZip from 'jszip';\nimport saveAs from 'file-saver';\nimport { Chart } from \"chart.js\";\n\nfunction App() {\n\n function getTempRunName() {\n const d = new Date();\n return `BankforNetWeb_Run_${d.getFullYear()}-${d.getMonth()}-${d.getDate()}-${d.getTime()}`;\n }\n\n\n const [tabKey, setTabKey] = React.useState(\"input\");\n\n /*\n // Below is SW from BankforNET\n const [bankforNETParameters, setBankforNETParameters] = React.useState({\n returnPeriod: \"\",\n catchmentArea: \"\",\n duration: 2334,\n discharge: 130,\n bankHeightInner: 0.6,\n bankHeightOuter: 0.6,\n channelWidth: 62,\n channelSlope: 0.007,\n innerBankSlope: 85,\n meanChannelInclination: 0.007,\n d50Porosity: 0.3,\n sigmad50nsed: 0.03,\n outerBankSlope: 85,\n bendRadius: 185,\n d50Inner: 27,\n d50InnerSD: 2.7,\n d50Outer: 27,\n d50OuterSD: 2.7,\n d50SedimentBed: 27,\n sigmad50sed: 2.7,\n InnerBankTreeSpecies: \"AlnusIncana\",\n OuterBankTreeSpecies: \"AlnusIncana\",\n InnerBankTreeIdealDBH: 1.5,\n OuterBankTreeIdealDBH: 1.7,\n InnerBankTreeIdealHeight: 1,\n OuterBankTreeIdealHeight: 1,\n InnerBankTreeDistance: 32.5,\n OuterBankTreeDistance: 32.5,\n InnerBankTreeDBH: 0.36,\n OuterBankTreeDBH: 0.36,\n InnerBankTreeHeight: 1,\n OuterBankTreeHeight: 1,\n fluidDensity: 1100,\n idealVegetationTimeInterval: 10,\n idealVegetationUseTimeInterval: true,\n idealVegetationUseTreeSize: false,\n erosionCoefficient: Number(2.344596567e-07),\n erosionCoefficientChanged: true,\n criticalShearStressModel: \"brownlie\",\n criticalShearStressUserDefinedPaOuter: 0.4668128,\n criticalShearStressUserDefinedPaInner: 0.4668128,\n manningCoefficient: 0.05,\n diameterOfLog: 0.36,\n d84BedFactor: 2,\n d90BedFactor: 2.5,\n baseFlow: 0,\n hydrographAscendingFactor: 3.25,\n lengthOfLog: 1,\n calculationName: getTempRunName()\n });*/\n\n\n const [bankforNETParameters, setBankforNETParameters] = React.useState({\n returnPeriod: \"\",\n catchmentArea: \"\",\n duration: 390,\n discharge: 11.4,\n bankHeightInner: 0.6,\n bankHeightOuter: 0.6,\n channelWidth: 4,\n channelSlope: 0.07,\n innerBankSlope: 29,\n meanChannelInclination: 0.1,\n d50Porosity: 0.3,\n sigmad50sed: 9.8,\n sigmad50nsed: 0.03,\n outerBankSlope: 29,\n bendRadius: 100000,\n d50Inner: 98,\n d50InnerSD: 9.8,\n d50Outer: 98,\n d50OuterSD: 9.8,\n d50SedimentBed: 98,\n InnerBankTreeSpecies: \"AlnusIncana\",\n OuterBankTreeSpecies: \"AlnusIncana\",\n InnerBankTreeIdealDBH: 1.5,\n OuterBankTreeIdealDBH: 1.7,\n InnerBankTreeIdealHeight: 1,\n OuterBankTreeIdealHeight: 1,\n InnerBankTreeDistance: 5.35,\n OuterBankTreeDistance: 32.5,\n InnerBankTreeDBH: 0.36,\n OuterBankTreeDBH: 0.36,\n InnerBankTreeHeight: 1,\n OuterBankTreeHeight: 1,\n fluidDensity: 1100,\n idealVegetationTimeInterval: 10,\n idealVegetationUseTimeInterval: true,\n idealVegetationUseTreeSize: false,\n erosionCoefficient: Number(6.698860343828471e-07).toPrecision(4),\n erosionCoefficientChanged: false,\n criticalShearStressModel: \"paphitis\",\n criticalShearStressUserDefinedPaOuter: 0.4668128,\n criticalShearStressUserDefinedPaInner: 0.4668128,\n manningCoefficient: 0.05,\n diameterOfLog: 0.36,\n d84BedFactor: 2,\n d90BedFactor: 2.5,\n baseFlow: 0,\n hydrographAscendingFactor: 3.25,\n lengthOfLog: 1,\n calculationName: getTempRunName()\n });\n const [showModal, setShowModal] = React.useState(false);\n const [datasets, setDatasets] = React.useState([]);\n const [warningText, setWarningText] = React.useState(\"\");\n const [errorText, setErrorText] = React.useState(\"\");\n const [showMobileInfo, setShowMobileInfo] = React.useState(isMobile);\n\n\n function setError(msg) {\n window.scroll({\n top: 0,\n left: 0,\n behavior: 'smooth'\n });\n setErrorText(msg);\n setDatasets([]);\n }\n\n function runErosionCalculator() {\n setDatasets([]);\n if(window.createBankForNET === undefined) {\n setWarningText(\"Scripts still loading... Please try again in a few moments. If this persists, refresh the page.\")\n return;\n }\n\n window.scroll({\n top: 0,\n left: 0,\n behavior: 'smooth'\n });\n setShowModal(true);\n setWarningText(\"\");\n setErrorText(\"\");\n ErosionCalculator(bankforNETParameters).then((data)=> {\n setShowModal(false);\n if (data.error !== undefined) {\n console.log(data.errorMsg);\n setErrorText(data.errorMsg);\n return\n }\n\n setDatasets(data);\n setTabKey(\"flow\");\n\n })\n }\n\n function createDownload() {\n\n let zip = new JSZip();\n\n const d = new Date();\n console.log(d)\n \n let folder = zip.folder(bankforNETParameters.calculationName);\n\n // Generate CSV Tables\n function convert_table_as_csv(table_id, separator = ',') {\n // Select rows from table_id\n var rows = document.querySelectorAll('table#' + table_id + ' tr');\n console.log(rows);\n // Construct csv\n var csv = [];\n for (var i = 0; i < rows.length; i++) {\n var row = [], cols = rows[i].querySelectorAll('td, th');\n for (var j = 0; j < cols.length; j++) {\n // Clean innertext to remove multiple spaces and jumpline (break csv)\n var data = cols[j].innerText.replace(/(\\r\\n|\\n|\\r)/gm, '').replace(/(\\s\\s)/gm, ' ')\n // Escape double-quote with double-double-quote (see https://stackoverflow.com/questions/17808511/properly-escape-a-double-quote-in-csv)\n data = data.replace(/\"/g, '\"\"');\n\n // If number, don't escape it\n const val = parseFloat(data)\n\n if(!isNaN(val)) {\n row.push(data)\n }\n else {\n // Push escaped string\n row.push('\"' + data + '\"');\n }\n \n }\n csv.push(row.join(separator));\n }\n var csv_string = csv.join('\\n');\n return csv_string\n }\n\n const tableNames = [ \"erosionMetricsAll\", \"sedimentMetrics\", \"flowHeightMetrics\" ];\n\n tableNames.forEach(table => {\n const csvData = convert_table_as_csv(table);\n\n // Add data to the zip file\n folder.file(table + \".csv\", csvData);\n\n })\n\n // Add inputs parameters to download data (https://github.com/CoSci-LLC/BankforNETWeb/issues/105)\n var input_params = \"\";\n for (var param in bankforNETParameters)\n {\n input_params += param + \"\\t=\\t\" + bankforNETParameters[param] + \"\\n\";\n }\n\n folder.file(\"input.params\", input_params);\n\n // Add inputs parameters to download data as csv (https://github.com/CoSci-LLC/BankforNETWeb/issues/133)\n var input_params = \"name, value, units\\n\";\n\n // Add units to the download (https://github.com/CoSci-LLC/BankforNETWeb/issues/135)\n const param_units = {\n \"returnPeriod\": \"years\",\n \"InnerBankTreeSpecies\": \"\",\n \"OuterBankTreeSpecies\": \"\",\n \"idealVegetationUseTimeInterval\": \"\",\n \"idealVegetationUseTimeInterval\": \"\",\n \"idealVegetationUseTreeSize\": \"\",\n \"erosionCoefficientChanged\": \"\",\n \"criticalShearStressModel\": \"\",\n \"catchmentArea\": \"km^2\",\n \"duration\": \"min\",\n \"discharge\": \"m^3/s\",\n \"bankHeightInner\": \"m\",\n \"bankHeightOuter\": \"m\",\n \"channelWidth\": \"m\",\n \"channelSlope\": \"m/m\",\n \"innerBankSlope\": \"deg\",\n \"outerBankSlope\": \"deg\",\n \"bendRadius\": \"m\",\n \"d50Inner\": \"mm\",\n \"d50Outer\": \"mm\",\n \"d50SedimentBed\": \"mm\",\n \"InnerBankTreeIdealDBH\": \"m\",\n \"OuterBankTreeIdealDBH\": \"m\",\n \"InnerBankTreeIdealHeight\": \"m\",\n \"OuterBankTreeIdealHeight\": \"m\",\n \"InnerBankTreeDistance\": \"m\",\n \"OuterBankTreeDistance\": \"m\",\n \"InnerBankTreeDBH\": \"m\",\n \"OuterBankTreeDBH\": \"m\",\n \"InnerBankTreeHeight\": \"m\",\n \"OuterBankTreeHeight\": \"m\",\n \"fluidDensity\": \"km/m^3\",\n \"idealVegetationTimeInterval\": \"years\",\n \"erosionCoefficient\": \"m/Pa^0.5/s\",\n \"criticalShearStressUserDefinedPaOuter\": \"Pa\",\n \"criticalShearStressUserDefinedPaInner\": \"Pa\",\n \"manningCoefficient\": \"s/m^1/3\",\n \"diameterOfLog\": \"m\",\n \"lengthOfLog\": \"m\",\n \"calculationName\": \"\"\n }\n\n for (var param in bankforNETParameters)\n {\n input_params += param + \", \" + bankforNETParameters[param] + \", \" + param_units[param] + \"\\n\";\n }\n\n folder.file(\"input.csv\", input_params);\n\n\n\n const charts = [\"flowHeightChart\", \"transportChart1\", \"erosionChart\"];\n\n function generateCharts(charts)\n {\n if(charts.length === 0) {\n //We are done!\n zip.generateAsync({type:\"blob\"}).then(function(content) {\n // see FileSaver.js\n saveAs(content, `${bankforNETParameters.calculationName}.zip`);\n });\n return;\n }\n const chart = charts[0];\n\n //Get the chart instance\n const chartInstance = Chart.getChart(chart);\n\n console.log(chartInstance);\n\n const originalOnComplete = chartInstance.options.animation.onComplete; \n\n\n function onCompleteHandler(chart) {\n // Get just the base64, not the description\n const chartName = chart[\"chart\"].canvas.id;\n const imageBase64 = chart[\"chart\"].toBase64Image(\"image/png\", 1).slice(22)\n chart[\"chart\"].options.animation.onComplete = originalOnComplete; \n\n chart[\"chart\"].reset();\n chart[\"chart\"].resize();\n chart[\"chart\"].update();\n chart[\"chart\"].render();\n\n // Add data to the zip file\n folder.file(chartName + \".png\", imageBase64, {base64: true});\n\n generateCharts(charts.slice(1));\n }\n\n chartInstance.options.animation.onComplete = onCompleteHandler;\n\n chartInstance.resize(800, 800)\n chartInstance.update(\"active\");\n chartInstance.render();\n\n \n }\n\n generateCharts(charts); \n }\n\n return (\n
\n
\n
\n
\n \n \n
\n

Calculating Erosion...

\n \n
\n
\n\n
\n \n \n {warningText !== \"\" && \n {warningText}\n }\n {showMobileInfo && setShowMobileInfo(false) }>\n This website works best in landscape mode on mobile devices\n }\n {errorText !== \"\" && \n An issue as occurred: {errorText}\n }\n \n \n {setTabKey(k)}}>\n \n \n \n
\n \n
\n \n If there is an issue with this software, please report to s......@cosci-llc.com\n \n {errorText !== \"\" && \n {errorText}\n }\n
\n \n
\n \n
\n \n
\n \n
\n \n
\n \n
\n \n
\n \n
\n \n

\n Coming soon!\n

\n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n"],"sourceRoot":""}