fix: images not initialized correctly (#4157)

* fix: image not initialized correctly due to not renewing `state.pendingImageElement`

* ensure we replace elements on update

* set file as errored on >= 400 status respones
This commit is contained in:
David Luzar 2021-11-01 10:44:57 +01:00 committed by GitHub
parent 8df1a11535
commit 790e6da500
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 5 deletions

View File

@ -4270,12 +4270,24 @@ class App extends React.Component<AppProps, AppState> {
if (updatedFiles.has(element.fileId)) {
invalidateShapeForElement(element);
}
if (erroredFiles.has(element.fileId)) {
newElementWith(element, { status: "error" });
}
}
}
if (erroredFiles.size) {
this.scene.replaceAllElements(
this.scene.getElementsIncludingDeleted().map((element) => {
if (
isInitializedImageElement(element) &&
erroredFiles.has(element.fileId)
) {
return newElementWith(element, {
status: "error",
});
}
return element;
}),
);
}
return { updatedFiles, erroredFiles };
};

View File

@ -294,6 +294,8 @@ export const loadFilesFromFirebase = async (
dataURL,
created: metadata?.created || Date.now(),
});
} else {
erroredFiles.set(id, true);
}
} catch (error) {
erroredFiles.set(id, true);

View File

@ -460,12 +460,17 @@ const ExcalidrawWrapper = () => {
if (excalidrawAPI) {
let didChange = false;
let pendingImageElement = appState.pendingImageElement;
const elements = excalidrawAPI
.getSceneElementsIncludingDeleted()
.map((element) => {
if (localFileStorage.shouldUpdateImageElementStatus(element)) {
didChange = true;
return newElementWith(element, { status: "saved" });
const newEl = newElementWith(element, { status: "saved" });
if (pendingImageElement === element) {
pendingImageElement = newEl;
}
return newEl;
}
return element;
});
@ -473,6 +478,9 @@ const ExcalidrawWrapper = () => {
if (didChange) {
excalidrawAPI.updateScene({
elements,
appState: {
pendingImageElement,
},
});
}
}