@payloadcms/graphql 3.0.0-canary.95fcd13 → 3.0.0-canary.96477cf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.js +51 -2
- package/dist/bin/index.js +2 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts +2 -2
- package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts.map +1 -1
- package/dist/packages/graphql-query-complexity/QueryComplexity.js +3 -3
- package/dist/packages/graphql-query-complexity/QueryComplexity.js.map +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts.map +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.js +1 -1
- package/dist/packages/graphql-query-complexity/createComplexityRule.js.map +1 -1
- package/dist/resolvers/auth/access.d.ts +1 -2
- package/dist/resolvers/auth/access.d.ts.map +1 -1
- package/dist/resolvers/auth/access.js +2 -3
- package/dist/resolvers/auth/access.js.map +1 -1
- package/dist/resolvers/auth/forgotPassword.d.ts +1 -2
- package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/forgotPassword.js +1 -2
- package/dist/resolvers/auth/forgotPassword.js.map +1 -1
- package/dist/resolvers/auth/init.d.ts +1 -2
- package/dist/resolvers/auth/init.d.ts.map +1 -1
- package/dist/resolvers/auth/init.js +1 -2
- package/dist/resolvers/auth/init.js.map +1 -1
- package/dist/resolvers/auth/login.d.ts +1 -2
- package/dist/resolvers/auth/login.d.ts.map +1 -1
- package/dist/resolvers/auth/login.js +1 -2
- package/dist/resolvers/auth/login.js.map +1 -1
- package/dist/resolvers/auth/logout.d.ts +1 -2
- package/dist/resolvers/auth/logout.d.ts.map +1 -1
- package/dist/resolvers/auth/logout.js +1 -2
- package/dist/resolvers/auth/logout.js.map +1 -1
- package/dist/resolvers/auth/me.d.ts +1 -2
- package/dist/resolvers/auth/me.d.ts.map +1 -1
- package/dist/resolvers/auth/me.js +1 -2
- package/dist/resolvers/auth/me.js.map +1 -1
- package/dist/resolvers/auth/refresh.d.ts +1 -2
- package/dist/resolvers/auth/refresh.d.ts.map +1 -1
- package/dist/resolvers/auth/refresh.js +1 -2
- package/dist/resolvers/auth/refresh.js.map +1 -1
- package/dist/resolvers/auth/resetPassword.d.ts +1 -2
- package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/resetPassword.js +7 -4
- package/dist/resolvers/auth/resetPassword.js.map +1 -1
- package/dist/resolvers/auth/unlock.d.ts +1 -2
- package/dist/resolvers/auth/unlock.d.ts.map +1 -1
- package/dist/resolvers/auth/unlock.js +1 -2
- package/dist/resolvers/auth/unlock.js.map +1 -1
- package/dist/resolvers/auth/verifyEmail.d.ts +1 -2
- package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
- package/dist/resolvers/auth/verifyEmail.js +7 -4
- package/dist/resolvers/auth/verifyEmail.js.map +1 -1
- package/dist/resolvers/collections/create.d.ts +1 -1
- package/dist/resolvers/collections/create.d.ts.map +1 -1
- package/dist/resolvers/collections/create.js +1 -1
- package/dist/resolvers/collections/create.js.map +1 -1
- package/dist/resolvers/collections/delete.d.ts.map +1 -1
- package/dist/resolvers/collections/delete.js +6 -2
- package/dist/resolvers/collections/delete.js.map +1 -1
- package/dist/resolvers/collections/duplicate.d.ts +1 -1
- package/dist/resolvers/collections/duplicate.d.ts.map +1 -1
- package/dist/resolvers/collections/duplicate.js +1 -1
- package/dist/resolvers/collections/duplicate.js.map +1 -1
- package/dist/resolvers/collections/find.d.ts.map +1 -1
- package/dist/resolvers/collections/find.js +6 -2
- package/dist/resolvers/collections/find.js.map +1 -1
- package/dist/resolvers/collections/findByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findByID.js +6 -2
- package/dist/resolvers/collections/findByID.js.map +1 -1
- package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersions.js +6 -2
- package/dist/resolvers/collections/findVersions.js.map +1 -1
- package/dist/resolvers/collections/restoreVersion.d.ts +1 -1
- package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -1
- package/dist/resolvers/collections/restoreVersion.js +1 -1
- package/dist/resolvers/collections/restoreVersion.js.map +1 -1
- package/dist/resolvers/collections/update.d.ts.map +1 -1
- package/dist/resolvers/collections/update.js +6 -2
- package/dist/resolvers/collections/update.js.map +1 -1
- package/dist/resolvers/globals/findOne.d.ts +1 -1
- package/dist/resolvers/globals/findOne.d.ts.map +1 -1
- package/dist/resolvers/globals/findOne.js +7 -3
- package/dist/resolvers/globals/findOne.js.map +1 -1
- package/dist/resolvers/globals/findVersionByID.d.ts +1 -1
- package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -1
- package/dist/resolvers/globals/findVersionByID.js +7 -3
- package/dist/resolvers/globals/findVersionByID.js.map +1 -1
- package/dist/resolvers/globals/findVersions.d.ts +1 -1
- package/dist/resolvers/globals/findVersions.d.ts.map +1 -1
- package/dist/resolvers/globals/findVersions.js +1 -1
- package/dist/resolvers/globals/findVersions.js.map +1 -1
- package/dist/resolvers/globals/index.d.ts +5 -5
- package/dist/resolvers/globals/index.d.ts.map +1 -1
- package/dist/resolvers/globals/index.js +5 -5
- package/dist/resolvers/globals/index.js.map +1 -1
- package/dist/resolvers/globals/restoreVersion.d.ts +1 -1
- package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -1
- package/dist/resolvers/globals/restoreVersion.js +1 -1
- package/dist/resolvers/globals/restoreVersion.js.map +1 -1
- package/dist/resolvers/globals/update.d.ts +1 -1
- package/dist/resolvers/globals/update.d.ts.map +1 -1
- package/dist/resolvers/globals/update.js +7 -3
- package/dist/resolvers/globals/update.js.map +1 -1
- package/dist/schema/buildFallbackLocaleInputType.d.ts +1 -2
- package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -1
- package/dist/schema/buildFallbackLocaleInputType.js +2 -3
- package/dist/schema/buildFallbackLocaleInputType.js.map +1 -1
- package/dist/schema/buildLocaleInputType.d.ts +1 -2
- package/dist/schema/buildLocaleInputType.d.ts.map +1 -1
- package/dist/schema/buildLocaleInputType.js +2 -3
- package/dist/schema/buildLocaleInputType.js.map +1 -1
- package/dist/schema/buildMutationInputType.d.ts.map +1 -1
- package/dist/schema/buildMutationInputType.js +58 -14
- package/dist/schema/buildMutationInputType.js.map +1 -1
- package/dist/schema/buildObjectType.d.ts.map +1 -1
- package/dist/schema/buildObjectType.js +261 -86
- package/dist/schema/buildObjectType.js.map +1 -1
- package/dist/schema/buildPoliciesType.d.ts +1 -1
- package/dist/schema/buildPoliciesType.d.ts.map +1 -1
- package/dist/schema/buildPoliciesType.js +5 -3
- package/dist/schema/buildPoliciesType.js.map +1 -1
- package/dist/schema/buildWhereInputType.d.ts +2 -2
- package/dist/schema/buildWhereInputType.d.ts.map +1 -1
- package/dist/schema/buildWhereInputType.js +3 -4
- package/dist/schema/buildWhereInputType.js.map +1 -1
- package/dist/schema/fieldToWhereInputSchemaMap.d.ts +2 -2
- package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -1
- package/dist/schema/fieldToWhereInputSchemaMap.js +31 -7
- package/dist/schema/fieldToWhereInputSchemaMap.js.map +1 -1
- package/dist/schema/initCollections.d.ts +2 -2
- package/dist/schema/initCollections.d.ts.map +1 -1
- package/dist/schema/initCollections.js +20 -19
- package/dist/schema/initCollections.js.map +1 -1
- package/dist/schema/initGlobals.d.ts +2 -2
- package/dist/schema/initGlobals.d.ts.map +1 -1
- package/dist/schema/initGlobals.js +17 -16
- package/dist/schema/initGlobals.js.map +1 -1
- package/dist/schema/isFieldNullable.d.ts +1 -2
- package/dist/schema/isFieldNullable.d.ts.map +1 -1
- package/dist/schema/isFieldNullable.js +1 -2
- package/dist/schema/isFieldNullable.js.map +1 -1
- package/dist/schema/operators.d.ts +1 -2
- package/dist/schema/operators.d.ts.map +1 -1
- package/dist/schema/operators.js +1 -2
- package/dist/schema/operators.js.map +1 -1
- package/dist/schema/recursivelyBuildNestedPaths.d.ts +2 -2
- package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -1
- package/dist/schema/recursivelyBuildNestedPaths.js +2 -3
- package/dist/schema/recursivelyBuildNestedPaths.js.map +1 -1
- package/dist/schema/withNullableType.d.ts +1 -2
- package/dist/schema/withNullableType.d.ts.map +1 -1
- package/dist/schema/withNullableType.js +1 -2
- package/dist/schema/withNullableType.js.map +1 -1
- package/dist/schema/withOperators.d.ts.map +1 -1
- package/dist/schema/withOperators.js +11 -6
- package/dist/schema/withOperators.js.map +1 -1
- package/dist/utilities/combineParentName.d.ts +1 -2
- package/dist/utilities/combineParentName.d.ts.map +1 -1
- package/dist/utilities/combineParentName.js +2 -3
- package/dist/utilities/combineParentName.js.map +1 -1
- package/dist/utilities/formatName.d.ts +1 -2
- package/dist/utilities/formatName.d.ts.map +1 -1
- package/dist/utilities/formatName.js +1 -2
- package/dist/utilities/formatName.js.map +1 -1
- package/dist/utilities/formatName.spec.js +1 -1
- package/dist/utilities/formatName.spec.js.map +1 -1
- package/dist/utilities/formatOptions.d.ts +1 -2
- package/dist/utilities/formatOptions.d.ts.map +1 -1
- package/dist/utilities/formatOptions.js +2 -3
- package/dist/utilities/formatOptions.js.map +1 -1
- package/package.json +9 -6
- package/dist/utilities/getCheckIfLocaleObject.d.ts +0 -5
- package/dist/utilities/getCheckIfLocaleObject.d.ts.map +0 -1
- package/dist/utilities/getCheckIfLocaleObject.js +0 -3
- package/dist/utilities/getCheckIfLocaleObject.js.map +0 -1
- package/dist/utilities/uppercase.d.ts +0 -3
- package/dist/utilities/uppercase.d.ts.map +0 -1
- package/dist/utilities/uppercase.js +0 -11
- package/dist/utilities/uppercase.js.map +0 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
|
|
2
2
|
import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars';
|
|
3
|
-
import {
|
|
3
|
+
import { combineQueries, createDataloaderCacheKey, MissingEditorProp, toWords } from 'payload';
|
|
4
4
|
import { tabHasName } from 'payload/shared';
|
|
5
5
|
import { GraphQLJSON } from '../packages/graphql-type-json/index.js';
|
|
6
|
-
import combineParentName from '../utilities/combineParentName.js';
|
|
7
|
-
import formatName from '../utilities/formatName.js';
|
|
8
|
-
import formatOptions from '../utilities/formatOptions.js';
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import withNullableType from './withNullableType.js';
|
|
6
|
+
import { combineParentName } from '../utilities/combineParentName.js';
|
|
7
|
+
import { formatName } from '../utilities/formatName.js';
|
|
8
|
+
import { formatOptions } from '../utilities/formatOptions.js';
|
|
9
|
+
import { isFieldNullable } from './isFieldNullable.js';
|
|
10
|
+
import { withNullableType } from './withNullableType.js';
|
|
12
11
|
export function buildObjectType({ name, baseFields = {}, config, fields, forceNullable, graphqlResult, parentName }) {
|
|
13
12
|
const fieldToSchemaMap = {
|
|
14
13
|
array: (objectTypeConfig, field)=>{
|
|
@@ -94,7 +93,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
94
93
|
}),
|
|
95
94
|
collapsible: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField)=>{
|
|
96
95
|
const addSubField = fieldToSchemaMap[subField.type];
|
|
97
|
-
if (addSubField)
|
|
96
|
+
if (addSubField) {
|
|
97
|
+
return addSubField(objectTypeConfigWithCollapsibleFields, subField);
|
|
98
|
+
}
|
|
98
99
|
return objectTypeConfigWithCollapsibleFields;
|
|
99
100
|
}, objectTypeConfig),
|
|
100
101
|
date: (objectTypeConfig, field)=>({
|
|
@@ -130,10 +131,71 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
130
131
|
return {
|
|
131
132
|
...objectTypeConfig,
|
|
132
133
|
[field.name]: {
|
|
133
|
-
type: graphqlResult.types.groupTypes[interfaceName]
|
|
134
|
+
type: graphqlResult.types.groupTypes[interfaceName],
|
|
135
|
+
resolve: (parent, args, context)=>{
|
|
136
|
+
return {
|
|
137
|
+
...parent[field.name],
|
|
138
|
+
_id: parent._id ?? parent.id
|
|
139
|
+
};
|
|
140
|
+
}
|
|
134
141
|
}
|
|
135
142
|
};
|
|
136
143
|
},
|
|
144
|
+
join: (objectTypeConfig, field)=>{
|
|
145
|
+
const joinName = combineParentName(parentName, toWords(field.name, true));
|
|
146
|
+
const joinType = {
|
|
147
|
+
type: new GraphQLObjectType({
|
|
148
|
+
name: joinName,
|
|
149
|
+
fields: {
|
|
150
|
+
docs: {
|
|
151
|
+
type: new GraphQLList(graphqlResult.collections[field.collection].graphQL.type)
|
|
152
|
+
},
|
|
153
|
+
hasNextPage: {
|
|
154
|
+
type: GraphQLBoolean
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}),
|
|
158
|
+
args: {
|
|
159
|
+
limit: {
|
|
160
|
+
type: GraphQLInt
|
|
161
|
+
},
|
|
162
|
+
sort: {
|
|
163
|
+
type: GraphQLString
|
|
164
|
+
},
|
|
165
|
+
where: {
|
|
166
|
+
type: graphqlResult.collections[field.collection].graphQL.whereInputType
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
extensions: {
|
|
170
|
+
complexity: 10
|
|
171
|
+
},
|
|
172
|
+
async resolve (parent, args, context) {
|
|
173
|
+
const { collection } = field;
|
|
174
|
+
const { limit, sort, where } = args;
|
|
175
|
+
const { req } = context;
|
|
176
|
+
const fullWhere = combineQueries(where, {
|
|
177
|
+
[field.on]: {
|
|
178
|
+
equals: parent._id ?? parent.id
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
const results = await req.payload.find({
|
|
182
|
+
collection,
|
|
183
|
+
depth: 0,
|
|
184
|
+
fallbackLocale: req.fallbackLocale,
|
|
185
|
+
limit,
|
|
186
|
+
locale: req.locale,
|
|
187
|
+
req,
|
|
188
|
+
sort,
|
|
189
|
+
where: fullWhere
|
|
190
|
+
});
|
|
191
|
+
return results;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
return {
|
|
195
|
+
...objectTypeConfig,
|
|
196
|
+
[field.name]: joinType
|
|
197
|
+
};
|
|
198
|
+
},
|
|
137
199
|
json: (objectTypeConfig, field)=>({
|
|
138
200
|
...objectTypeConfig,
|
|
139
201
|
[field.name]: {
|
|
@@ -171,17 +233,19 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
171
233
|
const relationshipName = combineParentName(parentName, toWords(field.name, true));
|
|
172
234
|
let type;
|
|
173
235
|
let relationToType = null;
|
|
236
|
+
const graphQLCollections = config.collections.filter((collectionConfig)=>collectionConfig.graphQL !== false);
|
|
174
237
|
if (Array.isArray(relationTo)) {
|
|
175
238
|
relationToType = new GraphQLEnumType({
|
|
176
239
|
name: `${relationshipName}_RelationTo`,
|
|
177
|
-
values: relationTo.reduce((relations, relation)=>({
|
|
240
|
+
values: relationTo.filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).reduce((relations, relation)=>({
|
|
178
241
|
...relations,
|
|
179
242
|
[formatName(relation)]: {
|
|
180
243
|
value: relation
|
|
181
244
|
}
|
|
182
245
|
}), {})
|
|
183
246
|
});
|
|
184
|
-
|
|
247
|
+
// Only pass collections that are GraphQL enabled
|
|
248
|
+
const types = relationTo.filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).map((relation)=>graphqlResult.collections[relation]?.graphQL.type);
|
|
185
249
|
type = new GraphQLObjectType({
|
|
186
250
|
name: `${relationshipName}_Relationship`,
|
|
187
251
|
fields: {
|
|
@@ -191,7 +255,7 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
191
255
|
value: {
|
|
192
256
|
type: new GraphQLUnionType({
|
|
193
257
|
name: relationshipName,
|
|
194
|
-
resolveType (data
|
|
258
|
+
resolveType (data) {
|
|
195
259
|
return graphqlResult.collections[data.collection].graphQL.type.name;
|
|
196
260
|
},
|
|
197
261
|
types
|
|
@@ -210,7 +274,7 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
210
274
|
const relationshipArgs = {};
|
|
211
275
|
const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [
|
|
212
276
|
relationTo
|
|
213
|
-
]).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
|
|
277
|
+
]).filter((relation)=>graphQLCollections.some((collection)=>collection.slug === relation)).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
|
|
214
278
|
if (relationsUseDrafts) {
|
|
215
279
|
relationshipArgs.draft = {
|
|
216
280
|
type: GraphQLBoolean
|
|
@@ -242,33 +306,35 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
242
306
|
const createPopulationPromise = async (relatedDoc, i)=>{
|
|
243
307
|
let id = relatedDoc;
|
|
244
308
|
let collectionSlug = field.relationTo;
|
|
245
|
-
if (
|
|
246
|
-
collectionSlug = relatedDoc.relationTo;
|
|
247
|
-
id = relatedDoc.value;
|
|
248
|
-
}
|
|
249
|
-
const result = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
|
|
250
|
-
collectionSlug: collectionSlug,
|
|
251
|
-
currentDepth: 0,
|
|
252
|
-
depth: 0,
|
|
253
|
-
docID: id,
|
|
254
|
-
draft,
|
|
255
|
-
fallbackLocale,
|
|
256
|
-
locale,
|
|
257
|
-
overrideAccess: false,
|
|
258
|
-
showHiddenFields: false,
|
|
259
|
-
transactionID: context.req.transactionID
|
|
260
|
-
}));
|
|
261
|
-
if (result) {
|
|
309
|
+
if (graphQLCollections.some((collection)=>collection.slug === collectionSlug)) {
|
|
262
310
|
if (isRelatedToManyCollections) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
311
|
+
collectionSlug = relatedDoc.relationTo;
|
|
312
|
+
id = relatedDoc.value;
|
|
313
|
+
}
|
|
314
|
+
const result = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
|
|
315
|
+
collectionSlug: collectionSlug,
|
|
316
|
+
currentDepth: 0,
|
|
317
|
+
depth: 0,
|
|
318
|
+
docID: id,
|
|
319
|
+
draft,
|
|
320
|
+
fallbackLocale,
|
|
321
|
+
locale,
|
|
322
|
+
overrideAccess: false,
|
|
323
|
+
showHiddenFields: false,
|
|
324
|
+
transactionID: context.req.transactionID
|
|
325
|
+
}));
|
|
326
|
+
if (result) {
|
|
327
|
+
if (isRelatedToManyCollections) {
|
|
328
|
+
results[i] = {
|
|
329
|
+
relationTo: collectionSlug,
|
|
330
|
+
value: {
|
|
331
|
+
...result,
|
|
332
|
+
collection: collectionSlug
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
} else {
|
|
336
|
+
results[i] = result;
|
|
337
|
+
}
|
|
272
338
|
}
|
|
273
339
|
}
|
|
274
340
|
};
|
|
@@ -286,29 +352,31 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
286
352
|
relatedCollectionSlug = value.relationTo;
|
|
287
353
|
}
|
|
288
354
|
if (id) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
if (
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
355
|
+
if (graphQLCollections.some((collection)=>collection.slug === relatedCollectionSlug)) {
|
|
356
|
+
const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
|
|
357
|
+
collectionSlug: relatedCollectionSlug,
|
|
358
|
+
currentDepth: 0,
|
|
359
|
+
depth: 0,
|
|
360
|
+
docID: id,
|
|
361
|
+
draft,
|
|
362
|
+
fallbackLocale,
|
|
363
|
+
locale,
|
|
364
|
+
overrideAccess: false,
|
|
365
|
+
showHiddenFields: false,
|
|
366
|
+
transactionID: context.req.transactionID
|
|
367
|
+
}));
|
|
368
|
+
if (relatedDocument) {
|
|
369
|
+
if (isRelatedToManyCollections) {
|
|
370
|
+
return {
|
|
371
|
+
relationTo: relatedCollectionSlug,
|
|
372
|
+
value: {
|
|
373
|
+
...relatedDocument,
|
|
374
|
+
collection: relatedCollectionSlug
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
return relatedDocument;
|
|
310
379
|
}
|
|
311
|
-
return relatedDocument;
|
|
312
380
|
}
|
|
313
381
|
return null;
|
|
314
382
|
}
|
|
@@ -331,7 +399,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
331
399
|
},
|
|
332
400
|
async resolve (parent, args, context) {
|
|
333
401
|
let depth = config.defaultDepth;
|
|
334
|
-
if (typeof args.depth !== 'undefined')
|
|
402
|
+
if (typeof args.depth !== 'undefined') {
|
|
403
|
+
depth = args.depth;
|
|
404
|
+
}
|
|
335
405
|
if (!field?.editor) {
|
|
336
406
|
throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
|
|
337
407
|
;
|
|
@@ -372,7 +442,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
372
442
|
}),
|
|
373
443
|
row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
|
|
374
444
|
const addSubField = fieldToSchemaMap[subField.type];
|
|
375
|
-
if (addSubField)
|
|
445
|
+
if (addSubField) {
|
|
446
|
+
return addSubField(objectTypeConfigWithRowFields, subField);
|
|
447
|
+
}
|
|
376
448
|
return objectTypeConfigWithRowFields;
|
|
377
449
|
}, objectTypeConfig),
|
|
378
450
|
select: (objectTypeConfig, field)=>{
|
|
@@ -412,7 +484,13 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
412
484
|
return {
|
|
413
485
|
...tabSchema,
|
|
414
486
|
[tab.name]: {
|
|
415
|
-
type: graphqlResult.types.groupTypes[interfaceName]
|
|
487
|
+
type: graphqlResult.types.groupTypes[interfaceName],
|
|
488
|
+
resolve (parent, args, context) {
|
|
489
|
+
return {
|
|
490
|
+
...parent[tab.name],
|
|
491
|
+
_id: parent._id ?? parent.id
|
|
492
|
+
};
|
|
493
|
+
}
|
|
416
494
|
}
|
|
417
495
|
};
|
|
418
496
|
}
|
|
@@ -420,7 +498,9 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
420
498
|
...tabSchema,
|
|
421
499
|
...tab.fields.reduce((subFieldSchema, subField)=>{
|
|
422
500
|
const addSubField = fieldToSchemaMap[subField.type];
|
|
423
|
-
if (addSubField)
|
|
501
|
+
if (addSubField) {
|
|
502
|
+
return addSubField(subFieldSchema, subField);
|
|
503
|
+
}
|
|
424
504
|
return subFieldSchema;
|
|
425
505
|
}, tabSchema)
|
|
426
506
|
};
|
|
@@ -439,34 +519,125 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
439
519
|
}),
|
|
440
520
|
upload: (objectTypeConfig, field)=>{
|
|
441
521
|
const { relationTo } = field;
|
|
442
|
-
const
|
|
522
|
+
const isRelatedToManyCollections = Array.isArray(relationTo);
|
|
523
|
+
const hasManyValues = field.hasMany;
|
|
524
|
+
const relationshipName = combineParentName(parentName, toWords(field.name, true));
|
|
525
|
+
let type;
|
|
526
|
+
let relationToType = null;
|
|
527
|
+
if (Array.isArray(relationTo)) {
|
|
528
|
+
relationToType = new GraphQLEnumType({
|
|
529
|
+
name: `${relationshipName}_RelationTo`,
|
|
530
|
+
values: relationTo.reduce((relations, relation)=>({
|
|
531
|
+
...relations,
|
|
532
|
+
[formatName(relation)]: {
|
|
533
|
+
value: relation
|
|
534
|
+
}
|
|
535
|
+
}), {})
|
|
536
|
+
});
|
|
537
|
+
const types = relationTo.map((relation)=>graphqlResult.collections[relation].graphQL.type);
|
|
538
|
+
type = new GraphQLObjectType({
|
|
539
|
+
name: `${relationshipName}_Relationship`,
|
|
540
|
+
fields: {
|
|
541
|
+
relationTo: {
|
|
542
|
+
type: relationToType
|
|
543
|
+
},
|
|
544
|
+
value: {
|
|
545
|
+
type: new GraphQLUnionType({
|
|
546
|
+
name: relationshipName,
|
|
547
|
+
resolveType (data) {
|
|
548
|
+
return graphqlResult.collections[data.collection].graphQL.type.name;
|
|
549
|
+
},
|
|
550
|
+
types
|
|
551
|
+
})
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
});
|
|
555
|
+
} else {
|
|
556
|
+
({ type } = graphqlResult.collections[relationTo].graphQL);
|
|
557
|
+
}
|
|
443
558
|
// If the relationshipType is undefined at this point,
|
|
444
559
|
// it can be assumed that this blockType can have a relationship
|
|
445
560
|
// to itself. Therefore, we set the relationshipType equal to the blockType
|
|
446
561
|
// that is currently being created.
|
|
447
|
-
|
|
448
|
-
const
|
|
562
|
+
type = type || newlyCreatedBlockType;
|
|
563
|
+
const relationshipArgs = {};
|
|
564
|
+
const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [
|
|
565
|
+
relationTo
|
|
566
|
+
]).some((relation)=>graphqlResult.collections[relation].config.versions?.drafts);
|
|
567
|
+
if (relationsUseDrafts) {
|
|
568
|
+
relationshipArgs.draft = {
|
|
569
|
+
type: GraphQLBoolean
|
|
570
|
+
};
|
|
571
|
+
}
|
|
449
572
|
if (config.localization) {
|
|
450
|
-
|
|
573
|
+
relationshipArgs.locale = {
|
|
451
574
|
type: graphqlResult.types.localeInputType
|
|
452
575
|
};
|
|
453
|
-
|
|
576
|
+
relationshipArgs.fallbackLocale = {
|
|
454
577
|
type: graphqlResult.types.fallbackLocaleInputType
|
|
455
578
|
};
|
|
456
579
|
}
|
|
457
|
-
const
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
args: uploadArgs,
|
|
580
|
+
const relationship = {
|
|
581
|
+
type: withNullableType(field, hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type, forceNullable),
|
|
582
|
+
args: relationshipArgs,
|
|
461
583
|
extensions: {
|
|
462
|
-
complexity:
|
|
584
|
+
complexity: 10
|
|
463
585
|
},
|
|
464
586
|
async resolve (parent, args, context) {
|
|
465
587
|
const value = parent[field.name];
|
|
466
588
|
const locale = args.locale || context.req.locale;
|
|
467
589
|
const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
|
|
468
|
-
|
|
590
|
+
let relatedCollectionSlug = field.relationTo;
|
|
469
591
|
const draft = Boolean(args.draft ?? context.req.query?.draft);
|
|
592
|
+
if (hasManyValues) {
|
|
593
|
+
const results = [];
|
|
594
|
+
const resultPromises = [];
|
|
595
|
+
const createPopulationPromise = async (relatedDoc, i)=>{
|
|
596
|
+
let id = relatedDoc;
|
|
597
|
+
let collectionSlug = field.relationTo;
|
|
598
|
+
if (isRelatedToManyCollections) {
|
|
599
|
+
collectionSlug = relatedDoc.relationTo;
|
|
600
|
+
id = relatedDoc.value;
|
|
601
|
+
}
|
|
602
|
+
const result = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
|
|
603
|
+
collectionSlug,
|
|
604
|
+
currentDepth: 0,
|
|
605
|
+
depth: 0,
|
|
606
|
+
docID: id,
|
|
607
|
+
draft,
|
|
608
|
+
fallbackLocale,
|
|
609
|
+
locale,
|
|
610
|
+
overrideAccess: false,
|
|
611
|
+
showHiddenFields: false,
|
|
612
|
+
transactionID: context.req.transactionID
|
|
613
|
+
}));
|
|
614
|
+
if (result) {
|
|
615
|
+
if (isRelatedToManyCollections) {
|
|
616
|
+
results[i] = {
|
|
617
|
+
relationTo: collectionSlug,
|
|
618
|
+
value: {
|
|
619
|
+
...result,
|
|
620
|
+
collection: collectionSlug
|
|
621
|
+
}
|
|
622
|
+
};
|
|
623
|
+
} else {
|
|
624
|
+
results[i] = result;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
};
|
|
628
|
+
if (value) {
|
|
629
|
+
value.forEach((relatedDoc, i)=>{
|
|
630
|
+
resultPromises.push(createPopulationPromise(relatedDoc, i));
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
await Promise.all(resultPromises);
|
|
634
|
+
return results;
|
|
635
|
+
}
|
|
636
|
+
let id = value;
|
|
637
|
+
if (isRelatedToManyCollections && value) {
|
|
638
|
+
id = value.value;
|
|
639
|
+
relatedCollectionSlug = value.relationTo;
|
|
640
|
+
}
|
|
470
641
|
if (id) {
|
|
471
642
|
const relatedDocument = await context.req.payloadDataLoader.load(createDataloaderCacheKey({
|
|
472
643
|
collectionSlug: relatedCollectionSlug,
|
|
@@ -480,22 +651,26 @@ export function buildObjectType({ name, baseFields = {}, config, fields, forceNu
|
|
|
480
651
|
showHiddenFields: false,
|
|
481
652
|
transactionID: context.req.transactionID
|
|
482
653
|
}));
|
|
483
|
-
|
|
654
|
+
if (relatedDocument) {
|
|
655
|
+
if (isRelatedToManyCollections) {
|
|
656
|
+
return {
|
|
657
|
+
relationTo: relatedCollectionSlug,
|
|
658
|
+
value: {
|
|
659
|
+
...relatedDocument,
|
|
660
|
+
collection: relatedCollectionSlug
|
|
661
|
+
}
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
return relatedDocument;
|
|
665
|
+
}
|
|
666
|
+
return null;
|
|
484
667
|
}
|
|
485
668
|
return null;
|
|
486
669
|
}
|
|
487
670
|
};
|
|
488
|
-
const whereFields = graphqlResult.collections[relationTo].config.fields;
|
|
489
|
-
upload.args.where = {
|
|
490
|
-
type: buildWhereInputType({
|
|
491
|
-
name: uploadName,
|
|
492
|
-
fields: whereFields,
|
|
493
|
-
parentName: uploadName
|
|
494
|
-
})
|
|
495
|
-
};
|
|
496
671
|
return {
|
|
497
672
|
...objectTypeConfig,
|
|
498
|
-
[field.name]:
|
|
673
|
+
[field.name]: relationship
|
|
499
674
|
};
|
|
500
675
|
}
|
|
501
676
|
};
|