mirror of
https://github.com/jeffvli/feishin.git
synced 2026-06-17 00:44:23 +02:00
Revert "fix NativeImage state causing crashes in table"
This reverts commit 4008c8dfdf.
This commit is contained in:
@@ -89,18 +89,11 @@ export function BaseImage({
|
|||||||
const effectiveImageRequest =
|
const effectiveImageRequest =
|
||||||
isInSessionCache || !enableDebounce ? rawImageRequest : debouncedImageRequest;
|
isInSessionCache || !enableDebounce ? rawImageRequest : debouncedImageRequest;
|
||||||
|
|
||||||
const imageCacheKey = src ?? rawImageRequest?.cacheKey;
|
|
||||||
const trackLoadedInInstance = enableViewport;
|
|
||||||
|
|
||||||
const [hasLoadedInInstance, setHasLoadedInInstance] = useState(false);
|
const [hasLoadedInInstance, setHasLoadedInInstance] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!trackLoadedInInstance) {
|
setHasLoadedInInstance(false);
|
||||||
return;
|
}, [effectiveImageRequest?.cacheKey]);
|
||||||
}
|
|
||||||
|
|
||||||
setHasLoadedInInstance((current) => (current ? false : current));
|
|
||||||
}, [imageCacheKey, trackLoadedInInstance]);
|
|
||||||
|
|
||||||
const shouldLoadImage = Boolean(
|
const shouldLoadImage = Boolean(
|
||||||
effectiveImageRequest &&
|
effectiveImageRequest &&
|
||||||
@@ -119,13 +112,13 @@ export function BaseImage({
|
|||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!trackLoadedInInstance || !nativeImage.isLoaded || !imageCacheKey) {
|
if (!nativeImage.isLoaded || !effectiveImageRequest?.cacheKey) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
loadedImageCacheKeys.add(imageCacheKey);
|
loadedImageCacheKeys.add(effectiveImageRequest.cacheKey);
|
||||||
setHasLoadedInInstance((current) => (current ? current : true));
|
setHasLoadedInInstance(true);
|
||||||
}, [imageCacheKey, nativeImage.isLoaded, trackLoadedInInstance]);
|
}, [effectiveImageRequest?.cacheKey, nativeImage.isLoaded]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ImageContainer
|
<ImageContainer
|
||||||
|
|||||||
@@ -26,11 +26,8 @@ export function useNativeImage({
|
|||||||
const loadedRequestSignatureRef = useRef<null | string>(null);
|
const loadedRequestSignatureRef = useRef<null | string>(null);
|
||||||
const objectUrlRef = useRef<null | string>(null);
|
const objectUrlRef = useRef<null | string>(null);
|
||||||
const onFetchErrorRef = useRef(onFetchError);
|
const onFetchErrorRef = useRef(onFetchError);
|
||||||
const requestRef = useRef(request);
|
|
||||||
const [state, setState] = useState<NativeImageState>({ status: 'idle' });
|
const [state, setState] = useState<NativeImageState>({ status: 'idle' });
|
||||||
|
|
||||||
requestRef.current = request;
|
|
||||||
|
|
||||||
const requestSignature = useMemo(() => {
|
const requestSignature = useMemo(() => {
|
||||||
if (!request) {
|
if (!request) {
|
||||||
return null;
|
return null;
|
||||||
@@ -47,8 +44,6 @@ export function useNativeImage({
|
|||||||
onFetchErrorRef.current = onFetchError;
|
onFetchErrorRef.current = onFetchError;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const request = requestRef.current;
|
|
||||||
|
|
||||||
const abortCurrentRequest = () => {
|
const abortCurrentRequest = () => {
|
||||||
abortControllerRef.current?.abort();
|
abortControllerRef.current?.abort();
|
||||||
abortControllerRef.current = null;
|
abortControllerRef.current = null;
|
||||||
@@ -67,61 +62,28 @@ export function useNativeImage({
|
|||||||
if (!request || !requestSignature) {
|
if (!request || !requestSignature) {
|
||||||
abortCurrentRequest();
|
abortCurrentRequest();
|
||||||
revokeObjectUrl();
|
revokeObjectUrl();
|
||||||
setState((currentState) => {
|
setState({ status: 'idle' });
|
||||||
if (currentState.status === 'idle' && !currentState.displaySrc) {
|
|
||||||
return currentState;
|
|
||||||
}
|
|
||||||
|
|
||||||
return { status: 'idle' };
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
abortCurrentRequest();
|
abortCurrentRequest();
|
||||||
setState((currentState) => {
|
setState((currentState) =>
|
||||||
if (currentState.displaySrc) {
|
currentState.displaySrc
|
||||||
if (currentState.status === 'loaded') {
|
? { ...currentState, status: 'loaded' }
|
||||||
return currentState;
|
: { status: 'idle' },
|
||||||
}
|
);
|
||||||
|
|
||||||
return { ...currentState, status: 'loaded' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentState.status === 'idle' && !currentState.displaySrc) {
|
|
||||||
return currentState;
|
|
||||||
}
|
|
||||||
|
|
||||||
return { status: 'idle' };
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loadedRequestSignatureRef.current === requestSignature && objectUrlRef.current) {
|
if (loadedRequestSignatureRef.current === requestSignature && objectUrlRef.current) {
|
||||||
const cachedObjectUrl = objectUrlRef.current;
|
setState({ displaySrc: objectUrlRef.current, status: 'loaded' });
|
||||||
|
|
||||||
setState((currentState) => {
|
|
||||||
if (
|
|
||||||
currentState.status === 'loaded' &&
|
|
||||||
currentState.displaySrc === cachedObjectUrl
|
|
||||||
) {
|
|
||||||
return currentState;
|
|
||||||
}
|
|
||||||
|
|
||||||
return { displaySrc: cachedObjectUrl, status: 'loaded' };
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
abortCurrentRequest();
|
abortCurrentRequest();
|
||||||
revokeObjectUrl();
|
revokeObjectUrl();
|
||||||
setState((currentState) => {
|
setState({ status: 'loading' });
|
||||||
if (currentState.status === 'loading' && !currentState.displaySrc) {
|
|
||||||
return currentState;
|
|
||||||
}
|
|
||||||
|
|
||||||
return { status: 'loading' };
|
|
||||||
});
|
|
||||||
|
|
||||||
const abortController = new AbortController();
|
const abortController = new AbortController();
|
||||||
abortControllerRef.current = abortController;
|
abortControllerRef.current = abortController;
|
||||||
@@ -176,7 +138,7 @@ export function useNativeImage({
|
|||||||
abortControllerRef.current = null;
|
abortControllerRef.current = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}, [enabled, fetchPriority, requestSignature]);
|
}, [enabled, fetchPriority, request, requestSignature]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user