UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

107 lines (106 loc) 4.81 kB
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; }