Files
Mercury/src/stores/userStore.js
2022-03-19 21:47:54 +00:00

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)
}
}
}
})