From 52b1cb8cfac8afc8cc7dd886f14a4949e3a0efa8 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 23 Nov 2022 17:41:09 +0800 Subject: [PATCH] Add type filter --- packages/rule-handler/src/index.ts | 1 + packages/rule-handler/src/rule.ts | 14 ++++++++++---- .../rule-handler/src/search_filter/type_filter.ts | 12 ++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 packages/rule-handler/src/search_filter/type_filter.ts diff --git a/packages/rule-handler/src/index.ts b/packages/rule-handler/src/index.ts index 316861c24..506b5c63e 100644 --- a/packages/rule-handler/src/index.ts +++ b/packages/rule-handler/src/index.ts @@ -26,6 +26,7 @@ export interface PubSubData { image: string content: string readingProgressPercent: number + pageType: string } enum EntityType { diff --git a/packages/rule-handler/src/rule.ts b/packages/rule-handler/src/rule.ts index f38e99a5c..26fa90e4a 100644 --- a/packages/rule-handler/src/rule.ts +++ b/packages/rule-handler/src/rule.ts @@ -42,7 +42,7 @@ const parseSearchFilter = (filter: string): SearchFilter[] => { } const parsed = parse(searchFilter, { - keywords: ['subscription', 'content', 'is'], + keywords: ['subscription', 'content', 'is', 'type'], tokenize: true, }) if (parsed.offsets) { @@ -51,15 +51,21 @@ const parseSearchFilter = (filter: string): SearchFilter[] => { .map((offset) => offset as SearchParserKeyWordOffset) for (const keyword of keywords) { + if (!keyword.value) { + continue + } switch (keyword.keyword) { case 'subscription': - keyword.value && result.push(new SubscriptionFilter(keyword.value)) + result.push(new SubscriptionFilter(keyword.value)) break case 'content': - keyword.value && result.push(new ContentFilter(keyword.value)) + result.push(new ContentFilter(keyword.value)) break case 'is': - keyword.value && result.push(new ReadFilter(keyword.value)) + result.push(new ReadFilter(keyword.value)) + break + case 'type': + result.push(new ReadFilter(keyword.value)) break } } diff --git a/packages/rule-handler/src/search_filter/type_filter.ts b/packages/rule-handler/src/search_filter/type_filter.ts new file mode 100644 index 000000000..5fac9b48d --- /dev/null +++ b/packages/rule-handler/src/search_filter/type_filter.ts @@ -0,0 +1,12 @@ +import { SearchFilter } from './index' +import { PubSubData } from '../index' + +export class TypeFilter extends SearchFilter { + public isValid(data: PubSubData): boolean { + if (!data.pageType) { + return false + } + + return this.query === '*' || data.pageType === this.query + } +}