{"version":3,"sources":["components/NavMenu.js","components/Layout.js","components/Disclaimer.js","services/AppConsts.js","components/DailyDataChart.js","components/CallVolumeChart.js","components/DepletionScenarios.js","components/ScenarioStats.js","services/Api.js","components/DeletableChip.js","components/Home.js","components/Help.js","App.js","registerServiceWorker.js","index.js"],"names":["NavMenu","props","toggleNavbar","bind","state","collapsed","this","setState","id","className","light","tag","Link","to","onClick","isOpen","navbar","href","style","display","padding","target","paddingLeft","src","alt","width","Component","displayName","name","Layout","margin","children","Disclaimer","opsDataLabels","responses","staffExposures","staffOutOfService","staffRecovered","staffAvailable","newCasesStaff","newRecoveriesStaff","opsDataValues","popDataLabels","popSusceptible","popContagious","popRecovered","popDeceased","newCasesPop","newRecoveriesPop","newDeathsPop","popCumAffected","popDataValues","presets","default","preset","attackRate","doublingIntervalDays","emsContagionRate","recoveryDays","transportRate","better","worse","dire","custom","menuProps","PaperProps","maxHeight","ITEM_HEIGHT","defaultSettings","servicePopulation","emsStaffCount","selectedTab","selectedPopData","selectedOpsData","DailyDataChartComponent","componentDidMount","updateChartSize","componentDidUpdate","prevProps","prevState","data","maxX","maxY","renderUuid","renderC3Chart","chartHeight","chartWidth","undefined","c3chart","resize","height","days","chartColumns","opsColumns","j","length","push","firstPopColumn","i","datum","ordinalDay","value","Number","toFixed","Math","max","tickValues","c3","generate","bindto","x","columns","type","zoom","enabled","legend","position","axis","min","tick","values","label","text","left","y","top","bottom","format","d","point","show","grid","size","tooltip","title","ratio","render","DailyDataChart","withStyles","theme","chart","withTheme","CallVolumeChartComponent","componentWillUnmount","worstDay","bestCase","worstCase","scenario","dailyPredictions","peakDailyTransports","peakDailyTransportsDay","column","scenarioLabel","trim","day","lines","class","Fragment","CallVolumeChart","DepletionScenariosComponent","maxStaff","bestCaseStaff","worstCaseStaff","depletionMaxY","scenarioNames","depletionChartColumns","worstStaffingDay","minimumStaffAvailable","daysBelow75PercentStaffing","daysBelow50PercentStaffing","daysBelow25PercentStaffing","maxStaffChart","DepletionScenarios","displayedScenarioColumns","Scenario","displayedDetailColumns","Day","Contagious","Transports","ScenarioStatsRow","classes","onRowClick","scenarioName","peakTransportsDay","minStaffAvailable","minStaffPercentage","daysBelow75","daysBelow50","daysBelow25","numDetails","detailsIndex","TableRow","hover","key","TableCell","rightAlignCell","Button","marginLeft","DetailsRow","contagious","recovered","deceased","ScenarioStatsComponent","renderTable","resizeTable","container","document","getElementById","statsTable","scenarioData","row","minimumStaffPercentage","scenarioOptions","filter","selectableRows","customRowRender","onColumnViewChange","action","uuidv4","detailOptions","detailData","makeDetailData","displayDetails","detailScenarioName","details","getScenarioColumns","options","toString","download","getDetailsColumns","sColumns","dColumns","dataTableContainer","detailsTable","variant","marginTop","marginBottom","ScenarioStats","marginRight","textAlign","API_BASE_URL","process","REACT_APP_ENV","Api","axios","get","response","algorithm","queryString","first","last","email","phone","DeletableChip","onDelete","Chip","deleteIcon","onMouseDown","event","disabled","button","stopPropagation","TabPanel","index","other","Typography","component","role","hidden","aria-labelledby","HomeComponent","window","addEventListener","resizeComponents","updateChartData","dailyDataUuid","callVolumeUuid","depletionScenariosUuid","scenarioStatsUuid","updateLocalStorageSettings","removeEventListener","getChartHeight","innerWidth","tabsContainer","navMenuHeight","navMenu","offsetHeight","tabSelector","innerHeight","hasValidParameters","result","resetSettings","stringifiedSettings","getStringifiedSettings","localStorage","setItem","a","getData","dailyData","summaryData","settingChanged","selectedOpsDataChanged","selectedPopDataChanged","presetChanged","getStyles","item","items","fontWeight","typography","fontWeightRegular","indexOf","fontWeightMedium","removeFromSelectedOpsData","newSelection","slice","splice","removeFromSelectedPopData","stateCopy","Object","assign","JSON","stringify","copyLinkToChart","encodedOptions","btoa","navigator","clipboard","writeText","selectedTabChanged","showDisclaimer","showDisclaimerDialog","hideDisclaimer","showDisclaimerPopup","getTabButtonStyle","backgroundColor","tabViewContainer","tabSelectorContainer","flexDirection","controlsContainer","controls","color","FormControl","control","InputLabel","NativeSelect","presetSelect","onChange","inputProps","Tooltip","placement","TextField","step","Collapse","in","Select","labelId","multiple","input","Input","renderValue","selected","chips","map","chip","MenuProps","MenuItem","disclaimerPopup","disclaimerDiv","disclaimerText","disclaimerLink","disclaimerCloseButton","Dialog","open","DialogContent","DialogActions","stateSet","match","params","parse","atob","settingsJsonString","getItem","settings","Boolean","Home","flex","paddingTop","overflowY","minWidth","maxWidth","overflow","paddingRight","paddingBottom","flexWrap","right","transform","fontSize","useStyles","makeStyles","helpDiv","Help","App","exact","path","isLocalhost","location","hostname","registerValidSW","swUrl","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","log","catch","error","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","basename","URL","origin","fetch","status","headers","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.36fc8bee.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, Media } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor (props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar () {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n COVID-19 Staffing Simulator\r\n \r\n \r\n
    \r\n \r\n Home\r\n \r\n \r\n Help\r\n \r\n \r\n Tutorial\r\n \r\n \r\n Request Info\r\n \r\n \r\n \"Levrum\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\n\r\nfunction Disclaimer() {\r\n return (
DISCLAIMER: This is beta software. The algorithms in it are based on our best understanding of published literature on COVID-19 [1][2][3]. We are not epidemiologists, and our implementation has not been reviewed by epidemiologists. We recommend that you use this tool to test a wide range of possible scenarios with different parameter settings, and not as a tool to predict specific outcomes. By using this site, you acknowledge that this is a free, un-supported, best-effort attempt that may or may not provide accurate predictive information, and that Levrum provides no warranty, express or implied, as to the accuracy, utility or fitness for particular purpose of this tool.\r\n

\r\n References
\r\n \r\n \r\n \r\n
);\r\n}\r\n\r\nexport default Disclaimer;","export const opsDataLabels = {\r\n responses: \"COVID Transports\",\r\n staffExposures: \"Total Staff Exposures\",\r\n staffOutOfService: \"Active EMS Cases\",\r\n staffRecovered: \"Staff Recovered\",\r\n staffAvailable: \"Staff Fit For Duty\",\r\n newCasesStaff: \"New EMS Cases\",\r\n newRecoveriesStaff: \"New EMS Recoveries\",\r\n};\r\n\r\nexport const opsDataValues = [\r\n \"responses\",\r\n \"staffExposures\",\r\n \"staffOutOfService\",\r\n \"staffRecovered\",\r\n \"staffAvailable\",\r\n \"newCasesStaff\",\r\n \"newRecoveriesStaff\",\r\n];\r\n\r\nexport const popDataLabels = {\r\n popSusceptible: \"Population Susceptible\",\r\n popContagious: \"Population Contagious\",\r\n popRecovered: \"Population Recovered\",\r\n popDeceased: \"Population Deceased\",\r\n newCasesPop: \"New Population Cases\",\r\n newRecoveriesPop: \"New Population Recoveries\",\r\n newDeathsPop: \"New Population Deaths\",\r\n popCumAffected: \"Total Population Affected\",\r\n};\r\n\r\nexport const popDataValues = [\r\n \"popSusceptible\",\r\n \"popContagious\",\r\n \"popRecovered\",\r\n \"popDeceased\",\r\n \"newCasesPop\",\r\n \"newRecoveriesPop\",\r\n \"newDeathsPop\",\r\n \"popCumAffected\",\r\n];\r\n\r\n\r\nexport const presets = {\r\n default: {\r\n preset: \"default\",\r\n attackRate: 45,\r\n doublingIntervalDays: 4,\r\n emsContagionRate: 5,\r\n recoveryDays: 14,\r\n transportRate: 5,\r\n },\r\n better: {\r\n preset: \"better\",\r\n attackRate: 35,\r\n doublingIntervalDays: 6,\r\n emsContagionRate: 3,\r\n recoveryDays: 10,\r\n transportRate: 5,\r\n },\r\n worse: {\r\n preset: \"worse\",\r\n attackRate: 50,\r\n doublingIntervalDays: 3,\r\n emsContagionRate: 6,\r\n recoveryDays: 18,\r\n transportRate: 6,\r\n },\r\n dire: {\r\n preset: \"dire\",\r\n attackRate: 55,\r\n doublingIntervalDays: 2.8,\r\n emsContagionRate: 7,\r\n recoveryDays: 21,\r\n transportRate: 7.5,\r\n },\r\n custom: {\r\n preset: \"custom\",\r\n },\r\n};\r\n\r\nconst ITEM_HEIGHT = 48;\r\nconst ITEM_PADDING_TOP = 8;\r\nexport const menuProps = {\r\n PaperProps: {\r\n style: {\r\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\r\n width: 250,\r\n },\r\n },\r\n};\r\n\r\nexport const defaultSettings = {\r\n attackRate: 45,\r\n doublingIntervalDays: 4,\r\n emsContagionRate: 5,\r\n recoveryDays: 14,\r\n transportRate: 5,\r\n servicePopulation: 100000,\r\n emsStaffCount: 75,\r\n selectedTab: 0,\r\n selectedPopData: [],\r\n preset: \"default\",\r\n selectedOpsData: [\r\n \"responses\",\r\n \"newCasesStaff\",\r\n \"staffOutOfService\",\r\n \"staffAvailable\",\r\n ],\r\n};","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { withStyles, withTheme } from \"@material-ui/core\";\r\n\r\nimport { opsDataLabels, popDataLabels } from \"../services/AppConsts\";\r\n\r\nimport c3 from \"c3\";\r\nimport \"c3/c3.css\";\r\n\r\nconst styles = (theme) => ({\r\n chart: {\r\n width: \"100%\",\r\n },\r\n});\r\n\r\nclass DailyDataChartComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n componentDidMount = () => {\r\n this.updateChartSize();\r\n };\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n if (\r\n this.props.data !== prevProps.data ||\r\n this.props.maxX !== prevProps.maxX ||\r\n this.props.maxY !== prevProps.maxY ||\r\n this.props.renderUuid !== prevProps.renderUuid\r\n ) {\r\n this.renderC3Chart();\r\n }\r\n\r\n if (\r\n this.props.chartHeight !== prevProps.chartHeight ||\r\n this.props.chartWidth !== prevProps.chartWidth\r\n ) {\r\n this.updateChartSize();\r\n }\r\n };\r\n\r\n updateChartSize = () => {\r\n if (this.state.c3chart !== undefined) {\r\n this.state.c3chart.resize({\r\n height: this.props.chartHeight,\r\n width: this.props.chartWidth,\r\n });\r\n }\r\n };\r\n\r\n renderC3Chart = () => {\r\n const {\r\n data,\r\n selectedOpsData,\r\n selectedPopData,\r\n chartHeight,\r\n chartWidth,\r\n } = this.props;\r\n\r\n let days = [\"x\"];\r\n let maxX = 0;\r\n let maxY = 0;\r\n let chartColumns = [days];\r\n\r\n let opsColumns = 0;\r\n for (let j = 0; j < selectedOpsData.length; j++) {\r\n chartColumns.push([opsDataLabels[selectedOpsData[j]]]);\r\n opsColumns++;\r\n }\r\n\r\n let firstPopColumn = 1 + opsColumns;\r\n for (let j = 0; j < selectedPopData.length; j++) {\r\n chartColumns.push([popDataLabels[selectedPopData[j]]]);\r\n }\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n let datum = data[i];\r\n maxX = datum.ordinalDay;\r\n days.push(datum.ordinalDay);\r\n for (let j = 0; j < selectedOpsData.length; j++) {\r\n let value = Number(datum[selectedOpsData[j]]).toFixed(2);\r\n maxY = Math.max(maxY, value);\r\n chartColumns[j + 1].push(value);\r\n }\r\n for (let j = 0; j < selectedPopData.length; j++) {\r\n let value = Number(datum[selectedPopData[j]]).toFixed(2);\r\n maxY = Math.max(maxY, value);\r\n chartColumns[firstPopColumn + j].push(value);\r\n }\r\n }\r\n\r\n let tickValues = [];\r\n let divisor = 30;\r\n\r\n for (let i = 1; i <= maxX / divisor; i++) {\r\n tickValues.push(i * divisor);\r\n }\r\n let c3chart = c3.generate({\r\n bindto: `#chart`,\r\n data: {\r\n x: \"x\",\r\n columns: chartColumns,\r\n type: \"line\",\r\n },\r\n zoom: {\r\n enabled: true,\r\n },\r\n legend: {\r\n position: \"bottom\",\r\n },\r\n axis: {\r\n x: {\r\n min: 0,\r\n max: maxX,\r\n tick: {\r\n values: tickValues,\r\n },\r\n height: 50,\r\n label: {\r\n text: \"Elapsed Days (0 = First Clinical Presentation)\",\r\n position: \"inner-left\",\r\n },\r\n padding: { left: 0 },\r\n },\r\n y: {\r\n max: maxY,\r\n min: 0,\r\n padding: { top: 60, bottom: 0 },\r\n tick: {\r\n format: function (d) {\r\n if (d >= 1000000) {\r\n return `${d / 1000000}m`;\r\n } else if (d >= 1000) {\r\n return `${d / 1000}k`;\r\n } else {\r\n return d;\r\n }\r\n },\r\n },\r\n },\r\n },\r\n point: {\r\n show: false,\r\n },\r\n grid: {\r\n x: {\r\n show: true,\r\n },\r\n y: {\r\n show: true,\r\n },\r\n },\r\n size: {\r\n height: chartHeight,\r\n width: chartWidth,\r\n },\r\n padding: {\r\n top: 10,\r\n bottom: -20,\r\n },\r\n tooltip: {\r\n format: {\r\n title: function (d) {\r\n return `Day ${d}`;\r\n },\r\n value: function (value, ratio, id) {\r\n if (value >= 1000000) {\r\n return `${Number(value / 1000000).toFixed(2)}m`;\r\n } else if (value >= 1000) {\r\n return `${Number(value / 1000).toFixed(2)}k`;\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n });\r\n this.setState({ c3chart: c3chart });\r\n };\r\n\r\n render = () => {\r\n return
;\r\n };\r\n}\r\n\r\nDailyDataChartComponent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n};\r\n\r\nexport const DailyDataChart = withStyles(styles)(\r\n withTheme(DailyDataChartComponent)\r\n);\r\n\r\nexport default DailyDataChart;\r\n","import React, { Component } from \"react\";\r\n\r\nimport { withStyles, withTheme } from \"@material-ui/core\";\r\n\r\nimport { opsDataLabels, popDataLabels } from \"../services/AppConsts\";\r\n\r\nimport c3 from \"c3\";\r\nimport \"c3/c3.css\";\r\n\r\nconst styles = (theme) => {};\r\n\r\nclass CallVolumeChartComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n componentDidMount = () => {};\r\n\r\n componentWillUnmount = () => {};\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n if (this.props.data !== prevProps.data ||\r\n this.props.renderUuid !== prevProps.renderUuid) {\r\n this.renderC3Chart();\r\n }\r\n\r\n if (\r\n this.props.chartHeight !== prevProps.chartHeight ||\r\n this.props.chartHeight !== prevProps.chartHeight\r\n ) {\r\n this.updateChartSize();\r\n }\r\n };\r\n\r\n renderC3Chart = () => {\r\n const { data, chartHeight, chartWidth } = this.props;\r\n\r\n let days = [\"x\"];\r\n let maxX = 0;\r\n let maxY = 0;\r\n let chartColumns = [days];\r\n\r\n let worstDay = undefined;\r\n let bestCase = 10000000000;\r\n let worstCase = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n let scenario = data[i];\r\n let dailyPredictions = scenario.dailyPredictions;\r\n if (!dailyPredictions) {\r\n continue;\r\n }\r\n maxY = scenario.peakDailyTransports;\r\n\r\n if (i === 3) {\r\n worstDay = scenario.peakDailyTransportsDay;\r\n }\r\n\r\n bestCase = Math.min(bestCase, scenario.peakDailyTransports);\r\n worstCase = Math.max(worstCase, scenario.peakDailyTransports);\r\n\r\n let column = [];\r\n column.push(scenario.scenarioLabel.trim());\r\n\r\n for (var j = 0; j < dailyPredictions.length; j++) {\r\n let day = dailyPredictions[j];\r\n maxX = day.ordinalDay;\r\n if (i === 0) {\r\n days.push(day.ordinalDay);\r\n }\r\n column.push(day.responses);\r\n }\r\n\r\n chartColumns.push(column);\r\n }\r\n\r\n let tickValues = [];\r\n let divisor = 30;\r\n\r\n for (let i = 1; i <= maxX / divisor; i++) {\r\n tickValues.push(i * divisor);\r\n }\r\n let c3chart = c3.generate({\r\n bindto: `#callVolumeChart`,\r\n data: {\r\n x: \"x\",\r\n columns: chartColumns,\r\n type: \"line\",\r\n },\r\n zoom: {\r\n enabled: true,\r\n },\r\n legend: {\r\n position: \"bottom\",\r\n },\r\n axis: {\r\n x: {\r\n min: 0,\r\n max: maxX,\r\n tick: {\r\n values: tickValues,\r\n },\r\n height: 50,\r\n label: {\r\n text: \"Elapsed Days (0 = First Clinical Presentation)\",\r\n position: \"inner-left\",\r\n },\r\n padding: { left: 0 },\r\n },\r\n y: {\r\n max: maxY,\r\n min: 0,\r\n padding: { top: 60, bottom: 0 },\r\n label: {\r\n text: \"Transports Per Day\",\r\n position: \"outer-middle\"\r\n },\r\n tick: {\r\n format: function (d) {\r\n if (d >= 1000000) {\r\n return `${d / 1000000}m`;\r\n } else if (d >= 1000) {\r\n return `${d / 1000}k`;\r\n } else {\r\n return d;\r\n }\r\n },\r\n },\r\n },\r\n },\r\n point: {\r\n show: false,\r\n },\r\n grid: {\r\n x: {\r\n show: true,\r\n lines: [\r\n {value: worstDay, text: \"Worst Staffing Day\", position: \"start\"}\r\n ]\r\n },\r\n y: {\r\n show: true,\r\n lines: [\r\n {value: bestCase, class: 'min', text: \"Best Case\", position: \"start\"},\r\n {value: worstCase, class: 'max', text: \"Worst Case\", position: \"start\"},\r\n ]\r\n },\r\n },\r\n size: {\r\n height: chartHeight,\r\n width: chartWidth,\r\n },\r\n padding: {\r\n top: 10,\r\n bottom: -20,\r\n },\r\n tooltip: {\r\n format: {\r\n title: function (d) {\r\n return `Day ${d}`;\r\n },\r\n value: function (value, ratio, id) {\r\n if (value >= 1000000) {\r\n return `${Number(value / 1000000).toFixed(2)}m`;\r\n } else if (value >= 1000) {\r\n return `${Number(value / 1000).toFixed(2)}k`;\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n });\r\n this.setState({ c3chart: c3chart });\r\n }\r\n\r\n updateChartSize = () => {\r\n if (this.state.c3chart !== undefined) {\r\n this.state.c3chart.resize({\r\n height: this.props.chartHeight,\r\n width: this.props.chartWidth,\r\n });\r\n }\r\n }\r\n\r\n render = () => {\r\n return \r\n
\r\n ;\r\n };\r\n}\r\n\r\nexport const CallVolumeChart = withStyles(styles)(\r\n withTheme(CallVolumeChartComponent)\r\n);\r\n\r\nexport default CallVolumeChart;\r\n","import React, { Component } from \"react\";\r\n\r\nimport { withStyles, withTheme } from \"@material-ui/core\";\r\n\r\nimport c3 from \"c3\";\r\nimport \"c3/c3.css\";\r\n\r\nconst styles = (theme) => {};\r\n\r\nclass DepletionScenariosComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n componentDidMount = () => {};\r\n\r\n componentWillUnmount = () => {};\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n if (\r\n this.props.data !== prevProps.data ||\r\n this.props.renderUuid !== prevProps.renderUuid\r\n ) {\r\n this.renderC3Chart();\r\n }\r\n\r\n if (\r\n this.props.chartHeight !== prevProps.chartHeight ||\r\n this.props.chartHeight !== prevProps.chartHeight\r\n ) {\r\n this.updateChartSize();\r\n }\r\n };\r\n\r\n renderC3Chart = () => {\r\n const { data, chartHeight, chartWidth, maxStaff } = this.props;\r\n\r\n let days = [\"x\"];\r\n let maxX = 0;\r\n let maxY = Number(maxStaff);\r\n let chartColumns = [days];\r\n\r\n let worstDay = undefined;\r\n let bestCaseStaff = 0;\r\n let worstCaseStaff = 10000000000;\r\n\r\n let depletionMaxY = 0;\r\n let scenarioNames = [\"x\"];\r\n \r\n let depletionChartColumns = [\r\n scenarioNames,\r\n [\"Staffing Below 75%\"],\r\n [\"Staffing Below 50%\"],\r\n [\"Staffing Below 25%\"],\r\n ];\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n let scenario = data[i];\r\n let dailyPredictions = scenario.dailyPredictions;\r\n if (!dailyPredictions) {\r\n continue;\r\n }\r\n\r\n if (i === 3) {\r\n worstDay = scenario.worstStaffingDay;\r\n }\r\n\r\n bestCaseStaff = Math.max(scenario.minimumStaffAvailable, bestCaseStaff);\r\n worstCaseStaff = Math.min(scenario.minimumStaffAvailable, worstCaseStaff);\r\n\r\n let column = [];\r\n column.push(scenario.scenarioLabel.trim());\r\n\r\n scenarioNames.push(scenario.scenarioLabel.trim());\r\n depletionMaxY = Math.max(depletionMaxY, scenario.daysBelow75PercentStaffing);\r\n depletionChartColumns[1].push(scenario.daysBelow75PercentStaffing);\r\n depletionChartColumns[2].push(scenario.daysBelow50PercentStaffing);\r\n depletionChartColumns[3].push(scenario.daysBelow25PercentStaffing);\r\n\r\n for (var j = 0; j < dailyPredictions.length; j++) {\r\n let day = dailyPredictions[j];\r\n maxX = day.ordinalDay;\r\n if (i === 0) {\r\n days.push(day.ordinalDay);\r\n }\r\n column.push(day.staffAvailable);\r\n }\r\n\r\n chartColumns.push(column);\r\n }\r\n\r\n let tickValues = [];\r\n let divisor = 30;\r\n\r\n for (let i = 1; i <= maxX / divisor; i++) {\r\n tickValues.push(i * divisor);\r\n }\r\n let maxStaffChart = c3.generate({\r\n bindto: `#maxStaffChart`,\r\n data: {\r\n x: \"x\",\r\n columns: chartColumns,\r\n type: \"line\",\r\n },\r\n zoom: {\r\n enabled: true,\r\n },\r\n legend: {\r\n position: \"bottom\",\r\n },\r\n axis: {\r\n x: {\r\n min: 0,\r\n max: maxX,\r\n tick: {\r\n values: tickValues,\r\n },\r\n height: 50,\r\n label: {\r\n text: \"Elapsed Days (0 = First Clinical Presentation)\",\r\n position: \"inner-left\",\r\n },\r\n padding: { left: 0 },\r\n },\r\n y: {\r\n max: maxY,\r\n min: 0,\r\n padding: { top: 60, bottom: 0 },\r\n label: {\r\n text: \"Staff Available\",\r\n position: \"outer-middle\",\r\n },\r\n tick: {\r\n format: function (d) {\r\n if (d >= 1000000) {\r\n return `${d / 1000000}m`;\r\n } else if (d >= 1000) {\r\n return `${d / 1000}k`;\r\n } else {\r\n return d;\r\n }\r\n },\r\n },\r\n },\r\n },\r\n point: {\r\n show: false,\r\n },\r\n grid: {\r\n x: {\r\n show: true,\r\n lines: [\r\n { value: worstDay, text: \"Worst Staffing Day\", position: \"end\" },\r\n ],\r\n },\r\n y: {\r\n show: true,\r\n lines: [\r\n {\r\n value: bestCaseStaff,\r\n class: \"min\",\r\n text: \"Best Case\",\r\n position: \"start\",\r\n },\r\n {\r\n value: worstCaseStaff,\r\n class: \"max\",\r\n text: \"Worst Case\",\r\n position: \"start\",\r\n },\r\n ],\r\n },\r\n },\r\n size: {\r\n height: chartHeight / 2,\r\n width: chartWidth,\r\n },\r\n padding: {\r\n top: 10,\r\n bottom: -20,\r\n },\r\n tooltip: {\r\n format: {\r\n title: function (d) {\r\n return `Day ${d}`;\r\n },\r\n value: function (value, ratio, id) {\r\n if (value >= 1000000) {\r\n return `${Number(value / 1000000).toFixed(2)}m`;\r\n } else if (value >= 1000) {\r\n return `${Number(value / 1000).toFixed(2)}k`;\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n });\r\n let depletionDaysChart = c3.generate({\r\n bindto: `#depletionDaysChart`,\r\n data: {\r\n x: \"x\",\r\n columns: depletionChartColumns,\r\n type: \"bar\",\r\n },\r\n zoom: {\r\n enabled: true,\r\n },\r\n legend: {\r\n position: \"bottom\",\r\n },\r\n axis: {\r\n x: {\r\n type: \"category\",\r\n },\r\n y: {\r\n max: depletionMaxY * 1.10,\r\n min: 0,\r\n padding: { top: 10, bottom: 0 },\r\n label: {\r\n text: \"Number of Days\",\r\n position: \"outer-middle\",\r\n }\r\n },\r\n },\r\n size: {\r\n height: chartHeight / 2,\r\n width: chartWidth,\r\n },\r\n padding: {\r\n top: 10,\r\n bottom: 0,\r\n },\r\n tooltip: {\r\n format: {\r\n title: function (d) {\r\n return `Day ${d}`;\r\n },\r\n value: function (value, ratio, id) {\r\n if (value >= 1000000) {\r\n return `${Number(value / 1000000).toFixed(2)}m`;\r\n } else if (value >= 1000) {\r\n return `${Number(value / 1000).toFixed(2)}k`;\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n });\r\n this.setState({ maxStaffChart: maxStaffChart });\r\n };\r\n\r\n updateChartSize = () => {\r\n if (this.state.maxStaffChart !== undefined) {\r\n this.state.maxStaffChart.resize({\r\n height: this.props.chartHeight,\r\n width: this.props.chartWidth,\r\n });\r\n }\r\n };\r\n\r\n render = () => {\r\n return (\r\n \r\n
\r\n
\r\n \r\n );\r\n };\r\n}\r\n\r\nexport const DepletionScenarios = withStyles(styles)(\r\n withTheme(DepletionScenariosComponent)\r\n);\r\n\r\nexport default DepletionScenarios;\r\n","import React, { Component } from \"react\";\r\n\r\nimport {\r\n withStyles,\r\n withTheme,\r\n TableCell,\r\n TableRow,\r\n Button,\r\n} from \"@material-ui/core\";\r\n\r\nimport MUIDataTable from \"mui-datatables\";\r\n\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nconst styles = (theme) => ({\r\n dataTableContainer: {\r\n marginRight: \"40px\",\r\n padding: \"4px\"\r\n },\r\n statsTable: {\r\n marginBottom: \"4px\"\r\n },\r\n rightAlignCell: {\r\n textAlign: \"right\"\r\n }\r\n});\r\n\r\nconst displayedScenarioColumns = {\r\n Scenario: true,\r\n \"Peak Daily Transports\": true,\r\n \"Peak Transports Day\": true,\r\n \"Min Staff Avail.\": true,\r\n \"Min Staffing %\": true,\r\n \"Worst Staffing Day\": true,\r\n \"Days < 75%\": true,\r\n \"Days < 50%\": true,\r\n \"Days < 25%\": true,\r\n \"Show Details\": true,\r\n};\r\n\r\nconst displayedDetailColumns = {\r\n Day: true,\r\n Contagious: true,\r\n \"Total Recovered\": true,\r\n \"Total Deceased\": true,\r\n \"New Cases\": true,\r\n \"New Recoveries\": true,\r\n \"New Deaths\": true,\r\n \"Total Affected\": true,\r\n Transports: true,\r\n \"Staff Exposures\": true,\r\n \"Staff Available\": true,\r\n \"Staff Unavailable\": true,\r\n \"Staff Recovered\": true,\r\n \"Staff New Cases\": true,\r\n \"Staff New Recoveries\": true,\r\n};\r\n\r\nfunction ScenarioStatsRow(props) {\r\n const {\r\n classes,\r\n onRowClick,\r\n scenarioName,\r\n peakDailyTransports,\r\n peakTransportsDay,\r\n minStaffAvailable,\r\n minStaffPercentage,\r\n worstStaffingDay,\r\n daysBelow75,\r\n daysBelow50,\r\n daysBelow25,\r\n numDetails,\r\n detailsIndex,\r\n } = props;\r\n\r\n const onClick = () => {\r\n if (onRowClick) {\r\n onRowClick(\r\n [\r\n scenarioName,\r\n peakDailyTransports,\r\n peakTransportsDay,\r\n minStaffAvailable,\r\n minStaffPercentage,\r\n worstStaffingDay,\r\n daysBelow75,\r\n daysBelow50,\r\n daysBelow25,\r\n numDetails,\r\n detailsIndex,\r\n ],\r\n detailsIndex\r\n );\r\n }\r\n };\r\n\r\n return (\r\n \r\n {displayedScenarioColumns[\"Scenario\"] && (\r\n {scenarioName}\r\n )}\r\n {displayedScenarioColumns[\"Peak Daily Transports\"] && (\r\n {peakDailyTransports}\r\n )}\r\n {displayedScenarioColumns[\"Peak Transports Day\"] && (\r\n {peakTransportsDay}\r\n )}\r\n {displayedScenarioColumns[\"Min Staff Avail.\"] && (\r\n {minStaffAvailable}\r\n )}\r\n {displayedScenarioColumns[\"Min Staffing %\"] && (\r\n {minStaffPercentage}\r\n )}\r\n {displayedScenarioColumns[\"Worst Staffing Day\"] && (\r\n {worstStaffingDay}\r\n )}\r\n {displayedScenarioColumns[\"Days < 75%\"] && (\r\n {daysBelow75}\r\n )}\r\n {displayedScenarioColumns[\"Days < 50%\"] && (\r\n {daysBelow50}\r\n )}\r\n {displayedScenarioColumns[\"Days < 25%\"] && (\r\n {daysBelow25}\r\n )}\r\n {displayedScenarioColumns[\"Show Details\"] && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nfunction DetailsRow(props) {\r\n const {\r\n classes,\r\n day,\r\n contagious,\r\n recovered,\r\n deceased,\r\n newCasesPop,\r\n newRecoveriesPop,\r\n newDeathsPop,\r\n popCumAffected,\r\n responses,\r\n staffExposures,\r\n staffAvailable,\r\n staffOutOfService,\r\n staffRecovered,\r\n newCasesStaff,\r\n newRecoveriesStaff\r\n } = props;\r\n\r\n return (\r\n \r\n {displayedDetailColumns[\"Day\"] && {day}}\r\n {displayedDetailColumns[\"Contagious\"] && {contagious}}\r\n {displayedDetailColumns[\"Total Recovered\"] && {recovered}}\r\n {displayedDetailColumns[\"Total Deceased\"] && {deceased}}\r\n {displayedDetailColumns[\"New Cases\"] && {newCasesPop}}\r\n {displayedDetailColumns[\"New Recoveries\"] && {newRecoveriesPop}}\r\n {displayedDetailColumns[\"New Deaths\"] && {newDeathsPop}}\r\n {displayedDetailColumns[\"Total Affected\"] && {popCumAffected}}\r\n {displayedDetailColumns[\"Transports\"] && {responses}}\r\n {displayedDetailColumns[\"Staff Exposures\"] && {staffExposures}}\r\n {displayedDetailColumns[\"Staff Available\"] && {staffAvailable}}\r\n {displayedDetailColumns[\"Staff Unavailable\"] && {staffOutOfService}}\r\n {displayedDetailColumns[\"Staff Recovered\"] && {staffRecovered}}\r\n {displayedDetailColumns[\"Staff New Cases\"] && {newCasesStaff}}\r\n {displayedDetailColumns[\"Staff New Recoveries\"] && {newRecoveriesStaff}}\r\n \r\n );\r\n}\r\n\r\nclass ScenarioStatsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n scenarioData: [],\r\n displayDetails: false,\r\n };\r\n }\r\n\r\n componentDidMount = () => {};\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n if (\r\n this.props.data !== prevProps.data ||\r\n this.props.renderUuid !== prevProps.renderUuid\r\n ) {\r\n this.renderTable();\r\n }\r\n\r\n if (\r\n this.props.chartHeight !== prevProps.chartHeight ||\r\n this.props.chartWidth !== prevProps.chartWidth\r\n ) {\r\n this.resizeTable();\r\n }\r\n };\r\n\r\n resizeTable = () => {\r\n const { chartHeight, chartWidth } = this.props;\r\n let container = document.getElementById(\"dataTableContainer\");\r\n if (!container) return;\r\n\r\n container.style.height = chartHeight;\r\n container.style.width = chartWidth;\r\n\r\n let statsTable = document.getElementById(\"statsTable\");\r\n if (!statsTable) return;\r\n statsTable.style.height = chartHeight;\r\n statsTable.style.width = chartWidth;\r\n };\r\n\r\n renderTable = () => {\r\n const { data } = this.props;\r\n\r\n let scenarioData = [];\r\n for (let i = 0; i < data.length; i++) {\r\n let scenario = data[i];\r\n let row = [];\r\n\r\n row.push(scenario.scenarioLabel.trim());\r\n row.push(scenario.peakDailyTransports.toFixed(0));\r\n row.push(scenario.peakDailyTransportsDay);\r\n row.push(scenario.minimumStaffAvailable.toFixed(0));\r\n row.push(scenario.minimumStaffPercentage.toFixed(2));\r\n row.push(scenario.worstStaffingDay);\r\n row.push(scenario.daysBelow75PercentStaffing);\r\n row.push(scenario.daysBelow50PercentStaffing);\r\n row.push(scenario.daysBelow25PercentStaffing);\r\n row.push(i);\r\n scenarioData.push(row);\r\n }\r\n\r\n this.setState({ scenarioData: scenarioData });\r\n };\r\n\r\n scenarioOptions = {\r\n filter: false,\r\n selectableRows: \"none\",\r\n customRowRender: (data) => {\r\n const [\r\n scenarioName,\r\n peakDailyTransports,\r\n peakTransportsDay,\r\n minStaffAvailable,\r\n minStaffPercentage,\r\n worstStaffingDay,\r\n daysBelow75,\r\n daysBelow50,\r\n daysBelow25,\r\n detailsIndex,\r\n ] = data;\r\n return (\r\n \r\n );\r\n },\r\n onColumnViewChange: (column, action) => {\r\n displayedScenarioColumns[column] = action === \"add\" ? true : false;\r\n this.setState({ renderUuid: uuidv4() });\r\n },\r\n };\r\n\r\n detailOptions = {\r\n selectableRows: \"none\",\r\n customRowRender: (data) => {\r\n const [\r\n day,\r\n contagious,\r\n recovered,\r\n deceased,\r\n newCasesPop,\r\n newRecoveriesPop,\r\n newDeathsPop,\r\n popCumAffected,\r\n responses,\r\n staffExposures,\r\n staffAvailable,\r\n staffOutOfService,\r\n staffRecovered,\r\n newCasesStaff,\r\n newRecoveriesStaff,\r\n ] = data;\r\n return (\r\n \r\n );\r\n },\r\n onColumnViewChange: (column, action) => {\r\n displayedDetailColumns[column] = action === \"add\" ? true : false;\r\n this.setState({renderUuid: uuidv4() });\r\n },\r\n };\r\n\r\n onRowClick = (row, detailsIndex) => {\r\n let data = this.props.data;\r\n let scenario = data ? data[detailsIndex] : undefined;\r\n if (!scenario) return;\r\n let detailData = this.makeDetailData(row, scenario.dailyPredictions);\r\n this.setState({\r\n displayDetails: true,\r\n detailData: detailData,\r\n detailScenarioName: row[0],\r\n });\r\n };\r\n\r\n makeDetailData = (row, details) => {\r\n let detailData = [];\r\n for (var i = 0; i < details.length; i++) {\r\n let row = [];\r\n row.push(details[i].ordinalDay);\r\n row.push(details[i].popContagious.toFixed(0));\r\n row.push(details[i].popRecovered.toFixed(0));\r\n row.push(details[i].popDeceased.toFixed(0));\r\n row.push(details[i].newCasesPop.toFixed(0));\r\n row.push(details[i].newRecoveriesPop.toFixed(0));\r\n row.push(details[i].newDeathsPop.toFixed(0));\r\n row.push(details[i].popCumAffected.toFixed(0));\r\n row.push(details[i].responses.toFixed(0));\r\n row.push(details[i].staffExposures.toFixed(0));\r\n row.push(details[i].staffAvailable.toFixed(0));\r\n row.push(details[i].staffOutOfService.toFixed(0));\r\n row.push(details[i].staffRecovered.toFixed(0));\r\n row.push(details[i].newCasesStaff.toFixed(0));\r\n row.push(details[i].newRecoveriesStaff.toFixed(0));\r\n detailData.push(row);\r\n }\r\n return detailData;\r\n };\r\n\r\n getScenarioColumns = () => {\r\n return [\r\n {\r\n name: \"Scenario\",\r\n options: {\r\n display: displayedScenarioColumns[\"Scenario\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Peak Daily Transports\",\r\n options: {\r\n display: displayedScenarioColumns[\"Peak Daily Transports\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Peak Transports Day\",\r\n options: {\r\n display: displayedScenarioColumns[\"Peak Transports Day\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Min Staff Avail.\",\r\n options: {\r\n display: displayedScenarioColumns[\"Min Staff Avail.\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Min Staffing %\",\r\n options: {\r\n display: displayedScenarioColumns[\"Min Staffing %\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Worst Staffing Day\",\r\n options: {\r\n display: displayedScenarioColumns[\"Worst Staffing Day\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Days < 75%\",\r\n options: {\r\n display: displayedScenarioColumns[\"Days < 75%\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Days < 50%\",\r\n options: {\r\n display: displayedScenarioColumns[\"Days < 50%\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Days < 25%\",\r\n options: {\r\n display: displayedScenarioColumns[\"Days < 25%\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Show Details\",\r\n options: {\r\n display: displayedScenarioColumns[\"Show Details\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Details\",\r\n options: {\r\n display: \"excluded\",\r\n download: false,\r\n },\r\n },\r\n ];\r\n };\r\n\r\n getDetailsColumns = () => {\r\n return [\r\n {\r\n name: \"Day\",\r\n options: {\r\n display: displayedDetailColumns[\"Day\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Contagious\",\r\n options: {\r\n display: displayedDetailColumns[\"Contagious\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Total Recovered\",\r\n options: {\r\n display: displayedDetailColumns[\"Total Recovered\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Total Deceased\",\r\n options: {\r\n display: displayedDetailColumns[\"Total Deceased\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"New Cases\",\r\n options: { display: displayedDetailColumns[\"New Cases\"].toString() },\r\n },\r\n {\r\n name: \"New Recoveries\",\r\n options: {\r\n display: displayedDetailColumns[\"New Recoveries\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"New Deaths\",\r\n options: { display: displayedDetailColumns[\"New Deaths\"].toString() },\r\n },\r\n {\r\n name: \"Total Affected\",\r\n options: {\r\n display: displayedDetailColumns[\"Total Affected\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Transports\",\r\n options: { display: displayedDetailColumns[\"Transports\"].toString() },\r\n },\r\n {\r\n name: \"Staff Exposures\",\r\n options: {\r\n display: displayedDetailColumns[\"Staff Exposures\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Staff Available\",\r\n options: {\r\n display: displayedDetailColumns[\"Staff Available\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Staff Unavailable\",\r\n options: {\r\n display: displayedDetailColumns[\"Staff Unavailable\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Staff Recovered\",\r\n options: {\r\n display: displayedDetailColumns[\"Staff Recovered\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Staff New Cases\",\r\n options: {\r\n display: displayedDetailColumns[\"Staff New Cases\"].toString(),\r\n },\r\n },\r\n {\r\n name: \"Staff New Recoveries\",\r\n options: {\r\n display: displayedDetailColumns[\"Staff New Recoveries\"].toString(),\r\n },\r\n },\r\n ];\r\n };\r\n\r\n render = () => {\r\n const { classes } = this.props;\r\n const {\r\n scenarioData,\r\n detailData,\r\n displayDetails,\r\n detailScenarioName,\r\n renderUuid,\r\n } = this.state;\r\n\r\n let sColumns = this.getScenarioColumns();\r\n let dColumns = this.getDetailsColumns();\r\n\r\n return (\r\n \r\n {!displayDetails && (\r\n \r\n )}\r\n {displayDetails && (\r\n \r\n \r\n {\r\n this.setState({ displayDetails: false });\r\n }}\r\n variant=\"contained\"\r\n style={{ marginTop: \"16px\", marginBottom: \"8px\" }}\r\n >\r\n Return To Overview\r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n}\r\n\r\nexport const ScenarioStats = withStyles(styles)(\r\n withTheme(ScenarioStatsComponent)\r\n);\r\n\r\nexport default ScenarioStats;\r\n","import axios from \"axios\";\r\n\r\nconst API_BASE_URL =\r\n process.env.REACT_APP_ENV === \"development\"\r\n ? \"https://localhost:5001/covid\"\r\n : \"/covid\";\r\n\r\nexport default class Api {\r\n static async getAlgorithms() {\r\n try {\r\n let response = await axios.get(\r\n `${API_BASE_URL}/Calculation/list-algorithms`\r\n );\r\n return response.data;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n static async getData(\r\n algorithm,\r\n attackRate,\r\n doublingIntervalDays,\r\n emsContagionRate,\r\n emsStaffCount,\r\n recoveryDays,\r\n servicePopulation,\r\n transportRate\r\n ) {\r\n try {\r\n let queryString = `${API_BASE_URL}/Calculation/${algorithm}?`;\r\n queryString += `attackRate=${attackRate}`;\r\n queryString += `&doublingIntervalDays=${doublingIntervalDays}`;\r\n queryString += `&emsContagionRate=${emsContagionRate}`;\r\n queryString += `&emsStaffCount=${emsStaffCount}`;\r\n queryString += `&recoveryDays=${recoveryDays}`;\r\n queryString += `&servicePopulation=${servicePopulation}`;\r\n queryString += `&transportRate=${transportRate}`;\r\n\r\n let response = await axios.get(queryString);\r\n return response.data;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n static async submitContactInfo(first, last, email, phone) {\r\n try {\r\n let response = await axios.get(`${API_BASE_URL}/log-contact?${first}%20${last}%20${email}%20${phone}`);\r\n return response.data;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nimport { Chip } from \"@material-ui/core\";\r\n\r\nimport DeleteIcon from \"@material-ui/icons/Cancel\";\r\n\r\nexport class DeletableChip extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render = () => {\r\n const { onDelete, value, label, className } = this.props;\r\n return (\r\n {\r\n if (!this.props.disabled && event.button === 0) {\r\n event.stopPropagation();\r\n onDelete(value);\r\n }\r\n }}\r\n >\r\n \r\n
}\r\n label={label}\r\n className={className}\r\n {...this.props}\r\n />\r\n );\r\n };\r\n}\r\n\r\nexport default DeletableChip;\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport Disclaimer from \"./Disclaimer\";\r\nimport DailyDataChart from \"./DailyDataChart\";\r\nimport CallVolumeChart from \"./CallVolumeChart\";\r\nimport DepletionScenarios from \"./DepletionScenarios\";\r\nimport ScenarioStats from \"./ScenarioStats\";\r\n\r\nimport Api from \"../services/Api\";\r\n\r\nimport {\r\n opsDataLabels,\r\n opsDataValues,\r\n popDataLabels,\r\n popDataValues,\r\n presets,\r\n defaultSettings,\r\n menuProps,\r\n} from \"../services/AppConsts\";\r\n\r\nimport c3 from \"c3\";\r\nimport \"c3/c3.css\";\r\n\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport {\r\n withStyles,\r\n withTheme,\r\n FormControl,\r\n InputLabel,\r\n TextField,\r\n Tooltip,\r\n NativeSelect,\r\n MenuItem,\r\n Select,\r\n Input,\r\n Button,\r\n Typography,\r\n Collapse,\r\n Dialog,\r\n DialogContent,\r\n DialogActions,\r\n} from \"@material-ui/core\";\r\n\r\nimport { DeletableChip } from \"./DeletableChip\";\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n display: \"inline-flex\",\r\n flexDirection: \"rows\",\r\n flex: \"auto\",\r\n width: \"99%\",\r\n },\r\n tabSelectorContainer: {\r\n paddingTop: \"4px\",\r\n display: \"flex\",\r\n },\r\n tabsContainer: {\r\n overflowY: \"auto\"\r\n },\r\n controlsContainer: {\r\n minWidth: \"240px\",\r\n maxWidth: \"270px\",\r\n paddingLeft: \"20px\",\r\n overflow: \"auto\",\r\n },\r\n controls: {\r\n minWidth: \"200px\",\r\n maxWidth: \"250px\",\r\n paddingRight: \"20px\",\r\n },\r\n control: {\r\n paddingBottom: \"8px\",\r\n width: \"100%\",\r\n },\r\n chips: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n chip: {\r\n margin: 2,\r\n },\r\n disclaimerPopup: {\r\n position: \"absolute\",\r\n bottom: \"0px\",\r\n left: \"0px\",\r\n height: \"100px\",\r\n width: \"100%\",\r\n backgroundColor: \"#eeff00ca\",\r\n },\r\n disclaimerText: {},\r\n disclaimerDiv: {\r\n position: \"absolute\",\r\n top: \"50%\",\r\n right: \"50%\",\r\n transform: \"translateY(-50%) translateX(50%)\",\r\n display: \"inline-flex\",\r\n flex: \"auto 0 1\",\r\n flexDirection: \"row\",\r\n },\r\n disclaimerLink: {\r\n color: \"#ff0000\",\r\n },\r\n disclaimerCloseButton: {\r\n position: \"absolute\",\r\n right: \"0%\",\r\n top: \"50%\",\r\n transform: \"translateY(-50%)\",\r\n fontSize: \"1.5rem\",\r\n fontWeight: \"bold\",\r\n padding: \"0px 0px\",\r\n paddingLeft: \"16px\",\r\n paddingRight: \"16px\",\r\n marginRight: \"16px\",\r\n },\r\n});\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n
\r\n );\r\n };\r\n}\r\n\r\nHomeComponent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n};\r\n\r\nexport const Home = withStyles(styles)(withTheme(HomeComponent));\r\n\r\nexport default Home;\r\n","import React from \"react\";\r\n\r\nimport { makeStyles, Typography } from \"@material-ui/core\";\r\nimport Disclaimer from \"./Disclaimer\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n container: { width: \"75%\", margin: \"auto\" },\r\n helpDiv: {},\r\n disclaimerDiv: { marginTop: \"16px\" }\r\n}));\r\n\r\nexport function Help(props) {\r\n const classes = useStyles();\r\n return (\r\n
\r\n
\r\n

