Skip to content

Commit e5690fc

Browse files
authored
fix(graphql): respect draft: true when querying joins (#11869)
The same as #11763 but also for GraphQL. The previous fix was working only for the Local API and REST API due to a different method for querying joins in GraphQL.
1 parent 4ac6d21 commit e5690fc

File tree

4 files changed

+72
-8
lines changed

4 files changed

+72
-8
lines changed

packages/graphql/src/schema/fieldToSchemaMap.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,8 @@ export const fieldToSchemaMap: FieldToSchemaMap = {
379379
const { limit, page, sort, where } = args
380380
const { req } = context
381381

382+
const draft = Boolean(args.draft ?? context.req.query?.draft)
383+
382384
const fullWhere = combineQueries(where, {
383385
[field.on]: { equals: parent._id ?? parent.id },
384386
})
@@ -390,6 +392,7 @@ export const fieldToSchemaMap: FieldToSchemaMap = {
390392
return await req.payload.find({
391393
collection,
392394
depth: 0,
395+
draft,
393396
fallbackLocale: req.fallbackLocale,
394397
limit,
395398
locale: req.locale,

test/joins/collections/Versions.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ export const versionsSlug = 'versions'
55
export const Versions: CollectionConfig = {
66
slug: versionsSlug,
77
fields: [
8+
{
9+
name: 'title',
10+
type: 'text',
11+
required: true,
12+
},
813
{
914
name: 'category',
1015
relationTo: 'categories',

test/joins/int.spec.ts

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ describe('Joins Field', () => {
569569

570570
const version = await payload.create({
571571
collection: 'versions',
572-
data: { categoryVersion: category.id },
572+
data: { title: 'version', categoryVersion: category.id },
573573
})
574574

575575
const res = await payload.find({ collection: 'categories-versions', draft: false })
@@ -582,7 +582,7 @@ describe('Joins Field', () => {
582582

583583
const version = await payload.create({
584584
collection: 'versions',
585-
data: { categoryVersions: [category.id] },
585+
data: { title: 'version', categoryVersions: [category.id] },
586586
})
587587

588588
const res = await payload.find({ collection: 'categories-versions', draft: false })
@@ -595,7 +595,7 @@ describe('Joins Field', () => {
595595

596596
const version = await payload.create({
597597
collection: 'versions',
598-
data: { categoryVersion: category.id },
598+
data: { title: 'version', categoryVersion: category.id },
599599
})
600600

601601
const res = await payload.find({
@@ -615,7 +615,14 @@ describe('Joins Field', () => {
615615

616616
const version = await payload.create({
617617
collection: 'versions',
618-
data: { _status: 'draft', categoryVersion: category.id },
618+
data: { title: 'original-title', _status: 'draft', categoryVersion: category.id },
619+
draft: true,
620+
})
621+
622+
await payload.update({
623+
collection: 'versions',
624+
id: version.id,
625+
data: { title: 'updated-title' },
619626
draft: true,
620627
})
621628

@@ -625,14 +632,15 @@ describe('Joins Field', () => {
625632
})
626633

627634
expect(res.docs[0].relatedVersions.docs[0].id).toBe(version.id)
635+
expect(res.docs[0].relatedVersions.docs[0].title).toBe('updated-title')
628636
})
629637

630638
it('should populate joins when versions on both sides draft true payload.db.queryDrafts', async () => {
631639
const category = await payload.create({ collection: 'categories-versions', data: {} })
632640

633641
const version = await payload.create({
634642
collection: 'versions',
635-
data: { categoryVersions: [category.id] },
643+
data: { categoryVersions: [category.id], title: 'version' },
636644
})
637645

638646
const res = await payload.find({
@@ -932,6 +940,52 @@ describe('Joins Field', () => {
932940
)
933941
})
934942

943+
it('should populate joins with hasMany when on both sides documents are in draft', async () => {
944+
const category = await payload.create({
945+
collection: 'categories-versions',
946+
data: { _status: 'draft' },
947+
draft: true,
948+
})
949+
950+
const version = await payload.create({
951+
collection: 'versions',
952+
data: { _status: 'draft', title: 'original-title', categoryVersion: category.id },
953+
draft: true,
954+
})
955+
956+
await payload.update({
957+
collection: 'versions',
958+
draft: true,
959+
id: version.id,
960+
data: { title: 'updated-title' },
961+
})
962+
963+
const query = `query {
964+
CategoriesVersions(draft: true) {
965+
docs {
966+
relatedVersions(
967+
limit: 1
968+
) {
969+
docs {
970+
id,
971+
title
972+
}
973+
hasNextPage
974+
}
975+
}
976+
}
977+
}`
978+
979+
const res = await restClient
980+
.GRAPHQL_POST({ body: JSON.stringify({ query }) })
981+
.then((res) => res.json())
982+
983+
expect(res.data.CategoriesVersions.docs[0].relatedVersions.docs[0].id).toBe(version.id)
984+
expect(res.data.CategoriesVersions.docs[0].relatedVersions.docs[0].title).toBe(
985+
'updated-title',
986+
)
987+
})
988+
935989
it('should have simple paginate for joins inside groups', async () => {
936990
const queryWithLimit = `query {
937991
Categories(where: {

test/joins/payload-types.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export type SupportedTimezones =
5454
| 'Asia/Singapore'
5555
| 'Asia/Tokyo'
5656
| 'Asia/Seoul'
57+
| 'Australia/Brisbane'
5758
| 'Australia/Sydney'
5859
| 'Pacific/Guam'
5960
| 'Pacific/Noumea'
@@ -464,6 +465,7 @@ export interface Singular {
464465
*/
465466
export interface Version {
466467
id: string;
468+
title: string;
467469
category?: (string | null) | Category;
468470
categoryVersion?: (string | null) | CategoriesVersion;
469471
categoryVersions?: (string | CategoriesVersion)[] | null;
@@ -999,6 +1001,7 @@ export interface UploadsSelect<T extends boolean = true> {
9991001
* via the `definition` "versions_select".
10001002
*/
10011003
export interface VersionsSelect<T extends boolean = true> {
1004+
title?: T;
10021005
category?: T;
10031006
categoryVersion?: T;
10041007
categoryVersions?: T;
@@ -1232,7 +1235,6 @@ export interface Auth {
12321235

12331236

12341237
declare module 'payload' {
1235-
// @ts-ignore
1238+
// @ts-ignore
12361239
export interface GeneratedTypes extends Config {}
1237-
}
1238-
1240+
}

0 commit comments

Comments
 (0)