1.0.1 • Published 1 year ago

react-file-trap v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

React File Trap

Simple wrapper component that convert child component to a drag and drop file input.

Demo

Edit remark-codesandbox demo

Installation

Install react-file-trap with npm

npm install react-file-trap  

Usage

<FileTrap
    ref={wrapperRef}
    allowedExtensions={['jpg', 'png']}
    handleChange={handleChange}
    handleDrag={handleDrag}
    handleDrop={handleDrop}
    onValidationError={onValidationError}
    fileCount={3}
    maxFileSize={2} // MB
    minFileSize={0.1} // MB
    browseOnClick={false}
    >
    <div style={{ margin: 10, border: "2px solid red" }}>
        <h2 style={{ margin: 5 }}>Current Event: {currentEvent}</h2>
        <h2 style={{ margin: 5 }}>Valid File Count: {validFiles.length}</h2>
        <h2 style={{ margin: 5 }}>Invalid File Count: {invalidFiles.length}</h2>
        <h2 style={{ margin: 5 }}>Last Error: {lastError}</h2>
    </div>
</FileTrap>

Props

ParameterTypeDescriptionDefault ValueNotes
refrefSuggest to use to reset and/or trigger browse outside of child componentundefinedShould be defined to trigger some functions
allowedExtensionsarrayAllowed file extensionsundefinedDon't provide to allow all file types
handleChangefunctionRuns when selected and/or dropped a valid fileMandatory prop to handle files. See events
handleDragfunctionRuns for every drag event. Possible values: dragover dragleaveundefinedSee events
handleDropfunctionRuns when dropped a fileundefinedSee events
onValidationErrorfunctionRuns everytime if dropped or selected file invalidundefinedSee events
fileCountnumberAllowed file countNumber.MAX_VALUE
maxFileSizenumberAllowed upper limit for file size in MBNumber.MAX_VALUE
minFileSizenumberAllowed lower limit for file size in MB0
browseOnClickbooleanTrigger browse window on click to child componenttrue

Events

handleChange

Runs on every change on the valid files. fileList parameter includes all valid files.

const handleChange = (fileList) => {
    setFiles(filesList);
    setTotalSize(byteFormatter(newFiles.reduce((acc, file) => acc + file.size, 0)));
};

handleDrag

Runs on drag event, eventName parametet can be: dragover or dragleave

const handleDrag = (eventName) => {
    setCurrentEvent(eventName);
};

handleDrop

Runs after a dropped files.

const handleDrop = () => {
    setCurrentEvent('dropped');
};

onValidationError

Runs after selected/dropped files.

const onValidationError = (invalidFileList, errorMsg) => {
    setInvalidFiles([...invalidFiles, ...invalidFileList]);
    setLastError(errorMsg);
}

Functions

browseFiles

Trigger browse window manually. ref prop is needed.

wrapperRef.current.browseFiles();

resetWrapper

To reset selected files. ref prop is needed.

wrapperRef.current.resetWrapper();

removeFile

To remove specific file. file should be provided as parameter. ref prop is also needed.

wrapperRef.current.removeFile(file);

Notes

For more details about usage, please check example project in the root directory.

License

MIT