\r\n \r\n Hello, and welcome to Levrum’s COVID-19 effects simulator. This is a\r\n tool to help you gauge the impacts of different epidemiology\r\n parameters for the pandemic on your organization’s ability to\r\n respond, based upon disease incidence progression in your community,\r\n and the rates of exposure and transmission to your operations staff.\r\n \r\n

\r\n

\r\n \r\n A couple of tips for using the simulator:\r\n \r\n We have preprogrammed several different potential scenarios based on\r\n observed conditions in different areas. These scenarios are available\r\n from the Preset dropdown. Your settings will be saved between\r\n sessions. Pressing the Reset button will return the application to its\r\n default settings. Clicking the Copy Link to Chart button will copy a\r\n link to the clipboard which contains the current settings so that you\r\n may share your simulation with others.\r\n

\r\n \r\n The tool enables you to set the following parameters:\r\n \r\n
  • \r\n Service Population: the number of people covered by your fire/EMS\r\n service\r\n
  • \r\n
  • \r\n Transport Rate: the percentage of people affected by COVID-19 whom your\r\n agency transports (or contacts, if you are not a transport agency)\r\n
  • \r\n
  • \r\n Attack Rate: also called the “community attack rate,” this parameter\r\n defines the upper limit of the percentage of people potentially\r\n affected by the disease.\r\n
  • \r\n
  • \r\n Doubling Interval (Days): the time required for the incidence in the\r\n general population to double at the outset of the disease outbreak.\r\n (The rate of growth will slow as the contagion progresses).\r\n
  • \r\n
  • \r\n EMS Contagion Rate: the percentage of contacts between your staff and\r\n affected community members that result in disease transmission to your\r\n staff.\r\n
  • \r\n
  • \r\n EMS Staff Count: the number of professionals in your organization who\r\n will respond to potential COVID-19 incidents.\r\n
  • \r\n
  • \r\n Days to Recover: the average time required for full recovery from the\r\n disease. For the purposes of this simulation, this is assumed to be\r\n identical between fire/EMS staff and the general population.\r\n
  • \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n}\r\nexport default Help;\r\n","import React, { Component } from 'react';\r\nimport { Route, Switch } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { Help } from \"./components/Help\";\r\n\r\nimport './custom.css'\r\nimport './App.css'\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render () {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}