telegram-miniapp-tools
Version:
Tools for working with Telegram Miniapps
93 lines (92 loc) • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFullscreenManager = createFullscreenManager;
var index_js_1 = require("../index.js");
/**
* Creates a fullscreen manager that handles fullscreen state
* and provides methods to request and exit fullscreen mode.
*
* @returns {FullscreenManager | null} The fullscreen manager object or null if Telegram WebApp is not available.
*/
function createFullscreenManager() {
if (!index_js_1.webApp) {
console.warn("Telegram WebApp is not available.");
return null;
}
// State variables
var isFullscreen = index_js_1.webApp.isFullscreen;
var error = null;
// Event handlers
var fullscreenChangeHandlers = new Set();
var errorHandlers = new Set();
// Internal event listeners
function handleFullscreenChanged() {
isFullscreen = index_js_1.webApp.isFullscreen;
fullscreenChangeHandlers.forEach(function (callback) { return callback(isFullscreen); });
}
function handleFullscreenFailed(errorObj) {
error = errorObj.error;
errorHandlers.forEach(function (callback) { return callback(error); });
}
// Subscribe to events
index_js_1.webApp.onEvent("fullscreenChanged", handleFullscreenChanged);
index_js_1.webApp.onEvent("fullscreenFailed", handleFullscreenFailed);
// Public methods
function getIsFullscreen() {
return isFullscreen;
}
function getError() {
return error;
}
function requestFullscreen() {
error = null; // Reset error
try {
index_js_1.webApp.requestFullscreen();
}
catch (e) {
console.error(e);
error = e.message || "Unknown error";
errorHandlers.forEach(function (callback) { return callback(error); });
}
}
function exitFullscreen() {
error = null; // Reset error
try {
index_js_1.webApp.exitFullscreen();
}
catch (e) {
console.error(e);
error = e.message || "Unknown error";
errorHandlers.forEach(function (callback) { return callback(error); });
}
}
function onFullscreenChange(callback) {
fullscreenChangeHandlers.add(callback);
}
function offFullscreenChange(callback) {
fullscreenChangeHandlers.delete(callback);
}
function onError(callback) {
errorHandlers.add(callback);
}
function offError(callback) {
errorHandlers.delete(callback);
}
function destroy() {
index_js_1.webApp.offEvent("fullscreenChanged", handleFullscreenChanged);
index_js_1.webApp.offEvent("fullscreenFailed", handleFullscreenFailed);
fullscreenChangeHandlers.clear();
errorHandlers.clear();
}
return {
getIsFullscreen: getIsFullscreen,
getError: getError,
requestFullscreen: requestFullscreen,
exitFullscreen: exitFullscreen,
onFullscreenChange: onFullscreenChange,
offFullscreenChange: offFullscreenChange,
onError: onError,
offError: offError,
destroy: destroy,
};
}