Newer
Older
import m from 'mithril';
import ItemView from '../views/itemView';
import TableView from '../views/tableView';
import SelectList from '../views/selectList';
import { users as config } from '../resourceConfig.json';
import DatalistController from '../listcontroller';
export default class UserView extends ItemView {
// a controller to handle the groupmemberships of this user
this.groupmemberships = new DatalistController('groupmemberships', {
where: { user: this.id },
embedded: { group: 1 },
});
// a controller to handle the eventsignups of this user
this.eventsignups = new DatalistController('eventsignups', {
where: { user: this.id },
embedded: { event: 1 },
});
// initially, don't display the choice field for a new group
// (this will be displayed once the user clicks on 'new')
// a controller to handle the list of possible groups to join
this.groupcontroller = new DatalistController('groups', {}, ['name']);
// exclude the groups where the user is already a member
this.groupmemberships.handler.get({ where: { user: this.id } })
.then((data) => {
const groupIds = data._items.map(item => item.group);
this.groupcontroller.setQuery({
where: { _id: { $nin: groupIds } },
});
});
}
oninit() {
this.groupmemberships.refresh();
}
view() {
let membershipBadge = m('span.label.label-important', 'No Member');
if (this.data.membership === 'regular') {
membershipBadge = m('span.label.label-success', 'Member');
} else if (this.data.membership === 'extraordinary') {
membershipBadge = m('span.label.label-success', 'Extraordinary Member');
} else if (this.data.membership === 'honorary') {
membershipBadge = m('span.label.label-warning', 'Honorary Member');
}
const detailKeys = [
'email', 'phone', 'nethz', 'legi', 'rfid', 'department', 'gender'];
// Selector that is only displayed if "new" is clicked in the
// groupmemberships. Selects a group to request membership for.
controller: this.groupcontroller,
listTileAttrs: data => Object.assign({}, { title: data.name }),
this.groupmemberships.handler.post({
user: this.data._id,
group: group._id,
this.groupmemberships.refresh();
m('h1', `${this.data.firstname} ${this.data.lastname}`),
membershipBadge,
m('table', detailKeys.map(key => m('tr', [
m('td.detail-descriptor', config.keyDescriptors[key]),
m('td', this.data[key] ? this.data[key] : ''),
]))),
m('h2', 'Memberships'), m('br'),
controller: this.groupmemberships,
titles: ['groupname', 'expiry'],
onAdd: () => { this.groupchoice = true; },
controller: this.eventsignups,