|
5 | 5 | ResolverResolveParams,
|
6 | 6 | ObjectTypeComposerArgumentConfigMap,
|
7 | 7 | ObjectTypeComposerFieldConfigMap,
|
| 8 | + ProjectionType, |
8 | 9 | } from 'graphql-compose';
|
9 | 10 | import { prepareConnectionType, PageInfoType, ConnectionType } from './types/connectionType';
|
10 | 11 | import { prepareSortType } from './types/sortInputType';
|
@@ -156,12 +157,24 @@ export function prepareConnectionResolver<TSource, TContext>(
|
156 | 157 | countPromise = Promise.resolve(0);
|
157 | 158 | }
|
158 | 159 |
|
159 |
| - if (projection && projection.edges) { |
| 160 | + if (projection?.edges) { |
160 | 161 | // combine top level projection
|
161 |
| - // (maybe somebody add additional fields via resolveParams.projection) |
| 162 | + // (maybe somebody provided additional fields via resolveParams.projection) |
162 | 163 | // and edges.node (record needed fields)
|
163 |
| - const extraProjection = opts.edgeFields ? projection.edges : projection.edges.node; |
164 |
| - findManyParams.projection = { ...projection, ...extraProjection }; |
| 164 | + const { edges, ...projectionWithoutEdges } = projection; |
| 165 | + const extraProjection = {} as ProjectionType; |
| 166 | + if (opts.edgeFields) { |
| 167 | + Object.keys(opts.edgeFields).forEach((extraKey) => { |
| 168 | + if (projection.edges[extraKey]) { |
| 169 | + extraProjection[extraKey] = projection.edges[extraKey]; |
| 170 | + } |
| 171 | + }); |
| 172 | + } |
| 173 | + findManyParams.projection = { |
| 174 | + ...projectionWithoutEdges, |
| 175 | + ...projection?.edges?.node, |
| 176 | + ...extraProjection, |
| 177 | + }; |
165 | 178 | } else {
|
166 | 179 | findManyParams.projection = { ...projection };
|
167 | 180 | }
|
|
0 commit comments