58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
import Color from 'color'
|
|
import { defineStore } from 'pinia'
|
|
|
|
export const useUserStore = defineStore({
|
|
id: 'userStore',
|
|
state: () => ({
|
|
users: [
|
|
{
|
|
id: -1,
|
|
name: 'Mercury',
|
|
color: Color('#ff4000'),
|
|
channels: [],
|
|
self: true
|
|
}
|
|
]
|
|
}),
|
|
getters: {
|
|
getSelf: (state) => {
|
|
return (self) => state.users.find(user => user.self === true)
|
|
},
|
|
getUserById: (state) => {
|
|
return (id) => state.users.find(user => user.id === id)
|
|
},
|
|
getUsersByChannelId: (state) => {
|
|
return (channelId) => state.users.filter(user => { return user.channels.includes(channelId) })
|
|
}
|
|
},
|
|
actions: {
|
|
updateUser(newUser) {
|
|
var user = this.users.find(user => user.id == newUser.id)
|
|
if (!user) {
|
|
user = {
|
|
id: newUser.id,
|
|
name: String(newUser.id),
|
|
color: Color('#000000'),
|
|
channels: []
|
|
}
|
|
this.users.push(user)
|
|
}
|
|
user.lastSeen = new Date()
|
|
},
|
|
setName(id, name) {
|
|
var user = this.users.find(user => user.id == id)
|
|
user.name = name
|
|
},
|
|
setColor(id, color) {
|
|
var user = this.users.find(user => user.id == id)
|
|
user.color = color
|
|
},
|
|
addChannel(id, channelId) {
|
|
var user = this.users.find(user => user.id == id)
|
|
if (!user.channels.includes(channelId)) {
|
|
user.channels.push(channelId)
|
|
}
|
|
}
|
|
}
|
|
})
|