From 7c63ed0ef4a2c4fffbcdd98748e242f6a3863af8 Mon Sep 17 00:00:00 2001 From: Filip Van Ham Date: Wed, 26 Apr 2023 11:36:46 +0200 Subject: [PATCH] feat: add listening for redocUpdatePosition event on window to update scrollPosition by url/history --- package.json | 2 +- src/services/AppStore.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 8a030a30..593e9a42 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redoc", - "version": "2.0.0-0.2.0", + "version": "2.0.0-0.2.1", "description": "ReDoc", "repository": { "type": "git", diff --git a/src/services/AppStore.ts b/src/services/AppStore.ts index 0c0dba35..eb7ff0b1 100644 --- a/src/services/AppStore.ts +++ b/src/services/AppStore.ts @@ -58,6 +58,8 @@ export class AppStore { private scroll: ScrollService; private disposer: Lambda | null = null; + private readonly listener: EventListenerOrEventListenerObject = this.updateOnEvent.bind(this); + constructor( spec: OpenAPISpec, specUrl?: string, @@ -73,7 +75,7 @@ export class AppStore { MenuStore.updateOnHistory(this.history.currentId, this.scroll); // Listen for external event to update - window.addEventListener('redocUpdatePosition', this.updateOnEvent); + window.addEventListener('redocUpdatePosition', this.listener); // override the openApi standard to version 3.1.0 // TODO remove when fully supporting open API 3.1.0 @@ -101,7 +103,7 @@ export class AppStore { dispose() { this.scroll.dispose(); this.menu.dispose(); - window.removeEventListener('redocUpdatePosition', this.updateOnEvent); + window.removeEventListener('redocUpdatePosition', this.listener); if (this.search) { this.search.dispose(); } @@ -129,10 +131,6 @@ export class AppStore { }; } - private updateOnEvent(): void { - MenuStore.updateOnHistory(this.history.currentId, this.scroll); - } - private updateMarkOnMenu(idx: number) { const start = Math.max(0, idx); const end = Math.min(this.menu.flatItems.length, start + 5); @@ -157,6 +155,10 @@ export class AppStore { this.marker.addOnly(elements); this.marker.mark(); } + + private updateOnEvent(): void { + MenuStore.updateOnHistory(this.history.currentId, this.scroll); + } } const DEFAULT_OPTIONS: RedocRawOptions = {