Merge commit 'e443716bcd' into feature/push-subscriptions

# Conflicts:
#	src/i18n/en.json
#	src/modules/interface.js
#	src/modules/users.js
#	yarn.lock
This commit is contained in:
Egor Kislitsyn 2018-12-13 18:22:15 +07:00
commit a8521fc8d9
73 changed files with 4657 additions and 848 deletions

View file

@ -2,6 +2,8 @@ import backendInteractorService from '../services/backend_interactor_service/bac
import { compact, map, each, merge } from 'lodash'
import { set } from 'vue'
import registerPushNotifications from '../services/push/push.js'
import oauthApi from '../services/new_api/oauth'
import { humanizeErrors } from './errors'
// TODO: Unify with mergeOrAdd in statuses.js
export const mergeOrAdd = (arr, obj, item) => {
@ -10,12 +12,12 @@ export const mergeOrAdd = (arr, obj, item) => {
if (oldItem) {
// We already have this, so only merge the new info.
merge(oldItem, item)
return {item: oldItem, new: false}
return { item: oldItem, new: false }
} else {
// This is a new item, prepare it
arr.push(item)
obj[item.id] = item
return {item, new: true}
return { item, new: true }
}
}
@ -28,7 +30,7 @@ const getNotificationPermission = () => {
}
export const mutations = {
setMuted (state, { user: {id}, muted }) {
setMuted (state, { user: { id }, muted }) {
const user = state.usersObject[id]
set(user, 'muted', muted)
},
@ -52,18 +54,31 @@ export const mutations = {
setUserForStatus (state, status) {
status.user = state.usersObject[status.user.id]
},
setColor (state, { user: {id}, highlighted }) {
setColor (state, { user: { id }, highlighted }) {
const user = state.usersObject[id]
set(user, 'highlight', highlighted)
},
signUpPending (state) {
state.signUpPending = true
state.signUpErrors = []
},
signUpSuccess (state) {
state.signUpPending = false
},
signUpFailure (state, errors) {
state.signUpPending = false
state.signUpErrors = errors
}
}
export const defaultState = {
loggingIn: false,
lastLoginName: false,
currentUser: false,
loggingIn: false,
users: [],
usersObject: {}
usersObject: {},
signUpPending: false,
signUpErrors: []
}
const users = {
@ -71,7 +86,7 @@ const users = {
mutations,
actions: {
fetchUser (store, id) {
store.rootState.api.backendInteractor.fetchUser({id})
store.rootState.api.backendInteractor.fetchUser({ id })
.then((user) => store.commit('addNewUsers', user))
},
registerPushNotifications (store) {
@ -96,6 +111,34 @@ const users = {
store.commit('setUserForStatus', status)
})
},
async signUp (store, userInfo) {
store.commit('signUpPending')
let rootState = store.rootState
let response = await rootState.api.backendInteractor.register(userInfo)
if (response.ok) {
const data = {
oauth: rootState.oauth,
instance: rootState.instance.server
}
let app = await oauthApi.getOrCreateApp(data)
let result = await oauthApi.getTokenWithCredentials({
app,
instance: data.instance,
username: userInfo.username,
password: userInfo.password
})
store.commit('signUpSuccess')
store.commit('setToken', result.access_token)
store.dispatch('loginUser', result.access_token)
} else {
let data = await response.json()
let errors = humanizeErrors(JSON.parse(data.error))
store.commit('signUpFailure', errors)
throw Error(errors)
}
},
logout (store) {
store.commit('clearCurrentUser')
store.commit('setToken', false)
@ -138,7 +181,7 @@ const users = {
})
// Fetch our friends
store.rootState.api.backendInteractor.fetchFriends({id: user.id})
store.rootState.api.backendInteractor.fetchFriends({ id: user.id })
.then((friends) => commit('addNewUsers', friends))
})
} else {