forked from AkkomaGang/admin-fe
Add optimistic update for actions that moderate users
This commit is contained in:
parent
408b9dcc64
commit
6975f43527
1 changed files with 41 additions and 13 deletions
|
@ -38,12 +38,6 @@ const users = {
|
||||||
SET_LOADING: (state, status) => {
|
SET_LOADING: (state, status) => {
|
||||||
state.loading = status
|
state.loading = status
|
||||||
},
|
},
|
||||||
SWAP_USER: (state, updatedUser) => {
|
|
||||||
const updated = state.fetchedUsers.map(user => user.id === updatedUser.id ? updatedUser : user)
|
|
||||||
state.fetchedUsers = updated
|
|
||||||
.map(user => user.nickname ? user : { ...user, nickname: '' })
|
|
||||||
.sort((a, b) => a.nickname.localeCompare(b.nickname))
|
|
||||||
},
|
|
||||||
SWAP_USERS: (state, users) => {
|
SWAP_USERS: (state, users) => {
|
||||||
const usersWithoutSwapped = users.reduce((acc, user) => {
|
const usersWithoutSwapped = users.reduce((acc, user) => {
|
||||||
return acc.filter(u => u.id !== user.id)
|
return acc.filter(u => u.id !== user.id)
|
||||||
|
@ -77,17 +71,32 @@ const users = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
async ActivateUsers({ dispatch, getters, state }, users) {
|
async ActivateUsers({ commit, dispatch, getters, state }, users) {
|
||||||
|
const updatedUsers = users.map(user => {
|
||||||
|
return { ...user, deactivated: false }
|
||||||
|
})
|
||||||
|
commit('SWAP_USERS', updatedUsers)
|
||||||
|
|
||||||
const usersNicknames = users.map(user => user.nickname)
|
const usersNicknames = users.map(user => user.nickname)
|
||||||
await activateUsers(usersNicknames, getters.authHost, getters.token)
|
await activateUsers(usersNicknames, getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
},
|
},
|
||||||
async AddRight({ dispatch, getters, state }, { users, right }) {
|
async AddRight({ commit, dispatch, getters, state }, { users, right }) {
|
||||||
|
const updatedUsers = users.map(user => {
|
||||||
|
return user.local ? { ...user, roles: { ...user.roles, [right]: true }} : user
|
||||||
|
})
|
||||||
|
commit('SWAP_USERS', updatedUsers)
|
||||||
|
|
||||||
const usersNicknames = users.map(user => user.nickname)
|
const usersNicknames = users.map(user => user.nickname)
|
||||||
await addRight(usersNicknames, right, getters.authHost, getters.token)
|
await addRight(usersNicknames, right, getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
},
|
},
|
||||||
async AddTag({ dispatch, getters, state }, { users, tag }) {
|
async AddTag({ commit, dispatch, getters, state }, { users, tag }) {
|
||||||
|
const updatedUsers = users.map(user => {
|
||||||
|
return { ...user, tags: [...user.tags, tag] }
|
||||||
|
})
|
||||||
|
commit('SWAP_USERS', updatedUsers)
|
||||||
|
|
||||||
const nicknames = users.map(user => user.nickname)
|
const nicknames = users.map(user => user.nickname)
|
||||||
await tagUser(nicknames, [tag], getters.authHost, getters.token)
|
await tagUser(nicknames, [tag], getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
|
@ -100,17 +109,31 @@ const users = {
|
||||||
await createNewAccount(nickname, email, password, getters.authHost, getters.token)
|
await createNewAccount(nickname, email, password, getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
},
|
},
|
||||||
async DeactivateUsers({ dispatch, getters, state }, users) {
|
async DeactivateUsers({ commit, dispatch, getters, state }, users) {
|
||||||
|
const updatedUsers = users.map(user => {
|
||||||
|
return { ...user, deactivated: true }
|
||||||
|
})
|
||||||
|
commit('SWAP_USERS', updatedUsers)
|
||||||
|
|
||||||
const usersNicknames = users.map(user => user.nickname)
|
const usersNicknames = users.map(user => user.nickname)
|
||||||
await deactivateUsers(usersNicknames, getters.authHost, getters.token)
|
await deactivateUsers(usersNicknames, getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
},
|
},
|
||||||
async DeleteRight({ dispatch, getters, state }, { users, right }) {
|
async DeleteRight({ commit, dispatch, getters, state }, { users, right }) {
|
||||||
|
const updatedUsers = users.map(user => {
|
||||||
|
return user.local ? { ...user, roles: { ...user.roles, [right]: false }} : user
|
||||||
|
})
|
||||||
|
commit('SWAP_USERS', updatedUsers)
|
||||||
|
|
||||||
const usersNicknames = users.map(user => user.nickname)
|
const usersNicknames = users.map(user => user.nickname)
|
||||||
await deleteRight(usersNicknames, right, getters.authHost, getters.token)
|
await deleteRight(usersNicknames, right, getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
},
|
},
|
||||||
async DeleteUsers({ dispatch, getters, state }, users) {
|
async DeleteUsers({ commit, getters, state }, users) {
|
||||||
|
const deletedUsersIds = users.map(deletedUser => deletedUser.id)
|
||||||
|
const updatedUsers = state.fetchedUsers.filter(user => !deletedUsersIds.includes(user.id))
|
||||||
|
commit('SET_USERS', updatedUsers)
|
||||||
|
|
||||||
const usersNicknames = users.map(user => user.nickname)
|
const usersNicknames = users.map(user => user.nickname)
|
||||||
await deleteUsers(usersNicknames, getters.authHost, getters.token)
|
await deleteUsers(usersNicknames, getters.authHost, getters.token)
|
||||||
},
|
},
|
||||||
|
@ -131,7 +154,12 @@ const users = {
|
||||||
RemovePasswordToken({ commit }) {
|
RemovePasswordToken({ commit }) {
|
||||||
commit('SET_PASSWORD_RESET_TOKEN', { link: '', token: '' })
|
commit('SET_PASSWORD_RESET_TOKEN', { link: '', token: '' })
|
||||||
},
|
},
|
||||||
async RemoveTag({ dispatch, getters, state }, { users, tag }) {
|
async RemoveTag({ commit, dispatch, getters, state }, { users, tag }) {
|
||||||
|
const updatedUsers = users.map(user => {
|
||||||
|
return { ...user, tags: user.tags.filter(userTag => userTag !== tag) }
|
||||||
|
})
|
||||||
|
commit('SWAP_USERS', updatedUsers)
|
||||||
|
|
||||||
const nicknames = users.map(user => user.nickname)
|
const nicknames = users.map(user => user.nickname)
|
||||||
await untagUser(nicknames, [tag], getters.authHost, getters.token)
|
await untagUser(nicknames, [tag], getters.authHost, getters.token)
|
||||||
dispatch('FetchUsers', { page: state.currentPage })
|
dispatch('FetchUsers', { page: state.currentPage })
|
||||||
|
|
Loading…
Reference in a new issue