forked from AkkomaGang/akkoma-fe
Fix merging array field for users
This commit is contained in:
parent
de9cc033df
commit
cc4691a4ef
2 changed files with 46 additions and 3 deletions
|
@ -1,6 +1,6 @@
|
||||||
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
|
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
|
||||||
import oauthApi from '../services/new_api/oauth.js'
|
import oauthApi from '../services/new_api/oauth.js'
|
||||||
import { compact, map, each, merge, last, concat, uniq } from 'lodash'
|
import { compact, map, each, mergeWith, last, concat, uniq, isArray } from 'lodash'
|
||||||
import { set } from 'vue'
|
import { set } from 'vue'
|
||||||
import { registerPushNotifications, unregisterPushNotifications } from '../services/push/push.js'
|
import { registerPushNotifications, unregisterPushNotifications } from '../services/push/push.js'
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ export const mergeOrAdd = (arr, obj, item) => {
|
||||||
const oldItem = obj[item.id]
|
const oldItem = obj[item.id]
|
||||||
if (oldItem) {
|
if (oldItem) {
|
||||||
// We already have this, so only merge the new info.
|
// We already have this, so only merge the new info.
|
||||||
merge(oldItem, item)
|
mergeWith(oldItem, item, mergeArrayLength)
|
||||||
return { item: oldItem, new: false }
|
return { item: oldItem, new: false }
|
||||||
} else {
|
} else {
|
||||||
// This is a new item, prepare it
|
// This is a new item, prepare it
|
||||||
|
@ -23,6 +23,13 @@ export const mergeOrAdd = (arr, obj, item) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const mergeArrayLength = (oldValue, newValue) => {
|
||||||
|
if (isArray(oldValue) && isArray(newValue)) {
|
||||||
|
oldValue.length = newValue.length
|
||||||
|
return mergeWith(oldValue, newValue, mergeArrayLength)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const getNotificationPermission = () => {
|
const getNotificationPermission = () => {
|
||||||
const Notification = window.Notification
|
const Notification = window.Notification
|
||||||
|
|
||||||
|
@ -116,7 +123,7 @@ export const mutations = {
|
||||||
},
|
},
|
||||||
setCurrentUser (state, user) {
|
setCurrentUser (state, user) {
|
||||||
state.lastLoginName = user.screen_name
|
state.lastLoginName = user.screen_name
|
||||||
state.currentUser = merge(state.currentUser || {}, user)
|
state.currentUser = mergeWith(state.currentUser || {}, user, mergeArrayLength)
|
||||||
},
|
},
|
||||||
clearCurrentUser (state) {
|
clearCurrentUser (state) {
|
||||||
state.currentUser = false
|
state.currentUser = false
|
||||||
|
|
|
@ -18,6 +18,42 @@ describe('The users module', () => {
|
||||||
expect(state.users).to.eql([user])
|
expect(state.users).to.eql([user])
|
||||||
expect(state.users[0].name).to.eql('Dude')
|
expect(state.users[0].name).to.eql('Dude')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('merging array field in new information for old users', () => {
|
||||||
|
const state = cloneDeep(defaultState)
|
||||||
|
const user = {
|
||||||
|
id: '1',
|
||||||
|
fields: [
|
||||||
|
{ name: 'Label 1', value: 'Content 1' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
const firstModUser = {
|
||||||
|
id: '1',
|
||||||
|
fields: [
|
||||||
|
{ name: 'Label 2', value: 'Content 2' },
|
||||||
|
{ name: 'Label 3', value: 'Content 3' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
const secondModUser = {
|
||||||
|
id: '1',
|
||||||
|
fields: [
|
||||||
|
{ name: 'Label 4', value: 'Content 4' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
mutations.addNewUsers(state, [user])
|
||||||
|
expect(state.users[0].fields).to.have.length(1)
|
||||||
|
expect(state.users[0].fields[0].name).to.eql('Label 1')
|
||||||
|
|
||||||
|
mutations.addNewUsers(state, [firstModUser])
|
||||||
|
expect(state.users[0].fields).to.have.length(2)
|
||||||
|
expect(state.users[0].fields[0].name).to.eql('Label 2')
|
||||||
|
expect(state.users[0].fields[1].name).to.eql('Label 3')
|
||||||
|
|
||||||
|
mutations.addNewUsers(state, [secondModUser])
|
||||||
|
expect(state.users[0].fields).to.have.length(1)
|
||||||
|
expect(state.users[0].fields[0].name).to.eql('Label 4')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('findUser', () => {
|
describe('findUser', () => {
|
||||||
|
|
Loading…
Reference in a new issue