UNPKG

@uimkit/uikit-react

Version:

<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>

79 lines (74 loc) 2.74 kB
'use strict'; 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