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

Stream

Описание

Класс для работы со списком элементов таймлайна.

BX.UI.Timeline.Stream

Все элементы таймлайна - наследники класса Item.

Все редакторы - наследники Editor.

Таймлайн состоит из четырех частей:

  • редакторы;
  • запланировано;
  • прикреплено;
  • все элементы.

Элементы из раздела Запланировано не отображаются в общем списке, их нельзя прикрепить.

Элементы из раздела Прикреплено - это дубли элементов из общего списка (т.е. один элемент имеет два экземпляра, один в общем списке, второй в прикрепленных).

У этих элементов будет один и тот же идентификатор, но это два разных объекта.

Элементы в общем разделе сгруппированы по дням, в начале каждого дня есть разделитель (для работы с ними есть отдельные методы).

Сам таймлайн занимается только отрисовкой, он не делает никаких запросов. Действия пользователей вызывают события, обработчики которых должны делать свои ajax-запросы.

Методы

Метод Описание С версии
constructor(params: {}) Конструктор.

Параметры:

params - имеет следующую структуру:

  • items - массив с данными об элементах;
  • users - массив с данными о пользователях;
  • nameFormat - формат имени пользователя;
  • pageSize - размер страницы;
  • tasks - массив с данными об элементах, которые должны отображаться в разделе Запланировано;
  • editors - массив с редакторами;
  • itemClasses - список, где ключ - код типа элемента, а значение javascript-класс наследник Item, который должен его отрисовать.
createItem(data: {}, itemClassName: ?Function): ?Item Метод создаст новый элемент, если переданы корректные данные.
  • data - список с данными об элементе. Содержимое может меняться в зависимости от типа элемента. Подробнее см. конструкторы наследников Item;
  • itemClassName - название javascript-класса-наследника Item для создания элемента.
addItem(item: Item): Stream Метод добавит новый элемент в массив элементов. Если надо, то элемент будет склонирован в список прикрепленных элементов.
  • item - элемент.
getItems(): Array Метод вернет массив всех элементов.
getItem(id: string|number): ?Item Метод вернет элемент по его идентификатору.
  • id - идентификатор элемента.
getPinnedItems(): Array Метод вернет массив всех прикрепленных элементов.
getPinnedItem(id: string|number): ?Item Метод вернет прикрепленный элемент по его идентификатору.
  • id - идентификатор прикрепленного элемента.
getTasks(): Array Метод вернет массив всех элементов из раздела Запланировано.
getPinnedItem(id: string|number): ?Item Метод вернет элемент из раздела Запланировано по его идентификатору.
  • id - идентификатор элемента из раздела Запланировано.
render(): Element Метод отрисует таймлайн и вернет DOM-элемент.
getContainer(): ?Element Метод вернет контейнер с отрисованным таймлайном (если он был отрисован).
updateTasks(tasks: Array) Этот метод полностью перерисует раздел Запланировано с новыми элементами. При этом для удаления старых элементов и для добавления новых будет использована анимация.
  • tasks - данные об элементах в разделе Запланировано.
static getDayFromDate(date: Date): ?string Метод вернет строковое представление дня из даты .
  • date - дата.
getDateSeparator(day: string): ?Elemen Вернет существующий разделитель, если он есть.
  • day - строковое представление дня.
createDateSeparator(day: string): Element Создаст новый разделитель, но он не будет помещен в DOM.
  • day - строковое представление дня.
static isToday(date: Date): boolean Вернет true, если дата сегодняшняя.
  • date - дата.
insertItem(item: Item): this Метод добавит новый элемент item в начало ленты с анимацией. Если надо, будет добавлен разделитель.
  • item - элемент.
pinItem(item: Item): Stream Метод добавит элемент item в список прикрепленных элементов с анимацией.
unPinItem(item: Item): Stream Метод уберет элемент item из списка прикрепленных с анимацией.
deleteItem(item: Item) Метод удалит элемент item с анимацией, неважно в каком разделе он расположен.
startProgress() Метод покажет лоадер и сохранит состояние обработки аякс-запроса.
stopProgress() Метод скроет лоадер и сбросит состояние обработки аякс-запроса.
getLoader() Метод вернет объект BX.Loader.
enableLoadOnScroll() Метод включает обработку события скролла списка элементов. При скролле до конца списка вызывается событие onScrollToTheBottom.
disableLoadOnScroll() Метод отключает обработку события скролла списка элементов.

События

Событие Описание
namespace: BX.UI.Timeline.Stream
onAfterInitСобытие бросается в конце работы конструктора. С помощью него можно получить доступ к объекту списка.
  • stream - в данных события будет объект BX.UI.Timeline.Stream.

Например, у нас есть элементы с action равным delete_section и мы хотим, чтобы такие элементы работали через класс MyModule.Timeline.SectionDelete.

Для этого регистрируем обработчик события:

```javascript
BX.Event.EventEmitter.subscribe('BX.UI.Timeline.Stream:onAfterInit', (event) => {
	const stream = event.getData().stream;

	stream.itemClasses.set('delete_section', MyModule.Timeline.DeleteSection);
});
```

Для перехвата остальных событий необходимо наличие объекта. Поэтому в обработчике onAfterInit его надо сохранить, чтобы при подписке его использовать.

```javascript
stream.subscribe('onAfterRender', () => {
	const container = stream.getContainer();
    
	// все остальные ноды находятся в stream.layout
});
```
onAfterRenderСобытие бросается после рендеринга таймлайна.

В обработчике события можно получить контейнер с помощью метода getContainer().

onScrollToTheBottomСобытие бросается при скролле до нижнего края общего списка элементов.

onPinClickСобытие бросается при клике на скрепку элемента.
  • item - элемент, на скрепку которого кликнули.


© «Битрикс», 2001-2024, «1С-Битрикс», 2024