From 4af7def20ef66493317466a7c79c4cc93280f0d0 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 6 Dec 2017 14:13:08 +0000 Subject: [PATCH] Use AccountData im.vector.web.tag_ordering Also, make defaults sensible --- src/stores/TagOrderStore.js | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/stores/TagOrderStore.js b/src/stores/TagOrderStore.js index 4364ec2683..4814bd1c98 100644 --- a/src/stores/TagOrderStore.js +++ b/src/stores/TagOrderStore.js @@ -16,10 +16,11 @@ limitations under the License. import {Store} from 'flux/utils'; import dis from '../dispatcher'; // import Analytics from '../Analytics'; -import SettingsStore from "../settings/SettingsStore"; +import MatrixClientPeg from "../MatrixClientPeg"; const INITIAL_STATE = { orderedTags: null, + allTags: null, }; /** @@ -40,23 +41,28 @@ class TagOrderStore extends Store { __onDispatch(payload) { switch (payload.action) { + // Get ordering from account data, once the client has synced case 'sync_state': - // Get ordering from account data, once the client has synced if (payload.prevState === "PREPARED" && payload.state === "SYNCING") { - this._setState({ - orderedTags: SettingsStore.getValue("TagOrderStore.orderedTags"), - }); + const accountDataEvent = MatrixClientPeg.get().getAccountData('im.vector.web.tag_ordering'); + + const orderedTags = accountDataEvent && accountDataEvent.getContent() ? + accountDataEvent.getContent().tags : null; + + this._setState({orderedTags}); } break; + // Initialise the state such that if account data is unset, default to the existing ordering case 'all_tags': - // Initialise the state with all known tags displayed in the TagPanel - this._setState({allTags: payload.tags}); + this._setState({ + allTags: payload.tags.sort(), // Sort lexically + }); break; + // Puts payload.tag at payload.targetTag, placing the targetTag before or after the tag case 'order_tag': { - if (!payload.tag || !payload.targetTag || payload.tag === payload.targetTag) break; + if (!payload.tag || !payload.targetTag || payload.tag === payload.targetTag) return; - // Puts payload.tag at payload.targetTag, placing the targetTag before or after the tag - const tags = SettingsStore.getValue("TagOrderStore.orderedTags") || this._state.allTags; + const tags = this._state.orderedTags || this._state.allTags; let orderedTags = tags.filter((t) => t !== payload.tag); const newIndex = orderedTags.indexOf(payload.targetTag) + (payload.after ? 1 : 0); @@ -69,13 +75,17 @@ class TagOrderStore extends Store { } break; case 'commit_tags': - SettingsStore.setValue("TagOrderStore.orderedTags", null, "account", this._state.orderedTags); + MatrixClientPeg.get().setAccountData('im.vector.web.tag_ordering', {tags: this._state.orderedTags}); break; } } getOrderedTags() { - return this._state.orderedTags || SettingsStore.getValue("TagOrderStore.orderedTags"); + return this._state.orderedTags; + } + + getAllTags() { + return this._state.allTags; } }