synapse-react-client
Version:
[](https://badge.fury.io/js/synapse-react-client) [](https://github.com/prettier/prettie
130 lines (129 loc) • 3.12 kB
JavaScript
import { SYNAPSE_STORAGE_LOCATION_ID as _ } from "../../../synapse-client/SynapseClient.js";
import { useDirectUploadToS3 as v } from "../../../synapse-queries/file/useDirectUploadToS3.js";
import { useSynapseMultipartUpload as G } from "../../../synapse-queries/file/useSynapseMultipartUpload.js";
import { instanceOfExternalObjectStoreUploadDestination as R } from "@sage-bionetworks/synapse-client";
import B from "p-limit";
import { useMemo as d, useCallback as M } from "react";
import { fixDefaultContentType as K } from "../../ContentTypeUtils.js";
import { useTrackFileUploads as Y } from "./useTrackFileUploads.js";
const h = {}, j = B(8);
function Z(p = h) {
const {
uploadDestination: t,
accessKey: f = "",
secretKey: u = "",
onUploadComplete: r,
onBeforeUpload: c
} = p, m = t?.storageLocationId ?? p.storageLocationId ?? _, {
trackedUploadProgress: U,
setProgress: C,
setIsUploading: I,
trackNewFiles: y,
cancelUpload: T,
pauseUpload: g,
removeUpload: P,
setComplete: b,
setFailed: A,
isUploading: D,
isUploadComplete: O,
activeUploadCount: S,
bytesPendingUpload: k
} = Y(), E = d(() => D ? "UPLOADING" : O ? "COMPLETE" : "WAITING", [O, D]), { mutateAsync: L } = G(), { mutateAsync: N } = v(), w = M(
async function(e, o) {
try {
const l = e.get(o.file), x = {
fileName: o.file.name,
blob: o.file,
storageLocationId: m,
contentType: K(
o.file.type,
o.file.name
),
progressCallback: (i) => {
i && C(o.file, i);
},
abortController: l.abortController,
onMd5Computed: () => {
I(o.file);
}
};
let s;
t && R(t) && t.endpointUrl != null ? s = (await N({
...x,
bucketName: t.bucket,
endpoint: t.endpointUrl,
keyPrefixUUID: t.keyPrefixUUID,
accessKey: f,
secretKey: u
})).id : s = (await L(x)).fileHandleId, r && await r(o, s), b(o.file, s);
} catch (l) {
console.error("File upload failed: ", l), A(o.file, l.message);
}
},
[
m,
t,
r,
b,
C,
I,
N,
f,
u,
L,
A
]
), n = M(
function(...e) {
c && c();
const o = y(...e);
e.map(
(l) => j(
() => w(o, l)
)
);
},
[c, y, w]
), H = d(() => [...U].map(([a, e]) => ({
file: a,
fileHandleId: e.fileHandleId,
progress: e.progress,
status: e.status,
failureReason: e.failureReason,
cancel: () => {
T(a);
},
pause: () => {
g(a);
},
resume: () => {
n(e.filePreparedForUpload);
},
remove() {
P(a);
}
})), [
T,
g,
P,
n,
U
]);
return d(() => ({
state: E,
activeUploadCount: S,
startUpload: n,
uploadProgress: H,
bytesPendingUpload: k
}), [
E,
S,
n,
H,
k
]);
}
export {
Z as useUploadFiles
};
//# sourceMappingURL=useUploadFiles.js.map