|
Пример
|
|---|
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?: HTMLElementHTML-элемент, около которого отобразится всплывающий диалог.
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 | Сохраняет элемент для вкладки "Последние". |