From b0e59c30dd20da0534ef3c09db4ec113020f0b40 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 May 2020 23:14:58 +0200 Subject: [PATCH] correctly pass options to ViewModel ctor --- src/domain/BrawlViewModel.js | 6 +++--- src/domain/SessionLoadViewModel.js | 5 +++-- src/domain/SessionPickerViewModel.js | 7 ++++--- src/domain/ViewModel.js | 19 +++++++++++++++++-- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/domain/BrawlViewModel.js b/src/domain/BrawlViewModel.js index 16e5a622..82b085cd 100644 --- a/src/domain/BrawlViewModel.js +++ b/src/domain/BrawlViewModel.js @@ -4,12 +4,12 @@ import {SessionPickerViewModel} from "./SessionPickerViewModel.js"; import {ViewModel} from "./ViewModel.js"; export class BrawlViewModel extends ViewModel { - constructor({createSessionContainer, sessionInfoStorage, storageFactory, clock}) { - super(); + constructor(options) { + super(options); + const {createSessionContainer, sessionInfoStorage, storageFactory} = options; this._createSessionContainer = createSessionContainer; this._sessionInfoStorage = sessionInfoStorage; this._storageFactory = storageFactory; - this._clock = clock; this._error = null; this._sessionViewModel = null; diff --git a/src/domain/SessionLoadViewModel.js b/src/domain/SessionLoadViewModel.js index 10f4f7ee..e4a1fc0a 100644 --- a/src/domain/SessionLoadViewModel.js +++ b/src/domain/SessionLoadViewModel.js @@ -3,8 +3,9 @@ import {SyncStatus} from "../matrix/Sync.js"; import {ViewModel} from "./ViewModel.js"; export class SessionLoadViewModel extends ViewModel { - constructor({createAndStartSessionContainer, sessionCallback, homeserver, deleteSessionOnCancel}) { - super(); + constructor(options) { + super(options); + const {createAndStartSessionContainer, sessionCallback, homeserver, deleteSessionOnCancel} = options; this._createAndStartSessionContainer = createAndStartSessionContainer; this._sessionCallback = sessionCallback; this._homeserver = homeserver; diff --git a/src/domain/SessionPickerViewModel.js b/src/domain/SessionPickerViewModel.js index cc4416b5..78cb5bac 100644 --- a/src/domain/SessionPickerViewModel.js +++ b/src/domain/SessionPickerViewModel.js @@ -4,7 +4,7 @@ import {ViewModel} from "./ViewModel.js"; class SessionItemViewModel extends ViewModel { constructor(sessionInfo, pickerVM) { - super(); + super({}); this._pickerVM = pickerVM; this._sessionInfo = sessionInfo; this._isDeleting = false; @@ -100,8 +100,9 @@ class SessionItemViewModel extends ViewModel { export class SessionPickerViewModel extends ViewModel { - constructor({storageFactory, sessionInfoStorage, sessionCallback, createSessionContainer}) { - super(); + constructor(options) { + super(options); + const {storageFactory, sessionInfoStorage, sessionCallback, createSessionContainer} = options; this._storageFactory = storageFactory; this._sessionInfoStorage = sessionInfoStorage; this._sessionCallback = sessionCallback; diff --git a/src/domain/ViewModel.js b/src/domain/ViewModel.js index c49e0ef6..7e08f8d3 100644 --- a/src/domain/ViewModel.js +++ b/src/domain/ViewModel.js @@ -6,10 +6,10 @@ import {EventEmitter} from "../utils/EventEmitter.js"; import {Disposables} from "../utils/Disposables.js"; export class ViewModel extends EventEmitter { - constructor(options) { + constructor({clock} = {}) { super(); this.disposables = null; - this._options = options; + this._options = {clock}; } childOptions(explicitOptions) { @@ -21,6 +21,7 @@ export class ViewModel extends EventEmitter { this.disposables = new Disposables(); } this.disposables.track(disposable); + return disposable; } dispose() { @@ -29,8 +30,18 @@ export class ViewModel extends EventEmitter { } } + disposeTracked(disposable) { + if (this.disposables) { + return this.disposables.disposeTracked(disposable); + } + return null; + } + // TODO: this will need to support binding // if any of the expr is a function, assume the function is a binding, and return a binding function ourselves + // + // translated string should probably always be bindings, unless we're fine with a refresh when changing the language? + // we probably are, if we're using routing with a url, we could just refresh. i18n(parts, ...expr) { // just concat for now let result = ""; @@ -46,4 +57,8 @@ export class ViewModel extends EventEmitter { emitChange(changedProps) { this.emit("change", changedProps); } + + get clock() { + return this._options.clock; + } }