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, METRIC_NAMES_SHORT, METRIC_UNITS } from '../../../util/available-metrics'
import { mean, std } from 'mathjs'
import approx from 'approximate-number'
import {
Bullseye,
Card,
CardActions,
CardBody,
CardHeader,
CardTitle,
EmptyState,
EmptyStateBody,
EmptyStateIcon,
Grid,
GridItem,
Spinner,
Title,
} from '@patternfly/react-core'
import { ErrorCircleOIcon, CubesIcon } from '@patternfly/react-icons'
import { usePortfolioScenarios } from '../../../data/project'
import NewScenario from '../../projects/NewScenario'
import PortfolioResultInfo from './PortfolioResultInfo'
const PortfolioResults = ({ portfolioId }) => {
const { status, data: scenarios = [] } = usePortfolioScenarios(portfolioId)
if (status === 'loading') {
return (
Loading Results
)
} else if (status === 'error') {
return (
Unable to connect
There was an error retrieving data. Check your connection and try again.
)
} else if (scenarios.length === 0) {
return (
No results
No results are currently available for this portfolio. Run a scenario to obtain simulation
results.
)
}
const dataPerMetric = {}
AVAILABLE_METRICS.forEach((metric) => {
dataPerMetric[metric] = scenarios
.filter((scenario) => scenario.results)
.map((scenario) => ({
name: scenario.name,
value: mean(scenario.results[metric]),
errorX: std(scenario.results[metric]),
}))
})
return (
{AVAILABLE_METRICS.map((metric) => (
{METRIC_NAMES[metric]}
approx(tick)}
label={{ value: METRIC_UNITS[metric], position: 'bottom', offset: 0 }}
type="number"
/>
))}
)
}
PortfolioResults.propTypes = {
portfolioId: PropTypes.string,
}
export default PortfolioResults