import React, { Component } from 'react'; import { courtesyS } from '../util' export const TextInput = props => ( {props.title && {props.title}} ) export const LabelDescription = props => ( {props.title} {props.children} ) export const NumberInput = props => ( {props.title} ) export const ColorInput = props => ( {props.title} ) export const TextArea = props => ( {props.title && {props.title}} ) export const Checkbox = props => ( props.onChange(props.name, e.target.checked)} /> {props.label} ) export const Radio = props => { return ( props.onChange(props.name, props.value)} /> {props.label} ) } export class Select extends Component { state = { focused: false, } render() { const { name, selected, options, defaultOption, title, loading, onChange, className } = this.props if (loading) { return Loading... } const { focused } = this.state return ( {title && {title}} {(options.find(opt => opt.name === selected) || {label: defaultOption}).label} this.setState({ focused: true })} onBlur={() => this.setState({ focused: false })} onChange={e => { onChange(name, e.target.value) // this.setState({ focused: false }) }} value={selected || "__default__"} > {!selected && defaultOption && {defaultOption}} {options.map((option, i) => ( {option.label} ))} ) } } export class FileInputField extends Component { state = { count: 0, } handleChange(files) { const { multiple, onChange } = this.props if (!files) { this.setState({ count: 0 }) } else { this.setState({ count: multiple ? files.length : 0 }) } onChange(files) } render() { const { error, title, label, required, multiple, mime, name } = this.props return ( {title} {label || "Choose files"} {!!this.state.count && {courtesyS(this.state.count, "file")}{" selected"}} ) } } export class FileInput extends Component { handleChange(e) { let { multiple, mime } = this.props if (!mime) { mime = "image/" } const files = e.dataTransfer ? e.dataTransfer.files : e.target.files let i let file, selectedFiles = [] for (i = 0; i < files.length; i++) { file = files[i] if (file && file.type.indexOf(mime) === 0) { if (multiple) { selectedFiles.push(file) } else { break } } } if (multiple && selectedFiles.length) { this.props.onChange(selectedFiles) } else if (!multiple && file) { this.props.onChange(file) } else { this.props.onChange() } } render() { return ( ) } } export const SubmitButton = (props) => ( {props.title} )