From 35ddf9e32bb05f10430015c21782e5bc21880a93 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Wed, 3 Apr 2019 23:46:01 +0900
Subject: [PATCH] refs #850 Replace App with typescript
---
src/renderer/store/App.js | 123 ----------------------------
src/renderer/store/App.ts | 165 ++++++++++++++++++++++++++++++++++++++
2 files changed, 165 insertions(+), 123 deletions(-)
delete mode 100644 src/renderer/store/App.js
create mode 100644 src/renderer/store/App.ts
diff --git a/src/renderer/store/App.js b/src/renderer/store/App.js
deleted file mode 100644
index 370a45e8..00000000
--- a/src/renderer/store/App.js
+++ /dev/null
@@ -1,123 +0,0 @@
-import { ipcRenderer } from 'electron'
-import router from '@/router'
-import { LightTheme, DarkTheme, SolarizedLightTheme, SolarizedDarkTheme, KimbieDarkTheme } from '@/utils/theme'
-import DisplayStyle from '~/src/constants/displayStyle'
-import Theme from '~/src/constants/theme'
-import TimeFormat from '~/src/constants/timeFormat'
-import Language from '~/src/constants/language'
-import DefaultFonts from '@/utils/fonts'
-
-const App = {
- namespaced: true,
- state: {
- theme: LightTheme,
- fontSize: 14,
- displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
- notify: {
- reply: true,
- reblog: true,
- favourite: true,
- follow: true
- },
- timeFormat: TimeFormat.Absolute.value,
- language: Language.en.key,
- defaultFonts: DefaultFonts,
- ignoreCW: false,
- ignoreNFSW: false,
- hideAllAttachments: false
- },
- mutations: {
- updateTheme (state, themeColorList) {
- state.theme = themeColorList
- },
- updateFontSize (state, value) {
- state.fontSize = value
- },
- updateDisplayNameStyle (state, value) {
- state.displayNameStyle = value
- },
- updateNotify (state, notify) {
- state.notify = notify
- },
- updateTimeFormat (state, format) {
- state.timeFormat = format
- },
- updateLanguage (state, key) {
- state.language = key
- },
- addFont (state, font) {
- const list = [font].concat(DefaultFonts)
- state.defaultFonts = Array.from(new Set(list))
- },
- updateIgnoreCW (state, cw) {
- state.ignoreCW = cw
- },
- updateIgnoreNFSW (state, nfsw) {
- state.ignoreNFSW = nfsw
- },
- updateHideAllAttachments (state, hideAllAttachments) {
- state.hideAllAttachments = hideAllAttachments
- }
- },
- actions: {
- watchShortcutsEvents () {
- ipcRenderer.on('open-preferences', () => {
- router.push('/preferences/general')
- })
- },
- removeShortcutsEvents () {
- ipcRenderer.removeAllListeners('open-preferences')
- },
- loadPreferences ({ commit, dispatch }) {
- return new Promise((resolve, reject) => {
- ipcRenderer.send('get-preferences')
- ipcRenderer.once('error-get-preferences', (event, err) => {
- ipcRenderer.removeAllListeners('response-get-preferences')
- reject(err)
- })
- ipcRenderer.once('response-get-preferences', (event, conf) => {
- ipcRenderer.removeAllListeners('error-get-preferences')
- dispatch('updateTheme', conf.appearance)
- commit('updateDisplayNameStyle', conf.appearance.displayNameStyle)
- commit('updateFontSize', conf.appearance.fontSize)
- commit('updateNotify', conf.notification.notify)
- commit('updateTimeFormat', conf.appearance.timeFormat)
- commit('updateLanguage', conf.language.language)
- commit('addFont', conf.appearance.font)
- commit('updateIgnoreCW', conf.general.timeline.cw)
- commit('updateIgnoreNFSW', conf.general.timeline.nfsw)
- commit('updateHideAllAttachments', conf.general.timeline.hideAllAttachments)
- resolve(conf)
- })
- })
- },
- updateTheme ({ commit }, appearance) {
- const themeKey = appearance.theme
- switch (themeKey) {
- case Theme.Light.key:
- commit('updateTheme', LightTheme)
- break
- case Theme.Dark.key:
- commit('updateTheme', DarkTheme)
- break
- case Theme.SolarizedLight.key:
- commit('updateTheme', SolarizedLightTheme)
- break
- case Theme.SolarizedDark.key:
- commit('updateTheme', SolarizedDarkTheme)
- break
- case Theme.KimbieDark.key:
- commit('updateTheme', KimbieDarkTheme)
- break
- case Theme.Custom.key:
- commit('updateTheme', appearance.customThemeColor)
- break
- default:
- commit('updateTheme', LightTheme)
- break
- }
- }
- }
-}
-
-export default App
diff --git a/src/renderer/store/App.ts b/src/renderer/store/App.ts
new file mode 100644
index 00000000..30a75396
--- /dev/null
+++ b/src/renderer/store/App.ts
@@ -0,0 +1,165 @@
+import { ipcRenderer } from 'electron'
+import { MutationTree, ActionTree, Module } from 'vuex'
+import router from '@/router'
+import { LightTheme, DarkTheme, SolarizedLightTheme, SolarizedDarkTheme, KimbieDarkTheme } from '@/utils/theme'
+import DisplayStyle from '~/src/constants/displayStyle'
+import Theme from '~/src/constants/theme'
+import TimeFormat from '~/src/constants/timeFormat'
+import Language from '~/src/constants/language'
+import DefaultFonts from '@/utils/fonts'
+
+export interface Notify {
+ reply: boolean,
+ reblog: boolean,
+ favourite: boolean,
+ follow: boolean
+}
+
+export interface AppState {
+ theme: any, // TODO: type
+ fontSize: number,
+ displayNameStyle: number,
+ notify: Notify,
+ timeFormat: number,
+ language: string,
+ defaultFonts: Array,
+ ignoreCW: boolean,
+ ignoreNFSW: boolean,
+ hideAllAttachments: boolean
+}
+
+const state = (): AppState => ({
+ theme: LightTheme,
+ fontSize: 14,
+ displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
+ notify: {
+ reply: true,
+ reblog: true,
+ favourite: true,
+ follow: true
+ },
+ timeFormat: TimeFormat.Absolute.value,
+ language: Language.en.key,
+ defaultFonts: DefaultFonts,
+ ignoreCW: false,
+ ignoreNFSW: false,
+ hideAllAttachments: false
+})
+
+const MUTATION_TYPES = {
+ UPDATE_THEME: 'updateTheme',
+ UPDATE_FONT_SIZE: 'updateFontSize',
+ UPDATE_DISPLAY_NAME_STYLE: 'updateDisplayNameStyle',
+ UPDATE_NOTIFY: 'updateNotify',
+ UPDATE_TIME_FORMAT: 'updateTimeFormat',
+ UPDATE_LANGUAGE: 'updateLanguage',
+ ADD_FONT: 'addFont',
+ UPDATE_IGNORE_CW: 'updateIgnoreCW',
+ UPDATE_IGNORE_NFSW: 'updateIgnoreNFSW',
+ UPDATE_HIDE_ALL_ATTACHMENTS: 'updateHideAllAttachments'
+}
+
+const mutations: MutationTree = {
+ [MUTATION_TYPES.UPDATE_THEME]: (state: AppState, themeColorList: any) => {
+ state.theme = themeColorList
+ },
+ [MUTATION_TYPES.UPDATE_FONT_SIZE]: (state: AppState, value: number) => {
+ state.fontSize = value
+ },
+ [MUTATION_TYPES.UPDATE_DISPLAY_NAME_STYLE]: (state: AppState, value: number) => {
+ state.displayNameStyle = value
+ },
+ [MUTATION_TYPES.UPDATE_NOTIFY]: (state: AppState, notify: Notify) => {
+ state.notify = notify
+ },
+ [MUTATION_TYPES.UPDATE_TIME_FORMAT]: (state: AppState, format: number) => {
+ state.timeFormat = format
+ },
+ [MUTATION_TYPES.UPDATE_LANGUAGE]: (state: AppState, key: string) => {
+ state.language = key
+ },
+ [MUTATION_TYPES.ADD_FONT]: (state: AppState, font: string) => {
+ const list = [font].concat(DefaultFonts)
+ state.defaultFonts = Array.from(new Set(list))
+ },
+ [MUTATION_TYPES.UPDATE_IGNORE_CW]: (state: AppState, cw: boolean) => {
+ state.ignoreCW = cw
+ },
+ [MUTATION_TYPES.UPDATE_IGNORE_NFSW]: (state: AppState, nfsw: boolean) => {
+ state.ignoreNFSW = nfsw
+ },
+ [MUTATION_TYPES.UPDATE_HIDE_ALL_ATTACHMENTS]: (state: AppState, hideAllAttachments: boolean) => {
+ state.hideAllAttachments = hideAllAttachments
+ }
+}
+
+// TODO: use type of rootState
+const actions: ActionTree = {
+ watchShortcutsEvents: () => {
+ ipcRenderer.on('open-preferences', () => {
+ router.push('/preferences/general')
+ })
+ },
+ removeShortcutsEvents: () => {
+ ipcRenderer.removeAllListeners('open-preferences')
+ },
+ loadPreferences: ({ commit, dispatch }) => {
+ return new Promise((resolve, reject) => {
+ ipcRenderer.send('get-preferences')
+ ipcRenderer.once('error-get-preferences', (_, err) => {
+ ipcRenderer.removeAllListeners('response-get-preferences')
+ reject(err)
+ })
+ ipcRenderer.once('response-get-preferences', (_, conf: any) => {
+ ipcRenderer.removeAllListeners('error-get-preferences')
+ dispatch('updateTheme', conf.appearance as any)
+ commit(MUTATION_TYPES.UPDATE_DISPLAY_NAME_STYLE, conf.appearance.displayNameStyle as number)
+ commit(MUTATION_TYPES.UPDATE_FONT_SIZE, conf.appearance.fontSize as number)
+ commit(MUTATION_TYPES.UPDATE_NOTIFY, conf.notification.notify as Notify)
+ commit(MUTATION_TYPES.UPDATE_TIME_FORMAT, conf.appearance.timeFormat as number)
+ commit(MUTATION_TYPES.UPDATE_LANGUAGE, conf.language.language as string)
+ commit(MUTATION_TYPES.ADD_FONT, conf.appearance.font as string)
+ commit(MUTATION_TYPES.UPDATE_IGNORE_CW, conf.general.timeline.cw as boolean)
+ commit(MUTATION_TYPES.UPDATE_IGNORE_NFSW, conf.general.timeline.nfsw as boolean)
+ commit(MUTATION_TYPES.UPDATE_HIDE_ALL_ATTACHMENTS, conf.general.timeline.hideAllAttachments as boolean)
+ resolve(conf)
+ })
+ })
+ },
+ updateTheme: ({ commit }, appearance: any) => {
+ const themeKey = appearance.theme
+ switch (themeKey) {
+ case Theme.Light.key:
+ commit(MUTATION_TYPES.UPDATE_THEME, LightTheme)
+ break
+ case Theme.Dark.key:
+ commit(MUTATION_TYPES.UPDATE_THEME, DarkTheme)
+ break
+ case Theme.SolarizedLight.key:
+ commit(MUTATION_TYPES.UPDATE_THEME, SolarizedLightTheme)
+ break
+ case Theme.SolarizedDark.key:
+ commit(MUTATION_TYPES.UPDATE_THEME, SolarizedDarkTheme)
+ break
+ case Theme.KimbieDark.key:
+ commit(MUTATION_TYPES.UPDATE_THEME, KimbieDarkTheme)
+ break
+ case Theme.Custom.key:
+ commit(MUTATION_TYPES.UPDATE_THEME, appearance.customThemeColor)
+ break
+ default:
+ commit(MUTATION_TYPES.UPDATE_THEME, LightTheme)
+ break
+ }
+ }
+}
+
+// TODO: use type of rootState
+const App: Module = {
+ namespaced: true,
+ state: state,
+ mutations: mutations,
+ actions: actions
+}
+
+export default App