@@ -22,43 +22,51 @@ class DataviewProxy {
2222 }
2323 }
2424
25- filter ( condition : FilterCondition [ ] , p : Record < string , Literal > ) : boolean {
25+ filter ( condition : FilterCondition [ ] , p : Record < string , Literal > , ddbbConfig : LocalSettings ) : boolean {
2626 if ( ! condition || condition . length === 0 ) return true ;
2727 for ( const c of condition ) {
28- const value = p [ c . field ] ;
29- if ( value !== undefined ) {
30- const wrapped = this . wrapLiteral ( value ) ;
31- switch ( getOperatorFilterValue ( c . operator ) ) {
32- case OperatorFilter . EQUAL :
33- if ( wrapped . value !== c . value ) return false ;
34- break ;
35- case OperatorFilter . NOT_EQUAL :
36- if ( wrapped . value === c . value ) return false ;
37- break ;
38- case OperatorFilter . GREATER_THAN :
39- if ( wrapped . value <= c . value ) return false ;
40- break ;
41- case OperatorFilter . LESS_THAN :
42- if ( wrapped . value >= c . value ) return false ;
43- break ;
44- case OperatorFilter . GREATER_THAN_OR_EQUAL :
45- if ( wrapped . value < c . value ) return false ;
46- break ;
47- case OperatorFilter . LESS_THAN_OR_EQUAL :
48- if ( wrapped . value > c . value ) return false ;
49- break ;
50- case OperatorFilter . CONTAINS :
51- if ( wrapped . type === "string" && ! wrapped . value . includes ( c . value ) ) return false ;
52- break ;
53- case OperatorFilter . STARTS_WITH :
54- if ( wrapped . type === "string" && ! wrapped . value . startsWith ( c . value ) ) return false ;
55- break ;
56- case OperatorFilter . ENDS_WITH :
57- if ( wrapped . type === "string" && ! wrapped . value . endsWith ( c . value ) ) return false ;
58- break ;
59- default :
60- throw new Error ( `Unknown operator ${ c . operator } ` ) ;
61- }
28+ const filterableValue = this . parseLiteral ( p [ c . field ] , InputType . MARKDOWN , ddbbConfig ) ;
29+ switch ( getOperatorFilterValue ( c . operator ) ) {
30+ case OperatorFilter . IS_EMPTY [ 1 ] :
31+ if ( filterableValue !== '' ) {
32+ return false ;
33+ }
34+ break ;
35+ case OperatorFilter . IS_NOT_EMPTY [ 1 ] :
36+ if ( filterableValue === '' ) {
37+ return false ;
38+ }
39+ break ;
40+ case OperatorFilter . EQUAL [ 1 ] :
41+ if ( filterableValue !== c . value ) return false ;
42+ break ;
43+ case OperatorFilter . NOT_EQUAL [ 1 ] :
44+ if ( filterableValue === c . value ) return false ;
45+ break ;
46+ case OperatorFilter . GREATER_THAN [ 1 ] :
47+ if ( filterableValue <= c . value ) return false ;
48+ break ;
49+ case OperatorFilter . LESS_THAN [ 1 ] :
50+ if ( filterableValue >= c . value ) return false ;
51+ break ;
52+ case OperatorFilter . GREATER_THAN_OR_EQUAL [ 1 ] :
53+ if ( filterableValue < c . value ) return false ;
54+ break ;
55+ case OperatorFilter . LESS_THAN_OR_EQUAL [ 1 ] :
56+ if ( filterableValue > c . value ) return false ;
57+ break ;
58+ case OperatorFilter . CONTAINS [ 1 ] :
59+ if ( ! filterableValue . toString ( ) . includes ( c . value ) ) return false ;
60+ break ;
61+ case OperatorFilter . STARTS_WITH [ 1 ] :
62+ if ( ! filterableValue . toString ( ) . startsWith ( c . value ) ) return false ;
63+ break ;
64+ case OperatorFilter . ENDS_WITH [ 1 ] :
65+ if ( ! filterableValue . toString ( ) . endsWith ( c . value ) ) return false ;
66+ break ;
67+ default :
68+ throw new Error ( `Unknown operator ${ c . operator } ` ) ;
69+
6270 }
6371 }
6472 return true ;
0 commit comments