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

130 lines (129 loc) 3.12 kB
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