From 492c9bacbf7a5a0dc811b6535484dc6bd40193f3 Mon Sep 17 00:00:00 2001 From: Mo Date: Thu, 29 Sep 2022 10:58:10 -0500 Subject: [PATCH] fix(web): change component keys to use id tied to controller lifecycle instead of item id (#1681) * fix(web): change component keys to use id tied to controller lifecycle instead of item id * chore: lint --- packages/snjs/lib/Client/FileViewController.ts | 1 + packages/snjs/lib/Client/NoteViewController.ts | 1 + .../Components/NoteGroupView/NoteGroupView.tsx | 4 ++-- .../web/src/javascripts/Components/NoteView/NoteView.tsx | 9 +++++++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/snjs/lib/Client/FileViewController.ts b/packages/snjs/lib/Client/FileViewController.ts index 302ff55be..c126b390c 100644 --- a/packages/snjs/lib/Client/FileViewController.ts +++ b/packages/snjs/lib/Client/FileViewController.ts @@ -6,6 +6,7 @@ import { ItemViewControllerInterface } from './ItemViewControllerInterface' export class FileViewController implements ItemViewControllerInterface { public dealloced = false private removeStreamObserver?: () => void + public runtimeId = `${Math.random()}` constructor(private application: SNApplication, public item: FileItem) {} diff --git a/packages/snjs/lib/Client/NoteViewController.ts b/packages/snjs/lib/Client/NoteViewController.ts index 2bb7e98d6..fa7885f92 100644 --- a/packages/snjs/lib/Client/NoteViewController.ts +++ b/packages/snjs/lib/Client/NoteViewController.ts @@ -35,6 +35,7 @@ export class NoteViewController implements ItemViewControllerInterface { private saveTimeout?: ReturnType private defaultTitle: string | undefined private defaultTag: UuidString | undefined + public runtimeId = `${Math.random()}` constructor( private application: SNApplication, diff --git a/packages/web/src/javascripts/Components/NoteGroupView/NoteGroupView.tsx b/packages/web/src/javascripts/Components/NoteGroupView/NoteGroupView.tsx index ccecffaa3..2ab022a88 100644 --- a/packages/web/src/javascripts/Components/NoteGroupView/NoteGroupView.tsx +++ b/packages/web/src/javascripts/Components/NoteGroupView/NoteGroupView.tsx @@ -122,10 +122,10 @@ class NoteGroupView extends PureComponent { <> {this.state.controllers.map((controller) => { return controller instanceof NoteViewController ? ( - + ) : ( { } override deinit() { + super.deinit() + ;(this.controller as unknown) = undefined + window.removeEventListener('scroll', this.handleWindowScroll) this.removeComponentStreamObserver?.() @@ -165,7 +168,6 @@ class NoteView extends PureComponent { this.clearNoteProtectionInactivityTimer() ;(this.ensureNoteIsInsertedBeforeUIAction as unknown) = undefined - ;(this.controller as unknown) = undefined this.removeTabObserver?.() this.removeTabObserver = undefined @@ -173,7 +175,6 @@ class NoteView extends PureComponent { this.statusTimeout = undefined ;(this.onPanelResizeFinish as unknown) = undefined - super.deinit() ;(this.dismissProtectedWarning as unknown) = undefined ;(this.editorComponentViewerRequestsReload as unknown) = undefined ;(this.onTextAreaChange as unknown) = undefined @@ -313,6 +314,10 @@ class NoteView extends PureComponent { } override async onAppEvent(eventName: ApplicationEvent) { + if (this.controller?.dealloced) { + return + } + switch (eventName) { case ApplicationEvent.PreferencesChanged: this.reloadPreferences().catch(console.error)