0.1.0 • Published 6 years ago

@j-lamberts/react-file-upload v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

Features

This packages provides some easy-to-use react components for file uploads. It contains

  • FileUploader to manage all uploads
  • FileDropzone as a simple dropzone wrapper-component
  • FileSelect as a simple wrapper around <input type="file" />

Example

Full-auto

import {
    Button,
    Icon,
    LinearProgress
}                                 from 'material-ui';
import * as React                 from 'react';
import {
    FileDropzone,
    FileSelect,
    FileUploader
}                                 from 'react-file-uploads';

export default () => (
    <FileUploader
        keepOnFinish={true}
        url={'http://localhost:4005/files'}
    >
        {({ handleFiles, queue }) => (
            <div>
                <FileDropzone onDrop={handleFiles}>
                    {queue.map((el, index) => (
                        <div key={index}>
                            {index} {el.name}
                            <LinearProgress
                                variant={el.progressTotal
                                    ? 'determinate'
                                    : 'indeterminate'}
                                value={el.progressLoaded / el.progressTotal * 100}
                            />
                        </div>
                    ))}
                    DROP FILES HERE
                </FileDropzone>
                <div>
                    Uploaded: {queue.length} <br/>
                    Waiting: {queue.filter(el => !el.ready).length}<br/>
                    Ready: {queue.filter(el => el.ready).length}
                </div>
                <FileSelect
                    onChange={handleFiles}
                    multiple={true}
                >
                    <Icon>file_upload</Icon>Upload
                </FileSelect>
            </div>
        )}
    </FileUploader>
);

Manual run()

import {
    Button,
    Icon,
    LinearProgress
}                                 from 'material-ui';
import * as React                 from 'react';
import {
    FileDropzone,
    FileSelect,
    FileUploader
}                                 from 'react-file-uploads';

export default () => (
    <FileUploader
        runManual={true}
        keepOnFinish={true}
        url={'http://localhost:4005/files'}
    >
        {({ handleFiles, queue, runManual }) => (
            <div>
                <!--- as above -->
                <Button onClick={runManual}>
                    <Icon>check</Icon> Run
                </Button>
            </div>
        )}
    </FileUploader>
);

Components

FileUploader

NameTypeDefaultDescription
url *string(required)HTTP-URL
children *(props: FileUploaderChildrenProps) => React.ReactNode(required)child-component
runManualbooleanfalseDon't run upload on handleFiles() - use runManual instead
keepOnFinishbooleanfalseKeep uploaded files in queue
fieldNamestring'file'Form-Field
method'POST' / 'PATCH' / 'PUT''POST'HTTP-Method
headersObject{}HTTP-Headers
interface FileUploaderChildrenProps {
    handleFiles: ((list: File[]) => void);
    queue: FileUpload[];
    runManual: () => void
}
interface FileUpload {
    progressTotal: number;
    progressLoaded: number;
    error: boolean;
    ready: boolean;
    upload: XHRUpload;  // don't access directly
    name: string;
}

FileDropzone

NameTypeDefaultDescription
onDrop *(files: File[]) => void(required)handler function
children *React.ReactNode;(required)
classNamestringundefined
classNameActivestringundefinedclass-name on dragActive
styleReact.CSSPropertiesundefined

FileSelect

NameTypeDefaultDescription
onChange: (files: File[]) => void(required)handler function
childrenReact.ReactNode(required)
multiplebooleanfalse
classNamestringundefined
styleReact.CSSPropertiesundefined