Refactor server picker and limit ping requests
This commit is contained in:
31
src/web/utils/serverPicker.js
Normal file
31
src/web/utils/serverPicker.js
Normal file
@@ -0,0 +1,31 @@
|
||||
export const SERVER_RESULT_WINDOW = 60;
|
||||
|
||||
const searchable = (server) => [
|
||||
server.label,
|
||||
server.host,
|
||||
server.country,
|
||||
server.city,
|
||||
server.provider,
|
||||
server.protocol,
|
||||
].filter(Boolean).join(' ').toLocaleLowerCase('ru');
|
||||
|
||||
export function filterServers(servers, query) {
|
||||
const needle = String(query || '').trim().toLocaleLowerCase('ru');
|
||||
return needle ? servers.filter((server) => searchable(server).includes(needle)) : servers;
|
||||
}
|
||||
|
||||
export function serverGroup(server) {
|
||||
return server.country || server.provider || 'Другие';
|
||||
}
|
||||
|
||||
export function groupServers(servers) {
|
||||
return [...servers.reduce((groups, server) => {
|
||||
const name = serverGroup(server);
|
||||
groups.set(name, [...(groups.get(name) || []), server]);
|
||||
return groups;
|
||||
}, new Map())];
|
||||
}
|
||||
|
||||
export function autoServer(servers) {
|
||||
return [...servers].sort((left, right) => left.id.localeCompare(right.id))[0] || null;
|
||||
}
|
||||
Reference in New Issue
Block a user