Skip to content

Commit 19a3367

Browse files
fix(ui): monomorphic joins tables not fetching draft documents (#13139)
Monomorphic join fields were not using the `draft` argument when fetching documents to display in the table. This change makes the join field treatment of drafts consistent with the `relationship` type fields. Added e2e test to cover.
1 parent c1bad01 commit 19a3367

File tree

6 files changed

+61
-5
lines changed

6 files changed

+61
-5
lines changed

packages/ui/src/utilities/buildTableState.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ const buildTableState = async (
214214
data = await payload.find({
215215
collection: collectionSlug,
216216
depth: 0,
217+
draft: true,
217218
limit: query?.limit ? parseInt(query.limit, 10) : undefined,
218219
locale: req.locale,
219220
overrideAccess: false,

test/joins/collections/CategoriesVersions.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import type { CollectionConfig } from 'payload'
22

3-
import { versionsSlug } from './Versions.js'
4-
5-
export const categoriesVersionsSlug = 'categories-versions'
3+
import { categoriesVersionsSlug, versionsSlug } from '../shared.js'
64

75
export const CategoriesVersions: CollectionConfig = {
86
slug: categoriesVersionsSlug,
97
fields: [
8+
{
9+
name: 'title',
10+
type: 'text',
11+
},
1012
{
1113
name: 'relatedVersions',
1214
type: 'join',

test/joins/collections/Versions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { CollectionConfig } from 'payload'
22

3-
export const versionsSlug = 'versions'
3+
import { versionsSlug } from '../shared.js'
44

55
export const Versions: CollectionConfig = {
66
slug: versionsSlug,

test/joins/e2e.spec.ts

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,14 @@ import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js'
2222
import { reInitializeDB } from '../helpers/reInitializeDB.js'
2323
import { RESTClient } from '../helpers/rest.js'
2424
import { EXPECT_TIMEOUT, TEST_TIMEOUT_LONG } from '../playwright.config.js'
25-
import { categoriesJoinRestrictedSlug, categoriesSlug, postsSlug, uploadsSlug } from './shared.js'
25+
import {
26+
categoriesJoinRestrictedSlug,
27+
categoriesSlug,
28+
categoriesVersionsSlug,
29+
postsSlug,
30+
uploadsSlug,
31+
versionsSlug,
32+
} from './shared.js'
2633

2734
const filename = fileURLToPath(import.meta.url)
2835
const dirname = path.dirname(filename)
@@ -39,6 +46,8 @@ describe('Join Field', () => {
3946
let foldersURL: AdminUrlUtil
4047
let uploadsURL: AdminUrlUtil
4148
let categoriesJoinRestrictedURL: AdminUrlUtil
49+
let categoriesVersionsURL: AdminUrlUtil
50+
let versionsURL: AdminUrlUtil
4251
let categoryID: number | string
4352
let rootFolderID: number | string
4453

@@ -53,6 +62,8 @@ describe('Join Field', () => {
5362
uploadsURL = new AdminUrlUtil(serverURL, uploadsSlug)
5463
categoriesJoinRestrictedURL = new AdminUrlUtil(serverURL, categoriesJoinRestrictedSlug)
5564
foldersURL = new AdminUrlUtil(serverURL, 'folders')
65+
categoriesVersionsURL = new AdminUrlUtil(serverURL, categoriesVersionsSlug)
66+
versionsURL = new AdminUrlUtil(serverURL, versionsSlug)
5667

5768
const context = await browser.newContext()
5869
page = await context.newPage()
@@ -543,4 +554,42 @@ describe('Join Field', () => {
543554
await changeLocale(page, 'es')
544555
await expect(localizedTextCell).toHaveText('Text in es')
545556
})
557+
558+
test('should fetch draft documents in joins', async () => {
559+
// create category-versions document
560+
const categoryVersionsDoc = await payload.create({
561+
collection: categoriesVersionsSlug,
562+
data: {
563+
title: 'Category Versions',
564+
},
565+
})
566+
567+
// create versions document
568+
const versionDoc = await payload.create({
569+
collection: versionsSlug,
570+
data: {
571+
title: 'Version 1',
572+
categoryVersion: categoryVersionsDoc.id,
573+
},
574+
})
575+
576+
// update versions document with draft data
577+
await payload.update({
578+
id: versionDoc.id,
579+
collection: versionsSlug,
580+
data: {
581+
title: 'Version 1 - Draft',
582+
},
583+
draft: true,
584+
})
585+
586+
await page.goto(categoriesVersionsURL.edit(categoryVersionsDoc.id))
587+
const joinField = page.locator('#field-relatedVersions.field-type.join')
588+
await expect(joinField).toBeVisible()
589+
await expect(joinField.locator('.relationship-table table')).toBeVisible()
590+
const row = joinField.locator('.relationship-table tbody tr.row-1')
591+
await expect(row).toBeVisible()
592+
const versionsRowTitle = row.locator('.cell-title span')
593+
await expect(versionsRowTitle).toHaveText('Version 1 - Draft')
594+
})
546595
})

test/joins/payload-types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,7 @@ export interface Version {
519519
*/
520520
export interface CategoriesVersion {
521521
id: string;
522+
title?: string | null;
522523
relatedVersions?: {
523524
docs?: (string | Version)[];
524525
hasNextPage?: boolean;
@@ -1142,6 +1143,7 @@ export interface VersionsSelect<T extends boolean = true> {
11421143
* via the `definition` "categories-versions_select".
11431144
*/
11441145
export interface CategoriesVersionsSelect<T extends boolean = true> {
1146+
title?: T;
11451147
relatedVersions?: T;
11461148
relatedVersionsMany?: T;
11471149
updatedAt?: T;

test/joins/shared.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export const categoriesJoinRestrictedSlug = 'categories-join-restricted'
1919
export const collectionRestrictedSlug = 'collection-restricted'
2020

2121
export const restrictedCategoriesSlug = 'restricted-categories'
22+
export const categoriesVersionsSlug = 'categories-versions'
23+
export const versionsSlug = 'versions'
2224

2325
export const collectionSlugs = [
2426
categoriesSlug,

0 commit comments

Comments
 (0)