Skip to content

Commit 8c768a4

Browse files
authored
Merge pull request #215 from devforth/enhance-filter-methods
feat: update Filters methods to accept variable arguments for improve…
2 parents cd0a8a9 + 8eacc8f commit 8c768a4

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

adminforth/documentation/blog/2025-04-10-how-to-translate-dynamic-strings/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,13 +234,13 @@ You can mitigate this by adding couple of lines into edit hook:
234234
//diff-add
235235
const oldStrings = await adminforth.resource('translations').list([
236236
//diff-add
237-
Filters.AND([
237+
Filters.AND(
238238
//diff-add
239239
Filters.EQ('category', 'seo_page_config'),
240240
//diff-add
241241
Filters.IN('en_string', Object.keys(updates).map((key: string) => oldRecord[key]))
242242
//diff-add
243-
])
243+
)
244244
//diff-add
245245
]);
246246
//diff-add

adminforth/documentation/docs/tutorial/03-Customization/03-virtualColumns.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ hooks: {
9999
// replace apartment_type filter with complex one
100100
if (filter.field === 'apartment_type') {
101101
if (filter.value === 'luxury') {
102-
return Filters.OR([Filters.GTE('square_meter', 80), Filters.GTE('price', 100000)]);
102+
return Filters.OR(Filters.GTE('square_meter', 80), Filters.GTE('price', 100000));
103103
}
104104
105105
// filter for "base" apartment as default
106-
return Filters.AND([Filters.LT('square_meter', 80), Filters.LT('price', 100000)]);
106+
return Filters.AND(Filters.LT('square_meter', 80), Filters.LT('price', 100000));
107107
}
108108
109109
return filter;

adminforth/documentation/docs/tutorial/03-Customization/11-dataApi.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const admin = new AdminForth({
2525
});
2626

2727
// get the resource object
28-
await admin.resource('adminuser').get([Filters.EQ('id', '1234')]);
28+
await admin.resource('adminuser').get(Filters.EQ('id', '1234'));
2929
```
3030

3131
Here we will show you how to use the Data API with simple examples.
@@ -37,7 +37,7 @@ Signature:
3737

3838
```ts
3939
.get(
40-
filters: [],
40+
filters: <AdminForthFilterObject>,
4141
): Promise<any>
4242
```
4343

@@ -62,7 +62,8 @@ Get user with name 'John' and role not 'SuperAdmin'
6262

6363
```ts
6464
const user = await admin.resource('adminuser').get(
65-
[Filters.EQ('name', 'John'), Filters.NEQ('role', 'SuperAdmin')]
65+
Filters.EQ('name', 'John'),
66+
Filters.NEQ('role', 'SuperAdmin')
6667
);
6768
```
6869

@@ -73,7 +74,7 @@ Signature:
7374

7475
```ts
7576
.list(
76-
filters: [],
77+
filters: <AdminForthFilterObject>,
7778
limit: number | null
7879
offset: number | null
7980
sort: []
@@ -112,13 +113,13 @@ Get all users that have gmail address AND the ones created not in 2024
112113

113114
```ts
114115
const users = await admin.resource('adminuser').list(
115-
Filters.AND([
116+
Filters.AND(
116117
Filters.LIKE('email', '@gmail.com'),
117-
Filters.OR([
118+
Filters.OR(
118119
Filters.LT('createdAt', '2024-01-01T00:00:00.000Z'),
119120
Filters.GTE('createdAt', '2025-01-01T00:00:00.000Z'),
120-
]),
121-
])
121+
),
122+
)
122123
);
123124
```
124125

@@ -150,16 +151,16 @@ Signature:
150151

151152
```ts
152153
.count(
153-
filters: [],
154-
): Promise<number>
154+
filters: <AdminForthFilterObject>,
155+
): Promise<any>
155156
```
156157

157158
Returns number of items in database which match the filters.
158159

159160
Count number of schools with rating above 4:
160161

161162
```ts
162-
const schoolsCount = await admin.resource('schools').count([Filters.GT('rating', 4)]);
163+
const schoolsCount = await admin.resource('schools').count(Filters.GT('rating', 4));
163164
```
164165

165166
Create data for daily report with number of users signed up daily for last 7 days:

adminforth/types/Back.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,11 +1100,31 @@ export class Filters {
11001100
static LIKE(field: string, value: any): IAdminForthSingleFilter {
11011101
return { field, operator: AdminForthFilterOperators.LIKE, value };
11021102
}
1103-
static AND(subFilters: Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>): IAdminForthAndOrFilter {
1104-
return { operator: AdminForthFilterOperators.AND, subFilters };
1103+
static AND(
1104+
...args: (IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>)[]
1105+
): IAdminForthAndOrFilter {
1106+
const subFilters =
1107+
args.length === 1 && Array.isArray(args[0])
1108+
? args[0]
1109+
: args as Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>;
1110+
1111+
return {
1112+
operator: AdminForthFilterOperators.AND,
1113+
subFilters,
1114+
};
11051115
}
1106-
static OR(subFilters: Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>): IAdminForthAndOrFilter {
1107-
return { operator: AdminForthFilterOperators.OR, subFilters };
1116+
static OR(
1117+
...args: (IAdminForthSingleFilter | IAdminForthAndOrFilter | Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>)[]
1118+
): IAdminForthAndOrFilter {
1119+
const subFilters =
1120+
args.length === 1 && Array.isArray(args[0])
1121+
? args[0]
1122+
: args as Array<IAdminForthSingleFilter | IAdminForthAndOrFilter>;
1123+
1124+
return {
1125+
operator: AdminForthFilterOperators.OR,
1126+
subFilters,
1127+
};
11081128
}
11091129
}
11101130

0 commit comments

Comments
 (0)