@vela-ventures/ao-sync-sdk
Version:
JavaScript SDK for Beacon wallet
107 lines (106 loc) • 4.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.connectionModalMessage = exports.createModalTemplate = void 0;
const modalStyles_1 = require("../styles/modalStyles");
const modalAssets_1 = require("../constants/modalAssets");
const styleUtils_1 = require("../utils/styleUtils");
const modalCSS = `
.aosync-modal-fade-in {
animation: fadeIn 0.1s ease;
}
.aosync-modal-fade-out {
animation: fadeOut 0.2s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeOut {
from { opacity: 1; }
to { opacity: 0; }
}
`;
const createModalTemplate = ({ subTitle, description, qrCodeData, animationData, autoClose, walletClient, }) => {
if (!document.getElementById("aosync-modal-styles")) {
const style = document.createElement("style");
style.id = "aosync-modal-styles";
style.textContent = modalCSS + modalStyles_1.mobileStylesCSS;
document.head.appendChild(style);
}
const modal = document.createElement("div");
Object.assign(modal.style, modalStyles_1.modalStyles.modal);
modal.className = "aosync-modal-fade-in";
modal.id = `aosync-modal-container`;
const backdrop = document.createElement("div");
Object.assign(backdrop.style, modalStyles_1.modalStyles.backdrop);
backdrop.onclick = () => closeModal(modal, walletClient);
const content = document.createElement("div");
Object.assign(content.style, modalStyles_1.modalStyles.content);
content.style.setProperty("font-family", "Sora", "important");
content.id = "aosync-modal-content";
content.innerHTML = `
<div style="${(0, styleUtils_1.objectToInlineStyle)(modalStyles_1.modalStyles.iconContainer)}">
${modalAssets_1.ICONS.qrCode.scanner}
</div>
<h3 style="${(0, styleUtils_1.objectToInlineStyle)(modalStyles_1.modalStyles.title)}">AOSync</h3>
<div style="${(0, styleUtils_1.objectToInlineStyle)(modalStyles_1.modalStyles.subtitle)}">${subTitle}</div>
${qrCodeData
? `<img id="aosync-beacon-connection-qrCode" src="${qrCodeData}" alt="QR Code" style="width: 200px; height: 200px; margin-bottom: 10px;">`
: ""}
${animationData
? '<div id="aosync-lottie-animation" style="width: 200px; height: 200px; margin-bottom: 10px;"></div>'
: ""}
<div style="${(0, styleUtils_1.objectToInlineStyle)(modalStyles_1.modalStyles.description)}">
<span id="aosync-beacon-modal-description">${description}</span>
<a href="https://beaconwallet.app" target="_blank" style="${(0, styleUtils_1.objectToInlineStyle)(modalStyles_1.modalStyles.modalLink)}; text-decoration: none; display: block; margin-top: 8px;">
beaconwallet.app
</a>
</div>
`;
modal.appendChild(backdrop);
modal.appendChild(content);
document.body.appendChild(modal);
if (animationData) {
const lottieContainer = document.getElementById("aosync-lottie-animation");
if (lottieContainer) {
const img = document.createElement("img");
img.src = modalAssets_1.ICONS.loadingAnimation;
img.style.width = "100%";
lottieContainer.appendChild(img);
}
}
if (autoClose) {
setTimeout(() => {
closeModal(modal);
if (document.getElementById("aosync-modal-container")) {
document.body.removeChild(document.getElementById("aosync-modal-container"));
}
}, 1000);
}
return modal;
};
exports.createModalTemplate = createModalTemplate;
function closeModal(modal, walletClient) {
if (walletClient) {
walletClient.connectionListener("connection_canceled");
}
modal.className = "aosync-modal-fade-out";
setTimeout(() => modal.remove(), 150);
}
function connectionModalMessage(modalMessage) {
const qrCode = document.getElementById("aosync-beacon-connection-qrCode") ||
document.getElementById("aosync-lottie-animation");
if (!qrCode)
return;
const modal = document.getElementById("aosync-modal-container");
if (!modal)
return;
const statusMark = document.createElement("div");
Object.assign(statusMark.style, modalStyles_1.modalStyles.statusMark);
statusMark.className = "aosync-modal-fade-in";
statusMark.innerHTML =
modalMessage === "success" ? modalAssets_1.ICONS.qrCode.success : modalAssets_1.ICONS.qrCode.fail;
qrCode.replaceWith(statusMark);
setTimeout(() => closeModal(modal), 1000);
}
exports.connectionModalMessage = connectionModalMessage;