From fb378a6d24b747bdc713942f1b240040ab41c5e5 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Thu, 4 Apr 2019 22:24:24 +0900 Subject: [PATCH] refs #850 Replace Login with typescript --- spec/renderer/integration/store/Login.spec.ts | 9 ++- spec/renderer/unit/store/Login.spec.ts | 9 ++- src/renderer/store/App.ts | 2 +- src/renderer/store/Login.js | 48 -------------- src/renderer/store/Login.ts | 66 +++++++++++++++++++ 5 files changed, 75 insertions(+), 59 deletions(-) delete mode 100644 src/renderer/store/Login.js create mode 100644 src/renderer/store/Login.ts diff --git a/spec/renderer/integration/store/Login.spec.ts b/spec/renderer/integration/store/Login.spec.ts index c33aeb10..e2f13af5 100644 --- a/spec/renderer/integration/store/Login.spec.ts +++ b/spec/renderer/integration/store/Login.spec.ts @@ -2,13 +2,12 @@ import { createLocalVue } from '@vue/test-utils' import Vuex from 'vuex' import { ipcMain } from '~/spec/mock/electron' import axios from 'axios' -import Login from '@/store/Login' +import Login, { LoginState } from '@/store/Login' jest.mock('axios') -const state = () => { +const state = (): LoginState => { return { - instances: [], selectedInstance: null, searching: false } @@ -79,8 +78,8 @@ describe('Login', () => { }) }) mockedAxios.get.mockImplementation(() => res) - const data = await store.dispatch('Login/confirmInstance', 'pleroma.io') - expect(data).toEqual('test') + const result = await store.dispatch('Login/confirmInstance', 'pleroma.io') + expect(result).toEqual(true) expect(store.state.Login.selectedInstance).toEqual('pleroma.io') }) }) diff --git a/spec/renderer/unit/store/Login.spec.ts b/spec/renderer/unit/store/Login.spec.ts index 31fa25c9..a35fb807 100644 --- a/spec/renderer/unit/store/Login.spec.ts +++ b/spec/renderer/unit/store/Login.spec.ts @@ -1,24 +1,23 @@ -import Login from '@/store/Login' +import Login, { LoginState, MUTATION_TYPES } from '@/store/Login' describe('Login', () => { describe('mutations', () => { - let state: any + let state: LoginState beforeEach(() => { state = { - instances: [], selectedInstance: null, searching: false } }) describe('changeInstance', () => { it('should be changed', () => { - Login.mutations.changeInstance(state, 'pleroma.io') + Login.mutations![MUTATION_TYPES.CHANGE_INSTANCE](state, 'pleroma.io') expect(state.selectedInstance).toEqual('pleroma.io') }) }) describe('changeSearching', () => { it('should be changed', () => { - Login.mutations.changeSearching(state, true) + Login.mutations![MUTATION_TYPES.CHANGE_SEARCHING](state, true) expect(state.searching).toEqual(true) }) }) diff --git a/src/renderer/store/App.ts b/src/renderer/store/App.ts index 30a75396..79a23e10 100644 --- a/src/renderer/store/App.ts +++ b/src/renderer/store/App.ts @@ -106,7 +106,7 @@ const actions: ActionTree = { loadPreferences: ({ commit, dispatch }) => { return new Promise((resolve, reject) => { ipcRenderer.send('get-preferences') - ipcRenderer.once('error-get-preferences', (_, err) => { + ipcRenderer.once('error-get-preferences', (_, err: Error) => { ipcRenderer.removeAllListeners('response-get-preferences') reject(err) }) diff --git a/src/renderer/store/Login.js b/src/renderer/store/Login.js deleted file mode 100644 index ec4c7ac8..00000000 --- a/src/renderer/store/Login.js +++ /dev/null @@ -1,48 +0,0 @@ -import { ipcRenderer } from 'electron' -import axios from 'axios' - -const Login = { - namespaced: true, - state: { - instances: [], - selectedInstance: null, - searching: false - }, - mutations: { - changeInstance (state, instance) { - state.selectedInstance = instance - }, - changeSearching (state, value) { - state.searching = value - } - }, - actions: { - fetchLogin (_, instance) { - return new Promise((resolve, reject) => { - ipcRenderer.send('get-auth-url', instance) - ipcRenderer.once('error-get-auth-url', (event, err) => { - ipcRenderer.removeAllListeners('response-get-auth-url') - reject(err) - }) - ipcRenderer.once('response-get-auth-url', (event, url) => { - ipcRenderer.removeAllListeners('response-get-auth-url') - resolve(url) - }) - }) - }, - pageBack ({ commit }) { - commit('changeInstance', null) - }, - async confirmInstance ({ commit }, domain) { - commit('changeSearching', true) - const res = await axios.get(`https://${domain}/api/v1/instance`) - .finally(() => { - commit('changeSearching', false) - }) - commit('changeInstance', domain) - return res.data - } - } -} - -export default Login diff --git a/src/renderer/store/Login.ts b/src/renderer/store/Login.ts new file mode 100644 index 00000000..7bb20de2 --- /dev/null +++ b/src/renderer/store/Login.ts @@ -0,0 +1,66 @@ +import { ipcRenderer } from 'electron' +import axios from 'axios' +import { Module, MutationTree, ActionTree } from 'vuex' + +export interface LoginState { + selectedInstance: string | null, + searching: boolean +} + +const state = (): LoginState => ({ + selectedInstance: null, + searching: false +}) + +export const MUTATION_TYPES = { + CHANGE_INSTANCE: 'changeInstance', + CHANGE_SEARCHING: 'changeSearching' +} + +const mutations: MutationTree = { + [MUTATION_TYPES.CHANGE_INSTANCE]: (state: LoginState, instance: string) => { + state.selectedInstance = instance + }, + [MUTATION_TYPES.CHANGE_SEARCHING]: (state: LoginState, searching: boolean) => { + state.searching = searching + } +} + +// TODO: use type of rootState +const actions: ActionTree = { + fetchLogin: (_, instance: string) => { + return new Promise((resolve, reject) => { + ipcRenderer.send('get-auth-url', instance) + ipcRenderer.once('error-get-auth-url', (_, err: Error) => { + ipcRenderer.removeAllListeners('response-get-auth-url') + reject(err) + }) + ipcRenderer.once('response-get-auth-url', (_, url: string) => { + ipcRenderer.removeAllListeners('response-get-auth-url') + resolve(url) + }) + }) + }, + pageBack: ({ commit }) => { + commit(MUTATION_TYPES.CHANGE_INSTANCE, null) + }, + confirmInstance: async ({ commit }, domain: string): Promise => { + commit(MUTATION_TYPES.CHANGE_SEARCHING, true) + await axios.get(`https://${domain}/api/v1/instance`) + .finally(() => { + commit(MUTATION_TYPES.CHANGE_SEARCHING, false) + }) + commit(MUTATION_TYPES.CHANGE_INSTANCE, domain) + return true + } +} + +// TODO: use type of rootState +const Login: Module = { + namespaced: true, + state: state, + mutations: mutations, + actions: actions +} + +export default Login