npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@boewa-software/react-async-uploader

v2.0.0

Published

React Uploder

Downloads

154

Readme

React Async Uploader

Dieses Packet stellt verschiedene React-Komponenten zur Umsetzung eines Asynchronen Clientseitigen Datei-Uplodas bereits. Intern wird hierfür die resumable.js-Komponente genutzt.

Hierfür wird eine Serverseitige API genutzt, die beispielsweise vom BoewaAsyncUploadBundle implementiert wird.

Instalation

$ npm install --save @boewa-software/react-async-uploader

Nutzung

Zur Nutzung, muss ein serverseitiger Endpunkt in form einer URL zum Verschicken der Dateien vorhanden sein.

Alleinstehender Uploader

Um einen grundlegenden Uploader zu erzeugen, wird lediglich der Pfad zum Endpunkt benötigt (im Folgenden über /endpoint-url beschrieben).

Die Uploader-Kompnente kann beispielsweise eine DOM-Node ersetzten (hier exemplarisch über targetElement) beschrieben:

import React from 'react';
import {createRoot} from "react-dom/client";

import {Uploader} from '@boewa-software/react-async-uploader';

// DOM-Node zum Einhängen der React-Komponente
const targetElement = document.getElementById("target-element");

const root = createRoot(targetElement);
root.render(
    <Uploader path={'/endpoint-url'} />
);

Darstellung überschreiben

Die Darstellung des Uploaders kann nach belibeben überschrieben werden, dafür muss eine React-Komponente implementiert werden, die das Layout definiert.

Die Layout-Komponente wird über das component-Property an den Uploader übergeben:

import React from 'react';
import {createRoot} from "react-dom/client";
import {Uploader, DropZone, BrowseButton} from '@boewa-software/react-async-uploader';

const CustomLayoutComponent = ({ uploads, assignDrop, assignBrowse }) =>
    <DropZone assignDrop={assignDrop}>
        Uploads: {uploads.length}
        <BrowseButton assignBrowse={assignBrowse}>
            Select File
        </BrowseButton>
    </DropZone>
;
const targetElement = document.getElementById("target-element");

const root = createRoot(targetElement);
root.render(
    <Uploader
        path={'/endpoint-url'}
        component={CustomLayoutComponent}
    />
);

Dabei können die Bereitstellten Komponenten zur Definition einer Drop-Zone (DropZone) und eines Browse-Buttons (BrowseButton) genutzt werden.

Übergebene Parameter

Die Layout-Komponente erhält vom Uploader die folgenden Parameter (props) zur Nutzung übergeben:

  • uploaderState : string

    Aktueller Status des Uploaders mit den WerteN:

    • running: Es werden Dateien hochgeladen.
    • paused: Uploader ist Pausiert, Dateien werden erst nach dem Aufruf von start weiter hochgeladen.
    • complete: Der Uploader ist aktiv, es sind keine Dateien zum Upload in der Warteschlange.
  • uploads : uploadObject[]

    Array aller aktuellen Uploads. Jedes dieser Opload-Objekte hat die folgenden Properties:

    • uniqueIdentifier : string

      Eindeutiger Identifier zur Zuordnung der Datei (erzeugt aus dem Dateinamen).

    • name : string

      Dateiname des Uploads

    • size : integer

      Dateigröße in Bytes.

    • progress : float

      Upload-Fortschritt.

    • uploading : bool

      Status, ob die Datei aktuell hochgeladen wird.

    • complete : bool

      Status, ob die Datei vollständig hochgeladen wurde.

    • error : ?mixed

      Im Fehlerfall der vom Server zurückgemeldete Fehler.

    • responseContent : ?object

      Vom Server zurückgemeldete Antwort im Erfolgsfall.

    • abort : func

      Funktion zum Abbrechen des Uplodas der Datei. Die Datei kann über retry erneut hochgleaden werden.

    • cancel : func

      Funktion zum Abbrechen des Uplodas der Datei. Die Datei wird aus der Warteschlange entfernt.

    • retry : func

      Im Fehlerfall oder beim Abbruch kann der Upload wiederholt werden.

  • addFile : func(HTML5File file)

    Mauelles Hinzufügen eines HTML5File-Objekts.

  • assignDrop : func(DOMNode node)

    Registriert die DOMNode node als Drop-Zone.

  • assignBrowse : func(DOMNode node)

    Registriert die DOMNode node als Browse-Button.

  • start : func

    Aktiviert den Uploader.

  • pause : func

    Pausiert den Uploader.

  • reset : func

    Setzt den Uploader zurück.

