Пример
|
---|
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 | Сохраняет элемент для вкладки "Последние". |
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.