synapse-react-client
Version:
[](https://badge.fury.io/js/synapse-react-client) [](https://github.com/prettier/prettie
122 lines (121 loc) • 2.89 kB
JavaScript
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