From 5a68b9f4ad17ab1bdb94cf418fb2052e6040f5ac Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Mon, 8 Jan 2018 02:28:46 +0100 Subject: [PATCH] loaded event when loaded from persistence adapter --- src/Connector.js | 1 + src/Persistence.js | 2 ++ src/Type/y-xml/YXmlFragment.js | 8 ++++++-- src/Util/NamedEventHandler.js | 3 ++- src/Y.js | 12 ++++++++++++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/Connector.js b/src/Connector.js index 5d5695c9..23c30405 100644 --- a/src/Connector.js +++ b/src/Connector.js @@ -132,6 +132,7 @@ export default class AbstractConnector { f() } this.whenSyncedListeners = [] + this.y.loaded = true this.y.emit('synced') } } diff --git a/src/Persistence.js b/src/Persistence.js index f0a5cf7b..d44bf9bf 100644 --- a/src/Persistence.js +++ b/src/Persistence.js @@ -66,10 +66,12 @@ export default class AbstractPersistence { y.transact(function () { if (model != null) { fromBinary(y, new BinaryDecoder(new Uint8Array(model))) + y.loaded = true } if (updates != null) { for (let i = 0; i < updates.length; i++) { integrateRemoteStructs(y, new BinaryDecoder(new Uint8Array(updates[i]))) + y.loaded = true } } }) diff --git a/src/Type/y-xml/YXmlFragment.js b/src/Type/y-xml/YXmlFragment.js index c9ae4eb9..d8429cdc 100644 --- a/src/Type/y-xml/YXmlFragment.js +++ b/src/Type/y-xml/YXmlFragment.js @@ -185,6 +185,9 @@ export default class YXmlFragment extends YArray { this._dom._yxml = null this._dom = null } + if (this._beforeTransactionHandler !== undefined) { + this._y.off('beforeTransaction', this._beforeTransactionHandler) + } } insertDomElementsAfter (prev, doms, _document) { const types = domToYXml(this, doms, _document) @@ -275,9 +278,10 @@ export default class YXmlFragment extends YArray { }) // Apply Dom changes on Y.Xml if (typeof MutationObserver !== 'undefined') { - this._y.on('beforeTransaction', () => { + this._beforeTransactionHandler = () => { this._domObserverListener(this._domObserver.takeRecords()) - }) + } + this._y.on('beforeTransaction', this._beforeTransactionHandler) this._domObserverListener = mutations => { this._mutualExclude(() => { this._y.transact(() => { diff --git a/src/Util/NamedEventHandler.js b/src/Util/NamedEventHandler.js index 8ba9d7aa..83f2458d 100644 --- a/src/Util/NamedEventHandler.js +++ b/src/Util/NamedEventHandler.js @@ -27,7 +27,8 @@ export default class NamedEventHandler { } const listener = this._eventListener.get(name) if (listener !== undefined) { - listener.remove(f) + listener.on.delete(f) + listener.once.delete(f) } } emit (name, ...args) { diff --git a/src/Y.js b/src/Y.js index ab30803d..ff00a838 100644 --- a/src/Y.js +++ b/src/Y.js @@ -21,9 +21,12 @@ import { addStruct as addType } from './Util/structReferences.js' import debug from 'debug' import Transaction from './Transaction.js' +import YIndexedDB from '../../y-indexeddb/src/y-indexeddb.js' + export default class Y extends NamedEventHandler { constructor (opts, persistence) { super() + this._loaded = false this._opts = opts this.userID = opts._userID != null ? opts._userID : generateUserID() this.share = {} @@ -47,6 +50,15 @@ export default class Y extends NamedEventHandler { initConnection() } } + get loaded () { + return this._loaded + } + set loaded (val) { + if (this._loaded === false && val) { + this._loaded = true + this.emit('loaded') + } + } _beforeChange () {} transact (f, remote = false) { let initialCall = this._transaction === null