Zusätzliche props für die Layout-Komponente können von außen über die componentProps-Option übergeben werden.

Uploder-Optionen

Der Uploader unterstüzt die folgenden Optionen (props):

  • path : string

    URL zum Endpunkt des Servers, der die API implementiert.

  • component : func|React.Component (optional)

    Layout-Komponente zur Darstellung.

  • componentProps : object (optional)

    Zusätzliche props für die Layout-Komponente.

  • autoStart : boolean (optional, default: true)

    Deaktiviert den automatischen Start des Uploads nach dem Hinzufügen einer Datei.

  • clearFileOnSuccess : boolean (optional, default: false)

    Aktiviert, dass Dateien nach erfolgreichem Upload aus der Warteschlange entfernt werden.

  • onUploaderComplete : func (optional)

    Callback, wenn alle Dateien hochgeladen wurden.

  • onUploaderProgress : func (optional)

    Callback, wenn sich der Fortschritt ändert.

  • onUploaderPause : func (optional)

    Callback, wenn der Uploader pausiert wird.

  • onUploaderCancel : func (optional)

    Callback, wenn der Uploader zurückgesetzt wird.

  • onFileAdded : func(upload) (optional)

    Callback, wenn eine Datei zur Warteschlange hinzgefügt wird

  • onFileProgress : func(upload) (optional)

    Callback, wenn sich der Upload-Fortschirtt einer Datei ändert.

  • onFileSuccess : func(upload) (optional)

    Callback, wenn eine Datei erfolgreich hochgeladen wurde

  • onFileError : func(upload) (optional)

    Callback, wenn der Upload einer Datei fehlgeschlagen ist.

  • simultaneousUploads : number (optional, default: 1)

    Limit für den gleichzeitigen Upload mehrerer Dateien.

  • testChunks : boolean (optional, default: true)

    Deaktiviert die Prüfung, ob ein Chunk bereits hochgeladen ist. Verringert die anzahl an Requests, bei großen ggfs. abgebrochenen Uploads wird jedoch dann die gesamte Datei erneut hochgeladen.

Uploader als Formular-Feld

Über die Komponenten UploadInput und MultipleUploadsInput können Formuar-Felder erzeugt werden, die einen erfolgten Upload an den Server vermelden.

Diese können mit den AsyncUploadType bzw. MultipleAsyncUploadsType-FormularTypen aus dem BoewaAsyncUploadBundle verknüpft weden.

Analog zum Uploader kann das Layout dieser Komponenten über das component-Property (ggfs. im Zusammenspiel mit componentProps) überschrieben werden:

import React from 'react';
import {createRoot} from "react-dom/client";
import {UploadInput} from '@boewa-software/react-async-uploader';

const InputComponent = ({ value }) => (
    <>
        {value
            ? `File: ${value}`
            : 'Upload File'
        }
        <input type={'hidden'} name={'upload_field'} value={value ? value.identifier : ''} />
    </>
);

const targetElement = document.getElementById("target-element");

const root = createRoot(targetElement);
root.render(
    <UploadInput
        path={'/endpoint-url'}
        component={InputComponent}
    />
);

Das Property initialValue empfängt den Initialwert mit den folgenden Pflicht-Attributen:

  • identifier : string

    Unique Identifier der Datei

  • name : string

    Dateiname

  • progress : number

    Fortschritt des Uploads

  • completed : boolean

    Attribut, ob der Upload erfolgreich war.

Die MultipleUploadsInput-Komponente emfängt für initialValue ein Array von Objekten dieses Typs.

Weitere-Komponenten

DropZone

Diese Komponente ermöglicht die Erzeugung einer Drop-Zone für Uploads. Dafür muss der assignDrop-Callback des Uploaders an die Komponente übergeben werden.

BrowseButton

Diese Komponente ermöglicht die Erzeugung eines Browse-Buttons für Uploads. Dafür muss der assignBrowse-Callback des Uploaders an die Komponente übergeben werden.

Weiterentwicklung und DEMO

Infos hierzu sind in der Entwicklungs-Dokumentation zu finden.