Документация для разработчиков
Темная тема

Виджет 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>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх