[Undo] add UndoManager.currStackItem

This commit is contained in:
Kevin Jahns
2024-02-29 14:46:43 +01:00
parent 917261a1ce
commit 29fa60ccf9
3 changed files with 23 additions and 63 deletions

View File

@@ -719,62 +719,29 @@ export const testUndoDeleteInMap = (tc) => {
/**
* It should expose the StackItem being processed if undoing
*
* @param {t.TestCase} tc
* @param {t.TestCase} _tc
*/
export const testUndoDoingStackItem = async (tc) => {
export const testUndoDoingStackItem = async (_tc) => {
const doc = new Y.Doc()
const text = doc.getText('text')
const undoManager = new Y.UndoManager([text])
undoManager.on('stack-item-added', /** @param {any} event */ event => {
event.stackItem.meta.set('str', '42')
})
const meta = new Promise((resolve) => {
setTimeout(() => resolve('ABORTED'), 50)
text.observe((event) => {
const /** @type {Y.UndoManager} */ origin = event.transaction.origin
if (origin === undoManager && origin.undoing) {
resolve(origin.doingStackItem?.meta.get('str'))
}
})
let metaUndo = /** @type {any} */ (null)
let metaRedo = /** @type {any} */ (null)
text.observe((event) => {
const /** @type {Y.UndoManager} */ origin = event.transaction.origin
if (origin === undoManager && origin.undoing) {
metaUndo = origin.currStackItem?.meta.get('str')
} else if (origin === undoManager && origin.redoing) {
metaRedo = origin.currStackItem?.meta.get('str')
}
})
text.insert(0, 'abc')
undoManager.undo()
t.compare(await meta, '42')
t.compare(undoManager.doingStackItem, null)
}
/**
* It should expose the StackItem being processed if redoing
*
* @param {t.TestCase} tc
*/
export const testRedoDoingStackItem = async (tc) => {
const doc = new Y.Doc()
const text = doc.getText('text')
const undoManager = new Y.UndoManager([text])
undoManager.on('stack-item-added', /** @param {any} event */ event => {
event.stackItem.meta.set('str', '42')
})
const meta = new Promise(resolve => {
setTimeout(() => resolve('ABORTED'), 50)
text.observe((event) => {
const /** @type {Y.UndoManager} */ origin = event.transaction.origin
if (origin === undoManager && origin.redoing) {
resolve(origin.doingStackItem?.meta.get('str'))
}
})
})
text.insert(0, 'abc')
undoManager.undo()
undoManager.redo()
t.compare(await meta, '42')
t.compare(undoManager.doingStackItem, null)
t.compare(metaUndo, '42', 'currStackItem is accessible while undoing')
t.compare(metaRedo, '42', 'currStackItem is accessible while redoing')
t.compare(undoManager.currStackItem, null, 'currStackItem is null after observe/transaction')
}