refs #850 Replace Settings with typescript
This commit is contained in:
parent
3971e56126
commit
0edac701ae
|
@ -1,18 +0,0 @@
|
|||
import General from './Settings/General'
|
||||
import Timeline from './Settings/Timeline'
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
modules: {
|
||||
General,
|
||||
Timeline
|
||||
},
|
||||
state: {
|
||||
accountID: null
|
||||
},
|
||||
mutations: {
|
||||
changeAccountID (state, id) {
|
||||
state.accountID = id
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
import General from './Settings/General'
|
||||
import Timeline from './Settings/Timeline'
|
||||
import { Module, MutationTree } from 'vuex'
|
||||
|
||||
export interface SettingsState {
|
||||
accountID: number | null
|
||||
}
|
||||
|
||||
const state = (): SettingsState => ({
|
||||
accountID: null
|
||||
})
|
||||
|
||||
export const MUTATION_TYPES = {
|
||||
CHANGE_ACCOUNT_ID: 'changeAccountID'
|
||||
}
|
||||
|
||||
const mutations: MutationTree<SettingsState> = {
|
||||
[MUTATION_TYPES.CHANGE_ACCOUNT_ID]: (state, id: number) => {
|
||||
state.accountID = id
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: use type of rootState
|
||||
const Settings: Module<SettingsState, any> = {
|
||||
namespaced: true,
|
||||
modules: {
|
||||
General,
|
||||
Timeline
|
||||
},
|
||||
state: state,
|
||||
mutations: mutations
|
||||
}
|
||||
|
||||
export default Settings
|
|
@ -1,68 +0,0 @@
|
|||
import Mastodon from 'megalodon'
|
||||
import Visibility from '~/src/constants/visibility'
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: {
|
||||
visibility: Visibility.Public.value,
|
||||
sensitive: false
|
||||
},
|
||||
mutations: {
|
||||
changeVisibility (state, value) {
|
||||
state.visibility = value
|
||||
},
|
||||
changeSensitive (state, value) {
|
||||
state.sensitive = value
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
fetchSettings ({ commit, rootState }) {
|
||||
const client = new Mastodon(
|
||||
rootState.TimelineSpace.account.accessToken,
|
||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||
)
|
||||
return client.get('/accounts/verify_credentials')
|
||||
.then(res => {
|
||||
const visibility = Object.values(Visibility).find((v) => {
|
||||
return v.key === res.data.source.privacy
|
||||
})
|
||||
commit('changeVisibility', visibility.value)
|
||||
commit('changeSensitive', res.data.source.sensitive)
|
||||
return res.data
|
||||
})
|
||||
},
|
||||
setVisibility ({ commit, rootState }, value) {
|
||||
const client = new Mastodon(
|
||||
rootState.TimelineSpace.account.accessToken,
|
||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||
)
|
||||
const visibility = Object.values(Visibility).find((v) => {
|
||||
return v.value === value
|
||||
})
|
||||
return client.patch('/accounts/update_credentials', {
|
||||
source: {
|
||||
privacy: visibility.key
|
||||
}
|
||||
})
|
||||
.then(res => {
|
||||
commit('changeVisibility', visibility.value)
|
||||
return res.data
|
||||
})
|
||||
},
|
||||
setSensitive ({ commit, rootState }, value) {
|
||||
const client = new Mastodon(
|
||||
rootState.TimelineSpace.account.accessToken,
|
||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||
)
|
||||
return client.patch('/accounts/update_credentials', {
|
||||
source: {
|
||||
sensitive: value
|
||||
}
|
||||
})
|
||||
.then(res => {
|
||||
commit('changeSensitive', value)
|
||||
return res.data
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
import Mastodon, { Account } from 'megalodon'
|
||||
import Visibilities from '~/src/constants/visibility'
|
||||
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||
import Visibility from '~/src/types/visibility'
|
||||
|
||||
export interface GeneralState {
|
||||
visibility: number,
|
||||
sensitive: boolean
|
||||
}
|
||||
|
||||
const state = (): GeneralState => ({
|
||||
visibility: Visibilities.Public.value,
|
||||
sensitive: false
|
||||
})
|
||||
|
||||
export const MUTATION_TYPES = {
|
||||
CHANGE_VISIBILITY: 'changeVisibility',
|
||||
CHANGE_SENSITIVE: 'changeSensitive'
|
||||
}
|
||||
|
||||
const mutations: MutationTree<GeneralState> = {
|
||||
[MUTATION_TYPES.CHANGE_VISIBILITY]: (state, value: number) => {
|
||||
state.visibility = value
|
||||
},
|
||||
[MUTATION_TYPES.CHANGE_SENSITIVE]: (state, value: boolean) => {
|
||||
state.sensitive = value
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: use type of rootState
|
||||
const actions: ActionTree<GeneralState, any> = {
|
||||
fetchSettings: async ({ commit, rootState }): Promise<Account> => {
|
||||
const client = new Mastodon(
|
||||
rootState.TimelineSpace.account.accessToken,
|
||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||
)
|
||||
const res = await client.get<Account>('/accounts/verify_credentials')
|
||||
const visibility: Visibility | undefined = Object.values(Visibilities as Array<Visibility>).find((v) => {
|
||||
return v.key === res.data.source!.privacy
|
||||
})
|
||||
commit(MUTATION_TYPES.CHANGE_VISIBILITY, visibility!.value)
|
||||
commit(MUTATION_TYPES.CHANGE_SENSITIVE, res.data.source!.sensitive)
|
||||
return res.data
|
||||
},
|
||||
setVisibility: async ({ commit, rootState }, value: number) => {
|
||||
const client = new Mastodon(
|
||||
rootState.TimelineSpace.account.accessToken,
|
||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||
)
|
||||
const visibility = Object.values(Visibilities as Array<Visibility>).find((v) => {
|
||||
return v.value === value
|
||||
})
|
||||
const res = await client.patch<Account>('/accounts/update_credentials', {
|
||||
source: {
|
||||
privacy: visibility!.key
|
||||
}
|
||||
})
|
||||
commit(MUTATION_TYPES.CHANGE_VISIBILITY, visibility!.value)
|
||||
return res.data
|
||||
},
|
||||
setSensitive: async ({ commit, rootState }, value: boolean) => {
|
||||
const client = new Mastodon(
|
||||
rootState.TimelineSpace.account.accessToken,
|
||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||
)
|
||||
const res = await client.patch<Account>('/accounts/update_credentials', {
|
||||
source: {
|
||||
sensitive: value
|
||||
}
|
||||
})
|
||||
commit(MUTATION_TYPES.CHANGE_SENSITIVE, value)
|
||||
return res.data
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: use type of rootState
|
||||
const General: Module<GeneralState, any> = {
|
||||
namespaced: true,
|
||||
state: state,
|
||||
mutations: mutations,
|
||||
actions: actions
|
||||
}
|
||||
|
||||
export default General
|
|
@ -1,56 +0,0 @@
|
|||
import { ipcRenderer } from 'electron'
|
||||
import unreadSettings from '~/src/constants/unreadNotification'
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: {
|
||||
unreadNotification: {
|
||||
direct: unreadSettings.Direct.default,
|
||||
local: unreadSettings.Local.default,
|
||||
public: unreadSettings.Public.default
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
updateUnreadNotification (state, settings) {
|
||||
state.unreadNotification = settings
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
loadUnreadNotification ({ commit, rootState }) {
|
||||
return new Promise(resolve => {
|
||||
ipcRenderer.once('response-get-unread-notification', (_, settings) => {
|
||||
ipcRenderer.removeAllListeners('error-get-unread-notification')
|
||||
commit('updateUnreadNotification', settings)
|
||||
resolve(settings)
|
||||
})
|
||||
ipcRenderer.once('error-get-unread-notification', () => {
|
||||
ipcRenderer.removeAllListeners('response-get-unread-notification')
|
||||
commit('updateUnreadNotification', {
|
||||
direct: unreadSettings.Direct.default,
|
||||
local: unreadSettings.Local.default,
|
||||
public: unreadSettings.Public.default
|
||||
})
|
||||
resolve(null)
|
||||
})
|
||||
ipcRenderer.send('get-unread-notification', rootState.Settings.accountID)
|
||||
})
|
||||
},
|
||||
changeUnreadNotification ({ dispatch, state, rootState }, timeline) {
|
||||
const settings = Object.assign({}, state.unreadNotification, timeline, {
|
||||
accountID: rootState.Settings.accountID
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
ipcRenderer.once('response-update-unread-notification', () => {
|
||||
ipcRenderer.removeAllListeners('error-update-unread-notification')
|
||||
dispatch('loadUnreadNotification')
|
||||
resolve(settings)
|
||||
})
|
||||
ipcRenderer.once('error-update-unread-notification', (_, err) => {
|
||||
ipcRenderer.removeAllListeners('response-update-unread-notification')
|
||||
reject(err)
|
||||
})
|
||||
ipcRenderer.send('update-unread-notification', settings)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
import { ipcRenderer } from 'electron'
|
||||
import unreadSettings from '~/src/constants/unreadNotification'
|
||||
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||
|
||||
interface UnreadNotification {
|
||||
direct: boolean,
|
||||
local: boolean,
|
||||
public: boolean
|
||||
}
|
||||
|
||||
export interface TimelineState {
|
||||
unreadNotification: UnreadNotification
|
||||
}
|
||||
|
||||
const state = (): TimelineState => ({
|
||||
unreadNotification: {
|
||||
direct: unreadSettings.Direct.default,
|
||||
local: unreadSettings.Local.default,
|
||||
public: unreadSettings.Public.default
|
||||
}
|
||||
})
|
||||
|
||||
export const MUTATION_TYPES = {
|
||||
UPDATE_UNREAD_NOTIFICATION: 'updateUnreadNotification'
|
||||
}
|
||||
|
||||
const mutations: MutationTree<TimelineState> = {
|
||||
[MUTATION_TYPES.UPDATE_UNREAD_NOTIFICATION]: (state, settings: UnreadNotification) => {
|
||||
state.unreadNotification = settings
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: use type of rootState
|
||||
const actions: ActionTree<TimelineState, any> = {
|
||||
loadUnreadNotification: ({ commit, rootState }): Promise<boolean> => {
|
||||
return new Promise(resolve => {
|
||||
ipcRenderer.once('response-get-unread-notification', (_, settings: UnreadNotification) => {
|
||||
ipcRenderer.removeAllListeners('error-get-unread-notification')
|
||||
commit(MUTATION_TYPES.UPDATE_UNREAD_NOTIFICATION, settings)
|
||||
resolve(true)
|
||||
})
|
||||
ipcRenderer.once('error-get-unread-notification', () => {
|
||||
ipcRenderer.removeAllListeners('response-get-unread-notification')
|
||||
const settings: UnreadNotification = {
|
||||
direct: unreadSettings.Direct.default,
|
||||
local: unreadSettings.Local.default,
|
||||
public: unreadSettings.Public.default
|
||||
}
|
||||
commit(MUTATION_TYPES.UPDATE_UNREAD_NOTIFICATION, settings)
|
||||
resolve(false)
|
||||
})
|
||||
ipcRenderer.send('get-unread-notification', rootState.Settings.accountID)
|
||||
})
|
||||
},
|
||||
changeUnreadNotification: ({ dispatch, state, rootState }, timeline: object): Promise<boolean> => {
|
||||
const settings = Object.assign({}, state.unreadNotification, timeline, {
|
||||
accountID: rootState.Settings.accountID
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
ipcRenderer.once('response-update-unread-notification', () => {
|
||||
ipcRenderer.removeAllListeners('error-update-unread-notification')
|
||||
dispatch('loadUnreadNotification')
|
||||
resolve(true)
|
||||
})
|
||||
ipcRenderer.once('error-update-unread-notification', (_, err: Error) => {
|
||||
ipcRenderer.removeAllListeners('response-update-unread-notification')
|
||||
reject(err)
|
||||
})
|
||||
ipcRenderer.send('update-unread-notification', settings)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Todo: use type of rootState
|
||||
const Timeline: Module<TimelineState, any> = {
|
||||
namespaced: true,
|
||||
state: state,
|
||||
mutations: mutations,
|
||||
actions: actions
|
||||
}
|
||||
|
||||
export default Timeline
|
|
@ -0,0 +1,5 @@
|
|||
export default interface Visibility {
|
||||
name: string,
|
||||
value: number,
|
||||
key: string
|
||||
}
|
Loading…
Reference in New Issue