UNPKG

kea-react

Version:

Componentes comunes de react

75 lines (74 loc) 3.17 kB
"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); var url_1 = require("./url"); /**Genera la URL del link para un mailto: */ function generateMailtoLinkNoLengthCheck(mail) { var generateContactList = function (contacts) { return contacts.map(function (x) { return x.trim(); }).join(","); }; var base = "mailto:" + generateContactList(mail.to); var parameters = ([ { key: "cc", value: generateContactList(mail.cc || []) }, { key: "bcc", value: generateContactList(mail.bcc || []) }, { key: "subject", value: encodeURIComponent(mail.subject || "") }, { key: "body", value: encodeURIComponent(mail.body || "") } ]).filter(function (x) { return !!x.value; }); var paramStr = parameters.map(function (x) { return x.key + "=" + x.value; }).join("&"); var url = url_1.appendEncodedUrlParameters(base, paramStr); return url; } function getMailLen(mail) { var getLen = function (x) { if (x == null) return 0; if (typeof x == "string") return x.length; return x.map(function (x) { return x.length; }).reduce(function (a, b) { return a + b; }, 0); }; return [mail.bcc, mail.body, mail.cc, mail.subject, mail.to].map(function (x) { return getLen(x); }).reduce(function (a, b) { return a + b; }, 0); } function generateMailtoLink(mail) { var maxLen = 2030; //Aplicamos una reducción inicial proporcional, intentando atinarle al tamaño del correo var cutMail = function (len) { return (__assign({}, mail, { body: (mail.body || "").substr(0, len) + "..." })); }; var currentMail = mail; var currentUrl = generateMailtoLinkNoLengthCheck(currentMail); var bodyLenFix = (mail.body || "").length; while (currentUrl.length > maxLen) { //Reducir la longitud if (bodyLenFix > 0) { var mailLen = getMailLen(currentMail); //La va reduciendo proporcionalmente en cada paso, eso puede ocasionar que sea reducida de mas pero no importa var reduccionProp = (maxLen / currentUrl.length) * (bodyLenFix / mailLen); bodyLenFix = Math.ceil(bodyLenFix * reduccionProp) - 1; } else { break; } currentMail = cutMail(bodyLenFix); currentUrl = generateMailtoLinkNoLengthCheck(currentMail); } return currentUrl; } exports.generateMailtoLink = generateMailtoLink; /** * Envia un correo utilizando la directiva mailto * @param mail Correo que se desea enviar */ function mailto(mail) { var a = document.createElement("a"); a.style.display = "none"; document.body.appendChild(a); var url = generateMailtoLink(mail); a.target = "_blank"; a.href = url; a.click(); document.body.removeChild(a); } exports.mailto = mailto;