feat: duplicate doc moved from frontend to backend concern (#5342)

BREAKING CHANGE: collection.admin.hooks.beforeDuplicate removed and instead should be handled using field beforeDuplicate hooks which take the full field hook arguments.

* feat: duplicate doc moved from frontend to backend concern

* feat: default beforeDuplicate hook functions on unique fields

* docs: beforeDuplicate field hook

* test: duplicate doc local api

* chore: fix build errors

* chore: add access.create call to duplicate operation

* chore: perfectionist reorder imports
This commit is contained in:
Dan Ribbens
2024-03-19 11:25:19 -04:00
committed by GitHub
parent b259bc60a2
commit ed01ee1e2d
90 changed files with 748 additions and 269 deletions

View File

@@ -1,31 +1,10 @@
import type { BeforeDuplicate, CollectionConfig } from 'payload/types'
import type { IndexedField } from '../../payload-types.js'
import type {
CollectionConfig} from 'payload/types'
import { indexedFieldsSlug } from '../../slugs.js'
const beforeDuplicate: BeforeDuplicate<IndexedField> = ({ data }) => {
return {
...data,
collapsibleLocalizedUnique: data.collapsibleLocalizedUnique
? `${data.collapsibleLocalizedUnique}-copy`
: '',
collapsibleTextUnique: data.collapsibleTextUnique ? `${data.collapsibleTextUnique}-copy` : '',
group: {
...(data.group || {}),
localizedUnique: data.group?.localizedUnique ? `${data.group?.localizedUnique}-copy` : '',
},
uniqueText: data.uniqueText ? `${data.uniqueText}-copy` : '',
}
}
const IndexedFields: CollectionConfig = {
slug: indexedFieldsSlug,
// used to assert that versions also get indexes
admin: {
hooks: {
beforeDuplicate,
},
},
fields: [
{
name: 'text',

View File

@@ -619,6 +619,23 @@ describe('Fields', () => {
expect(result.id).toBeDefined()
})
it('should duplicate with unique fields', async () => {
const data = {
text: 'a',
}
const doc = await payload.create({
collection: 'indexed-fields',
data,
})
const result = await payload.duplicate({
collection: 'indexed-fields',
id: doc.id,
})
expect(result.id).not.toEqual(doc.id)
expect(result.uniqueRequiredText).toStrictEqual('uniqueRequired - Copy')
})
})
describe('array', () => {