diff --git a/src/index.js b/src/index.js index 736201fb247ea49ae7dd6d989b920de1ba812e14..6eebb1b6471cdcd4bed562154999c84545d306b6 100644 --- a/src/index.js +++ b/src/index.js @@ -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), diff --git a/src/users/editUser.js b/src/users/editUser.js index 46e1bc1588709b741f613b10feaef56b4de03308..7f2587cd3ea8302954ca2737f4e60163c139652f 100644 --- a/src/users/editUser.js +++ b/src/users/editUser.js @@ -1,24 +1,11 @@ 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, ]); } } diff --git a/src/users/userTool.js b/src/users/userTool.js index da312a375f04a5dc9795fa6b069dfbc190d976a4..c4c92128789c92c899af1210b2a8813b829190cb 100644 --- a/src/users/userTool.js +++ b/src/users/userTool.js @@ -1,38 +1,20 @@ 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 }); } } diff --git a/src/users/viewUser.js b/src/users/viewUser.js index f8ca87e325798c057c976f020a0da29467ec4620..dbb99a6f32815e5910e13dde8071af2279edea6e 100644 --- a/src/users/viewUser.js +++ b/src/users/viewUser.js @@ -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', [