feat: expose applyTo options, don't commit empty text element (#9744)

* Expose applyTo options, skip re-draw for empty text

* Don't commit empty text elements
This commit is contained in:
Marcel Mraz
2025-07-17 15:22:32 +02:00
committed by GitHub
parent 678dff25ed
commit e46f038132
3 changed files with 27 additions and 8 deletions
+15 -4
View File
@@ -4925,7 +4925,17 @@ class App extends React.Component<AppProps, AppState> {
}),
onSubmit: withBatchedUpdates(({ viaKeyboard, nextOriginalText }) => {
const isDeleted = !nextOriginalText.trim();
updateElement(nextOriginalText, isDeleted);
if (isDeleted && !isExistingElement) {
// let's just remove the element from the scene, as it's an empty just created text element
this.scene.replaceAllElements(
this.scene
.getElementsIncludingDeleted()
.filter((x) => x.id !== element.id),
);
} else {
updateElement(nextOriginalText, isDeleted);
}
// select the created text element only if submitting via keyboard
// (when submitting via click it should act as signal to deselect)
if (!isDeleted && viaKeyboard) {
@@ -4954,9 +4964,10 @@ class App extends React.Component<AppProps, AppState> {
element,
]);
}
if (!isDeleted || isExistingElement) {
this.store.scheduleCapture();
}
// we need to record either way, whether the text element was added or removed
// since we need to sync this delta to other clients, otherwise it would end up with inconsistencies
this.store.scheduleCapture();
flushSync(() => {
this.setState({