Skip to content

Commit 564cdd2

Browse files
committed
Remove doubled spaces when accepting deletions.
(cherry picked from commit 470947c)
1 parent 1c9a5c9 commit 564cdd2

2 files changed

Lines changed: 69 additions & 1 deletion

File tree

src/__tests__/commands.test.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,63 @@ describe("applyTrackedChanges", () => {
107107
testBuilders.paragraph("first paragraph"),
108108
);
109109

110+
assert(
111+
eq(newState.doc, expected),
112+
`Expected ${newState.doc} to match ${expected}`,
113+
);
114+
});
115+
it("should removed doubles spaces around deletions", async () => {
116+
const doc = testBuilders.doc(
117+
testBuilders.paragraph(
118+
"first ",
119+
testBuilders.deletion({ id: "1" }, "second"),
120+
" third",
121+
),
122+
);
123+
124+
const editorState = EditorState.create({
125+
doc,
126+
});
127+
128+
const newState = await new Promise<EditorState>((resolve) => {
129+
applySuggestions(editorState, (tr) => {
130+
resolve(editorState.apply(tr));
131+
});
132+
});
133+
134+
const expected = testBuilders.doc(testBuilders.paragraph("first third"));
135+
136+
assert(
137+
eq(newState.doc, expected),
138+
`Expected ${newState.doc} to match ${expected}`,
139+
);
140+
});
141+
it("should removed doubles spaces around deletions accross boundaries", async () => {
142+
const doc = testBuilders.doc(
143+
testBuilders.paragraph(
144+
"first ",
145+
testBuilders.deletion({ id: "1" }, "paragraph"),
146+
),
147+
testBuilders.paragraph(
148+
testBuilders.deletion({ id: "1" }, "second"),
149+
" paragraph",
150+
),
151+
);
152+
153+
const editorState = EditorState.create({
154+
doc,
155+
});
156+
157+
const newState = await new Promise<EditorState>((resolve) => {
158+
applySuggestions(editorState, (tr) => {
159+
resolve(editorState.apply(tr));
160+
});
161+
});
162+
163+
const expected = testBuilders.doc(
164+
testBuilders.paragraph("first paragraph"),
165+
);
166+
110167
assert(
111168
eq(newState.doc, expected),
112169
`Expected ${newState.doc} to match ${expected}`,

src/commands.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,22 @@ function applySuggestionsToTransform(
6363
if (isToRevert) {
6464
const { pos: deletionFrom, deleted } = tr.mapping.mapResult(pos);
6565
if (deleted) return false;
66+
6667
const deletionTo = findSuggestionMarkEnd(
6768
tr.doc.resolve(deletionFrom + child.nodeSize),
6869
markTypeToRevert,
6970
);
70-
tr.deleteRange(deletionFrom, deletionTo);
71+
// check if the previous and the next text part is a space
72+
// if so, we can delete the whole text part
73+
const prevChar = tr.doc.textBetween(
74+
deletionFrom - 1,
75+
deletionFrom,
76+
"x",
77+
"x",
78+
);
79+
const nextChar = tr.doc.textBetween(deletionTo, deletionTo + 1, "x", "x");
80+
const addedRange = prevChar === " " && nextChar === " " ? 1 : 0;
81+
tr.deleteRange(deletionFrom, deletionTo + addedRange);
7182
return false;
7283
}
7384

0 commit comments

Comments
 (0)