Skip to content

Commit 4b99564

Browse files
committed
fix(filterHelper): if filter type already exists in schema then it will be reused
relates #288
1 parent 1b13d4e commit 4b99564

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

src/resolvers/helpers/filter.ts

+19-12
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
ObjectTypeComposer,
55
InterfaceTypeComposer,
66
ObjectTypeComposerArgumentConfigMap,
7+
InputTypeComposer,
78
} from 'graphql-compose';
89
import type { Model, Document } from 'mongoose';
910
import { isObject, toMongoFilterDottedObject, getIndexedFieldNamesForGraphQL } from '../../utils';
@@ -102,24 +103,30 @@ export function filterHelperArgs<TDoc extends Document = any>(
102103

103104
const { prefix, suffix } = opts;
104105
const filterTypeName: string = `${prefix}${typeComposer.getTypeName()}${suffix}`;
105-
const itc = typeComposer.getInputTypeComposer().clone(filterTypeName);
106106

107-
makeFieldsRecursiveNullable(itc, { prefix, suffix });
107+
let itc;
108+
if (typeComposer.schemaComposer.hasInstance(filterTypeName, InputTypeComposer)) {
109+
itc = typeComposer.schemaComposer.getITC(filterTypeName);
110+
} else {
111+
itc = typeComposer.getInputTypeComposer().clone(filterTypeName);
108112

109-
itc.removeField(removeFields);
113+
makeFieldsRecursiveNullable(itc, { prefix, suffix });
110114

111-
if (opts.requiredFields) {
112-
itc.makeFieldNonNull(opts.requiredFields);
113-
}
115+
itc.removeField(removeFields);
114116

115-
if (itc.getFieldNames().length === 0) {
116-
return {} as any;
117-
}
117+
if (opts.requiredFields) {
118+
itc.makeFieldNonNull(opts.requiredFields);
119+
}
118120

119-
if (!opts.baseTypeName) {
120-
opts.baseTypeName = typeComposer.getTypeName();
121+
if (itc.getFieldNames().length === 0) {
122+
return {} as any;
123+
}
124+
125+
if (!opts.baseTypeName) {
126+
opts.baseTypeName = typeComposer.getTypeName();
127+
}
128+
addFilterOperators(itc, model, opts);
121129
}
122-
addFilterOperators(itc, model, opts);
123130

124131
return {
125132
filter: {

0 commit comments

Comments
 (0)