Files
pezkuwi-apps/packages/page-staking/src/Query/Chart.tsx
T

59 lines
1.2 KiB
TypeScript

// Copyright 2017-2026 @pezkuwi/app-staking authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { LineData } from './types.js';
import React, { useMemo } from 'react';
import { Chart, Spinner, styled } from '@pezkuwi/react-components';
interface Props {
className?: string;
colors: (string | undefined)[];
labels: string[];
legends: string[];
title: string;
values: LineData;
}
function ChartDisplay ({ className = '', colors, labels, legends, title, values }: Props): React.ReactElement<Props> {
const isLoading = useMemo(
() => !labels || labels.length === 0 || !values || values.length === 0 || !values[0]?.length,
[labels, values]
);
return (
<StyledDiv className={`${className} staking--Chart ${isLoading ? 'isLoading' : ''}`}>
<Chart.Line
colors={colors}
labels={labels}
legends={legends}
title={title}
values={values}
/>
{isLoading && (
<Spinner />
)}
</StyledDiv>
);
}
const StyledDiv = styled.div`
&.isLoading {
position: relative;
canvas, h1 {
opacity: 0.25;
}
.ui--Spinner {
position: absolute;
top: 34%;
left: 0;
right: 0;
}
}
`;
export default React.memo(ChartDisplay);