Files
outline/shared/editor/lib/prosemirror-recreate-transform/simplifyTransform.ts
2023-09-21 05:44:23 -07:00

31 lines
895 B
TypeScript

import { Node } from "prosemirror-model";
import { Transform, ReplaceStep, Step } from "prosemirror-transform";
import { getReplaceStep } from "./getReplaceStep";
// join adjacent ReplaceSteps
export function simplifyTransform(tr: Transform) {
if (!tr.steps.length) {
return undefined;
}
const newTr = new Transform(tr.docs[0]);
const oldSteps = tr.steps.slice();
while (oldSteps.length) {
let step = oldSteps.shift() as Step;
while (oldSteps.length && step.merge(oldSteps[0])) {
const addedStep = oldSteps.shift() as Step;
if (step instanceof ReplaceStep && addedStep instanceof ReplaceStep) {
step = getReplaceStep(
newTr.doc,
addedStep.apply(step.apply(newTr.doc).doc as Node).doc as Node
) as Step;
} else {
step = step.merge(addedStep) as Step;
}
}
newTr.step(step);
}
return newTr;
}