|
@@ -14,6 +14,7 @@ import {
|
|
getNonDeletedElements,
|
|
getNonDeletedElements,
|
|
getNormalizedDimensions,
|
|
getNormalizedDimensions,
|
|
isInvisiblySmallElement,
|
|
isInvisiblySmallElement,
|
|
|
|
+ refreshTextDimensions,
|
|
} from "../element";
|
|
} from "../element";
|
|
import { isLinearElementType } from "../element/typeChecks";
|
|
import { isLinearElementType } from "../element/typeChecks";
|
|
import { randomId } from "../random";
|
|
import { randomId } from "../random";
|
|
@@ -138,6 +139,7 @@ const restoreElementWithProperties = <
|
|
|
|
|
|
const restoreElement = (
|
|
const restoreElement = (
|
|
element: Exclude<ExcalidrawElement, ExcalidrawSelectionElement>,
|
|
element: Exclude<ExcalidrawElement, ExcalidrawSelectionElement>,
|
|
|
|
+ refreshDimensions = true,
|
|
): typeof element | null => {
|
|
): typeof element | null => {
|
|
switch (element.type) {
|
|
switch (element.type) {
|
|
case "text":
|
|
case "text":
|
|
@@ -150,7 +152,7 @@ const restoreElement = (
|
|
fontSize = parseInt(fontPx, 10);
|
|
fontSize = parseInt(fontPx, 10);
|
|
fontFamily = getFontFamilyByName(_fontFamily);
|
|
fontFamily = getFontFamilyByName(_fontFamily);
|
|
}
|
|
}
|
|
- return restoreElementWithProperties(element, {
|
|
|
|
|
|
+ element = restoreElementWithProperties(element, {
|
|
fontSize,
|
|
fontSize,
|
|
fontFamily,
|
|
fontFamily,
|
|
text: element.text ?? "",
|
|
text: element.text ?? "",
|
|
@@ -160,6 +162,11 @@ const restoreElement = (
|
|
containerId: element.containerId ?? null,
|
|
containerId: element.containerId ?? null,
|
|
originalText: element.originalText || element.text,
|
|
originalText: element.originalText || element.text,
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ if (refreshDimensions) {
|
|
|
|
+ element = { ...element, ...refreshTextDimensions(element) };
|
|
|
|
+ }
|
|
|
|
+ return element;
|
|
case "freedraw": {
|
|
case "freedraw": {
|
|
return restoreElementWithProperties(element, {
|
|
return restoreElementWithProperties(element, {
|
|
points: element.points,
|
|
points: element.points,
|
|
@@ -232,13 +239,17 @@ export const restoreElements = (
|
|
elements: ImportedDataState["elements"],
|
|
elements: ImportedDataState["elements"],
|
|
/** NOTE doesn't serve for reconciliation */
|
|
/** NOTE doesn't serve for reconciliation */
|
|
localElements: readonly ExcalidrawElement[] | null | undefined,
|
|
localElements: readonly ExcalidrawElement[] | null | undefined,
|
|
|
|
+ refreshDimensions = true,
|
|
): ExcalidrawElement[] => {
|
|
): ExcalidrawElement[] => {
|
|
const localElementsMap = localElements ? arrayToMap(localElements) : null;
|
|
const localElementsMap = localElements ? arrayToMap(localElements) : null;
|
|
return (elements || []).reduce((elements, element) => {
|
|
return (elements || []).reduce((elements, element) => {
|
|
// filtering out selection, which is legacy, no longer kept in elements,
|
|
// filtering out selection, which is legacy, no longer kept in elements,
|
|
// and causing issues if retained
|
|
// and causing issues if retained
|
|
if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
|
|
if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
|
|
- let migratedElement: ExcalidrawElement | null = restoreElement(element);
|
|
|
|
|
|
+ let migratedElement: ExcalidrawElement | null = restoreElement(
|
|
|
|
+ element,
|
|
|
|
+ refreshDimensions,
|
|
|
|
+ );
|
|
if (migratedElement) {
|
|
if (migratedElement) {
|
|
const localElement = localElementsMap?.get(element.id);
|
|
const localElement = localElementsMap?.get(element.id);
|
|
if (localElement && localElement.version > migratedElement.version) {
|
|
if (localElement && localElement.version > migratedElement.version) {
|
|
@@ -376,7 +387,7 @@ export const restore = (
|
|
localElements: readonly ExcalidrawElement[] | null | undefined,
|
|
localElements: readonly ExcalidrawElement[] | null | undefined,
|
|
): RestoredDataState => {
|
|
): RestoredDataState => {
|
|
return {
|
|
return {
|
|
- elements: restoreElements(data?.elements, localElements),
|
|
|
|
|
|
+ elements: restoreElements(data?.elements, localElements, true),
|
|
appState: restoreAppState(data?.appState, localAppState || null),
|
|
appState: restoreAppState(data?.appState, localAppState || null),
|
|
files: data?.files || {},
|
|
files: data?.files || {},
|
|
};
|
|
};
|