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

Класс 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 Добавляет и возвращает новый элемент диалога.
  • options — опции элемента, которые определяются структурой ItemOptions.
removeItem(item: Item | ItemOptions): ?Item Удаляет элемент из диалога.
  • item — объекта класса Item или объект вида { id: string | number, entityId: string }.
removeItems(): void Удаляет все элементы диалога.
getItem(item: ItemId | ItemOptions): ?Item Возвращает элемент диалога по его идентификаторам.
  • itemItemId или объект вида { id: string | number, entityId: string }.
getSelectedItems(): Item[] Возвращает массив выбранных элементов.
getItems(): Item[] Возвращает все элементы диалога.
getEntityItems(entityId: string): Item[] Возвращает все элементы указанной сущности.
addTab(tab: Tab | TabOptions): Tab Добавляет новую вкладку в диалог.
  • tab — объекта класса Tab или TabOptions.
getTabs(): Tab[] Возвращает массив всех вкладок диалога.
getTab(id: string): ?Tab Возвращает объект вкладки по идентификатору id.
getRecentTab(): RecentTab Возвращает объект вкладки "Последние".
getSearchTab(): SearchTab Возвращает объект вкладки "Поиск".
selectTab(id: string): ?Tab Активирует (выбирает) вкладку с указанным идентификатором id.
selectFirstTab(onlyVisible = true): ?Tab Возвращает первую вкладку диалога.
  • onlyVisible — учитывать только видимые вкладки.
selectLastTab(onlyVisible = true): ?Tab Возвращает последнюю вкладку диалога.
  • onlyVisible — учитывать только видимые вкладки.
getActiveTab(): ?Tab Возвращает активную вкладку.
  • onlyVisible — учитывать только видимые вкладки.
getNextTab(onlyVisible = true): ?Tab Возвращает вкладку, которая следует за активной.
  • onlyVisible — учитывать только видимые вкладки.
getPreviousTab(onlyVisible = true): ?Tab Возвращает вкладку, которая предшествует активной.
  • onlyVisible — учитывать только видимые вкладки.
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 Устанавливает или удаляет футер диалога.
  • footerContentконтент футера. Если указан null, футер удаляется.
  • footerOptions — дополнительные опции футера.
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 Переводит диалог в режим "заморозки". В этом режиме перестает работать:
  • Навигация по элементам с помощью клавиш.
  • Автозакрытие диалога по клику на любую область страницы.
  • Автозакрытие диалога по нажатию клавиши Escape.
  • Любые браузерные события внутри диалога.
unfreeze(): void Возвращает диалог из режима "заморозки" в обычный.
isFrozen(): boolean Возвращает true, если диалог находится в режиме "заморозки".
load(): void Выполняет загрузку данных с бэкенда. Как правило, вызывается автоматически при открытии диалога.
isLoaded(): boolean Возвращает true, если диалог уже выполнил запрос на бэкенд и загрузил данные.
isLoading(): boolean Возвращает true, если диалог выполнил запрос на бэкенд, но еще не загрузил данные.
saveRecentItem(item: Item): void Сохраняет элемент для вкладки "Последние".

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх