2023-07-11 08:16:17 +00:00
|
|
|
import { useState } from 'react';
|
|
|
|
|
import { Loading, cloneChildren } from 'react-basics';
|
2020-10-04 05:36:51 +00:00
|
|
|
import ErrorMessage from 'components/common/ErrorMessage';
|
2023-04-10 03:22:28 +00:00
|
|
|
import styles from './MetricsBar.module.css';
|
2023-07-11 08:16:17 +00:00
|
|
|
import { formatLongNumber, formatNumber } from 'lib/format';
|
|
|
|
|
|
|
|
|
|
export function MetricsBar({ children, isLoading, isFetched, error }) {
|
|
|
|
|
const [format, setFormat] = useState(true);
|
|
|
|
|
|
|
|
|
|
const formatFunc = format
|
|
|
|
|
? n => (n >= 0 ? formatLongNumber(n) : `-${formatLongNumber(Math.abs(n))}`)
|
|
|
|
|
: formatNumber;
|
|
|
|
|
|
|
|
|
|
const handleSetFormat = () => {
|
|
|
|
|
setFormat(state => !state);
|
|
|
|
|
};
|
2020-07-29 02:04:45 +00:00
|
|
|
|
|
|
|
|
return (
|
2023-07-11 08:16:17 +00:00
|
|
|
<div className={styles.bar} onClick={handleSetFormat}>
|
2023-02-04 16:59:52 +00:00
|
|
|
{isLoading && !isFetched && <Loading icon="dots" />}
|
2020-10-04 05:36:51 +00:00
|
|
|
{error && <ErrorMessage />}
|
2023-07-11 08:16:17 +00:00
|
|
|
{cloneChildren(children, child => {
|
|
|
|
|
return { format: child.props.format || formatFunc };
|
|
|
|
|
})}
|
2020-07-29 02:04:45 +00:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-04-21 15:00:42 +00:00
|
|
|
|
|
|
|
|
export default MetricsBar;
|