UNPKG

corporate-frontend-mithril

Version:

Corporate frontend MithrilJS modules

89 lines (72 loc) 2.01 kB
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}); } }}, ); }, }; };