diff --git a/package-lock.json b/package-lock.json index 022b158b..bf35e2c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscroll", - "version": "1.5.4", + "version": "1.5.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscroll", - "version": "1.5.4", + "version": "1.5.5", "license": "MIT", "dependencies": { "tslib": "^2.3.1" @@ -13893,4 +13893,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index d567c709..8f64d4ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vscroll", - "version": "1.5.4", + "version": "1.5.5", "description": "Virtual scroll engine", "main": "dist/bundles/vscroll.umd.js", "module": "dist/bundles/vscroll.esm5.js", diff --git a/src/processes/fetch.ts b/src/processes/fetch.ts index a922c5d9..9f1b6cd7 100644 --- a/src/processes/fetch.ts +++ b/src/processes/fetch.ts @@ -96,7 +96,8 @@ export default class Fetch extends BaseProcessFactory(CommonProcess.fetch) { if (typeof (getResult as PromiseLike).then === 'function') { return getResult as Promise; } else if (typeof (getResult as ObservableLike).subscribe === 'function') { - const sub = (getResult as ObservableLike).subscribe(done, fail, () => { + let sub: undefined | ReturnType = void 0; + sub = (getResult as ObservableLike).subscribe(done, fail, () => { if (sub && typeof sub === 'object' && typeof sub.unsubscribe === 'function') { sub.unsubscribe(); } diff --git a/src/scroller.ts b/src/scroller.ts index 1506abbe..fa8203e9 100644 --- a/src/scroller.ts +++ b/src/scroller.ts @@ -89,6 +89,7 @@ export class Scroller { } dispose(forever?: boolean): void { + this.logger.log(() => 'disposing scroller' + (forever ? ' (forever)' : '')); if (forever) { // Adapter is not re-instantiated on reset this.adapter.dispose(); } diff --git a/src/version.ts b/src/version.ts index 23be8f3d..2666877a 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,4 +1,4 @@ export default { name: 'vscroll', - version: '1.5.4' + version: '1.5.5' }; diff --git a/src/workflow.ts b/src/workflow.ts index 0053b340..9e31b41a 100644 --- a/src/workflow.ts +++ b/src/workflow.ts @@ -18,6 +18,7 @@ import { export class Workflow { isInitialized: boolean; + disposed: boolean; initTimer: ReturnType | null; adapterRun$: Reactive; cyclesDone: number; @@ -32,6 +33,7 @@ export class Workflow { constructor({ element, datasource, consumer, run, Routines }: WorkflowParams) { this.isInitialized = false; + this.disposed = false; this.initTimer = null; this.adapterRun$ = new Reactive(); this.cyclesDone = 0; @@ -62,13 +64,6 @@ export class Workflow { init(): void { this.scroller.init(this.adapterRun$); - this.isInitialized = true; - - // run the Workflow - this.callWorkflow({ - process: CommonProcess.init, - status: Status.start - }); // set up scroll event listener const { routines } = this.scroller; @@ -79,6 +74,13 @@ export class Workflow { payload: { event } }); this.offScroll = routines.onScroll(onScrollHandler); + + // run the Workflow + this.isInitialized = true; + this.callWorkflow({ + process: CommonProcess.init, + status: Status.start + }); } changeItems(items: Item[]): void { @@ -185,6 +187,7 @@ export class Workflow { } dispose(): void { + this.scroller.logger.log(() => 'disposing workflow'); if (this.initTimer) { clearTimeout(this.initTimer); } @@ -194,6 +197,7 @@ export class Workflow { Object.getOwnPropertyNames(this).forEach(prop => { delete (this as Record)[prop]; }); + this.disposed = true; } finalize(): void {