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()
 | 
					    this._deepEventHandler = new EventHandler()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  _callEventHandler (event) {
 | 
					  _callEventHandler (event) {
 | 
				
			||||||
 | 
					    const changedParentTypes = this._y._transaction.changedParentTypes
 | 
				
			||||||
    this._eventHandler.callEventListeners(event)
 | 
					    this._eventHandler.callEventListeners(event)
 | 
				
			||||||
    let type = this
 | 
					    let type = this
 | 
				
			||||||
    while (type !== this._y) {
 | 
					    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
 | 
					      type = type._parent
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ export default class Transaction {
 | 
				
			|||||||
    this.changedTypes = new Map()
 | 
					    this.changedTypes = new Map()
 | 
				
			||||||
    this.deletedStructs = new Set()
 | 
					    this.deletedStructs = new Set()
 | 
				
			||||||
    this.beforeState = new Map()
 | 
					    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]
 | 
					      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 () {
 | 
					  _logString () {
 | 
				
			||||||
    const left = this._left !== null ? this._left._lastId : null
 | 
					    const left = this._left !== null ? this._left._lastId : null
 | 
				
			||||||
    const origin = this._origin !== null ? this._origin._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 yxml = event.target
 | 
				
			||||||
      const dom = yxml._dom
 | 
					      const dom = yxml._dom
 | 
				
			||||||
      if (dom != null) {
 | 
					      if (dom != null) {
 | 
				
			||||||
    this._mutualExclude(() => {
 | 
					 | 
				
			||||||
        // TODO: do this once before applying stuff
 | 
					        // TODO: do this once before applying stuff
 | 
				
			||||||
        // let anchorViewPosition = getAnchorViewPosition(yxml._scrollElement)
 | 
					        // let anchorViewPosition = getAnchorViewPosition(yxml._scrollElement)
 | 
				
			||||||
        if (yxml.constructor === YXmlText) {
 | 
					        if (yxml.constructor === YXmlText) {
 | 
				
			||||||
@ -219,6 +220,7 @@ export function reflectChangesOnDom (event) {
 | 
				
			|||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        */
 | 
					        */
 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,12 @@
 | 
				
			|||||||
export default class YEvent {
 | 
					export default class YEvent {
 | 
				
			||||||
  constructor (target) {
 | 
					  constructor (target) {
 | 
				
			||||||
    this.target = target
 | 
					    this.target = target
 | 
				
			||||||
 | 
					    this._path = null
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  get path () {
 | 
					  get path () {
 | 
				
			||||||
 | 
					    if (this._path !== null) {
 | 
				
			||||||
 | 
					      return this._path
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
      const path = []
 | 
					      const path = []
 | 
				
			||||||
      let type = this.target
 | 
					      let type = this.target
 | 
				
			||||||
      const y = type._y
 | 
					      const y = type._y
 | 
				
			||||||
@ -22,6 +26,8 @@ export default class YEvent {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        type = parent
 | 
					        type = parent
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      this._path = path
 | 
				
			||||||
      return path
 | 
					      return path
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								src/Y.js
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/Y.js
									
									
									
									
									
								
							@ -55,7 +55,19 @@ export default class Y extends NamedEventHandler {
 | 
				
			|||||||
    if (initialCall) {
 | 
					    if (initialCall) {
 | 
				
			||||||
      // emit change events on changed types
 | 
					      // emit change events on changed types
 | 
				
			||||||
      this._transaction.changedTypes.forEach(function (subs, type) {
 | 
					      this._transaction.changedTypes.forEach(function (subs, type) {
 | 
				
			||||||
 | 
					        if (!type._deleted) {
 | 
				
			||||||
          type._callObserver(subs, remote)
 | 
					          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
 | 
					      // when all changes & events are processed, emit afterTransaction event
 | 
				
			||||||
      this.emit('afterTransaction', this, remote)
 | 
					      this.emit('afterTransaction', this, remote)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user