import { useMemo } from 'react';
import {
GraphProvider,
GraphRenderer,
createSpec,
pipe,
geom,
scale,
transform,
} from '@graphysdk/react';
const data = {
columns: [
{ key: 'quarter', label: 'Quarter' },
{ key: 'revenue', label: 'Revenue' },
{ key: 'growth', label: 'Growth' },
],
rows: [
{ quarter: 'Q1', revenue: 12000, growth: 5 },
{ quarter: 'Q2', revenue: 15000, growth: 25 },
{ quarter: 'Q3', revenue: 14000, growth: -7 },
{ quarter: 'Q4', revenue: 18500, growth: 32 },
{ quarter: 'Q5', revenue: 21000, growth: 14 },
{ quarter: 'Q6', revenue: 19500, growth: -7 },
],
};
export function RevenueAndGrowth() {
const spec = useMemo(
() =>
pipe(
createSpec({ x: 'quarter' }), // shared x
geom.bar({
id: 'revenue',
aes: { y: 'revenue', color: 'revenueSeries' },
transforms: [
transform.constant({
variableName: 'revenueSeries',
type: 'categorical',
value: 'Revenue',
}),
],
}), // primary axis
geom.line({
id: 'growth',
aes: { y: 'growth', color: 'growthSeries' },
yScaleType: 'secondary',
transforms: [
transform.constant({
variableName: 'growthSeries',
type: 'categorical',
value: 'Growth',
}),
],
}), // secondary axis
scale.x(),
scale.y(),
scale.ySecondary(),
scale.color.palette()
),
[]
);
return (
<GraphProvider input={spec} data={data}>
<GraphRenderer />
</GraphProvider>
);
}