Настраиваемое меню
Описание
BX.UI.MenuConfigurable.Menu используется для отрисовки настраиваемого списка пунктов, разделенных на «видимые» и «скрытые», с возможностью drag-and-drop'а и кнопками Сохранить/Отменить.
Названия и поведение многих параметров аналогичны таким из {Menu} from 'main.popup'.
Публичные методы
constructor(parameters: Parameters)– Создание объекта.- id: string – уникальный строковый идентификатор;
- items: Item[] – массив с описанием пунктов, где каждый элемент имеет структуру:
- isHidden boolean – если
true, то входит в группу «скрытые»; - text: ?string – текст элемента (аналогично
PopupItem); - html: ?string – html элемента (аналогично
PopupItem); - id: ?string – уникальный строковый идентификатор элемента.
- bindElement: ?HTMLElement – элемент, к которому привязывается выпадающее меню<;/li>
- maxVisibleItems: ?number – ограничение на максимальное количество элементов в разделе «видимые».
open(bindElement: ?HTMLElement): Promise– Показывает меню.
Если передан
bindElement, то меню будет показано у него.Метод возвращает
Promise, который всегда резолвится. На вход придет объект.Если меню закрыли без сохранения (кликнули мимо, или нажали «отмена»), то объект будет иметь вид
{isCanceled: true}.Если пользователь нажал «Сохранить», то объект будет иметь вид
{items: Item[]}, гдеitems– массив элементов в их текущем состоянии (в котором их оставил пользователь).
close(): void– скрывает меню. Промис, который до этого вернул методopen, будет выполнен.setItems(items: Item[]): this– перезапишет состав элементов.getItemsFromMenu(): Item[]– вернет состав элементов в том виде, в котором его оставил пользователь.
События
Save– бросается при клике на кнопку «Сохранить».Cancel– бросается при клике на кнопку «Отмена».
Без параметров.
Если в обработчике вызвать event.preventDefault(), то процесс сохранения будет прерван.
Без параметров.
Если в обработчике вызвать event.preventDefault(), то процесс меню не скроется (поведение по умолчанию).
Пример
import {Event, Type} from 'main.core';
import {MenuConfigurable} from 'ui.menu-configurable';
const menuConfigurable = new MenuConfigurable({
items: [
{
id: 'first',
text: 'visible item',
},
{
id: 'second',
text: 'hidden item',
isHidden: true,
},
],
bindElement: document.getElementById('my-button'),
maxVisibleItems: 1, // only one item can be visible
});
menuConfigurable.subscribe('Cancel', () => {
console.log('cancel button was clicked');
});
Event.bind(document.getElementById('my-button'), 'click', () => {
menuConfigurable.open().then((result) => {
if (result.isCanceled)
{
return;
}
if (Type.isArray(result.items))
{
// save items
}
});
});