130 lines
3.7 KiB
JavaScript
130 lines
3.7 KiB
JavaScript
|
|
import {makeObservable, observable, action, computed} from 'mobx';
|
|
|
|
export class storeUsers {
|
|
constructor() {
|
|
makeObservable(this, {
|
|
users: observable,
|
|
reset: action,
|
|
currentUser: observable,
|
|
setCurrentUser: action,
|
|
connection: action,
|
|
isDisconnected: observable,
|
|
resetDisconnected: action,
|
|
hasEditUsers: computed,
|
|
editUsers: computed
|
|
})
|
|
}
|
|
|
|
users = [];
|
|
currentUser;
|
|
isDisconnected = false;
|
|
|
|
reset (users) {
|
|
this.users = Object.values(users)
|
|
}
|
|
|
|
setCurrentUser (id) {
|
|
this.users.forEach((item) => {
|
|
if (item.asc_getIdOriginal() === id) {
|
|
this.currentUser = item;
|
|
}
|
|
});
|
|
return this.currentUser;
|
|
}
|
|
|
|
connection (change) {
|
|
let changed = false;
|
|
for (let uid in this.users) {
|
|
if (undefined !== uid) {
|
|
const user = this.users[uid];
|
|
if (user && user.asc_getId() === change.asc_getId()) {
|
|
this.users[uid] = change;
|
|
changed = true;
|
|
}
|
|
}
|
|
}
|
|
!changed && change && (this.users[change.asc_getId()] = change);
|
|
}
|
|
|
|
resetDisconnected (isDisconnected) {
|
|
this.isDisconnected = isDisconnected;
|
|
}
|
|
|
|
getInitials (name) {
|
|
const fio = name.split(' ');
|
|
let initials = fio[0].substring(0, 1).toUpperCase();
|
|
for (let i = fio.length-1; i>0; i--) {
|
|
if (fio[i][0]!=='(' && fio[i][0]!==')') {
|
|
initials += fio[i].substring(0, 1).toUpperCase();
|
|
break;
|
|
}
|
|
}
|
|
return initials;
|
|
}
|
|
|
|
searchUserById (id) {
|
|
let user = null;
|
|
this.users.forEach((item) => {
|
|
if (item.asc_getIdOriginal() === id) {
|
|
user = item;
|
|
}
|
|
});
|
|
return user;
|
|
}
|
|
|
|
searchUserByCurrentId (id) {
|
|
let user = null;
|
|
this.users.forEach((item) => {
|
|
if (item.asc_getId() === id) {
|
|
user = item;
|
|
}
|
|
});
|
|
return user;
|
|
}
|
|
|
|
get hasEditUsers () {
|
|
let length = 0;
|
|
this.users.forEach((item) => {
|
|
if ((item.asc_getState()!==false) && !item.asc_getView()) {
|
|
length++;
|
|
}
|
|
});
|
|
return (length >= 1);
|
|
}
|
|
|
|
get editUsers () {
|
|
const idArray = [];
|
|
const usersArray = [];
|
|
const curUserId = this.currentUser.asc_getIdOriginal();
|
|
this.users.forEach((item) => {
|
|
const name = AscCommon.UserInfoParser.getParsedName(item.asc_getUserName());
|
|
if((item.asc_getState() !== false) && !item.asc_getView()) {
|
|
const idOriginal = item.asc_getIdOriginal();
|
|
const ind = idArray.indexOf(idOriginal);
|
|
if (ind !== -1) {
|
|
usersArray[ind].count = usersArray[ind].count + 1;
|
|
} else {
|
|
const userAttr = {
|
|
color: item.asc_getColor(),
|
|
id: item.asc_getId(),
|
|
idOriginal: item.asc_getIdOriginal(),
|
|
name: name,
|
|
view: item.asc_getView(),
|
|
initials: this.getInitials(name),
|
|
count: 1
|
|
};
|
|
if(idOriginal === curUserId) {
|
|
usersArray.unshift(userAttr);
|
|
idArray.unshift(idOriginal);
|
|
} else {
|
|
usersArray.push(userAttr);
|
|
idArray.push(idOriginal);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return usersArray;
|
|
}
|
|
}
|