UNPKG

@expresta/sdk-ts

Version:

A lightweight JS SDK for embedding Expresta's order button into websites using Typescript.

97 lines (96 loc) 4.49 kB
export var configMap = { sk: { domain: "exprestlac.sk", buttonText: "Kúpiť na %s" }, cz: { domain: "expresta.cz", buttonText: "Koupit na %s" }, at: { domain: "expresta.at", buttonText: "Bei %s kaufen" }, de: { domain: "expresta.de", buttonText: "Bei %s kaufen" }, en: { domain: "expresta.eu", buttonText: "Buy at %s" }, hu: { domain: "expresta.hu", buttonText: "Vásárlás az %s oldalán" } }; function addButtonCSS() { if (typeof document === "undefined") return; // Node environment safety if (!document.querySelector('[href*="buttons.min.css"]')) { var link = document.createElement("link"); link.rel = "stylesheet"; link.href = "https://cdn.expresta.com/sdk/dist/css/buttons.min.css"; document.head.appendChild(link); } } function getWrapElement(wrap) { if (typeof wrap === "string") { // ID-based lookup return document.getElementById(wrap); } return wrap instanceof HTMLElement ? wrap : null; } export var OrderButton = { init: function (config) { var _a; if (!config.account || !config.public_key || !((_a = config.products) === null || _a === void 0 ? void 0 : _a.length) || !config.wrap) { console.error("[Expresta SDK] Required parameters are missing."); return; } addButtonCSS(); var wrap = getWrapElement(config.wrap); if (!wrap) { console.error("[Expresta SDK] The provided wrap element was not found."); return; } this.renderButton(wrap, config); }, renderButton: function (wrap, config) { var _a = configMap[config.lang || "en"], domain = _a.domain, buttonText = _a.buttonText; var url = new URL("https://www." + domain + "/order/add-product"); url.searchParams.append("account", config.account); url.searchParams.append("public_key", config.public_key); config.products.forEach(function (product) { url.searchParams.append("product_type_id_" + product.id, product.qty.toString()); }); ["utm_source", "utm_medium", "utm_campaign", "utm_content"].forEach(function (param) { var val = config[param]; if (val) url.searchParams.append(param, val); }); // Custom PDF params if (config.product_id) url.searchParams.append("product_id", config.product_id); if (config.document_url) url.searchParams.append("document_url", config.document_url); if (config.page_range) url.searchParams.append("page_range", config.page_range); if (config.preview_image_url) url.searchParams.append("preview_image_url", config.preview_image_url); if (config.product_name) { var name_1 = config.product_name.length > 60 ? config.product_name.slice(0, 60) : config.product_name; url.searchParams.append("product_name", name_1); } var button = document.createElement("a"); button.href = url.toString(); button.className = "expresta-order-link"; if (config.class === "dark") button.classList.add("dark"); if (config.class === "light") button.classList.add("light"); var _b = buttonText.split("%s"), textBefore = _b[0], _c = _b[1], textAfter = _c === void 0 ? "" : _c; button.appendChild(document.createTextNode(textBefore)); var logo = document.createElement("img"); logo.src = config.class === "dark" ? "https://cdn.expresta.com/common/images/logos/logo-expresta-negative.svg" : "https://cdn.expresta.com/common/images/logos/expresta.svg"; logo.alt = "Expresta"; logo.width = 98; button.appendChild(logo); if (textAfter) button.appendChild(document.createTextNode(textAfter)); var arrow = document.createElement("span"); arrow.innerHTML = '<svg width="9" height="21" viewBox="0 0 9 21"><path d="M1.15 18.36c-.09-.1-.14-.23-.14-.38 0-.15.05-.28.14-.38l6.2-7.02-6.2-7.02c-.09-.1-.14-.23-.14-.38s.05-.28.14-.38c.09-.1.2-.15.33-.15.13 0 .24.05.33.15l6.54 7.41c.09.1.14.24.14.38 0 .14-.05.28-.14.38L1.48 18.5c-.09.09-.2.15-.33.15-.13 0-.24-.06-.33-.15Z" fill="#333"/></svg>'; button.appendChild(arrow); wrap.innerHTML = ""; wrap.appendChild(button); } };