kea-react
Version:
Componentes comunes de react
75 lines (74 loc) • 3.17 kB
JavaScript
;
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;