|
|
@ -5,36 +5,27 @@ import { TERMINAL_TYPE } from '../common/enums.js' |
|
|
export default defineStore('friendStore', { |
|
|
export default defineStore('friendStore', { |
|
|
state: () => { |
|
|
state: () => { |
|
|
return { |
|
|
return { |
|
|
friends: [], |
|
|
friendMap: new Map(), |
|
|
timer: null |
|
|
timer: null |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
actions: { |
|
|
actions: { |
|
|
setFriends(friends) { |
|
|
setFriends(friends) { |
|
|
friends.forEach((f) => { |
|
|
this.friendMap.clear(); |
|
|
f.online = false; |
|
|
friends.forEach(f => this.friendMap.set(f.id, f)) |
|
|
f.onlineWeb = false; |
|
|
|
|
|
f.onlineApp = false; |
|
|
|
|
|
}) |
|
|
|
|
|
this.friends = friends; |
|
|
|
|
|
}, |
|
|
}, |
|
|
updateFriend(friend) { |
|
|
updateFriend(friend) { |
|
|
let f = this.findFriend(friend.id); |
|
|
let f = this.findFriend(friend.id); |
|
|
let copy = JSON.parse(JSON.stringify(f)); |
|
|
friend.online = f.online; |
|
|
Object.assign(f, friend); |
|
|
friend.onlineWeb = f.onlineWeb; |
|
|
f.online = copy.online; |
|
|
friend.onlineApp = f.onlineApp; |
|
|
f.onlineWeb = copy.onlineWeb; |
|
|
this.friendMap.set(friend.id, friend) |
|
|
f.onlineApp = copy.onlineApp; |
|
|
|
|
|
}, |
|
|
}, |
|
|
removeFriend(id) { |
|
|
removeFriend(id) { |
|
|
this.friends.filter(f => f.id == id).forEach(f => f.deleted = true); |
|
|
this.friendMap.get(id).deleted = true; |
|
|
}, |
|
|
}, |
|
|
addFriend(friend) { |
|
|
addFriend(friend) { |
|
|
if (this.friends.some((f) => f.id == friend.id)) { |
|
|
this.friendMap.set(friend.id, friend) |
|
|
this.updateFriend(friend) |
|
|
|
|
|
} else { |
|
|
|
|
|
this.friends.unshift(friend); |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
}, |
|
|
setOnlineStatus(onlineTerminals) { |
|
|
setOnlineStatus(onlineTerminals) { |
|
|
this.friends.forEach((f) => { |
|
|
this.friends.forEach((f) => { |
|
|
@ -68,12 +59,11 @@ export default defineStore('friendStore', { |
|
|
}, 30000) |
|
|
}, 30000) |
|
|
}, |
|
|
}, |
|
|
setDnd(id, isDnd) { |
|
|
setDnd(id, isDnd) { |
|
|
let friend = this.findFriend(id); |
|
|
this.friendMap.get(id).isDnd = isDnd; |
|
|
friend.isDnd = isDnd; |
|
|
|
|
|
}, |
|
|
}, |
|
|
clear() { |
|
|
clear() { |
|
|
|
|
|
this.friendMap.clear(); |
|
|
clearTimeout(this.timer); |
|
|
clearTimeout(this.timer); |
|
|
this.friends = []; |
|
|
|
|
|
this.timer = null; |
|
|
this.timer = null; |
|
|
}, |
|
|
}, |
|
|
loadFriend() { |
|
|
loadFriend() { |
|
|
@ -92,11 +82,15 @@ export default defineStore('friendStore', { |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
getters: { |
|
|
getters: { |
|
|
isFriend: (state) => (userId) => { |
|
|
friends: (state) => { |
|
|
return state.friends.filter((f) => !f.deleted).some((f) => f.id == userId); |
|
|
return Array.from(state.friendMap.values()); |
|
|
}, |
|
|
}, |
|
|
findFriend: (state) => (id) => { |
|
|
findFriend: (state) => (userId) => { |
|
|
return state.friends.find((f) => f.id == id); |
|
|
return state.friendMap.get(userId); |
|
|
|
|
|
}, |
|
|
|
|
|
isFriend: (state) => (userId) => { |
|
|
|
|
|
let f = state.findFriend(userId) |
|
|
|
|
|
return f && !f.deleted |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |