Skip to content

Commit bb14e7d

Browse files
committed
Fix date filters handling
1 parent 2d7d7d8 commit bb14e7d

File tree

2 files changed

+40
-29
lines changed

2 files changed

+40
-29
lines changed

src/introspection/getFilterTypesFromData.spec.ts

+15
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ const data = {
99
views: 254,
1010
user_id: 123,
1111
published: true,
12+
published_at: '2021-01-01T00:00:00.000Z',
1213
},
1314
{
1415
id: 2,
1516
title: 'Sic Dolor amet',
1617
views: 65,
1718
user_id: 456,
1819
published: true,
20+
published_at: '2021-01-01T00:00:00.000Z',
1921
},
2022
],
2123
users: [
@@ -39,6 +41,8 @@ const PostType = new GraphQLObjectType({
3941
title: { type: GraphQLString },
4042
views: { type: GraphQLInt },
4143
user_id: { type: GraphQLID },
44+
published: { type: GraphQLBoolean },
45+
published_at: { type: GraphQLScalarType },
4246
},
4347
});
4448
const UsersType = new GraphQLObjectType({
@@ -66,6 +70,8 @@ test('creates one filter field per entity field', () => {
6670
expect(PostFilterFields.title.type.toString()).toEqual('String');
6771
expect(PostFilterFields.views.type.toString()).toEqual('Int');
6872
expect(PostFilterFields.user_id.type.toString()).toEqual('ID');
73+
expect(PostFilterFields.published.type.toString()).toEqual('Boolean');
74+
expect(PostFilterFields.published_at.type.toString()).toEqual('Date');
6975
const CommentFilterFields = filterTypes.User.getFields();
7076
expect(CommentFilterFields.id.type.toString()).toEqual('ID');
7177
expect(CommentFilterFields.name.type.toString()).toEqual('String');
@@ -88,6 +94,15 @@ test('creates 4 fields for number field for range filters', () => {
8894
expect(PostFilterFields.views_gte.type.toString()).toEqual('Int');
8995
});
9096

97+
test('creates 4 fields for dates fields', () => {
98+
const filterTypes = getFilterTypesFromData(data);
99+
const PostFilterFields = filterTypes.Post.getFields();
100+
expect(PostFilterFields.published_at_lt.type.toString()).toEqual('Date');
101+
expect(PostFilterFields.published_at_lte.type.toString()).toEqual('Date');
102+
expect(PostFilterFields.published_at_gt.type.toString()).toEqual('Date');
103+
expect(PostFilterFields.published_at_gte.type.toString()).toEqual('Date');
104+
});
105+
91106
test('does not create comparison fields for fields that do not support it', () => {
92107
const filterTypes = getFilterTypesFromData(data);
93108
const PostFilterFields = filterTypes.Post.getFields();

src/introspection/getFilterTypesFromData.ts

+25-29
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,33 @@ import type { Data, Entity } from '../types';
1717

1818
const getRangeFiltersFromEntities = (entities: Entity[]) => {
1919
const fieldValues = getValuesFromEntities(entities);
20-
return Object.keys(fieldValues).reduce(
21-
(fields, fieldName) => {
22-
const fieldType = getTypeFromValues(
23-
fieldName,
24-
fieldValues[fieldName],
25-
false,
26-
);
20+
return Object.keys(fieldValues).reduce((fields, fieldName) => {
21+
const fieldType = getTypeFromValues(
22+
fieldName,
23+
fieldValues[fieldName],
24+
false
25+
);
2726

28-
if (isListType(fieldType)) {
29-
return fields;
30-
}
31-
if (
32-
fieldType === GraphQLInt ||
33-
fieldType === GraphQLFloat ||
34-
fieldType === GraphQLString ||
35-
// @ts-ignore
36-
fieldType === GraphQLDate
37-
) {
38-
fields[`${fieldName}_lt`] = { type: fieldType };
39-
fields[`${fieldName}_lte`] = { type: fieldType };
40-
fields[`${fieldName}_gt`] = { type: fieldType };
41-
fields[`${fieldName}_gte`] = { type: fieldType };
42-
}
43-
44-
if (fieldType !== GraphQLBoolean) {
45-
fields[`${fieldName}_neq`] = { type: fieldType };
46-
}
27+
if (isListType(fieldType)) {
4728
return fields;
48-
},
49-
{} as Record<string, any>,
50-
);
29+
}
30+
if (
31+
fieldType === GraphQLInt ||
32+
fieldType === GraphQLFloat ||
33+
fieldType === GraphQLString ||
34+
fieldType.name === GraphQLDate
35+
) {
36+
fields[`${fieldName}_lt`] = { type: fieldType };
37+
fields[`${fieldName}_lte`] = { type: fieldType };
38+
fields[`${fieldName}_gt`] = { type: fieldType };
39+
fields[`${fieldName}_gte`] = { type: fieldType };
40+
}
41+
42+
if (fieldType !== GraphQLBoolean) {
43+
fields[`${fieldName}_neq`] = { type: fieldType };
44+
}
45+
return fields;
46+
}, {} as Record<string, any>);
5147
};
5248

5349
/**

0 commit comments

Comments
 (0)