Виджет TagSelector
Основные понятия
Виджет
Виджет TagSelector представляет собой интерфейс, эмулирующий множественный выбор элементов:

Виджет состоит из:
- Элементов в виде цветных прямоугольников.
- Текстового блока ввода.
- Ссылок "Добавить" (при выборе одного элемента меняется на "Еще") и "Создать".
Элементы
Так же как и в диалоге выбора сущностей, каждый элемент уникально идентифицируется двумя атрибутами: id и entityId.
id— числовой или строковый идентификатор элемента.entityId— строковый идентификатор сущности.
Атрибут entityId определяет принадлежность элемента к конкретной сущности, поэтому виджет позволяет одновременно отображать элементы разных сущностей.
Сущность — это уникальный тип элемента. Глобальные настройки сущности могут определять внешний вид элементов по умолчанию.
const tagSelector = new TagSelector({
textBoxAutoHide: true,
textBoxWidth: 350,
maxHeight: 99,
placeholder: 'введите название элемента',
addButtonCaption: 'Добавить элемент',
addButtonCaptionMore: 'Добавить еще',
showCreateButton: true,
items: [
{ id: 1, entityId: 'user', entityType: 'extranet', textColor: 'orange', title: 'Василий Иванов' },
{ id: 2, entityId: 'user', title: 'Екатерина Матвеева', deselectable: true, maxWidth: 150 },
{
id: 3,
entityId: 'user',
title: {
text: 'Павел Иванов €',
type: 'html',
},
},
{ id: 3, entityId: 'department', title: 'Разработка' },
{ id: 4, entityId: 'department', title: 'Отдел продаж' },
{ id: 1, entityId: 'project', title: 'Группа И', onclick: (event) => { console.log('tag click'); } },
{ id: 2, entityId: 'project', title: 'Группа Отдела Разработок', link: '/company/personal/user/1/', },
],
events: {
onBeforeTagAdd: function(event) {
const selector = event.getTarget();
const { tag } = event.getData();
if (tag.getTitle() === 'xxx')
{
event.preventDefault();
}
},
onBeforeTagRemove: function(event) {
const selector = event.getTarget();
const { tag } = event.getData();
if (tag.getTitle() === 'aaa')
{
event.preventDefault();
}
},
onEnter: (event) => {
const selector = event.getTarget();
const value = selector.getTextBoxValue();
value.split(' ').forEach(function(title) {
selector.addTag({
id: id++,
title: title,
entityId: 'xxx',
});
});
}
},
});
tagSelector.renderTo(document.getElementById('container'));
Интеграция с диалогом выбора сущностей
Виджет TagSelector является самодостаточным и может использоваться как отдельный программируемый интерфейс. Однако, как правило, он используется вместе с диалогом выбора сущностей. Если задать опцию dialogOptions, при нажатии на ссылку "Добавить" будет открываться диалог.
Пример кода для наглядной демонстрации работы виджета:
<input type="hidden" name="test1[]" value="0"/>
<div id="test1" name="test1"></div>
<script>
(function() { const tagSelector = new BX.UI.EntitySelector.TagSelector({
id: 'test1',
multiple: 'Y',
dialogOptions: {
context: 'MY_MODULE_CONTEXT',
entities: [
{
id: 'user', // пользователи
},
{
id: 'project', // группы и проекты
},
{
id: 'department', // структура компании
options: {
selectMode: 'usersAndDepartments' // выбор пользователей и отделов
}
},
{
id: 'meta-user',
options: {
'all-users': true // Все сотрудники
}
},
],
}
});
tagSelector.renderTo(document.getElementById('test1'))})();
</script>
</pre></p>