master: change repo

This commit is contained in:
Julien Calixte
2019-08-22 11:50:32 +02:00
commit dbd63d341c
263 changed files with 26153 additions and 0 deletions

147
src/store.ts Normal file
View File

@@ -0,0 +1,147 @@
import Vue from 'vue'
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'
import IUser from '@/models/IUser'
import userService from '@/services/UserService'
import couchService from '@/services/CouchService'
import IResponse from '@/models/IResponse'
import IUserPassword from '@/models/IUserPassword'
import IIdPassword from '@/models/IEmailPassword'
import notif from '@/utils/notif'
import { hasGoodNetwork } from '@/utils/network'
import { toHex } from './utils'
Vue.use(Vuex)
const SET_LOCALE: string = 'SET_LOCALE'
const SET_TITLE: string = 'SET_TITLE'
const SET_USER: string = 'SET_USER'
const ADD_PUBLIC_ACCOUNT: string = 'ADD_PUBLIC_ACCOUNT'
const REMOVE_PUBLIC_ACCOUNT: string = 'REMOVE_PUBLIC_ACCOUNT'
interface IState {
locale: string
user: IUser | null
hexUser: string | null
title: string | null
publicAccountIds: string[]
}
export default new Vuex.Store<IState>({
state: {
locale: '',
user: null,
hexUser: null,
title: null,
publicAccountIds: []
},
getters: {
locale: ({ locale }) => locale,
user: ({ user }) => user,
title: ({ title }) => title,
username: (state: IState) =>
state.user
? state.user.firstname && state.user.lastname
? `${state.user.firstname} ${state.user.lastname}`.trim()
: state.user.email
: '',
isAppAdmin: (state: IState) =>
state.user &&
state.user.roles &&
state.user.roles.find((role: string) => role === 'vaquant-admin'),
publicAccountIds: ({ publicAccountIds }) => publicAccountIds
},
mutations: {
[SET_LOCALE](store, locale: string) {
store.locale = locale
},
[SET_TITLE](store, title: string | null) {
store.title = title
},
[SET_USER](
store,
{ user, replicate }: { user: IUser; replicate?: boolean }
) {
store.user = user
store.hexUser = user ? toHex(user.userId) : null
couchService.setUser(user, store.hexUser, replicate || false)
},
[ADD_PUBLIC_ACCOUNT](store, { accountId }: { accountId: string }) {
if (!accountId) {
return
}
store.publicAccountIds = [
...new Set([...store.publicAccountIds, accountId])
]
},
[REMOVE_PUBLIC_ACCOUNT](store, { accountId }: { accountId: string }) {
if (!accountId) {
return
}
store.publicAccountIds = store.publicAccountIds.filter(
(id: string) => id !== accountId && id !== null
)
}
},
actions: {
setLocale({ commit }, locale: string) {
commit(SET_LOCALE, locale)
},
setTitle({ commit }, title: string) {
commit(SET_TITLE, title)
},
async retrieveUser({ commit, state }) {
let user = state.user
if (navigator.onLine && hasGoodNetwork()) {
user = await userService.getUser(user)
}
commit(SET_USER, { user, replicate: false })
},
async signup({ commit }, { user, password, replicate }: IUserPassword) {
const response: IResponse = await userService.signup(user, password)
if (response.ok) {
commit(SET_USER, { user, replicate })
} else {
notif.alert(response.message)
}
},
async login({ commit, state }, { userId, password }: IIdPassword) {
const response: IResponse = await userService.login(userId, password)
if (response.ok) {
const user: IUser | null = await userService.getUser(state.user)
commit(SET_USER, { user })
} else {
notif.alert(response.message)
}
},
async logout({ commit }) {
const response = await userService.logout()
if (response.ok) {
commit(SET_USER, { user: null })
} else {
notif.alert(response.message)
}
},
async remove({ commit, state }) {
if (state.user) {
const response = await userService.deleteUser(state.user.userId)
if (response.ok) {
commit(SET_USER, { user: null })
} else {
notif.alert(response.message)
}
}
},
addAccountId({ commit }, { accountId }: { accountId: string }) {
commit(ADD_PUBLIC_ACCOUNT, { accountId })
},
removeAccountId({ commit }, { accountId }: { accountId: string }) {
commit(REMOVE_PUBLIC_ACCOUNT, { accountId })
}
},
plugins: [
new VuexPersistence<any>({
storage: window.localStorage
}).plugin
]
})