umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
149 lines (148 loc) • 5.75 kB
JavaScript
;
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;