From 2db991fc7fb1eda11b94d585d3b56f9d94c81286 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Sun, 9 Sep 2018 19:36:13 +0300
Subject: [PATCH] some recategorization of options...

---
 src/App.js                                  |  6 +--
 src/components/login_form/login_form.js     |  2 +-
 src/components/registration/registration.js |  4 +-
 src/components/settings/settings.js         |  3 +-
 src/components/settings/settings.vue        | 16 ++++---
 src/main.js                                 | 13 +++--
 src/modules/config.js                       | 28 +----------
 src/modules/interface.js                    | 53 +++++++++++++++++++++
 8 files changed, 78 insertions(+), 47 deletions(-)
 create mode 100644 src/modules/interface.js

diff --git a/src/App.js b/src/App.js
index be6548f3..251fdfca 100644
--- a/src/App.js
+++ b/src/App.js
@@ -60,10 +60,10 @@ export default {
     },
     logo () { return this.$store.state.config.logo },
     style () { return { 'background-image': `url(${this.background})` } },
-    sitename () { return this.$store.state.config.name },
+    sitename () { return this.$store.state.interface.name },
     chat () { return this.$store.state.chat.channel.state === 'joined' },
-    suggestionsEnabled () { return this.$store.state.config.suggestionsEnabled },
-    showInstanceSpecificPanel () { return this.$store.state.config.showInstanceSpecificPanel }
+    suggestionsEnabled () { return this.$store.state.interface.suggestionsEnabled },
+    showInstanceSpecificPanel () { return this.$store.state.interface.showInstanceSpecificPanel }
   },
   methods: {
     activatePanel (panelName) {
diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js
index a117b76f..12144324 100644
--- a/src/components/login_form/login_form.js
+++ b/src/components/login_form/login_form.js
@@ -5,7 +5,7 @@ const LoginForm = {
   }),
   computed: {
     loggingIn () { return this.$store.state.users.loggingIn },
-    registrationOpen () { return this.$store.state.config.registrationOpen }
+    registrationOpen () { return this.$store.state.interface.registrationOpen }
   },
   methods: {
     submit () {
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
index 73840608..e53fa4e5 100644
--- a/src/components/registration/registration.js
+++ b/src/components/registration/registration.js
@@ -5,11 +5,11 @@ const registration = {
     registering: false
   }),
   created () {
-    if ((!this.$store.state.config.registrationOpen && !this.token) || !!this.$store.state.users.currentUser) {
+    if ((!this.$store.state.interface.registrationOpen && !this.token) || !!this.$store.state.users.currentUser) {
       this.$router.push('/main/all')
     }
     // Seems like this doesn't work at first page open for some reason
-    if (this.$store.state.config.registrationOpen && this.token) {
+    if (this.$store.state.interface.registrationOpen && this.token) {
       this.$router.push('/registration')
     }
   },
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index 5e28c1af..6d481820 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -44,8 +44,7 @@ const settings = {
       return this.$store.state.users.currentUser
     },
     currentSaveStateNotice () {
-      console.log(this.$store.state.config._internal.currentSaveStateNotice && this.$store.state.config._internal.currentSaveStateNotice.error)
-      return this.$store.state.config._internal.currentSaveStateNotice
+      return this.$store.state.interface.settings.currentSaveStateNotice
     }
   },
   watch: {
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index be7c64a7..481cdf09 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -5,15 +5,17 @@
       {{$t('settings.settings')}}
     </div>
 
-    <template v-if="currentSaveStateNotice">
-      <div @click.prevent class="alert error" v-if="currentSaveStateNotice.error">
-        Errr
-      </div>
+    <transition name="fade">
+      <template v-if="currentSaveStateNotice">
+        <div @click.prevent class="alert error" v-if="!currentSaveStateNotice.error">
+          Errr
+        </div>
 
-      <div @click.prevent class="alert success" v-if="!currentSaveStateNotice.error">
-        Succ
-      </div>
+        <div @click.prevent class="alert success" v-if="!currentSaveStateNotice.error">
+          Succ
+        </div>
     </template>
+    </transition>
   </div>
   <div class="panel-body">
     <tab-switcher>
diff --git a/src/main.js b/src/main.js
index 75c2bab2..1f3c5da9 100644
--- a/src/main.js
+++ b/src/main.js
@@ -14,6 +14,7 @@ import Registration from './components/registration/registration.vue'
 import UserSettings from './components/user_settings/user_settings.vue'
 import FollowRequests from './components/follow_requests/follow_requests.vue'
 
+import interfaceModule from './modules/interface.js'
 import statusesModule from './modules/statuses.js'
 import usersModule from './modules/users.js'
 import apiModule from './modules/api.js'
@@ -67,8 +68,9 @@ const persistedStateOptions = {
   ]
 }
 
-const store = new Vuex.Store({
+const store = console.log('interfaceModule') || new Vuex.Store({
   modules: {
+    interface: interfaceModule,
     statuses: statusesModule,
     users: usersModule,
     api: apiModule,
@@ -92,10 +94,11 @@ window.fetch('/api/statusnet/config.json')
   .then((data) => {
     const {name, closed: registrationClosed, textlimit, server} = data.site
 
-    store.dispatch('setOption', { name: 'name', value: name })
-    store.dispatch('setOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
-    store.dispatch('setOption', { name: 'textlimit', value: parseInt(textlimit) })
-    store.dispatch('setOption', { name: 'server', value: server })
+    console.log(store)
+    store.dispatch('setInstanceOption', { name: 'name', value: name })
+    store.dispatch('setInstanceOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
+    store.dispatch('setInstanceOption', { name: 'textlimit', value: parseInt(textlimit) })
+    store.dispatch('setInstanceOption', { name: 'server', value: server })
 
     var apiConfig = data.site.pleromafe
 
diff --git a/src/modules/config.js b/src/modules/config.js
index cb59acaa..375d0167 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -4,7 +4,6 @@ import StyleSetter from '../services/style_setter/style_setter.js'
 const browserLocale = (window.navigator.language || 'en').split('-')[0]
 
 const defaultState = {
-  name: 'Pleroma FE',
   colors: {},
   collapseMessageWithSubject: false,
   hideAttachments: false,
@@ -26,11 +25,7 @@ const defaultState = {
   },
   muteWords: [],
   highlight: {},
-  interfaceLanguage: browserLocale,
-  _internal: {
-    currentSaveStateNotice: {},
-    noticeClearTimeout: null
-  }
+  interfaceLanguage: browserLocale
 }
 
 const config = {
@@ -46,36 +41,15 @@ const config = {
       } else {
         del(state.highlight, user)
       }
-    },
-    settingsSaved (state, { success, error }) {
-      if (success) {
-        if (state.noticeClearTimeout) {
-          clearTimeout(state.noticeClearTimeout)
-        }
-        set(state._internal, 'currentSaveStateNotice', { error: false, data: success })
-        set(state._internal, 'noticeClearTimeout',
-            setTimeout(() => del(state._internal, 'currentSaveStateNotice'), 2000))
-      } else {
-        set(state._internal, 'currentSaveStateNotice', { error: true, errorData: error })
-      }
     }
   },
   actions: {
-    setPageTitle ({state}, option = '') {
-      document.title = `${option} ${state.name}`
-    },
     setHighlight ({ commit, dispatch }, { user, color, type }) {
       commit('setHighlight', {user, color, type})
     },
-    settingsSaved ({ commit, dispatch }, { success, error }) {
-      commit('settingsSaved', { success, error })
-    },
     setOption ({ commit, dispatch }, { name, value }) {
       commit('setOption', {name, value})
       switch (name) {
-        case 'name':
-          dispatch('setPageTitle')
-          break
         case 'theme':
           StyleSetter.setPreset(value, commit)
           break
diff --git a/src/modules/interface.js b/src/modules/interface.js
new file mode 100644
index 00000000..0067ee64
--- /dev/null
+++ b/src/modules/interface.js
@@ -0,0 +1,53 @@
+import { set, delete as del } from 'vue'
+
+const defaultState = {
+  name: 'Pleroma FE',
+  registrationOpen: true,
+  textlimit: 5000,
+  server: 'http://localhost:4040/',
+  settings: {
+    currentSaveStateNotice: null,
+    noticeClearTimeout: null
+  }
+}
+
+const interfaceMod = {
+  state: defaultState,
+  mutations: {
+    setInstanceOption (state, { name, value }) {
+      console.log(state)
+      console.log(name)
+      set(state, name, value)
+    },
+    settingsSaved (state, { success, error }) {
+      if (success) {
+        if (state.noticeClearTimeout) {
+          clearTimeout(state.noticeClearTimeout)
+        }
+        set(state.settings, 'currentSaveStateNotice', { error: false, data: success })
+        set(state.settings, 'noticeClearTimeout',
+            setTimeout(() => del(state.settings, 'currentSaveStateNotice'), 2000))
+      } else {
+        set(state.settings, 'currentSaveStateNotice', { error: true, errorData: error })
+      }
+    }
+  },
+  actions: {
+    setPageTitle ({state}, option = '') {
+      document.title = `${option} ${state.name}`
+    },
+    settingsSaved ({ commit, dispatch }, { success, error }) {
+      commit('settingsSaved', { success, error })
+    },
+    setInstanceOption ({ commit, dispatch }, { name, value }) {
+      commit('setInstanceOption', {name, value})
+      switch (name) {
+        case 'name':
+          dispatch('setPageTitle')
+          break
+      }
+    }
+  }
+}
+
+export default interfaceMod