@@ -43,7 +43,7 @@ class Filter {
43
43
return vals ;
44
44
}
45
45
46
- set_opts < T extends string > ( kv : { [ key in T ] : T } ) {
46
+ opts < T extends string > ( kv : { [ key in T ] : T } ) {
47
47
const [ [ k , v ] ] = Object . entries ( kv ) ;
48
48
if ( ! v ) return ;
49
49
const opts = this . extract_blank_exists ( k , v as string ) ;
@@ -52,7 +52,7 @@ class Filter {
52
52
this . filter . $and . push ( { [ k ] : { $in : opts } } ) ;
53
53
}
54
54
}
55
- set_texts < T extends string > ( kv : { [ key in T ] : T } ) {
55
+ texts < T extends string > ( kv : { [ key in T ] : T } ) {
56
56
const [ [ k , v ] ] = Object . entries ( kv ) ;
57
57
if ( ! v ) return ;
58
58
const texts = this . extract_blank_exists ( k , v as string ) ;
@@ -64,6 +64,17 @@ class Filter {
64
64
} ) ;
65
65
}
66
66
}
67
+ starts_with < T extends string > ( kv : { [ key in T ] : T } ) {
68
+ const [ [ k , v ] ] = Object . entries ( kv ) ;
69
+ if ( ! v ) return ;
70
+ const starts = this . extract_blank_exists ( k , v as string ) ;
71
+ if ( starts . length > 0 ) {
72
+ this . filter . $and ||= [ ] ;
73
+ this . filter . $and . push ( {
74
+ $and : starts . map ( ( t ) => ( { [ k ] : { $regex : `^${ t } ` , $options : "i" } } ) ) ,
75
+ } ) ;
76
+ }
77
+ }
67
78
68
79
get all ( ) {
69
80
return this . filter ;
@@ -94,22 +105,22 @@ export const loader: LoaderFunction = async ({ request }) => {
94
105
} = Object . fromEntries ( url . searchParams . entries ( ) ) ;
95
106
96
107
const filter = new Filter ( ) ;
97
- filter . set_opts ( { asset_code } ) ;
98
- filter . set_opts ( { income_code } ) ;
99
- filter . set_opts ( { website_url } ) ;
100
- filter . set_opts ( { state } ) ;
101
- filter . set_opts ( { country } ) ;
102
- filter . set_opts ( { subsection_code } ) ;
103
- filter . set_opts ( { affilation_code } ) ;
104
- filter . set_opts ( { deductibility_code } ) ;
105
- filter . set_opts ( { deductibility_code_pub78 } ) ;
106
- filter . set_opts ( { ntee_code } ) ;
107
- filter . set_texts ( { classification_code } ) ;
108
- filter . set_texts ( { activity_code } ) ;
109
- filter . set_opts ( { foundation_code } ) ;
110
- filter . set_opts ( { organization_code } ) ;
111
- filter . set_opts ( { exempt_organization_status_code } ) ;
112
- filter . set_opts ( { filing_requirement_code } ) ;
108
+ filter . opts ( { asset_code } ) ;
109
+ filter . opts ( { income_code } ) ;
110
+ filter . opts ( { website_url } ) ;
111
+ filter . opts ( { state } ) ;
112
+ filter . opts ( { country } ) ;
113
+ filter . opts ( { subsection_code } ) ;
114
+ filter . opts ( { affilation_code } ) ;
115
+ filter . opts ( { deductibility_code } ) ;
116
+ filter . opts ( { deductibility_code_pub78 } ) ;
117
+ filter . texts ( { classification_code } ) ;
118
+ filter . texts ( { activity_code } ) ;
119
+ filter . opts ( { foundation_code } ) ;
120
+ filter . opts ( { organization_code } ) ;
121
+ filter . opts ( { exempt_organization_status_code } ) ;
122
+ filter . opts ( { filing_requirement_code } ) ;
123
+ filter . starts_with ( { ntee_code } ) ;
113
124
114
125
const skip = ( + page - 1 ) * + limit ;
115
126
0 commit comments