@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
JavaScript
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);
}
};