diff --git a/.vscode/launch.json b/.vscode/launch.json index 8cd523d5d9..b66a43ec18 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -17,7 +17,7 @@ "type": "node-terminal" }, { - "command": "pnpm run dev:postgres collections-graphql", + "command": "pnpm run dev:postgres fields", "cwd": "${workspaceFolder}", "name": "Run Dev Postgres", "request": "launch", diff --git a/packages/db-postgres/src/find/traverseFields.ts b/packages/db-postgres/src/find/traverseFields.ts index a2f04d93eb..c21dedc94c 100644 --- a/packages/db-postgres/src/find/traverseFields.ts +++ b/packages/db-postgres/src/find/traverseFields.ts @@ -1,7 +1,7 @@ /* eslint-disable no-param-reassign */ import type { Field } from 'payload/types' -import { fieldAffectsData } from 'payload/types' +import { fieldAffectsData, tabHasName } from 'payload/types' import toSnakeCase from 'to-snake-case' import type { PostgresAdapter } from '../types' @@ -31,6 +31,42 @@ export const traverseFields = ({ topLevelTableName, }: TraverseFieldArgs) => { fields.forEach((field) => { + if (field.type === 'collapsible' || field.type === 'row') { + traverseFields({ + _locales, + adapter, + currentArgs, + currentTableName, + depth, + fields: field.fields, + path, + topLevelArgs, + topLevelTableName, + }) + + return + } + + if (field.type === 'tabs') { + field.tabs.forEach((tab) => { + const tabPath = tabHasName(tab) ? `${path}${tab.name}_` : path + + traverseFields({ + _locales, + adapter, + currentArgs, + currentTableName, + depth, + fields: tab.fields, + path: tabPath, + topLevelArgs, + topLevelTableName, + }) + }) + + return + } + if (fieldAffectsData(field)) { switch (field.type) { case 'array': { diff --git a/packages/db-postgres/src/schema/traverseFields.ts b/packages/db-postgres/src/schema/traverseFields.ts index f9375d05d3..8d730ad492 100644 --- a/packages/db-postgres/src/schema/traverseFields.ts +++ b/packages/db-postgres/src/schema/traverseFields.ts @@ -406,7 +406,7 @@ export const traverseFields = ({ indexes, localesColumns, localesIndexes, - newTableName: parentTableName, + newTableName, parentTableName, relationsToBuild, relationships, diff --git a/test/fields/e2e.spec.ts b/test/fields/e2e.spec.ts index ef0771f939..ff2faa72be 100644 --- a/test/fields/e2e.spec.ts +++ b/test/fields/e2e.spec.ts @@ -677,6 +677,22 @@ describe('fields', () => { await page.locator('.tabs-field__tab-button:has-text("Tab with Row")').click() await expect(page.locator('#field-textInRow')).toHaveValue(textInRowValue) }) + + test('should render array data within unnamed tabs', async () => { + await page.goto(url.list) + await page.locator('.cell-id a').click() + await page.locator('.tabs-field__tab-button:has-text("Tab with Array")').click() + await expect(page.locator('#field-array__0__text')).toHaveValue("Hello, I'm the first row") + }) + + test('should render array data within named tabs', async () => { + await page.goto(url.list) + await page.locator('.cell-id a').click() + await page.locator('.tabs-field__tab-button:nth-child(5)').click() + await expect(page.locator('#field-tab__array__0__text')).toHaveValue( + "Hello, I'm the first row, in a named tab", + ) + }) }) describe('richText', () => {