From bfd32843fff1b3564bf5d5ffe762d545e239c4ad Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 01:31:34 -0800 Subject: [PATCH] Added caching of loaded editor instance --- app/menus/AccountMenu.js | 4 ++++ app/menus/CollectionMenu.js | 4 ++++ app/menus/DocumentMenu.js | 4 ++++ app/menus/NewChildDocumentMenu.js | 4 ++++ app/menus/NewDocumentMenu.js | 4 ++++ app/menus/ShareMenu.js | 4 ++++ app/scenes/Document/Document.js | 10 +++++++--- 7 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/menus/AccountMenu.js b/app/menus/AccountMenu.js index bbf86d79..ad3cda0b 100644 --- a/app/menus/AccountMenu.js +++ b/app/menus/AccountMenu.js @@ -24,6 +24,10 @@ type Props = { class AccountMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleOpenKeyboardShortcuts = () => { this.props.ui.setActiveModal('keyboard-shortcuts'); }; diff --git a/app/menus/CollectionMenu.js b/app/menus/CollectionMenu.js index 5e843155..86d8e7a5 100644 --- a/app/menus/CollectionMenu.js +++ b/app/menus/CollectionMenu.js @@ -30,6 +30,10 @@ class CollectionMenu extends React.Component { @observable permissionsModalOpen: boolean = false; @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + onNewDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); const { collection } = this.props; diff --git a/app/menus/DocumentMenu.js b/app/menus/DocumentMenu.js index ad396d46..ea66b020 100644 --- a/app/menus/DocumentMenu.js +++ b/app/menus/DocumentMenu.js @@ -25,6 +25,10 @@ type Props = { class DocumentMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleNewChild = (ev: SyntheticEvent<*>) => { const { document } = this.props; this.redirectTo = `${document.collection.url}/new?parentDocument=${ diff --git a/app/menus/NewChildDocumentMenu.js b/app/menus/NewChildDocumentMenu.js index f9f75c3c..f7ca9e1f 100644 --- a/app/menus/NewChildDocumentMenu.js +++ b/app/menus/NewChildDocumentMenu.js @@ -18,6 +18,10 @@ type Props = { class NewChildDocumentMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleNewDocument = () => { this.redirectTo = newDocumentUrl(this.props.document.collection); }; diff --git a/app/menus/NewDocumentMenu.js b/app/menus/NewDocumentMenu.js index ed568323..d39a3e50 100644 --- a/app/menus/NewDocumentMenu.js +++ b/app/menus/NewDocumentMenu.js @@ -18,6 +18,10 @@ type Props = { class NewDocumentMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleNewDocument = collection => { this.redirectTo = newDocumentUrl(collection); }; diff --git a/app/menus/ShareMenu.js b/app/menus/ShareMenu.js index 114abc03..fb78e761 100644 --- a/app/menus/ShareMenu.js +++ b/app/menus/ShareMenu.js @@ -24,6 +24,10 @@ type Props = { class ShareMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleGoToDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); this.redirectTo = this.props.share.documentUrl; diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index c9c3b46c..0717c26c 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -41,6 +41,7 @@ import Revision from 'models/Revision'; import schema from './schema'; +let EditorImport; const AUTOSAVE_DELAY = 3000; const IS_DIRTY_DELAY = 500; const MARK_AS_VIEWED_AFTER = 3000; @@ -69,7 +70,7 @@ class DocumentScene extends React.Component { viewTimeout: TimeoutID; getEditorText: () => string; - @observable editorComponent; + @observable editorComponent = EditorImport; @observable document: ?Document; @observable revision: ?Revision; @observable newDocument: ?Document; @@ -184,8 +185,11 @@ class DocumentScene extends React.Component { }; loadEditor = async () => { - const EditorImport = await import('./components/Editor'); - this.editorComponent = EditorImport.default; + if (this.editorComponent) return; + + const Imported = await import('./components/Editor'); + EditorImport = Imported.default; + this.editorComponent = EditorImport; }; get isEditing() {