Files
notesnook/packages/core/api/lookup.js

63 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-03-09 12:39:49 +05:00
import fuzzysearch from "fuzzysearch";
2020-11-16 15:54:16 +05:00
import { getContentFromData } from "../content-types";
2020-03-09 12:39:49 +05:00
var tfun = require("transfun/transfun.js").tfun;
if (!tfun) {
tfun = global.tfun;
}
export default class Lookup {
2020-03-19 12:38:33 +05:00
/**
*
* @param {import('./index').default} db
2020-03-19 12:38:33 +05:00
*/
constructor(db) {
this._db = db;
}
async notes(notes, query) {
const deltas = await this._db.content.multi(
notes.map((note) => note.contentId)
);
const results = [];
notes.forEach((note) => {
const title = note.title;
if (!note.locked) {
let content = deltas.find((delta) => delta.id === note.contentId);
content = getContentFromData(content.type, content.data);
if (fzs(query, title) || content.search(query)) results.push(note);
} else {
if (fzs(query, title)) results.push(note);
}
});
return results;
2020-03-09 12:39:49 +05:00
}
notebooks(array, query) {
return tfun.filter(
(nb) =>
fzs(query, nb.title + " " + nb.description) ||
nb.topics.some((topic) => fuzzysearch(query, topic.title))
)(array);
2020-03-09 12:39:49 +05:00
}
topics(array, query) {
return this._byTitle(array, query);
}
tags(array, query) {
return this._byTitle(array, query);
}
trash(array, query) {
return this._byTitle(array, query);
}
_byTitle(array, query) {
return tfun.filter((item) => fzs(query, item.title))(array);
2020-03-09 12:39:49 +05:00
}
}
function fzs(query, text) {
return fuzzysearch(query.toLowerCase(), text.toLowerCase());
}