mirror of
https://github.com/zadam/trilium.git
synced 2025-01-15 19:51:57 +08:00
added IN operator to search, closes #534
This commit is contained in:
parent
a1262aaaf3
commit
1a87190f43
3 changed files with 35 additions and 1 deletions
|
@ -67,7 +67,7 @@ module.exports = function(filters, selectedColumns = 'notes.*') {
|
|||
const params = [];
|
||||
|
||||
for (const filter of filters) {
|
||||
if (['isarchived', 'orderby', 'limit'].includes(filter.name.toLowerCase())) {
|
||||
if (['isarchived', 'in', 'orderby', 'limit'].includes(filter.name.toLowerCase())) {
|
||||
continue; // these are not real filters
|
||||
}
|
||||
|
||||
|
|
|
@ -255,6 +255,25 @@ function isArchived(noteId) {
|
|||
return isNotePathArchived(notePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} noteId
|
||||
* @param {string} ancestorNoteId
|
||||
* @return {boolean} - true if given noteId has ancestorNoteId in any of its paths (even archived)
|
||||
*/
|
||||
function isInAncestor(noteId, ancestorNoteId) {
|
||||
if (ancestorNoteId === noteId) { // special case
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const parentNoteId of childToParent[noteId] || []) {
|
||||
if (isInAncestor(parentNoteId, ancestorNoteId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function getNoteTitleFromPath(notePath) {
|
||||
const pathArr = notePath.split("/");
|
||||
|
||||
|
@ -529,6 +548,7 @@ module.exports = {
|
|||
getNoteTitleFromPath,
|
||||
isAvailable,
|
||||
isArchived,
|
||||
isInAncestor,
|
||||
load,
|
||||
findSimilarNotes
|
||||
};
|
|
@ -35,6 +35,20 @@ async function searchForNoteIds(searchString) {
|
|||
}
|
||||
}
|
||||
|
||||
const isInFilter = filters.find(filter => filter.name.toLowerCase() === 'in');
|
||||
|
||||
if (isInFilter) {
|
||||
if (isInFilter.operator === '=') {
|
||||
noteIds = noteIds.filter(noteId => noteCacheService.isInAncestor(noteId, isInFilter.value));
|
||||
}
|
||||
else if (isInFilter.operator === '!=') {
|
||||
noteIds = noteIds.filter(noteId => !noteCacheService.isInAncestor(noteId, isInFilter.value));
|
||||
}
|
||||
else {
|
||||
throw new Error(`Unrecognized isIn operator ${isInFilter.operator}`);
|
||||
}
|
||||
}
|
||||
|
||||
const limitFilter = filters.find(filter => filter.name.toLowerCase() === 'limit');
|
||||
|
||||
if (limitFilter) {
|
||||
|
|
Loading…
Reference in a new issue