// @flow import React, { PureComponent } from 'react' import { prop } from 'ramda' import Box from '../../elements/Box' import GridBox from '../../elements/GridBox' import ErrorMessage from '../../elements/ErrorMessage' import Grid from '../../elements/Grid' import Label from '../../elements/Label' import Radio from '../../elements/Radio' import { isNotEmptyOrNotNil, mapIndexed } from '../../utils' import { type EventType, type InputType, type MetaType } from '../../types' const mainGridModifierProps = (modifier, cols = '4') => { switch (modifier) { case 'vertical': return { gridGap: 2, } case 'leftJustifiedLabel': return { gridTemplateColumns: ['1fr', `repeat(${cols}, 1fr)`], gridTemplateRows: [`repeat(${cols}, 1fr)`, '1fr'], gridGap: 3, alignItems: 'center', } default: return { gridTemplateColumns: ['1fr', `repeat(${cols}, 1fr)`], gridTemplateRows: [`repeat(${cols}, 1fr)`, '1fr'], gridGap: 3, } } } type Props = { cols?: string, gridStyles?: {}, input?: InputType, label: string, labelColor?: ?string, labelModifier?: ?string, labelTextStyle?: string, meta?: MetaType, modifier?: string, noLabel?: boolean, name?: string, onBlur?: ?(EventType) => void, onBlurDouble?: ?(string) => (EventType) => void, onChangeDouble?: ?(string) => (EventType) => void, onChange?: ?(EventType) => void, readOnly?: boolean, values: Array<{ label: string, value: string, id?: ?string, }>, } class RadioGroup extends PureComponent { static defaultProps = { cols: '4', gridStyles: undefined, input: undefined, labelColor: undefined, labelModifier: undefined, labelTextStyle: 'caps', meta: undefined, modifier: 'horizontal', name: undefined, noLabel: false, onBlur: undefined, onBlurDouble: undefined, onChange: undefined, onChangeDouble: undefined, readOnly: false, } render() { const { cols, gridStyles, input, label, labelColor, labelModifier, labelTextStyle, meta, modifier, name, noLabel, onBlur, onBlurDouble, onChange, onChangeDouble, readOnly, values, ...styles } = this.props const inputName = name != null ? name : prop('name', input) return ( { modifier !== 'leftJustifiedLabel' && ( ) } { modifier === 'leftJustifiedLabel' && ( ) } { mapIndexed(({ label: optionLabel, value: optionValue, id }, index) => ( ), values) } { prop('touched', meta) === true && isNotEmptyOrNotNil(prop('error', meta)) && ( ) } ) } } export default RadioGroup