add in:subscription and in:library in search scope

This commit is contained in:
Hongbo Wu 2023-07-14 17:07:25 +08:00
parent 1a9df90576
commit e3af3f526c
2 changed files with 51 additions and 0 deletions

View file

@ -148,6 +148,50 @@ const appendInFilter = (builder: ESBuilder, filter: InFilter): ESBuilder => {
gte: 'now-14d',
},
})
case InFilter.LIBRARY:
return builder.query('nested', {
path: 'labels',
query: {
bool: {
should: [
{
term: {
'labels.name': 'library',
},
},
{
bool: {
must_not: {
terms: {
'labels.name': ['newsletter', 'rss'],
},
},
should: [],
},
},
],
minimum_should_match: 1,
},
},
})
case InFilter.SUBSCRIPTION:
return builder
.andQuery('nested', {
path: 'labels',
query: {
terms: {
'labels.name': ['newsletter', 'rss'],
},
},
})
.notQuery('nested', {
path: 'labels',
query: {
term: {
'labels.name': 'library',
},
},
})
}
return builder
}

View file

@ -22,6 +22,8 @@ export enum InFilter {
INBOX,
ARCHIVE,
TRASH,
SUBSCRIPTION,
LIBRARY,
}
export interface SearchFilter {
@ -123,7 +125,12 @@ const parseInFilter = (
return InFilter.ARCHIVE
case 'TRASH':
return InFilter.TRASH
case 'SUBSCRIPTION':
return InFilter.SUBSCRIPTION
case 'LIBRARY':
return InFilter.LIBRARY
}
return query ? InFilter.ALL : InFilter.INBOX
}