From 6c0fdbbaaa83594175bcf6a7f0415873a9f6d21e Mon Sep 17 00:00:00 2001 From: Jarrod Flesch Date: Fri, 14 Nov 2025 13:18:02 -0500 Subject: [PATCH] fix: duplicate should duplicate as draft by default --- .../src/collections/operations/create.ts | 1 - .../payload/src/duplicateDocument/index.ts | 7 ------ .../src/elements/DuplicateDocument/index.tsx | 2 +- test/versions/int.spec.ts | 25 +++++++++++++++++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/payload/src/collections/operations/create.ts b/packages/payload/src/collections/operations/create.ts index dbb0fd2bf8c..98b6ed550af 100644 --- a/packages/payload/src/collections/operations/create.ts +++ b/packages/payload/src/collections/operations/create.ts @@ -130,7 +130,6 @@ export const createOperation = async < id: duplicateFromID, collectionConfig, draftArg: isSavingDraft, - isSavingDraft, overrideAccess, req, selectedLocales, diff --git a/packages/payload/src/duplicateDocument/index.ts b/packages/payload/src/duplicateDocument/index.ts index 3c7da8d59e8..b21f846a525 100644 --- a/packages/payload/src/duplicateDocument/index.ts +++ b/packages/payload/src/duplicateDocument/index.ts @@ -17,7 +17,6 @@ type GetDuplicateDocumentArgs = { collectionConfig: SanitizedCollectionConfig draftArg?: boolean id: number | string - isSavingDraft?: boolean overrideAccess?: boolean req: PayloadRequest selectedLocales?: string[] @@ -26,7 +25,6 @@ export const getDuplicateDocumentData = async ({ id, collectionConfig, draftArg, - isSavingDraft, overrideAccess, req, selectedLocales, @@ -96,11 +94,6 @@ export const getDuplicateDocumentData = async ({ req, }) - // for version enabled collections, override the current status with draft, unless draft is explicitly set to false - if (isSavingDraft) { - duplicatedFromDocWithLocales._status = 'draft' - } - const duplicatedFromDoc = await afterRead({ collection: collectionConfig, context: req.context, diff --git a/packages/ui/src/elements/DuplicateDocument/index.tsx b/packages/ui/src/elements/DuplicateDocument/index.tsx index 95bf4aca0b3..b66b480a6ae 100644 --- a/packages/ui/src/elements/DuplicateDocument/index.tsx +++ b/packages/ui/src/elements/DuplicateDocument/index.tsx @@ -95,7 +95,7 @@ export const DuplicateDocument: React.FC = ({ addQueryPrefix: true, })}`, { - body: JSON.stringify({}), + body: JSON.stringify(collectionConfig.versions?.drafts ? { _status: 'draft' } : {}), headers, }, ) diff --git a/test/versions/int.spec.ts b/test/versions/int.spec.ts index 25a573fd4d0..dfb9560f576 100644 --- a/test/versions/int.spec.ts +++ b/test/versions/int.spec.ts @@ -431,6 +431,31 @@ describe('Versions', () => { }) }) + describe('Duplicate', () => { + it('should duplicate a versioned document as a draft', async () => { + const originalDoc = await payload.create({ + collection: draftCollectionSlug, + data: { + description: 'Original description', + title: 'Original Title', + _status: 'published', + }, + draft: false, + }) + + const duplicatedDoc = await payload.create({ + duplicateFromID: originalDoc.id, + collection: draftCollectionSlug, + data: { + _status: 'draft', + }, + draft: true, + }) + + expect(duplicatedDoc._status).toBe('draft') + }) + }) + describe('Query operations', () => { beforeAll(async () => { // Create test data for query-only tests (pagination, sorting)