From 58dbac59a2c1f551cf2d74c095b095070c2878c2 Mon Sep 17 00:00:00 2001 From: Hermann Blum <hermannsblum@yahoo.de> Date: Sun, 3 Dec 2017 16:51:19 +0100 Subject: [PATCH] add submit function --- src/views/elements.js | 51 +++++++++++++++++++++++++++++++++++++++++ src/views/selectList.js | 25 ++++++++++++++++++-- 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 src/views/elements.js diff --git a/src/views/elements.js b/src/views/elements.js new file mode 100644 index 0000000..09bf019 --- /dev/null +++ b/src/views/elements.js @@ -0,0 +1,51 @@ +export class inputGroup { + constructor(vnode) { + // Link the error-getting function from the binding + this.getErrors = () => []; + if (vnode.attrs.getErrors) { + this.getErrors = vnode.attrs.getErrors; + } + } + + view(vnode) { + // set display-settings accoridng to error-state + let errorField = null; + let groupClasses = vnode.attrs.classes ? vnode.attrs.classes : ''; + const errors = this.getErrors(); + if (errors.length > 0) { + errorField = m('span.help-block', `Error: ${errors.join(', ')}`); + groupClasses += ' has-error'; + } + + return m('div.form-group', { class: groupClasses }, [ + m(`label[for=${vnode.attrs.name}]`, vnode.attrs.title), + m(`input[name=${vnode.attrs.name}][id=${vnode.attrs.name}].form-control`, { + value: vnode.attrs.value, onchange: vnode.attrs.onchange, + }), + errorField, + ]); + } +} + +export class selectGroup { + view(vnode) { + return m('div.form-group', { class: vnode.attrs.classes }, [ + m(`label[for=${vnode.attrs.name}]`, vnode.attrs.title), + m( + `select[name=${vnode.attrs.name}][id=${vnode.attrs.name}].form-control`, + { value: vnode.attrs.value, onchange: vnode.attrs.onchange }, + vnode.attrs.options.map(option => m('option', option)), + ), + ]); + } +} + +export class submitButton { + view(vnode) { + const args = vnode.attrs.args; + if (!vnode.attrs.active) { + args.disabled = 'disabled'; + } + return m('div.btn', args, vnode.attrs.text); + } +} diff --git a/src/views/selectList.js b/src/views/selectList.js index 07c42dd..bbb56c1 100644 --- a/src/views/selectList.js +++ b/src/views/selectList.js @@ -1,4 +1,5 @@ import TableView from './tableView'; +import { submitButton } from './elements'; const m = require('mithril'); @@ -24,11 +25,19 @@ function debounce(func, wait, immediate) { }; export default class SelectList extends TableView { - constructor(resource, searchKeys, itemView) { + constructor({ + attrs: { + resource, + searchKeys, + itemView, + onSubmit = () => {}, + }, + }) { super({ attrs: { resource, keys: searchKeys } }); this.itemView = itemView; this.selected = null; this.showList = false; + this.onSubmit = onSubmit; } view() { @@ -66,7 +75,19 @@ export default class SelectList extends TableView { return m('div', { }, [ - m('div.row', m('div.col-xs-6', input)), + m('div.row', [ + m('div.col-xs-6', [ + input, + m(submitButton, { + text: 'Submit', + active: this.selected !== null, + args: { + class: 'btn-primary', + onclick: () => { this.onSubmit(this.selected); }, + }, + }), + ]), + ]), this.showList ? list : '', ]); } -- GitLab