Элементы
Поля элементов
Элементы отображаются в правой части каталога.
- Отображать в нескольких группах.
- Добавлять подзаголовки и описание.
- Добавлять группам иконки.
- Настроить текст кнопки и ее действие.
Полный список полей элемента:
type ItemData = {
id: string | number,
title: string,
subtitle?: string,
groupIds: Array,
description: string,
tags?: Array,
button?: ButtonData,
customData?: { [key: string]: any },
};
Отображение в группах
Каждый элемент может отображаться при выборе разных групп. Например, мы хотим показывать пользователю книги по жанрам. У одной книги может быть нескольких жанров, поэтому она должна отображаться в нескольких группах:
const catalogOptions = {
groups: [
[
{
id: 'fantasy',
name: 'фэнтези',
},
{
id: 'detective',
name: 'детектив',
}
],
],
items: [
{
id: 'book',
title: 'Книга нескольких жанров',
groupIds: ['fantasy', 'detective'],
},
{
id: 'detective-book',
title: 'Книга в жанре детектив',
groupIds: ['detective'],
},
{
id: 'fantasy-book',
title: 'Книга в жанре фэнтези',
groupIds: ['fantasy'],
}
],
}
Подзаголовок
const itemWithSubtitle = {
id: 'book',
title: 'Книга нескольких жанров',
subtitle: 'подзаголовок',
groupIds: ['fantasy', 'detective'],
};
Описание
const itemWithDescription = {
id: 'book',
title: 'Книга нескольких жанров',
subtitle: 'подзаголовок',
description: 'Детектив в фэнтези мире',
groupIds: ['fantasy', 'detective'],
};
Теги
const itemWithTags = {
id: 'hound-of-baskervilles',
title: 'Собака Баскервилей',
tags: ['Конан Дойл'],
}
Кнопка
По умолчанию в элемент добавляется кнопка, которую можно настроить, передав в объект элемента соответствующий объект по ключу button. Этот объект должен иметь следующие поля:
text– текст кнопки (по умолчанию "добавить");action– callback, который вызывается при нажатии на кнопку.
const item = {
id: 'hound-of-baskervilles',
title: 'Собака Баскервилей',
tags: ['Конан Дойл'],
button: {
text: 'показать автора',
action: () => BX.UI.Notification.Center.notify({
content: 'Артур Конан Дойл',
}),
}
}
В callback action-a передается событие типа BaseEvent, в котором по ключу eventData можно получить данные элемента, обернутые в объект прокси.
const item = {
id: 'hound-of-baskervilles',
title: 'Собака Баскервилей',
tags: ['конан дойл'],
groupIds: ['detective'],
button: {
text: 'показать тэги',
action: (event) => {
const itemTags = event.getData().eventData.tags;
BX.UI.Notification.Center.notify({
content: (
'Теги данного элемента: '
+ itemTags.map(tag => `"${tag}"`).join(', ')
),
});
},
}
};
Если данных элемента в callback-е недостаточно, то по ключу customData можно добавить дополнительные данные.