ulogger-server/js/userlist.js
2019-06-29 12:54:32 +02:00

147 lines
3.5 KiB
JavaScript

/*
* μlogger
*
* Copyright(C) 2019 Bartek Fabiszewski (www.fabiszewski.net)
*
* This is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
import { auth, config, lang } from './constants.js';
import UserDialog from './userdialog.js';
import uList from './list.js';
import { uLogger } from './ulogger.js';
import uUser from './user.js';
/**
* @class UserList
* @extends {uList<uUser>}
*/
export default class UserList extends uList {
/**
* @param {string} selector
* @param {uBinder} binder
*/
constructor(selector, binder) {
super(selector, binder, uUser);
super.hasHead = true;
super.allValue = `- ${lang.strings['allusers']} -`;
super.headValue = lang.strings['suser'];
}
/**
* @override
*/
onChange() {
if (config.showLatest) {
if (this.isSelectedAllOption) {
uLogger.trackList.fetchLatest();
} else {
uLogger.trackList.fetch()
.then(() => uLogger.trackList.fetchLatest());
}
} else {
uLogger.trackList.fetch();
}
}
/**
* @override
*/
onConfigChange(property) {
if (property === 'showLatest') {
if (config.showLatest && this.data.length > 1) {
this.showAllOption = true;
} else if (!config.showLatest && this.showAllOption) {
this.showAllOption = false;
}
}
}
/**
* @override
*/
onEdit() {
if (this.isSelectedAllOption) {
return;
}
if (this.current) {
if (this.current.login === auth.user.login) {
alert(lang.strings['selfeditwarn']);
return;
}
this.editUser();
}
}
/**
* @param {UserDialog=} modal
*/
editUser(modal) {
const dialog = modal || new UserDialog('edit', this.current);
dialog.show()
.then((result) => {
switch (result.action) {
case 'update':
// currently only password
this.current.password = result.data.password;
return this.current.update('update');
case 'delete':
return this.current.update('delete').then(() => this.remove(this.current.id));
default:
break;
}
throw new Error();
})
.then(() => {
alert(lang.strings['actionsuccess']);
dialog.hide();
})
.catch((msg) => {
alert(`${lang.strings['actionfailure']}\n${msg}`);
this.editUser(dialog);
});
}
/**
* @override
*/
onAdd() {
this.addUser();
}
/**
* @param {UserDialog=} modal
*/
addUser(modal) {
const dialog = modal || new UserDialog('add');
dialog.show()
.then((result) => {
const newUser = new uUser(0, result.data.login);
newUser.password = result.data.password;
return newUser.update('add')
})
.then((user) => {
alert(lang.strings['actionsuccess']);
this.add(user);
dialog.hide();
})
.catch((msg) => {
alert(`${lang.strings['actionfailure']}\n${msg}`);
this.addUser(dialog);
});
}
}