import React, { HTMLAttributes } from 'react';
import styled, { css } from 'styled-components';
import { colors } from '../../../constants';
import Text from '../Text/Text';
type Styling = 'confirmed' | 'default' | 'invalid' | 'waiting' | 'brand';
type ColorMapField = { bg: string; text: string };
type ColorMap = Record;
interface BadgeProps extends Omit, 'color'> {
/**
* The style you want to assign to your badge.
*/
styling?: Styling;
}
const colorMap: ColorMap = {
brand: {
bg: colors.brandLight,
text: colors.greyDarkest,
},
confirmed: {
bg: colors.successLight,
text: colors.successDark,
},
default: {
bg: colors.greyLighter,
text: colors.greyDarkest,
},
invalid: {
bg: colors.alertLight,
text: colors.alertDark,
},
waiting: {
bg: colors.warningLight,
text: colors.warningDark,
},
};
const StyledBadge = styled(Text).attrs({
size: 'small',
forwardedAs: 'span',
})`
${({ styling = 'default' }) => css`
background-color: ${colorMap[styling].bg};
color: ${colorMap[styling].text};
`};
display: inline-block;
padding: 3px 10px;
white-space: nowrap;
border-radius: 12px;
`;
const Badge = ({ children, styling, ...rest }: BadgeProps) => {
return (
{children}
);
};
Badge.defaultProps = {
styling: 'default',
};
export default Badge;