|
|
|
|
@ -272,6 +272,7 @@ export type ExcalidrawImperativeAPI =
@@ -272,6 +272,7 @@ export type ExcalidrawImperativeAPI =
|
|
|
|
|
| { |
|
|
|
|
updateScene: InstanceType<typeof App>["updateScene"]; |
|
|
|
|
resetScene: InstanceType<typeof App>["resetScene"]; |
|
|
|
|
resetHistory: InstanceType<typeof App>["resetHistory"]; |
|
|
|
|
getSceneElementsIncludingDeleted: InstanceType< |
|
|
|
|
typeof App |
|
|
|
|
>["getSceneElementsIncludingDeleted"]; |
|
|
|
|
@ -311,6 +312,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -311,6 +312,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
forwardedRef.current = { |
|
|
|
|
updateScene: this.updateScene, |
|
|
|
|
resetScene: this.resetScene, |
|
|
|
|
resetHistory: this.resetHistory, |
|
|
|
|
getSceneElementsIncludingDeleted: this.getSceneElementsIncludingDeleted, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
@ -555,6 +557,10 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -555,6 +557,10 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
private resetHistory = () => { |
|
|
|
|
history.clear(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/** Completely resets scene & history. |
|
|
|
|
* Do not use for clear scene user action. */ |
|
|
|
|
private resetScene = withBatchedUpdates(() => { |
|
|
|
|
@ -564,7 +570,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -564,7 +570,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
appearance: this.state.appearance, |
|
|
|
|
username: this.state.username, |
|
|
|
|
}); |
|
|
|
|
history.clear(); |
|
|
|
|
this.resetHistory(); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
private initializeScene = async () => { |
|
|
|
|
@ -665,7 +671,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -665,7 +671,7 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
), |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
history.clear(); |
|
|
|
|
this.resetHistory(); |
|
|
|
|
this.syncActionResult({ |
|
|
|
|
...scene, |
|
|
|
|
commitToHistory: true, |
|
|
|
|
@ -1314,6 +1320,12 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1314,6 +1320,12 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
|
|
|
|
|
this.updateScene({ elements: newElements }); |
|
|
|
|
|
|
|
|
|
// We haven't yet implemented multiplayer undo functionality, so we clear the undo stack
|
|
|
|
|
// when we receive any messages from another peer. This UX can be pretty rough -- if you
|
|
|
|
|
// undo, a user makes a change, and then try to redo, your element(s) will be lost. However,
|
|
|
|
|
// right now we think this is the right tradeoff.
|
|
|
|
|
this.resetHistory(); |
|
|
|
|
|
|
|
|
|
if (!this.portal.socketInitialized && !initFromSnapshot) { |
|
|
|
|
this.initializeSocket(); |
|
|
|
|
} |
|
|
|
|
@ -1340,12 +1352,6 @@ class App extends React.Component<ExcalidrawProps, AppState> {
@@ -1340,12 +1352,6 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.scene.replaceAllElements(sceneData.elements); |
|
|
|
|
|
|
|
|
|
// We haven't yet implemented multiplayer undo functionality, so we clear the undo stack
|
|
|
|
|
// when we receive any messages from another peer. This UX can be pretty rough -- if you
|
|
|
|
|
// undo, a user makes a change, and then try to redo, your element(s) will be lost. However,
|
|
|
|
|
// right now we think this is the right tradeoff.
|
|
|
|
|
history.clear(); |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|