FileInput
A HOC used to build components for accepting files.
import { FileInput } from '@ensdomains/thorin'
<FileInput maxSize={1} onChange={(file) => alert(file)}>{(context) =>context.name ? (<div style={{ display: 'flex', alignItems: 'center' }}>{context.name}<div style={{ width: '48px' }}><Buttonshape="circle"size="small"variant="secondary"onClick={context.reset}><VisuallyHidden>Remove</VisuallyHidden><CloseSVG /></Button></div></div>) : (<div>{context.droppable ? 'Drop file' : 'Attach file'}</div>)}</FileInput>
name  | type  | default  | description  | 
|---|---|---|---|
accept  | string  | -  | The accept attribute of input element  | 
autoFocus  | boolean  | -  | The autoFocus attribute of input element  | 
children* Required  | (context: Context) => ReactNodeNoStrings  | -  | A function that receives a context object and return a react element. The context object is made of the following properties droppable, focused, file, name, previewUrl, type and reset.  | 
defaultValue  | { name?: string | undefined; type: string; url: string; }  | -  | Preloads the file input file to submit.  | 
disabled  | boolean  | -  | The disabled attribute of input element.  | 
error  | ReactNode  | -  | Error text or react element  | 
id  | string  | -  | The id attribute of input element  | 
maxSize  | number  | -  | Size in megabytes  | 
name  | string  | -  | The name attribute of input element.  | 
required  | boolean  | -  | The required attribute of input element  | 
tabIndex  | number  | -  | The tabindex attribute of input element  | 
onBlur  | FocusEventHandler<HTMLInputElement>  | -  | An event handler that is fired after blur events. Wrap this function in useCallback to maintian referenctial equality.  | 
onError  | (error: string) => void  | -  | An event handler that is fired after error events. Wrap this function in useCallback to maintian referenctial equality.  | 
onChange  | (file: File) => void  | -  | An event handler that is fired after change events. Wrap this function in useCallback to maintian referenctial equality.  | 
onFocus  | FocusEventHandler<HTMLInputElement>  | -  | An event handler that is fired after focus events. Wrap this function in useCallback to maintian referenctial equality.  | 
onReset  | () => void  | -  | An event handler that is fired after the context.reset function is fired. Wrap this function in useCAllback to maintain referential equality.  | 
ref  | Ref<HTMLDivElement>  | -  | -  | 
name  | type  | default  | description  | 
|---|---|---|---|
droppable  | boolean  | -  | If true, a file has been dragged inside the component. Used to make UI updates.  | 
file  | File  | -  | The file that is ready to be accepted.  | 
focused  | boolean  | -  | If true the component is focused. Used to make UI updates.  | 
name  | string  | -  | The name of the file.  | 
reset  | MouseEvent<HTMLInputElement>  | -  | An event handler used to reset input component.  | 
type  | string  | -  | The file type of the file  | 
The error value should be stored in the parent component and use the error and onError properties to synchronize state. To display an error message, wrap the component in a Field component. A truthy value for error will add aria-invalid to the input for accessibility.