cl-react-graph
Version:
44 lines (39 loc) • 1.12 kB
text/typescript
import { ScaleBand } from 'd3-scale';
import get from 'lodash.get';
import {
EGroupedBarLayout,
IHistogramBar,
} from '../Histogram';
export interface IGroupedProps {
groupLayout: EGroupedBarLayout,
stacked?: boolean;
}
export const groupedBarsUseSameXAxisValue = ({ groupLayout, stacked }: IGroupedProps): boolean => {
return stacked || groupLayout === EGroupedBarLayout.STACKED || groupLayout === EGroupedBarLayout.OVERLAID;
};
export const barMargin = (bar: IHistogramBar): number => {
const m = get(bar, 'margin', 0);
return m >= 0 && m <= 1
? m
: 0.1;
};
export const getBarWidth = (
i: number,
groupLayout: EGroupedBarLayout,
bar: IHistogramBar,
innerScaleBand: ScaleBand<string>,
) => {
const overlay = (groupLayout === EGroupedBarLayout.OVERLAID)
? i * bar.overlayMargin * 2
: 0;
const w = bar.width
? Math.min(bar.width, innerScaleBand.bandwidth())
: innerScaleBand.bandwidth();
return w - overlay;
};
export const groupedMargin = (bar: IHistogramBar): number => {
const m = get(bar, 'groupMargin', 0.1);
return m >= 0 && m <= 1
? m
: 0.1;
}