blob: b9d8695527eb1cbfc9241e165a681176ae4ef025 [file] [log] [blame]
import React, { CSSProperties } from 'react';
import { EncodingConfig } from 'encodable';
import { LegendGroupRendererProps } from './types';
import DefaultLegendItem from './DefaultLegendItem';
const LEGEND_GROUP_STYLE: CSSProperties = {
display: 'flex',
flexBasis: 'auto',
flexDirection: 'row',
flexGrow: 1,
flexShrink: 1,
flexWrap: 'wrap',
fontSize: '0.8em',
justifyContent: 'flex-end',
padding: 8,
};
export default function DefaultLegendGroupRenderer<Config extends EncodingConfig>({
group,
ItemRenderer = DefaultLegendItem,
ItemMarkRenderer,
ItemLabelRenderer,
style,
}: LegendGroupRendererProps<Config>) {
const combinedStyle =
typeof style === 'undefined' ? LEGEND_GROUP_STYLE : { ...LEGEND_GROUP_STYLE, ...style };
return (
<div style={combinedStyle}>
{'items' in group &&
group.items.map(item => (
<ItemRenderer
key={`legend-item-${group.field}-${item.input}`}
group={group}
item={item}
MarkRenderer={ItemMarkRenderer}
LabelRenderer={ItemLabelRenderer}
/>
))}
</div>
);
}