Improve search a bit
This commit is contained in:
parent
b7cb6f69e7
commit
3b06e741bd
|
@ -507,8 +507,11 @@ router.get("/search", async (req, res) => {
|
||||||
|
|
||||||
const query = req.query.query;
|
const query = req.query.query;
|
||||||
|
|
||||||
const people = await queries.searchPeople(ssbServer, query);
|
let people = [];
|
||||||
metrics.searchResults.observe(people.length);
|
if (query.length >= 3) {
|
||||||
|
people = await queries.searchPeople(ssbServer, query);
|
||||||
|
metrics.searchResults.observe(people.length);
|
||||||
|
}
|
||||||
|
|
||||||
res.render("search", { people, query });
|
res.render("search", { people, query });
|
||||||
});
|
});
|
||||||
|
|
|
@ -191,6 +191,17 @@ const getSecretMessages = async (ssbServer, profile) => {
|
||||||
const searchPeople = async (ssbServer, search) => {
|
const searchPeople = async (ssbServer, search) => {
|
||||||
debugPeople("Fetching");
|
debugPeople("Fetching");
|
||||||
|
|
||||||
|
// https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
|
||||||
|
const normalizedSearch = search
|
||||||
|
.normalize("NFD")
|
||||||
|
.replace(/[\u0300-\u036f]/g, "");
|
||||||
|
const safelyEscapedSearch = normalizedSearch.replace(
|
||||||
|
/[.*+?^${}()|[\]\\]/g,
|
||||||
|
"\\$&"
|
||||||
|
);
|
||||||
|
const loosenSpacesSearch = safelyEscapedSearch.replace(" ", ".*");
|
||||||
|
const searchRegex = new RegExp(`.*${loosenSpacesSearch}.*`, "i");
|
||||||
|
|
||||||
const people = await promisePull(
|
const people = await promisePull(
|
||||||
ssbServer.query.read({
|
ssbServer.query.read({
|
||||||
reverse: true,
|
reverse: true,
|
||||||
|
@ -208,12 +219,12 @@ const searchPeople = async (ssbServer, search) => {
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
pull.filter((msg) => {
|
pull.filter((msg) => {
|
||||||
return (
|
const normalizedName = msg.value.content.name
|
||||||
msg.value.content &&
|
.normalize("NFD")
|
||||||
msg.value.author == msg.value.content.about &&
|
.replace(/[\u0300-\u036f]/g, "");
|
||||||
msg.value.content.name.includes(search)
|
return msg.value.content && searchRegex.exec(normalizedName);
|
||||||
);
|
}),
|
||||||
})
|
paramap(mapProfiles(ssbServer))
|
||||||
);
|
);
|
||||||
|
|
||||||
debugPeople("Done");
|
debugPeople("Done");
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
<%- include('_header') %>
|
<%- include('_header') %>
|
||||||
|
|
||||||
<h2>Results for "<%= query %>"</h2>
|
<% if (query.length < 3) { %>
|
||||||
|
<h2>You need to search for 3 or more characters</h2>
|
||||||
|
<% } else { %>
|
||||||
|
<h2>Results for "<%= query %>"</h2>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<% people.map(person => { %>
|
<% people.map(person => { %>
|
||||||
<li>
|
<a class="link-block" href="<%= profileUrl(person.author) %>">
|
||||||
<a href="<%= profileUrl(person.author) %>">
|
<img class="link-profile-pic" src="<%= profileImageUrl(person.authorProfile) %>" />
|
||||||
<%= person.content.name %> (<%= person.author.slice(0, 8) %>)
|
<div><%= person.content.name %></div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
|
||||||
<% }) %>
|
<% }) %>
|
||||||
</ul>
|
<% } %>
|
||||||
|
|
||||||
<%- include('_footer') %>
|
<%- include('_footer') %>
|
Loading…
Reference in New Issue