datajunction-ui
Version:
DataJunction Metrics Platform UI
52 lines (47 loc) • 1.18 kB
JSX
/**
* A React Select component for use in Formik forms.
*/
import { useField } from 'formik';
import Select from 'react-select';
export const FormikSelect = ({
selectOptions,
formikFieldName,
placeholder,
defaultValue,
style,
className = 'SelectInput',
isMulti = false,
isClearable = false,
onFocus = event => {},
}) => {
// eslint-disable-next-line no-unused-vars
const [field, _, helpers] = useField(formikFieldName);
const { setValue } = helpers;
// handles both multi-select and single-select cases
const getValue = options => {
if (options) {
return isMulti ? options.map(option => option.value) : options.value;
} else {
return isMulti ? [] : '';
}
};
return (
<Select
className={className}
defaultValue={defaultValue}
options={selectOptions}
name={field.name}
placeholder={placeholder}
onBlur={field.onBlur}
onChange={selected => setValue(getValue(selected))}
styles={style}
isMulti={isMulti}
isClearable={isClearable}
onFocus={event => onFocus(event)}
id={field.name}
/>
);
};
FormikSelect.defaultProps = {
placeholder: '',
};