add changedParentTypes to undomanager events

This commit is contained in:
Kevin Jahns 2021-02-02 15:09:42 +01:00
parent baca852733
commit 7a128c271b
2 changed files with 12 additions and 3 deletions

View File

@ -10,7 +10,7 @@ import {
followRedone, followRedone,
getItemCleanStart, getItemCleanStart,
getState, getState,
ID, Transaction, Doc, Item, GC, DeleteSet, AbstractType // eslint-disable-line Transaction, Doc, Item, GC, DeleteSet, AbstractType, YEvent // eslint-disable-line
} from '../internals.js' } from '../internals.js'
import * as time from 'lib0/time.js' import * as time from 'lib0/time.js'
@ -45,6 +45,11 @@ const popStackItem = (undoManager, stack, eventType) => {
* @type {StackItem?} * @type {StackItem?}
*/ */
let result = null let result = null
/**
* Keep a reference to the transaction so we can fire the event with the changedParentTypes
* @type {any}
*/
let _tr = null
const doc = undoManager.doc const doc = undoManager.doc
const scope = undoManager.scope const scope = undoManager.scope
transact(doc, transaction => { transact(doc, transaction => {
@ -126,9 +131,11 @@ const popStackItem = (undoManager, stack, eventType) => {
type._searchMarker.length = 0 type._searchMarker.length = 0
} }
}) })
_tr = transaction
}, undoManager) }, undoManager)
if (result != null) { if (result != null) {
undoManager.emit('stack-item-popped', [{ stackItem: result, type: eventType }, undoManager]) const changedParentTypes = _tr.changedParentTypes
undoManager.emit('stack-item-popped', [{ stackItem: result, type: eventType, changedParentTypes }, undoManager])
} }
return result return result
} }
@ -215,7 +222,7 @@ export class UndoManager extends Observable {
keepItem(item, true) keepItem(item, true)
} }
}) })
this.emit('stack-item-added', [{ stackItem: stack[stack.length - 1], origin: transaction.origin, type: undoing ? 'redo' : 'undo' }, this]) this.emit('stack-item-added', [{ stackItem: stack[stack.length - 1], origin: transaction.origin, type: undoing ? 'redo' : 'undo', changedParentTypes: transaction.changedParentTypes }, this])
}) })
} }

View File

@ -201,10 +201,12 @@ export const testUndoEvents = tc => {
let receivedMetadata = -1 let receivedMetadata = -1
undoManager.on('stack-item-added', /** @param {any} event */ event => { undoManager.on('stack-item-added', /** @param {any} event */ event => {
t.assert(event.type != null) t.assert(event.type != null)
t.assert(event.changedParentTypes != null && event.changedParentTypes.has(text0))
event.stackItem.meta.set('test', counter++) event.stackItem.meta.set('test', counter++)
}) })
undoManager.on('stack-item-popped', /** @param {any} event */ event => { undoManager.on('stack-item-popped', /** @param {any} event */ event => {
t.assert(event.type != null) t.assert(event.type != null)
t.assert(event.changedParentTypes != null && event.changedParentTypes.has(text0))
receivedMetadata = event.stackItem.meta.get('test') receivedMetadata = event.stackItem.meta.get('test')
}) })
text0.insert(0, 'abc') text0.insert(0, 'abc')