import React, { useCallback } from 'react' import { InputError } from './Error' import { ImageUpload } from './ImageUpload' import '../../styles/styles.css' interface InputFieldProps { label: string | React.ReactElement description?: string type?: 'text' | 'textarea' placeholder: string name: string inputMode?: 'url' value: string error?: string onChange: (name: string, value: string) => void } export const InputField = React.memo( ({ label, description, type = 'text', placeholder, name, inputMode, value, error, onChange }: InputFieldProps) => { const handleChange = ( e: React.ChangeEvent ) => { onChange(name, e.target.value) } return (
{description &&

{description}

} {type === 'textarea' ? ( ) : ( )} {error && }
) } ) interface CheckboxFieldProps { label: string name: string isChecked: boolean handleChange: (e: React.ChangeEvent) => void type?: 'default' | 'stylized' } export const CheckboxField = React.memo( ({ label, name, isChecked, handleChange, type = 'default' }: CheckboxFieldProps) => (
) ) interface InputFieldUncontrolledProps extends React.ComponentProps<'input'> { label: string | React.ReactElement description?: string error?: string } /** * Uncontrolled input component with design classes, label, description and error support * * Extends {@link React.ComponentProps<'input'> React.ComponentProps<'input'>} * @param label * @param description * @param error * * @see {@link React.ComponentProps<'input'>} */ export const InputFieldUncontrolled = ({ label, description, error, ...rest }: InputFieldUncontrolledProps) => (
{description &&

{description}

} {error && }
) interface CheckboxFieldUncontrolledProps extends React.ComponentProps<'input'> { label: string } export const CheckboxFieldUncontrolled = ({ label, ...rest }: CheckboxFieldUncontrolledProps) => (
) interface InputFieldWithImageUploadProps { label: string | React.ReactElement description?: string placeholder: string name: string inputMode?: 'url' value: string error?: string onInputChange: (name: string, value: string) => void } export const InputFieldWithImageUpload = React.memo( ({ label, description, placeholder, name, inputMode, value, error, onInputChange }: InputFieldWithImageUploadProps) => { const handleChange = useCallback( (e: React.ChangeEvent) => { onInputChange(name, e.currentTarget.value) }, [name, onInputChange] ) const handleFileChange = useCallback( (values: string[]) => { onInputChange(name, values[0]) }, [name, onInputChange] ) return (
{typeof description !== 'undefined' && (

{description}

)} {error && }
) } )