Skip to content

Commit 62a5592

Browse files
authored
Merge pull request #36 from marmelab/fix-metas-filters
[RFR] Fix meta queries filter parameter
2 parents bd188ab + e2b4a3a commit 62a5592

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

src/introspection/getSchemaFromData.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ import { getRelatedType } from '../nameConverter';
6262
* //
6363
* // type Query {
6464
* // Post(id: ID!): Post
65-
* // allPosts(page: Int, perPage: Int, sortField: String, sortOrder: String, filter: String): [Post]
65+
* // allPosts(page: Int, perPage: Int, sortField: String, sortOrder: String, filter: PostFilter): [Post]
6666
* // User(id: ID!): User
67-
* // allUsers(page: Int, perPage: Int, sortField: String, sortOrder: String, filter: String): [User]
67+
* // allUsers(page: Int, perPage: Int, sortField: String, sortOrder: String, filter: UserFilter): [User]
6868
* // }
6969
* //
7070
* // type Mutation {
@@ -116,7 +116,7 @@ export default data => {
116116
args: {
117117
page: { type: GraphQLInt },
118118
perPage: { type: GraphQLInt },
119-
filter: { type: GraphQLString },
119+
filter: { type: filterTypesByName[type.name] },
120120
},
121121
};
122122
return fields;

src/resolver/Query/meta.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,41 @@
1-
export default entityData => (_, { page, perPage = 25, filter = '{}' }) => {
2-
const filters = JSON.parse(filter);
1+
export default entityData => (_, { page, perPage = 25, filter = {} }) => {
32
let items = [...entityData];
43

5-
if (filters.ids) {
6-
items = items.filter(d => filters.ids.includes(d.id.toString()));
4+
if (filter.ids) {
5+
items = items.filter(d => filter.ids.includes(d.id.toString()));
76
} else {
8-
Object.keys(filters).filter(key => key !== 'q').forEach(key => {
7+
Object.keys(filter).filter(key => key !== 'q').forEach(key => {
98
if (key.indexOf('_lte') !== -1) {
109
// less than or equal
1110
const realKey = key.replace(/(_lte)$/, '');
12-
items = items.filter(d => d[realKey] <= filters[key]);
11+
items = items.filter(d => d[realKey] <= filter[key]);
1312
return;
1413
}
1514
if (key.indexOf('_gte') !== -1) {
1615
// less than or equal
1716
const realKey = key.replace(/(_gte)$/, '');
18-
items = items.filter(d => d[realKey] >= filters[key]);
17+
items = items.filter(d => d[realKey] >= filter[key]);
1918
return;
2019
}
2120
if (key.indexOf('_lt') !== -1) {
2221
// less than or equal
2322
const realKey = key.replace(/(_lt)$/, '');
24-
items = items.filter(d => d[realKey] < filters[key]);
23+
items = items.filter(d => d[realKey] < filter[key]);
2524
return;
2625
}
2726
if (key.indexOf('_gt') !== -1) {
2827
// less than or equal
2928
const realKey = key.replace(/(_gt)$/, '');
30-
items = items.filter(d => d[realKey] > filters[key]);
29+
items = items.filter(d => d[realKey] > filter[key]);
3130
return;
3231
}
3332

34-
items = items.filter(d => d[key] == filters[key]);
33+
items = items.filter(d => d[key] == filter[key]);
3534
});
3635

37-
if (filters.q) {
36+
if (filter.q) {
3837
items = items.filter(d =>
39-
Object.keys(d).some(key =>
40-
d[key].toString().includes(filters.q)
41-
)
38+
Object.keys(d).some(key => d[key].toString().includes(filter.q))
4239
);
4340
}
4441
}

0 commit comments

Comments
 (0)