Пример
|
---|
const options = { events: { 'onShow': (event: BaseEvent) => { const dialog: Dialog = event.getTarget(); } } } |
Класс Dialog
Описание
Основной класс для работы с диалогом выбора сущностей и его элементами.
Импорт в ES6
import { Dialog } from 'ui.entity-selector';
Использование в ES5
var dialog = new BX.UI.EntitySelector.Dialog(options);
События
Класс Dialog
является наследником класса EventEmitter
. Обработчики события можно установить либо с помощью опции events, либо через стандартный метод EventEmitter.subscribe
.
Событие | Описание | С версии | ||
---|---|---|---|---|
onShow | Вызывается при каждом показе диалога.
| |||
onFirstShow | Вызывается один раз на первом показе диалога.
| |||
onHide | Вызывается при закрытии диалога.
| |||
onDestroy | Вызывается перед уничтожением диалога.
| |||
onSearch | Вызывается при поиске элементов.
| |||
onLoad | Вызывается после загрузки данных с бэкенда.
| |||
onLoadError | Вызывается, если во время загрузки данных с бэкенда произошла ошибка. В данных события содержится ошибка в свойстве error .
| |||
Item:onSelect | Вызывается после выбора элемента. В данных события в свойстве item содержится выбранный элемент.
Получить полный список всех выбранных элементов можно с помощью метода dialog.getSelectedItems().
| |||
Item:onBeforeSelect | Вызывается перед выбором элемента. На данном событии можно запретить выбирать элемент.
| |||
Item:onDeselect | Вызывается после снятия выбора элемента.
В данных события в свойстве item содержится элемент, с которого был снят выбор. Получить полный список всех выбранных элементов можно с помощью метода dialog.getSelectedItems().
| |||
Item:onBeforeDeselect | Вызывается перед снятием выбора элемента. На данном событии можно запретить снятие выбора элемента.
| |||
Tab:onSelect | Вызывается при переходе на новую вкладку (вкладка становится активной).
В данных события в свойстве tab содержится объект вкладки, на которую произошел переход.
| |||
Tab:onDeselect | Вызывается, когда вкладка становится неактивной.
В данных события в свойстве tab содержится объект вкладки, с которой произошел переход.
| |||
Search:onItemCreateAsync | Асинхронное событие, которое возникает в момент создания элемента через поиск.
| |||
ItemNode:onFocus | Вызывается, когда на элементе устанавливается фокус.
В данных события в свойстве node содержится узел элемента (объект класса ItemNode). | |||
ItemNode:onUnfocus | Вызывается, когда на элементе сбрасывается фокус.
В данных события в свойстве node содержится узел элемента (объект класса ItemNode). | |||
ItemNode:onLinkClick | Вызывается при нажатии ссылки "подробнее".
В данных события в свойстве node содержится узел элемента (объект класса ItemNode), а в event — объект события MouseEvent . |
Конструктор
constructor(dialogOptions: DialogOptions): Dialog
Создает объект класса Dialog
.
dialogOptions
— опции диалога, которые определяются структурой DialogOptions
.
export type DialogOptions = { targetNode?: HTMLElement, id?: string, context?: string, items?: ItemOptions[], selectedItems?: ItemOptions[], preselectedItems?: ItemId[], undeselectedItems?: ItemId[], tabs?: TabOptions[], entities?: EntityOptions[], popupOptions?: PopupOptions, multiple?: boolean, preload?: boolean, dropdownMode?: boolean, enableSearch?: boolean, searchOptions?: SearchOptions, searchTabOptions?: TabOptions, recentTabOptions?: TabOptions, tagSelectorOptions?: TagSelectorOptions, events?: { [eventName: string]: (event: BaseEvent) => void }, hideOnSelect?: boolean, hideOnDeselect?: boolean, clearSearchOnSelect?: boolean, width?: number, height?: number, autoHide?: boolean, hideByEsc?: boolean, offsetTop?: number, offsetLeft?: number, cacheable?: boolean, focusOnFirst?: boolean, footer?: FooterContent, footerOptions?: { [option: string]: any }, showAvatars?: boolean, compactView?: boolean, clearUnavailableItems?: boolean, }
targetNode?: HTMLElement
HTML-элемент, около которого отобразится всплывающий диалог.
id?: string
Идентификатор диалога.
Может использоваться для получения объекта диалога в методе Dialog.getById(id).context?: string
Идентификатор контекста.
Используется для сохранения выбранных элементов на вкладке "Последние". Если контекст не задан, выбор пользователя не сохраняется, элементы на вкладке "Последние" сортируются с учетом их выбора в других контекстах.items?: ItemOptions[]
Массив элементов диалога. Каждый элемент определяется структурой ItemOptions.
selectedItems?: ItemOptions[]
Массив элементов диалога (аналогично опции
items
), все элементы которого автоматически определяются как "выбранные".preselectedItems?: ItemId[]
Массив идентификаторов выбранных элементов, данные по которым должен получить диалог от провайдеров сущностей. Каждый элемент определяется структурой
ItemId
.type ItemId = [ string, string | number ];
ItemId
— это массив из двух элементов. Первый элемент представляет идентификатор сущности элемента (entityId
), а второй — идентификатор самого элемента (id
).const options = { preselectedItems: [ ['user', 1], ['department', 1], ['meta-user', 'all-users'], ['project', 2], ['department', '2:F'], ] }
Данная опция обычно используется для заполнения виджета TagSelector элементами, о которых заранее известно, что они выбраны. Диалог автоматически выполнит динамическую загрузку элементов (в момент создания объекта
new Dialog
), если установлена опцияpreselectedItems
.undeselectedItems?: ItemId[]
Массив идентификаторов элементов, у которых нельзя снять выбор. Каждый элемент определяется структурой
ItemId
.tabs?: TabOptions[]
Массив вкладок диалога. Каждая вкладка определяется структурой TabOptions.
const options = { tabs: [ { id: 'cities', title: 'Города', itemOrder: { title: 'asc' } }, { id: 'countries', title: 'Страны', itemOrder: { id: 'desc' } }, ], }
entities?: EntityOptions[]
Массив с настройками сущностей диалога. Каждая сущность определяется структурой EntityOptions.
const options = { entities: [ { id: 'meta-user', options: { 'all-users': true } }, { id: 'user', options: { emailUsers: true }, }, { id: 'project' }, { id: 'department', options: { selectMode: 'usersAndDepartments' } }, ], }
Как правило, в опции
entities
указывают только идентификаторы сущностей, элементы которых необходимо динамически загрузить, а также настройки для провайдеров данных. Настройки же самих сущностей (опции структуры EntityOptions) обычно определяют глобально. Однако эти глобальные настройки можно всегда переопределить:const options = { entities: [ { id: 'user', dynamicLoad: false, // запрещаем динамическую загрузку dynamicSearch: false, // запрещаем динамический поиск searchFields: [ // определяем другие поля поиска { name: 'title', type: 'email', system: true, searchable: true }, { name: 'subtitle', type: 'email', system: true, searchable: false }, { name: 'position', type: 'string' }, { name: 'email', type: 'email' } ], } ], }
popupOptions?: PopupOptions
Дополнительные настройки для Popup-диалога, на котором основан диалог выбора сущностей. Определяются структурой
PopupOptions
, однако разрешены только следующие значения:overlay
,bindOptions
,targetContainer
,zIndexOptions
.multiple?: boolean
По умолчанию диалог работает в режиме множественного выбора (значение
true
). Значениеfalse
ограничивает выбор только одним элементом.preload?: boolean
По умолчанию загрузка элементов с бэкенда (если требуется) происходит в момент открытия диалога. Если установлено значение
true
, загрузка данных произойдет автоматически при создании объекта диалога.dropdownMode?: boolean
Значение
true
включает режим простого списка. В этом режиме скрывается ярлык вкладки "Последние".enableSearch?: boolean
Включает форму поиска внутри диалога.
searchOptions?: SearchOptions
Устанавливает настройки формы поиска. Определяется структурой
SearchOptions
.export type SearchOptions = { allowCreateItem?: boolean, footerOptions?: { [option: string]: any } }
allowCreateItem?: boolean
Включает возможность создавать новые элементы через поиск.
footerOptions?: { [option: string]: any }
Дополнительные настройки для футера на вкладке "Поиск". Опция
label
определяет базовый заголовок для футера.
const options = { searchOptions: { allowCreateItem: true, footerOptions: { label: 'Создать город:' } }, }
searchTabOptions?: TabOptions
Позволяет переопределить настройки системной вкладки "Поиск". Настройки определяются структурой TabOptions.
recentTabOptions?: TabOptions
Позволяет переопределить настройки системной вкладки "Последние". Настройки определяются структурой TabOptions.
tagSelectorOptions?: TagSelectorOptions
Задает дополнительные настройки встроенной форме поиска (TagSelector) при включенной настройке
enableSearch=true
. Настройки определяются структурой TagSelectorOptions.events?: { [eventName: string]: (event: BaseEvent) => void }
Задает обработчики событий диалога.
hideOnSelect?: boolean
Скрывать диалог после выбора элемента. По умолчанию диалог скрывается для одиночного выбора элемента (
multiple=false
), для множественного выбора — не скрывается.hideOnDeselect?: boolean
Скрывать диалог после снятия выбора элемента. По умолчанию диалог не скрывается.
clearSearchOnSelect?: boolean
Очищать форму поиска после выбора элемента. По умолчанию
true
.width?: number
Ширина диалога в пикселях. По умолчанию
565
.height?: number
Высота диалога в пикселях. По умолчанию
420
.autoHide?: boolean
Автоматически скрывать диалог по клику в любую область страницы. По умолчанию
true
.hideByEsc?: boolean
Автоматически скрывать диалог по нажатию клавиши Escape. По умолчанию
true
.offsetTop?: number
Смещение диалога относительно
targetNode
по оси ординат. По умолчанию5
.offsetLeft?: number
Смещение диалога относительно
targetNode
по оси абсцисс. По умолчанию0
.cacheable?: boolean
Если установлено значение
false
, диалог будет автоматически уничтожен после скрытия. По умолчаниюtrue
(не уничтожать).focusOnFirst?: boolean
Устанавливать фокус на первый элемент списка. По умолчанию
true
.footer?: FooterContent
Задает глобальный (на все вкладки) футер диалога. Определяется структурой
FooterContent
.export type FooterContent = string | HTMLElement | HTMLElement[] | Function;
Футер можно задать несколькими способами:
- Если передана верстка в виде DOM-узла, массива DOM-узлов или текстовой строки, будет создан футер по умолчанию (объект класса DefaultFooter) с указанным текстовым контентом.
- Для создания произвольного футера необходимо передать либо ссылку на конструктор класса (наследник BaseFooter или DefaultFooter), либо указать полное имя класса в виде строки.
Для верстки ссылок в футере доступны следующие CSS-классы:
.ui-selector-footer-link
— обычная ссылка..ui-selector-footer-link ui-selector-footer-link-add
— ссылка с иконкой "плюс"..ui-selector-footer-conjunction
— для оформления связующих слов между ссылками.
footerOptions?: { [option: string]: any }
Произвольные опции футера. Передаются в конструктор класса футера.
showAvatars?: boolean
Отображать аватары элементов. По умолчанию
true
. Данная опция определяет поведение для всех вкладок по умолчанию, однако, эту настройку можно переопределить для конкретной вкладки (аналогичная опцияshowAvatars
).compactView?: boolean
Определяет компактный вид отображения элементов. По умолчанию
false
. Рекомендуется использовать для элементов без аватаров (showAvatars=false
).clearUnavailableItems?: boolean
Удалять элемента из списка "Последних", если провайдеры сущностей не возвращают для них данные. По умолчанию
false
.
Методы
Метод | Описание | С версии |
---|---|---|
Dialog.getById(id: string): ?Dialog | Статический метод, возвращающий объект диалога по идентификатору id. | |
Dialog.getInstances(): Dialog[] | Статический метод, возвращающий массив всех объектов диалога. | |
show(): void | Отображает диалог на странице. | |
hide(): void | Скрывает диалог на странице. | |
destroy(): void | Удаляет диалог из страницы, а так же все его внутренние сущности. Дальнейшее использование объекта диалога после вызова destroy() невозможно. Для автоматического уничтожения диалога можно воспользоваться опцией cacheable=true или методом setCacheable(true). | |
isOpen(): boolean | Возвращает true , если диалог отображается на странице, иначе false . | |
adjustPosition(): void | Заново пересчитывает расположение диалога относительно targetNode. | |
search(queryString: string): void | Выполняется поиск элемента по указанной в queryString строке. | |
addItem(options: ItemOptions): Item | Добавляет и возвращает новый элемент диалога.
| |
removeItem(item: Item | ItemOptions): ?Item | Удаляет элемент из диалога.
| |
removeItems(): void | Удаляет все элементы диалога. | |
getItem(item: ItemId | ItemOptions): ?Item | Возвращает элемент диалога по его идентификаторам.
| |
getSelectedItems(): Item[] | Возвращает массив выбранных элементов. | |
getItems(): Item[] | Возвращает все элементы диалога. | |
getEntityItems(entityId: string): Item[] | Возвращает все элементы указанной сущности. | |
addTab(tab: Tab | TabOptions): Tab | Добавляет новую вкладку в диалог.
| |
getTabs(): Tab[] | Возвращает массив всех вкладок диалога. | |
getTab(id: string): ?Tab | Возвращает объект вкладки по идентификатору id. | |
getRecentTab(): RecentTab | Возвращает объект вкладки "Последние". | |
getSearchTab(): SearchTab | Возвращает объект вкладки "Поиск". | |
selectTab(id: string): ?Tab | Активирует (выбирает) вкладку с указанным идентификатором id. | |
selectFirstTab(onlyVisible = true): ?Tab | Возвращает первую вкладку диалога.
| |
selectLastTab(onlyVisible = true): ?Tab | Возвращает последнюю вкладку диалога.
| |
getActiveTab(): ?Tab | Возвращает активную вкладку.
| |
getNextTab(onlyVisible = true): ?Tab | Возвращает вкладку, которая следует за активной.
| |
getPreviousTab(onlyVisible = true): ?Tab | Возвращает вкладку, которая предшествует активной.
| |
removeTab(id: string): void | Удаляет вкладку по идентификатору id. | |
addEntity(entity: Entity | EntityOptions): Entity | Добавляет сущность в диалог. | |
getEntity(id: string): ?Entity | Возвращает сущность по идентификатору id. | |
hasEntity(id: string): boolean | Возвращает true , если сущность с идентификатором id существует. | |
getEntities(): Entity[] | Возвращает массив всех сущностей диалога. | |
removeEntity(id: string): void | Удаляет сущность (включая ее элементы) из диалога. | |
removeEntityItems(id: string): void | Удаляет все элементы указанной сущности. | |
getFooter(): ?BaseFooter | Возвращает футер диалога. | |
getActiveFooter(): ?BaseFooter | Возвращает активный футер. В зависимости от текущей вкладки метод возвратит либо футер вкладки, либо футер диалога. | |
setFooter(footerContent: ?FooterContent, footerOptions?: { [option: string]: any }): ?BaseFooter | Устанавливает или удаляет футер диалога.
| |
getId(): string | Возвращает идентификатор диалога. | |
getContext(): ?string | Возвращает контекст диалога. | |
deselectAll(): void | Снимает выбор со всех элементов диалога. | |
isMultiple(): boolean | Возвращает true , если в диалоге множественный выбор элементов. | |
setTargetNode(node: HTMLElement | { left: number, top: number } | null | MouseEvent): void | Устанавливает HTML-элемент, около которого отобразится всплывающий диалог. Если node указан в значении null , диалог покажется по центру страницы. | |
getTargetNode(): ?HTMLElement | Возвращает HTML-элемент, около которого отображается диалог. | |
setHideOnSelect(flag: boolean): void | Включает или отменяет скрытие диалога после выбора элемента. | |
shouldHideOnSelect(): boolean | Возвращает true , если диалог скрывается после выбора элемента. | |
setHideOnDeselect(flag: boolean): void | Включает или отменяет скрытие диалога после снятия выбора элемента. | |
shouldHideOnDeselect(): boolean | Возвращает true , если диалог скрывается после снятия выбора элемента. | |
setClearSearchOnSelect(flag: boolean): void | Включает или отменяет очистку формы поиска после выбора элемента. | |
shouldClearSearchOnSelect(): boolean | Возвращает true , если форма поиска очищается после выбора элемента. | |
setShowAvatars(flag: boolean): void | Включает или отменяет показ аватаров элементов диалога. | |
shouldShowAvatars(): boolean | Возвращает true , если включен показ аватаров элементов диалога. | |
isCompactView(): boolean | Возвращает true , если включен компактный вид отображения элементов. | |
setAutoHide(enable: boolean): void | Включает или отменяет автоматическое закрытие диалога по клику в любую область страницы. | |
isAutoHide(): boolean | Возвращает true , если диалог автоматически закрывается по клику в любую область страницы. | |
setHideByEsc(enable: boolean): void | Включает или отменяет автоматическое закрытие диалога по нажатию клавиши Escape. | |
shouldHideByEsc(): boolean | Возвращает true , если диалог автоматически закрывается по нажатию клавиши Escape. | |
getWidth(): number | Возвращает ширину диалога в пикселях. | |
setWidth(width: number): void | Устанавливает ширину диалога в пикселях. | |
getHeight(): number | Возвращает высоту диалога в пикселях. | |
setHeight(height: number): Promise | Устанавливает высоту диалога в пикселях. | |
getOffsetLeft(): number | Возвращает смещение диалога относительно targetNode по оси абсцисс в пикселях. | |
setOffsetLeft(offset: number): void | Устанавливает смещение диалога относительно targetNode по оси абсцисс. | |
getOffsetTop(): number | Возвращает смещение диалога относительно targetNode по оси ординат в пикселях. | |
setOffsetTop(offset: number): void | Устанавливает смещение диалога относительно targetNode по оси ординат. | |
isCacheable(): boolean | Возвращает false , если диалог автоматически уничтожается после закрытия. | |
setCacheable(cacheable: boolean): void | Включает или отменяет автоматическое уничтожение диалога после закрытия. | |
shouldFocusOnFirst(): boolean | Возвращает true , если включена автоматическая фокусировка на первый элемент вкладок. | |
setFocusOnFirst(flag: boolean): void | Включает или отменяет автоматическую фокусировку на первый элемент вкладок. | |
focusOnFirstNode(): ?ItemNode | Устанавливает фокус на первый элемент активной вкладки. | |
clearNodeFocus(): void | Сбрасывает фокус с текущего сфокусированного элемента. | |
getTagSelector(): ?TagSelector | Возвращает объект виджета TagSelector. | |
isTagSelectorInside(): boolean | Возвращает true , если виджет TagSelector находится внутри диалога. | |
isTagSelectorOutside(): boolean | Возвращает true , если виджет TagSelector находится снаружи диалога. | |
getTagSelectorQuery(): string | Возвращает поисковую фразу из виджета TagSelector. | |
focusSearch(): void | Устанавливает фокус на форму поиска в виджете TagSelector. | |
clearSearch(): void | Очищает форму поиска в виджете TagSelector. | |
isRendered(): boolean | Возвращает true , если верстка диалога сформирована и вставлена на страницу. | |
freeze(): void | Переводит диалог в режим "заморозки". В этом режиме перестает работать:
| |
unfreeze(): void | Возвращает диалог из режима "заморозки" в обычный. | |
isFrozen(): boolean | Возвращает true , если диалог находится в режиме "заморозки". | |
load(): void | Выполняет загрузку данных с бэкенда. Как правило, вызывается автоматически при открытии диалога. | |
isLoaded(): boolean | Возвращает true , если диалог уже выполнил запрос на бэкенд и загрузил данные. | |
isLoading(): boolean | Возвращает true , если диалог выполнил запрос на бэкенд, но еще не загрузил данные. | |
saveRecentItem(item: Item): void | Сохраняет элемент для вкладки "Последние". |