summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-07-16 10:32:57 +0200
committerGitHub <noreply@github.com>2021-07-16 10:32:57 +0200
commitdb1d2c2f8c18850dedf34b5d690b6cd6a1d1f6b5 (patch)
tree263a6f9741c5ca0dd64ecf3f7f07b580331aec9d /opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js
parent1a2416043f0b877f570e89da74e0d0a4aff1d8ae (diff)
parent803e13b32cf0ff8b496649fb0a4d6e32400e98a4 (diff)
merge: Add PatternFly 4 web interface (#161)
This pull requests adds the new web interface based on the PatternFly 4 design framework. This framework enables us to develop more quickly the interfaces necessary in OpenDC. * Remove the OpenDC landing page from the web interface module * Add support for the PatternFly 4 framework in Next.js * Relax topology schema requirements * Migrate UI components to PatternFly 4
Diffstat (limited to 'opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js')
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js93
1 files changed, 0 insertions, 93 deletions
diff --git a/opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js b/opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js
deleted file mode 100644
index 983a5c1d..00000000
--- a/opendc-web/opendc-web-ui/src/components/app/results/PortfolioResultsComponent.js
+++ /dev/null
@@ -1,93 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import { Bar, CartesianGrid, ComposedChart, ErrorBar, ResponsiveContainer, Scatter, XAxis, YAxis } from 'recharts'
-import { AVAILABLE_METRICS, METRIC_NAMES_SHORT, METRIC_UNITS } from '../../../util/available-metrics'
-import { mean, std } from 'mathjs'
-import { Portfolio, Scenario } from '../../../shapes'
-import approx from 'approximate-number'
-
-const PortfolioResultsComponent = ({ portfolio, scenarios }) => {
- if (!portfolio) {
- return <div>Loading...</div>
- }
-
- const nonFinishedScenarios = scenarios.filter((s) => s.simulation.state !== 'FINISHED')
-
- if (nonFinishedScenarios.length > 0) {
- if (nonFinishedScenarios.every((s) => s.simulation.state === 'QUEUED' || s.simulation.state === 'RUNNING')) {
- return (
- <div>
- <h1>Simulation running...</h1>
- <p>{nonFinishedScenarios.length} of the scenarios are still being simulated</p>
- </div>
- )
- }
- if (nonFinishedScenarios.some((s) => s.simulation.state === 'FAILED')) {
- return (
- <div>
- <h1>Simulation failed.</h1>
- <p>
- Try again by creating a new scenario. Please contact the OpenDC team for support, if issues
- persist.
- </p>
- </div>
- )
- }
- }
-
- const dataPerMetric = {}
-
- AVAILABLE_METRICS.forEach((metric) => {
- dataPerMetric[metric] = scenarios.map((scenario) => ({
- name: scenario.name,
- value: mean(scenario.results[metric]),
- errorX: std(scenario.results[metric]),
- }))
- })
-
- return (
- <div className="full-height" style={{ overflowY: 'scroll', overflowX: 'hidden' }}>
- <h2>Portfolio: {portfolio.name}</h2>
- <p>Repeats per Scenario: {portfolio.targets.repeatsPerScenario}</p>
- <div className="row">
- {AVAILABLE_METRICS.map((metric) => (
- <div className="col-6 mb-2" key={metric}>
- <h4>{METRIC_NAMES_SHORT[metric]}</h4>
- <ResponsiveContainer aspect={16 / 9} width="100%">
- <ComposedChart
- data={dataPerMetric[metric]}
- margin={{ left: 35, bottom: 15 }}
- layout="vertical"
- >
- <CartesianGrid strokeDasharray="3 3" />
- <XAxis
- tickFormatter={(tick) => approx(tick)}
- label={{ value: METRIC_UNITS[metric], position: 'bottom', offset: 0 }}
- type="number"
- />
- <YAxis dataKey="name" type="category" />
- <Bar dataKey="value" fill="#3399FF" isAnimationActive={false} />
- <Scatter dataKey="value" opacity={0} isAnimationActive={false}>
- <ErrorBar
- dataKey="errorX"
- width={10}
- strokeWidth={3}
- stroke="#FF6600"
- direction="x"
- />
- </Scatter>
- </ComposedChart>
- </ResponsiveContainer>
- </div>
- ))}
- </div>
- </div>
- )
-}
-
-PortfolioResultsComponent.propTypes = {
- portfolio: Portfolio,
- scenarios: PropTypes.arrayOf(Scenario),
-}
-
-export default PortfolioResultsComponent