From 5704b3e53b8e016b5497b15e91142cc0c20616fb Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 9 Dec 2018 14:58:59 +0200 Subject: [PATCH] Don't reset editor state if props didn't change. Fixes #34 --- .../frontend/src/pages/dashboard/BaseMainView.js | 14 ++++++++++++-- .../frontend/src/pages/dashboard/Client.js | 5 +++++ .../frontend/src/pages/dashboard/Instance.js | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/maubot/management/frontend/src/pages/dashboard/BaseMainView.js b/maubot/management/frontend/src/pages/dashboard/BaseMainView.js index 7a8ba47..47c1cd8 100644 --- a/maubot/management/frontend/src/pages/dashboard/BaseMainView.js +++ b/maubot/management/frontend/src/pages/dashboard/BaseMainView.js @@ -8,7 +8,13 @@ class BaseMainView extends Component { } componentWillReceiveProps(nextProps) { - this.setState(Object.assign(this.initialState, nextProps.entry)) + const newState = Object.assign(this.initialState, nextProps.entry) + for (const key of this.entryKeys) { + if (this.props.entry[key] === nextProps.entry[key]) { + newState[key] = this.state[key] + } + } + this.setState(newState) } delete = async () => { @@ -25,8 +31,12 @@ class BaseMainView extends Component { } } + get entryKeys() { + return [] + } + get initialState() { - throw Error("Not implemented") + return {} } get hasInstances() { diff --git a/maubot/management/frontend/src/pages/dashboard/Client.js b/maubot/management/frontend/src/pages/dashboard/Client.js index 5d965d4..f40b3bf 100644 --- a/maubot/management/frontend/src/pages/dashboard/Client.js +++ b/maubot/management/frontend/src/pages/dashboard/Client.js @@ -46,6 +46,11 @@ class Client extends BaseMainView { this.deleteFunc = api.deleteClient } + get entryKeys() { + return ["id", "displayname", "homeserver", "avatar_url", "access_token", "sync", + "autojoin", "enabled", "started"] + } + get initialState() { return { id: "", diff --git a/maubot/management/frontend/src/pages/dashboard/Instance.js b/maubot/management/frontend/src/pages/dashboard/Instance.js index 83ceed5..1df090b 100644 --- a/maubot/management/frontend/src/pages/dashboard/Instance.js +++ b/maubot/management/frontend/src/pages/dashboard/Instance.js @@ -40,6 +40,10 @@ class Instance extends BaseMainView { this.updateClientOptions() } + get entryKeys() { + return ["id", "primary_user", "enabled", "started", "type", "config"] + } + get initialState() { return { id: "",