corporate-frontend-mithril
Version:
Corporate frontend MithrilJS modules
89 lines (72 loc) • 2.01 kB
JavaScript
const strings = require('../../lib/helpers/strings');
const _ = require('lodash');
module.exports = function() {
let _id = `form-radio-${strings.random()}`;
let _title = '';
let _groupName = '';
let _selectedOption = null;
let _isStyleInline = true;
let _options = null;
let _vFn = null;
let _hasSelected = false;
let _setDefaultOption = function() {
if(!_hasSelected) {
_selectedOption = _options[0];
try {
if(_vFn) {
_vFn({obj: _selectedOption});
}
} catch(e) {
console.warn('radio button can not set default option value', e);
}
}
};
return {
get id() {
return _id;
},
get title() {
return _title;
},
set title(v) {
_title = v;
},
set groupName(v) {
_groupName = v;
},
get options() {
return _options;
},
set options(v) {
if(_.isEqual(_options, v)) return;
_hasSelected = false;
_options = v;
_setDefaultOption();
},
get isStyleInline() {
return _isStyleInline;
},
set isStyleInline(v) {
_isStyleInline = v ? true: false;
},
set vFn(v) {
_vFn = v;
},
getAttrs : function (obj) {
return Object.assign(
{'type' : 'radio'},
{'name': _groupName},
!_hasSelected && {'checked': Object.is(_options[0], obj) },
{ onclick: (e)=> {
_hasSelected = true;
if(e.target.checked == true) {
_selectedOption = obj;
}
if(_vFn) {
_vFn({obj});
}
}},
);
},
};
};