UNPKG

synapse-react-client

Version:

[![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synapse-react-client) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettie

122 lines (121 loc) 2.89 kB
import { useState as _ } from "react"; const d = [ "PREPARING", "UPLOADING", "PAUSED" ], L = [ ...d, // The project storage limits are eventually consistent, so complete uploads may not count against the limit immediately. // So we include those in our estimation. "COMPLETE" ]; function N() { const [r, a] = _(/* @__PURE__ */ new Map()); function E(...t) { t.forEach((n) => { const s = r.get(n.file); s && s.status !== "CANCELED_BY_USER" && l(n.file); }); const e = new Map( r.entries() ); return t.forEach((n) => { e.set(n.file, { filePreparedForUpload: n, abortController: new AbortController(), // Note that this is number of parts uploaded, not file size or % progress: { value: 0, total: 1 }, status: "PREPARING" }); }), a(e), e; } function f(t, e) { a((n) => { const s = new Map(n.entries()), o = s.get(t); return o && s.set(t, { ...o, progress: { ...o.progress, ...e } }), s; }); } function c(t, e, n) { a((s) => { const o = new Map(s.entries()), p = o.get(t); return p && o.set(t, { ...p, status: e, failureReason: n }), o; }); } function U(t, e) { a((n) => { const s = new Map(n.entries()), o = s.get(t); return o && s.set(t, { ...o, fileHandleId: e }), s; }); } function P(t) { c(t, "UPLOADING"); } function g(t, e) { c(t, "COMPLETE"), U(t, e); } function A(t, e) { c(t, "FAILED", e); } function l(t) { const e = r.get(t); e?.abortController.abort(), c(t, "CANCELED_BY_USER"); } function C(t) { const e = r.get(t); e?.abortController.abort("Paused by user"), c(t, "PAUSED"); } function w(t) { a((e) => { const n = new Map(e.entries()), s = n.get(t); return s == null || (s.status != "CANCELED_BY_USER" && s.status != "FAILED" ? console.warn( "Attempted to remove tracked upload progress before it was canceled.", s ) : n.delete(t)), n; }); } const D = [...r].reduce( (t, [e, n]) => L.includes(n.status) ? t + e.size : t, 0 ), u = [...r].filter( ([t, e]) => d.includes(e.status) ).length, i = u > 0, M = ( // At least one file is complete [...r].some( ([t, e]) => e.status === "COMPLETE" ) && // No files are pending upload !i ); return { trackedUploadProgress: r, setProgress: f, setIsUploading: P, trackNewFiles: E, bytesPendingUpload: D, pauseUpload: C, cancelUpload: l, removeUpload: w, setComplete: g, setFailed: A, isUploading: i, isUploadComplete: M, activeUploadCount: u }; } export { d as PENDING_UPLOAD_STATES, N as useTrackFileUploads }; //# sourceMappingURL=useTrackFileUploads.js.map