UNPKG

umbot

Version:

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

149 lines (148 loc) 5.75 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.Buttons = void 0; const Button_1 = require("./Button"); /** * @class Buttons * Класс для управления коллекцией кнопок и их отображением на различных платформах. * * Класс предоставляет функциональность для: * - Создания и управления коллекцией кнопок * - Адаптации кнопок под различные платформы * - Поддержки различных типов кнопок (интерактивные, ссылки) */ class Buttons { /** * Константа для создания кнопки в виде ссылки (сайджест). */ static B_LINK = false; /** * Константа для создания кнопки в виде интерактивной кнопки. */ static B_BTN = true; /** * Массив объектов IButtonType, представляющих все кнопки в коллекции. * @see IButtonType */ buttons; /** * Контекст приложения */ #appContext; /** * Создает новый экземпляр коллекции кнопок. * Инициализирует все массивы и устанавливает тип кнопок по умолчанию для Алисы. * @param appContext Контекст приложения * ⚠️ Обычно НЕ создаётся вручную — автоматически передаётся через контроллер: * ```ts * // Правильно — через контроллер: * this.buttons.addBtn('caption'); * * // НЕ рекомендуется — ручное создание: * new Buttons(this.appContext); // appContext берётся из контроллера * ``` */ constructor(appContext) { this.buttons = []; this.#appContext = appContext; } /** * Устанавливает контекст приложения. * @param appContext */ setAppContext(appContext) { this.#appContext = appContext; return this; } /** * Очищает массив кнопок. * @returns {void} */ clear() { this.buttons = []; } /** * Добавляет кнопку в коллекцию. * * @param {string | null} title - Текст кнопки * @param {string | null} url - URL для перехода * @param {TButtonPayload} payload - Дополнительные данные * @param {boolean} hide - Тип отображения кнопки * @param {IButtonOptions} options - Дополнительные параметры * @returns {Buttons} */ #add(title, url, payload, hide = false, options = {}) { const button = hide === _a.B_LINK ? (0, Button_1.getLinkButton)(this.#appContext, title, url, payload, options) : (0, Button_1.getButton)(this.#appContext, title, url, payload, options); if (button) { this.buttons.push(button); } return this; } /** * Добавляет интерактивную кнопку в коллекцию. * * @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, url = '', payload = '', options = {}) { return this.#add(title, url, payload, _a.B_BTN, options); } /** * Добавляет кнопку-ссылку в коллекцию. * * @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, url = '', payload = '', options = {}) { return this.#add(title, url, payload, _a.B_LINK, options); } /** * Возвращает массив кнопок, адаптированный для указанной платформы. * * @param buttonProcessing */ getButtons(buttonProcessing) { return buttonProcessing(this.buttons); } /** * Возвращает JSON-представление кнопок для указанной платформы. * * @param buttonProcessing - Тип кнопок (платформа) */ getButtonJson(buttonProcessing) { const btn = this.getButtons(buttonProcessing); if (btn?.length) { return JSON.stringify(btn); } return null; } } exports.Buttons = Buttons; _a = Buttons;