umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
107 lines (106 loc) • 4.81 kB
TypeScript
import { IButtonType } from './Button';
import { IButtonOptions } from './interfaces/IButton';
import { AppContext, TButtonProcessing } from '../../core';
/**
* Дополнительные данные для кнопки
*/
export type TButtonPayload = Record<string, unknown> | string;
/**
* @class Buttons
* Класс для управления коллекцией кнопок и их отображением на различных платформах.
*
* Класс предоставляет функциональность для:
* - Создания и управления коллекцией кнопок
* - Адаптации кнопок под различные платформы
* - Поддержки различных типов кнопок (интерактивные, ссылки)
*/
export declare class Buttons {
#private;
/**
* Константа для создания кнопки в виде ссылки (сайджест).
*/
static readonly B_LINK: boolean;
/**
* Константа для создания кнопки в виде интерактивной кнопки.
*/
static readonly B_BTN: boolean;
/**
* Массив объектов IButtonType, представляющих все кнопки в коллекции.
* @see IButtonType
*/
buttons: IButtonType[];
/**
* Создает новый экземпляр коллекции кнопок.
* Инициализирует все массивы и устанавливает тип кнопок по умолчанию для Алисы.
* @param appContext Контекст приложения
* ⚠️ Обычно НЕ создаётся вручную — автоматически передаётся через контроллер:
* ```ts
* // Правильно — через контроллер:
* this.buttons.addBtn('caption');
*
* // НЕ рекомендуется — ручное создание:
* new Buttons(this.appContext); // appContext берётся из контроллера
* ```
*/
constructor(appContext: AppContext);
/**
* Устанавливает контекст приложения.
* @param appContext
*/
setAppContext(appContext: AppContext): this;
/**
* Очищает массив кнопок.
* @returns {void}
*/
clear(): void;
/**
* Добавляет интерактивную кнопку в коллекцию.
*
* @param {string} title - Текст кнопки
* @param {string} [url=''] - URL для перехода
* @param {TButtonPayload} [payload=''] - Дополнительные данные
* @param {IButtonOptions} [options={}] - Дополнительные параметры
* @returns {Buttons}
*
* @example
* ```ts
* // Простая кнопка
* buttons.addBtn('Нажми меня');
*
* // Кнопка с URL и payload
* buttons.addBtn('Перейти', 'http://localhost', { action: 'navigate' });
* ```
*/
addBtn(title: string | null, url?: string | null, payload?: TButtonPayload, options?: IButtonOptions): this;
/**
* Добавляет кнопку-ссылку в коллекцию.
*
* @param {string} title - Текст кнопки
* @param {string} [url=''] - URL для перехода
* @param {TButtonPayload} [payload=''] - Дополнительные данные
* @param {IButtonOptions} [options={}] - Дополнительные параметры
* @returns {Buttons}
*
* @example
* ```ts
* // Простая ссылка
* buttons.addLink('Перейти на сайт', 'http://localhost');
*
* // Ссылка с payload
* buttons.addLink('Документация', 'http://localhost', { section: 'api' });
* ```
*/
addLink(title: string | null, url?: string, payload?: TButtonPayload, options?: IButtonOptions): this;
/**
* Возвращает массив кнопок, адаптированный для указанной платформы.
*
* @param buttonProcessing
*/
getButtons<T = unknown, TType = Record<string, unknown> | string | null>(buttonProcessing: TButtonProcessing<T | null, TType>): T | null;
/**
* Возвращает JSON-представление кнопок для указанной платформы.
*
* @param buttonProcessing - Тип кнопок (платформа)
*/
getButtonJson<T = unknown, TType = Record<string, unknown> | string | null>(buttonProcessing: TButtonProcessing<T | null, TType>): string | null;
}