observeDeep receives array of events
This commit is contained in:
parent
c453593ee7
commit
e5f289506f
@ -40,10 +40,16 @@ export default class Type extends Item {
|
||||
this._deepEventHandler = new EventHandler()
|
||||
}
|
||||
_callEventHandler (event) {
|
||||
const changedParentTypes = this._y._transaction.changedParentTypes
|
||||
this._eventHandler.callEventListeners(event)
|
||||
let type = this
|
||||
while (type !== this._y) {
|
||||
type._deepEventHandler.callEventListeners(event)
|
||||
let events = changedParentTypes.get(type)
|
||||
if (events === undefined) {
|
||||
events = []
|
||||
changedParentTypes.set(type, events)
|
||||
}
|
||||
events.push(event)
|
||||
type = type._parent
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ export default class Transaction {
|
||||
this.changedTypes = new Map()
|
||||
this.deletedStructs = new Set()
|
||||
this.beforeState = new Map()
|
||||
this.changedParentTypes = new Map()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,6 +98,14 @@ export default class YMap extends Type {
|
||||
return v._content[v._content.length - 1]
|
||||
}
|
||||
}
|
||||
has (key) {
|
||||
let v = this._map.get(key)
|
||||
if (v === undefined || v._deleted) {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
_logString () {
|
||||
const left = this._left !== null ? this._left._lastId : null
|
||||
const origin = this._origin !== null ? this._origin._lastId : null
|
||||
|
@ -135,11 +135,12 @@ export function applyChangesFromDom (dom) {
|
||||
}
|
||||
}
|
||||
|
||||
export function reflectChangesOnDom (event) {
|
||||
export function reflectChangesOnDom (events) {
|
||||
this._mutualExclude(() => {
|
||||
events.forEach(event => {
|
||||
const yxml = event.target
|
||||
const dom = yxml._dom
|
||||
if (dom != null) {
|
||||
this._mutualExclude(() => {
|
||||
// TODO: do this once before applying stuff
|
||||
// let anchorViewPosition = getAnchorViewPosition(yxml._scrollElement)
|
||||
if (yxml.constructor === YXmlText) {
|
||||
@ -219,6 +220,7 @@ export function reflectChangesOnDom (event) {
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,12 @@
|
||||
export default class YEvent {
|
||||
constructor (target) {
|
||||
this.target = target
|
||||
this._path = null
|
||||
}
|
||||
get path () {
|
||||
if (this._path !== null) {
|
||||
return this._path
|
||||
} else {
|
||||
const path = []
|
||||
let type = this.target
|
||||
const y = type._y
|
||||
@ -22,6 +26,8 @@ export default class YEvent {
|
||||
}
|
||||
type = parent
|
||||
}
|
||||
this._path = path
|
||||
return path
|
||||
}
|
||||
}
|
||||
}
|
||||
|
12
src/Y.js
12
src/Y.js
@ -55,7 +55,19 @@ export default class Y extends NamedEventHandler {
|
||||
if (initialCall) {
|
||||
// emit change events on changed types
|
||||
this._transaction.changedTypes.forEach(function (subs, type) {
|
||||
if (!type._deleted) {
|
||||
type._callObserver(subs, remote)
|
||||
}
|
||||
})
|
||||
this._transaction.changedParentTypes.forEach(function (events, type) {
|
||||
if (!type._deleted) {
|
||||
events = events.filter(event =>
|
||||
!event.target._deleted
|
||||
)
|
||||
// we don't have to check for events.length
|
||||
// because there is no way events is empty..
|
||||
type._deepEventHandler.callEventListeners(events)
|
||||
}
|
||||
})
|
||||
// when all changes & events are processed, emit afterTransaction event
|
||||
this.emit('afterTransaction', this, remote)
|
||||
|
Loading…
x
Reference in New Issue
Block a user