Skip to content

Commit

Permalink
goes back to using TabAsField
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobsfletch committed Jan 21, 2025
1 parent a51a5c1 commit ee9f8b4
Show file tree
Hide file tree
Showing 12 changed files with 422 additions and 300 deletions.
105 changes: 60 additions & 45 deletions packages/payload/src/fields/hooks/afterChange/promise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { SanitizedCollectionConfig } from '../../../collections/config/type
import type { SanitizedGlobalConfig } from '../../../globals/config/types.js'
import type { RequestContext } from '../../../index.js'
import type { JsonObject, PayloadRequest } from '../../../types/index.js'
import type { Field } from '../../config/types.js'
import type { Field, TabAsField } from '../../config/types.js'

import { MissingEditorProp } from '../../../errors/index.js'
import { fieldAffectsData, tabHasName } from '../../config/types.js'
Expand All @@ -15,7 +15,8 @@ type Args = {
context: RequestContext
data: JsonObject
doc: JsonObject
field: Field
field: Field | TabAsField
fieldIndex: number
global: null | SanitizedGlobalConfig
indexPath: string
operation: 'create' | 'update'
Expand All @@ -40,9 +41,11 @@ export const promise = async ({
data,
doc,
field,
fieldIndex,
global,
indexPath,
operation,
parentIndexPath,
parentPath,
parentSchemaPath,
path,
Expand Down Expand Up @@ -250,52 +253,64 @@ export const promise = async ({
break
}

case 'tabs': {
field.tabs.forEach(async (tab, tabIndex) => {
let tabSiblingData = siblingData
let tabSiblingDoc = siblingDoc
let tabPreviousSiblingDoc = siblingDoc

const isNamedTab = tabHasName(tab)
case 'tab': {
const isNamedTab = tabHasName(field)

const {
indexPath: tabIndexPath,
path: tabPath,
schemaPath: tabSchemaPath,
} = getFieldPaths({
field: {
...field,
type: 'tab',
},
index: fieldIndex,
parentIndexPath: indexPath,
parentPath,
parentSchemaPath,
})

if (isNamedTab) {
tabSiblingData = (siblingData[tab.name] as JsonObject) ?? {}
tabSiblingDoc = (siblingDoc[tab.name] as JsonObject) ?? {}
tabPreviousSiblingDoc = (previousDoc[tab.name] as JsonObject) ?? {}
}
await traverseFields({
collection,
context,
data,
doc,
fields: field.fields,
global,
operation,
parentIndexPath: isNamedTab ? '' : tabIndexPath,
parentPath: isNamedTab ? tabPath : parentPath,
parentSchemaPath: isNamedTab ? tabSchemaPath : parentSchemaPath,
previousDoc,
previousSiblingDoc: isNamedTab
? ((previousDoc[field.name] as JsonObject) ?? {})
: siblingDoc,
req,
siblingData: isNamedTab ? ((siblingData[field.name] as JsonObject) ?? {}) : siblingData,
siblingDoc: isNamedTab ? ((siblingDoc[field.name] as JsonObject) ?? {}) : siblingDoc,
})

const {
indexPath: tabIndexPath,
path: tabPath,
schemaPath: tabSchemaPath,
} = getFieldPaths({
field: {
...tab,
type: 'tab',
},
index: tabIndex,
parentIndexPath: indexPath,
parentPath,
parentSchemaPath,
})
break
}

await traverseFields({
collection,
context,
data,
doc,
fields: tab.fields,
global,
operation,
parentIndexPath: isNamedTab ? '' : tabIndexPath,
parentPath: isNamedTab ? tabPath : parentPath,
parentSchemaPath: isNamedTab ? tabSchemaPath : parentSchemaPath,
previousDoc,
previousSiblingDoc: { ...tabPreviousSiblingDoc },
req,
siblingData: tabSiblingData || {},
siblingDoc: { ...tabSiblingDoc },
})
case 'tabs': {
await traverseFields({
collection,
context,
data,
doc,
fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),
global,
operation,
parentIndexPath,
parentPath: path,
parentSchemaPath,
previousDoc,
previousSiblingDoc: { ...previousSiblingDoc },
req,
siblingData: siblingData || {},
siblingDoc: { ...siblingDoc },
})

break
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { SanitizedCollectionConfig } from '../../../collections/config/type
import type { SanitizedGlobalConfig } from '../../../globals/config/types.js'
import type { RequestContext } from '../../../index.js'
import type { JsonObject, PayloadRequest } from '../../../types/index.js'
import type { Field } from '../../config/types.js'
import type { Field, TabAsField } from '../../config/types.js'

import { getFieldPaths } from '../../getFieldPaths.js'
import { promise } from './promise.js'
Expand All @@ -12,7 +12,7 @@ type Args = {
context: RequestContext
data: JsonObject
doc: JsonObject
fields: Field[]
fields: (Field | TabAsField)[]
global: null | SanitizedGlobalConfig
operation: 'create' | 'update'
parentIndexPath: string
Expand Down Expand Up @@ -60,6 +60,7 @@ export const traverseFields = async ({
data,
doc,
field,
fieldIndex,
global,
indexPath,
operation,
Expand Down
1 change: 0 additions & 1 deletion packages/payload/src/fields/hooks/afterRead/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import type { SanitizedGlobalConfig } from '../../../globals/config/types.js'
import type { RequestContext } from '../../../index.js'
import type { JsonObject, PayloadRequest, PopulateType, SelectType } from '../../../types/index.js'

import { deepCopyObjectSimple } from '../../../utilities/deepCopyObject.js'
import { getSelectMode } from '../../../utilities/getSelectMode.js'
import { traverseFields } from './traverseFields.js'

Expand Down
Loading

0 comments on commit ee9f8b4

Please sign in to comment.