@fireproof/core 0.20.5-dev-preview-11 → 0.20.5-dev-preview-12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/react/img-file.d.ts.map +1 -1
- package/react/img-file.js +35 -19
- package/react/img-file.js.map +1 -1
package/package.json
CHANGED
package/react/img-file.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"img-file.d.ts","sourceRoot":"","sources":["../../../../src/react/img-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,EAAwC,iBAAiB,EAAE,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"img-file.d.ts","sourceRoot":"","sources":["../../../../src/react/img-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,EAAwC,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAMvF,KAAK,QAAQ,GAAG,IAAI,GAAG,WAAW,CAAC;AAEnC,UAAU,YAAa,SAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC;IAC7E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAKhB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAYD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAqGhE;AAED,eAAe,OAAO,CAAC"}
|
package/react/img-file.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import React, { useState, useEffect, useRef, useMemo } from "react";
|
2
|
+
const objectUrlCache = new Map();
|
2
3
|
function isFile(obj) {
|
3
4
|
return "type" in obj && "size" in obj && "stream" in obj && typeof obj.stream === "function";
|
4
5
|
}
|
@@ -7,22 +8,21 @@ function isFileMeta(obj) {
|
|
7
8
|
}
|
8
9
|
export function ImgFile({ file, meta, ...imgProps }) {
|
9
10
|
const [imgDataUrl, setImgDataUrl] = useState("");
|
10
|
-
const
|
11
|
+
const fileObjRef = useRef(null);
|
12
|
+
const cleanupRef = useRef(null);
|
11
13
|
const fileData = useMemo(() => {
|
12
|
-
|
13
|
-
if (!data) {
|
14
|
-
fileDataRef.current = null;
|
15
|
-
return null;
|
16
|
-
}
|
17
|
-
if (!fileDataRef.current ||
|
18
|
-
(isFile(data) &&
|
19
|
-
isFile(fileDataRef.current) &&
|
20
|
-
(data.size !== fileDataRef.current.size || data.lastModified !== fileDataRef.current.lastModified)) ||
|
21
|
-
(isFileMeta(data) && isFileMeta(fileDataRef.current) && data !== fileDataRef.current)) {
|
22
|
-
fileDataRef.current = data;
|
23
|
-
}
|
24
|
-
return fileDataRef.current;
|
14
|
+
return file || meta;
|
25
15
|
}, [file, meta]);
|
16
|
+
const getCacheKey = (fileObj) => {
|
17
|
+
return `${fileObj.name}-${fileObj.size}-${fileObj.lastModified}`;
|
18
|
+
};
|
19
|
+
const getObjectUrl = (fileObj) => {
|
20
|
+
const cacheKey = getCacheKey(fileObj);
|
21
|
+
if (!objectUrlCache.has(cacheKey)) {
|
22
|
+
objectUrlCache.set(cacheKey, URL.createObjectURL(fileObj));
|
23
|
+
}
|
24
|
+
return objectUrlCache.get(cacheKey);
|
25
|
+
};
|
26
26
|
useEffect(() => {
|
27
27
|
if (!fileData)
|
28
28
|
return;
|
@@ -39,14 +39,30 @@ export function ImgFile({ file, meta, ...imgProps }) {
|
|
39
39
|
fileObj = (await fileData.file?.()) || null;
|
40
40
|
break;
|
41
41
|
}
|
42
|
+
if (fileObjRef.current !== fileObj && cleanupRef.current) {
|
43
|
+
cleanupRef.current();
|
44
|
+
cleanupRef.current = null;
|
45
|
+
}
|
42
46
|
if (fileObj && /image/.test(fileType)) {
|
43
|
-
|
44
|
-
|
45
|
-
|
47
|
+
if (fileObjRef.current !== fileObj) {
|
48
|
+
const src = getObjectUrl(fileObj);
|
49
|
+
setImgDataUrl(src);
|
50
|
+
fileObjRef.current = fileObj;
|
51
|
+
cleanupRef.current = () => {
|
52
|
+
const cacheKey = getCacheKey(fileObj);
|
53
|
+
if (objectUrlCache.has(cacheKey)) {
|
54
|
+
URL.revokeObjectURL(objectUrlCache.get(cacheKey));
|
55
|
+
objectUrlCache.delete(cacheKey);
|
56
|
+
}
|
57
|
+
};
|
58
|
+
return cleanupRef.current;
|
59
|
+
}
|
60
|
+
return cleanupRef.current;
|
46
61
|
}
|
62
|
+
return null;
|
47
63
|
};
|
48
64
|
let isMounted = true;
|
49
|
-
let cleanup;
|
65
|
+
let cleanup = null;
|
50
66
|
loadFile().then((result) => {
|
51
67
|
if (isMounted) {
|
52
68
|
cleanup = result;
|
@@ -60,7 +76,7 @@ export function ImgFile({ file, meta, ...imgProps }) {
|
|
60
76
|
if (cleanup)
|
61
77
|
cleanup();
|
62
78
|
};
|
63
|
-
}, [
|
79
|
+
}, [fileData]);
|
64
80
|
return imgDataUrl
|
65
81
|
? React.createElement("img", {
|
66
82
|
src: imgDataUrl,
|
package/react/img-file.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"img-file.js","sourceRoot":"","sources":["../../../../src/react/img-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAqB,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"img-file.js","sourceRoot":"","sources":["../../../../src/react/img-file.ts"],"names":[],"mappings":"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"}
|