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