import React from 'react'; import ImmutablePureComponent from 'react-immutable-pure-component'; import PropTypes from 'prop-types'; import { v4 as uuidv4 } from 'uuid'; export class SimpleForm extends ImmutablePureComponent { static propTypes = { children: PropTypes.node, onSubmit: PropTypes.func, } static defaultProps = { onSubmit: e => e.preventDefault(), } render() { const { children, onSubmit } = this.props; return (
{children}
); } } export class FieldsGroup extends ImmutablePureComponent { static propTypes = { children: PropTypes.node, } render() { const { children } = this.props; return (
{children}
); } } export class Checkbox extends ImmutablePureComponent { static propTypes = { label: PropTypes.string, name: PropTypes.string, checked: PropTypes.bool, onChange: PropTypes.func, } static defaultProps = { checked: false, } render() { const { label, name, checked, onChange } = this.props; const id = uuidv4(); return (
); } } export class RadioGroup extends ImmutablePureComponent { static propTypes = { label: PropTypes.string, children: PropTypes.node, } render() { const { label, children, onChange } = this.props; const childrenWithProps = React.Children.map(children, child => React.cloneElement(child, { onChange }) ); return (
); } } export class RadioItem extends ImmutablePureComponent { static propTypes = { label: PropTypes.string, hint: PropTypes.string, value: PropTypes.string.isRequired, checked: PropTypes.bool.isRequired, onChange: PropTypes.func, } static defaultProps = { checked: false, } render() { const { label, hint, value, checked, onChange } = this.props; const id = uuidv4(); return (
  • ); } } export class SelectDropdown extends ImmutablePureComponent { static propTypes = { label: PropTypes.string, items: PropTypes.object.isRequired, defaultValue: PropTypes.string, onChange: PropTypes.func, } render() { const { label, items, defaultValue, onChange } = this.props; const id = uuidv4(); return (
    ); } } export class TextInput extends ImmutablePureComponent { static propTypes = { label: PropTypes.string, maxLength: PropTypes.number, } render() { const { label, maxLength, ...props } = this.props; const id = uuidv4(); return (
    ); } } export class FileChooser extends ImmutablePureComponent { static propTypes = { label: PropTypes.string, hint: PropTypes.string, fileTypes: PropTypes.array, } static defaultProps = { fileTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'], } render() { const { label, hint, fileTypes, ...props } = this.props; const id = uuidv4(); return (
    {hint}
    ); } }