UNPKG

bootstrap-vue

Version:

With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extens

74 lines (63 loc) 2.63 kB
import { extend } from '../vue'; import { PROP_TYPE_ARRAY_OBJECT, PROP_TYPE_STRING } from '../constants/props'; import { get } from '../utils/get'; import { stripTags } from '../utils/html'; import { isArray, isPlainObject, isUndefined } from '../utils/inspect'; import { keys } from '../utils/object'; import { makeProp, makePropsConfigurable } from '../utils/props'; import { warn } from '../utils/warn'; // --- Constants --- var OPTIONS_OBJECT_DEPRECATED_MSG = 'Setting prop "options" to an object is deprecated. Use the array format instead.'; // --- Props --- export var props = makePropsConfigurable({ disabledField: makeProp(PROP_TYPE_STRING, 'disabled'), htmlField: makeProp(PROP_TYPE_STRING, 'html'), options: makeProp(PROP_TYPE_ARRAY_OBJECT, []), textField: makeProp(PROP_TYPE_STRING, 'text'), valueField: makeProp(PROP_TYPE_STRING, 'value') }, 'formOptionControls'); // --- Mixin --- // @vue/component export var formOptionsMixin = extend({ props: props, computed: { formOptions: function formOptions() { return this.normalizeOptions(this.options); } }, methods: { normalizeOption: function normalizeOption(option) { var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; // When the option is an object, normalize it if (isPlainObject(option)) { var value = get(option, this.valueField); var text = get(option, this.textField); return { value: isUndefined(value) ? key || text : value, text: stripTags(String(isUndefined(text) ? key : text)), html: get(option, this.htmlField), disabled: Boolean(get(option, this.disabledField)) }; } // Otherwise create an `<option>` object from the given value return { value: key || option, text: stripTags(String(option)), disabled: false }; }, normalizeOptions: function normalizeOptions(options) { var _this = this; // Normalize the given options array if (isArray(options)) { return options.map(function (option) { return _this.normalizeOption(option); }); } else if (isPlainObject(options)) { // Deprecate the object options format warn(OPTIONS_OBJECT_DEPRECATED_MSG, this.$options.name); // Normalize a `options` object to an array of options return keys(options).map(function (key) { return _this.normalizeOption(options[key] || {}, key); }); } // If not an array or object, return an empty array /* istanbul ignore next */ return []; } } });