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.