@uimkit/uikit-react
Version:
<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>
79 lines (74 loc) • 2.74 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
require('../../../types/models.js');
require('../../../types/events.js');
var accentsMap = {
a: 'á|à|ã|â|À|Á|Ã|Â',
c: 'ç|Ç',
e: 'é|è|ê|É|È|Ê',
i: 'í|ì|î|Í|Ì|Î',
n: 'ñ|Ñ',
o: 'ó|ò|ô|ő|õ|Ó|Ò|Ô|Õ',
u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
};
var removeDiacritics = function (text) {
if (!text)
return '';
return Object.keys(accentsMap).reduce(function (acc, current) { return acc.replace(new RegExp(accentsMap[current], 'g'), current); }, text);
};
var calculateLevenshtein = function (query, name) {
if (query.length === 0)
return name.length;
if (name.length === 0)
return query.length;
var matrix = [];
var i;
for (i = 0; i <= name.length; i++) {
matrix[i] = [i];
}
var j;
for (j = 0; j <= query.length; j++) {
matrix[0][j] = j;
}
for (i = 1; i <= name.length; i++) {
for (j = 1; j <= query.length; j++) {
if (name.charAt(i - 1) === query.charAt(j - 1)) {
matrix[i][j] = matrix[i - 1][j - 1];
}
else {
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
Math.min(matrix[i][j - 1] + 1, // insertion
matrix[i - 1][j] + 1)); // deletion
}
}
}
return matrix[name.length][query.length];
};
var searchLocalUsers = function (params) {
var ownUserId = params.ownUserId, query = params.query, text = params.text, users = params.users;
var matchingUsers = users.filter(function (user) {
if (user.id === ownUserId)
return false;
if (!query)
return true;
var updatedId = removeDiacritics(user.id).toLowerCase();
var updatedName = removeDiacritics(user.name).toLowerCase();
var updatedQuery = removeDiacritics(query).toLowerCase();
var maxDistance = 3;
var lastDigits = text.slice(-(maxDistance + 1)).includes('@');
if (updatedName) {
var levenshtein_1 = calculateLevenshtein(updatedQuery, updatedName);
if (updatedName.includes(updatedQuery) || (levenshtein_1 <= maxDistance && lastDigits)) {
return true;
}
}
var levenshtein = calculateLevenshtein(updatedQuery, updatedId);
return updatedId.includes(updatedQuery) || (levenshtein <= maxDistance && lastDigits);
});
return matchingUsers;
};
exports.accentsMap = accentsMap;
exports.calculateLevenshtein = calculateLevenshtein;
exports.removeDiacritics = removeDiacritics;
exports.searchLocalUsers = searchLocalUsers;
//# sourceMappingURL=utils.js.map