Skip to content
Snippets Groups Projects
Commit a64e8514 authored by Hermann's avatar Hermann
Browse files

extend new layout to users

parent 63305084
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,7 @@ import m from 'mithril';
import { OauthRedirect } from './auth';
import GroupList from './groups/list';
import GroupItem from './groups/item';
import { UserModal, UserTable, NewUser } from './users/userTool';
import { UserItem, UserTable } from './users/userTool';
import { MembershipView } from './membershipTool';
import EventTable from './events/table';
import EventItem from './events/item';
......@@ -27,8 +27,8 @@ function layoutWith(view) {
m.route.prefix('');
m.route(root, '/users', {
'/users': layoutWith(UserTable),
'/users/:id': layoutWith(UserModal),
'/newuser': layoutWith(NewUser),
'/users/:id': layoutWith(UserItem),
'/newuser': layoutWith(UserItem),
'/groupmemberships/:id': layoutWith(MembershipView),
'/events': layoutWith(EventTable),
'/events/:id': layoutWith(EventItem),
......
import m from 'mithril';
import { RaisedButton, RadioGroup } from 'polythene-mithril';
import { EditView } from '../views/editView';
import { RadioGroup } from 'polythene-mithril';
import EditView from '../views/editView';
export default class UserEdit extends EditView {
constructor(vnode) {
super(vnode, 'users', {});
}
view() {
// do not render anything if there is no data yet
if (!this.data) return m.trust('');
const submitButton = m(RaisedButton, {
disabled: !this.valid,
label: 'Submit',
events: { onclick: () => { this.submit(); } },
});
return m('form', [
return this.layout([
...this.renderPage({
lastname: { type: 'text', label: 'Last Name' },
firstname: { type: 'text', label: 'First Name' },
......@@ -63,7 +50,6 @@ export default class UserEdit extends EditView {
],
onChange: ({ value }) => { this.data.department = value; },
}),
submitButton,
]);
}
}
import m from 'mithril';
import UserEdit from './editUser';
import UserView from './viewUser';
import EditUser from './editUser';
import ViewUser from './viewUser';
import TableView from '../views/tableView';
import { users as config } from '../resourceConfig.json';
import DatalistController from '../listcontroller';
import ItemController from '../itemcontroller'
export class NewUser extends UserEdit {
constructor(vnode) {
super(vnode);
this.data = {
membership: 'regular',
};
this.valid = false;
// if the creation is finished, UI should switch to new User
this.callback = (response) => { m.route.set(`/users/${response.data._id}`); };
}
}
export class UserModal {
export class UserItem {
constructor() {
this.edit = false;
this.controller = new ItemController('users');
}
view() {
if (this.edit) {
return m(UserEdit, { onfinish: () => { this.edit = false; m.redraw(); } });
}
// else
return m('div', [
m('div.btn.btn-default', { onclick: () => { this.edit = true; } }, 'Edit'),
m('br'),
m(UserView),
]);
if (!this.controller || !this.controller.data) return '';
if (this.controller.modus !== 'view') return m(EditUser, { controller: this.controller });
return m(ViewUser, { controller: this.controller });
}
}
......
......@@ -6,8 +6,8 @@ import { users as config } from '../resourceConfig.json';
import DatalistController from '../listcontroller';
export default class UserView extends ItemView {
constructor() {
super('users');
constructor(vnode) {
super(vnode);
// a controller to handle the groupmemberships of this user
this.groupmemberships = new DatalistController('groupmemberships', {
where: { user: this.id },
......@@ -34,17 +34,10 @@ export default class UserView extends ItemView {
}
oninit() {
this.handler.getItem(this.id, this.embedded).then((item) => {
this.data = item;
m.redraw();
});
this.groupmemberships.refresh();
}
view() {
// do not render anything if there is no data yet
if (!this.data) return m.trust('');
let membershipBadge = m('span.label.label-important', 'No Member');
if (this.data.membership === 'regular') {
membershipBadge = m('span.label.label-success', 'Member');
......@@ -73,7 +66,7 @@ export default class UserView extends ItemView {
},
});
return m('div', [
return this.layout([
m('h1', `${this.data.firstname} ${this.data.lastname}`),
membershipBadge,
m('table', detailKeys.map(key => m('tr', [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment