fix(ui): published, draft and changed labels should now be correctly displayed (#8382)

Fixes the issue where the published or changed document is always shown
as "Changed" instead of "Published" or "Draft"


![image](https://github.com/user-attachments/assets/05581b73-0e17-4b41-96a8-007c8b6161f2)


Statuses:
- Published - when the current version is also the published version
- Changed - when the current version is a draft version but a published
version exists
- Draft - when the current version is a draft and no published versions
exist

---------

Co-authored-by: Jessica Chowdhury <jessica@trbl.design>
This commit is contained in:
Paul
2024-09-24 13:48:21 -06:00
committed by GitHub
parent a033cfe1c4
commit a37abd16ac
4 changed files with 24 additions and 4 deletions

View File

@@ -36,6 +36,7 @@ export type TypeWithVersion<T> = {
createdAt: string createdAt: string
id: string id: string
parent: number | string parent: number | string
publishedLocale?: string
snapshot?: boolean snapshot?: boolean
updatedAt: string updatedAt: string
version: T version: T

View File

@@ -43,7 +43,8 @@ export const DefaultPublishButton: React.FC<{ label?: string }> = ({ label: labe
const { code } = useLocale() const { code } = useLocale()
const label = labelProp || t('version:publishChanges') const label = labelProp || t('version:publishChanges')
const hasNewerVersions = unpublishedVersions?.totalDocs > 0 const hasNewerVersions =
unpublishedVersions?.totalDocs > 0 && unpublishedVersions?.docs[0]?.version?._status === 'draft'
const canPublish = hasPublishPermission && (modified || hasNewerVersions || !publishedDoc) const canPublish = hasPublishPermission && (modified || hasNewerVersions || !publishedDoc)
const operation = useOperation() const operation = useOperation()

View File

@@ -41,14 +41,22 @@ export const Status: React.FC = () => {
let statusToRender: 'changed' | 'draft' | 'published' let statusToRender: 'changed' | 'draft' | 'published'
if (unpublishedVersions?.docs?.length > 0 && publishedDoc) { const isChangedFromPublished = unpublishedVersions?.docs?.[0]?.version?._status === 'draft'
if (unpublishedVersions?.docs?.length > 0 && isChangedFromPublished && publishedDoc) {
statusToRender = 'changed' statusToRender = 'changed'
} else if (!publishedDoc) { } else if (!publishedDoc) {
statusToRender = 'draft' statusToRender = 'draft'
} else if (publishedDoc && unpublishedVersions?.docs?.length <= 1) { } else if (publishedDoc && unpublishedVersions?.docs?.length <= 2) {
statusToRender = 'published' statusToRender = 'published'
} }
const lastVersion = unpublishedVersions?.docs?.[0]
if (lastVersion && lastVersion.publishedLocale) {
statusToRender = locale === lastVersion.publishedLocale ? 'published' : 'draft'
}
const performAction = useCallback( const performAction = useCallback(
async (action: 'revert' | 'unpublish') => { async (action: 'revert' | 'unpublish') => {
let url let url

View File

@@ -647,7 +647,7 @@ describe('versions', () => {
await textField.fill('spanish published') await textField.fill('spanish published')
await saveDocAndAssert(page) await saveDocAndAssert(page)
await expect(status).toContainText('Changed') await expect(status).toContainText('Published')
await textField.fill('spanish draft') await textField.fill('spanish draft')
await saveDocAndAssert(page, '#action-save-draft') await saveDocAndAssert(page, '#action-save-draft')
@@ -662,6 +662,16 @@ describe('versions', () => {
await expect(publishSpecificLocale).toContainText('English') await expect(publishSpecificLocale).toContainText('English')
await publishSpecificLocale.click() await publishSpecificLocale.click()
await wait(500)
await expect(async () => {
await expect(
page.locator('.payload-toast-item:has-text("Updated successfully.")'),
).toBeVisible()
}).toPass({
timeout: POLL_TOPASS_TIMEOUT,
})
id = await page.locator('.id-label').getAttribute('title') id = await page.locator('.id-label').getAttribute('title')
const data = await payload.find({ const data = await payload.find({