UNPKG

comindware.core.ui

Version:

Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.

78 lines (70 loc) 3.71 kB
import DefaultButtonView from './views/DefaultButtonView'; import MenuPanelView from './views/MenuPanelView'; import DropdownView from './views/DropdownView'; import Backbone from 'backbone'; /** * The factory covers common use cases of Popout/Dropdown views. * You can create a simple menu (and other stuff like this) in one click without lots of manual work. * @namespace factory * @memberof module:core.dropdown * */ export default /** @lends module:core.dropdown.factory */ { /** * @description Метод служит для быстрого создания меню на базе {@link module:core.dropdown.views.PopoutView PopoutView}. * В качестве <code>buttonView</code> и <code>panelView</code> (если они не заданы в опциях явно) * используются предустановленные View для меню. Остальные опции PopoutView передаются 'as is'. * @param {Object} options Объект опций {@link module:core.dropdown.views.PopoutView PopoutView}. Доступны дополнительные опции, приведенные ниже: * @param {Array} options.items Элементы списка меню. Могут быть переданы как простой массив объектов <code>{ id, icon, iconClass, name }</code> * или как Backbone.Collection. * @param {String} [options.text] Текст кнопки меню. Если не задан, требуется вручную установить опцию <code>buttonView</code>. * @returns {Backbone.View} View Меню * */ createMenu(options = {}) { let collection = options.items; if (!(collection instanceof Backbone.Collection)) { collection = new Backbone.Collection(collection); } let effectiveButtonModel = options.buttonModel || new Backbone.Model({ text: options.text }); if (!options.buttonModel) { const defaultActModel = collection.findWhere({ default: true }); if (defaultActModel) { effectiveButtonModel = defaultActModel; collection.remove(effectiveButtonModel); } } return this.createDropdown({ buttonView: DefaultButtonView, buttonViewOptions: { model: effectiveButtonModel }, panelView: MenuPanelView, panelViewOptions: { collection }, showDropdownAnchor: true, ...options }); }, /** * @description Метод вызывает стандартный конструктор * {@link module:core.dropdown.views.PopoutView PopoutView} передавая ему опции 'as is'. * @param {Object} options Объект опций {@link module:core.dropdown.views.PopoutView PopoutView} * @returns {PopoutView} Экземпляр PopoutView * */ createPopout(options) { return this.createMenu(options); }, /** * @description Метод вызывает стандартный конструктор * {@link module:core.dropdown.views.DropdownView DropdownView} передавая ему опции 'as is'. * @param {Object} options Объект опций {@link module:core.dropdown.views.DropdownView DropdownView} * @returns {DropdownView} Экземпляр DropdownView * */ createDropdown(options) { return new DropdownView(options); } };