import fuzzysearch from "fuzzysearch"; import { getContentFromData } from "../content-types"; export default class Lookup { /** * * @param {import('./index').default} db */ constructor(db) { this._db = db; } async notes(notes, query) { const contents = await this._db.content.multi( notes.map((note) => note.contentId) ); const results = []; notes.forEach((note) => { const title = note.title; if (!note.locked) { let content = contents.find((content) => content.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; } notebooks(array, query) { return array.filter( (nb) => fzs(query, nb.title + " " + nb.description) || nb.topics.some((topic) => fuzzysearch(query, topic.title)) ); } 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 array.filter((item) => fzs(query, item.title)); } } function fzs(query, text) { return fuzzysearch(query.toLowerCase(), text.toLowerCase()); }