Skip to content

Commit 2d29b7e

Browse files
authored
fix: only add snapshot to versions query when localization is enabled (#8293)
Versions list view should not query `snapshot` unless localization is enabled. Closes #8289
1 parent 7b907a8 commit 2d29b7e

File tree

6 files changed

+79
-29
lines changed

6 files changed

+79
-29
lines changed

packages/next/src/views/Version/Default/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ export const DefaultVersionView: React.FC<DefaultVersionsViewProps> = ({
7676

7777
const localeValues = locales && locales.map((locale) => locale.value)
7878

79+
const draftsEnabled = Boolean((collectionConfig || globalConfig)?.versions.drafts)
80+
7981
return (
8082
<main className={baseClass}>
8183
<SetViewActions
@@ -118,6 +120,7 @@ export const DefaultVersionView: React.FC<DefaultVersionsViewProps> = ({
118120
<div className={`${baseClass}__controls`}>
119121
<SelectComparison
120122
baseURL={compareBaseURL}
123+
draftsEnabled={draftsEnabled}
121124
latestDraftVersion={latestDraftVersion}
122125
latestPublishedVersion={latestPublishedVersion}
123126
onChange={setCompareValue}

packages/next/src/views/Version/SelectComparison/index.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const baseOptions = []
2121
export const SelectComparison: React.FC<Props> = (props) => {
2222
const {
2323
baseURL,
24+
draftsEnabled,
2425
latestDraftVersion,
2526
latestPublishedVersion,
2627
onChange,
@@ -32,6 +33,7 @@ export const SelectComparison: React.FC<Props> = (props) => {
3233
const {
3334
config: {
3435
admin: { dateFormat },
36+
localization,
3537
},
3638
} = useConfig()
3739

@@ -45,9 +47,6 @@ export const SelectComparison: React.FC<Props> = (props) => {
4547
const [errorLoading, setErrorLoading] = useState('')
4648
const { i18n, t } = useTranslation()
4749
const loadedAllOptionsRef = React.useRef(false)
48-
const {
49-
config: { localization },
50-
} = useConfig()
5150

5251
const getResults = useCallback(
5352
async ({ lastLoadedPage: lastLoadedPageArg }) => {
@@ -68,11 +67,6 @@ export const SelectComparison: React.FC<Props> = (props) => {
6867
not_equals: versionID,
6968
},
7069
},
71-
{
72-
snapshot: {
73-
not_equals: true,
74-
},
75-
},
7670
],
7771
},
7872
}
@@ -85,6 +79,14 @@ export const SelectComparison: React.FC<Props> = (props) => {
8579
})
8680
}
8781

82+
if (localization && draftsEnabled) {
83+
query.where.and.push({
84+
snapshot: {
85+
not_equals: true,
86+
},
87+
})
88+
}
89+
8890
const search = qs.stringify(query)
8991

9092
const response = await fetch(`${baseURL}?${search}`, {

packages/next/src/views/Version/SelectComparison/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import type { PaginatedDocs, SanitizedCollectionConfig } from 'payload'
1+
import type { PaginatedDocs, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'
22

33
import type { CompareOption } from '../Default/types.js'
44

55
export type Props = {
66
baseURL: string
7+
draftsEnabled?: boolean
78
latestDraftVersion?: string
89
latestPublishedVersion?: string
910
onChange: (val: CompareOption) => void

packages/next/src/views/Versions/index.tsx

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export const VersionsView: PayloadServerReactComponent<EditViewComponent> = asyn
3535
const { limit, page, sort } = searchParams
3636

3737
const {
38+
localization,
3839
routes: { api: apiRoute },
3940
serverURL,
4041
} = config
@@ -46,6 +47,26 @@ export const VersionsView: PayloadServerReactComponent<EditViewComponent> = asyn
4647

4748
if (collectionSlug) {
4849
limitToUse = limitToUse || collectionConfig.admin.pagination.defaultLimit
50+
const whereQuery: {
51+
and: Array<{ parent?: { equals: string }; snapshot?: { not_equals: boolean } }>
52+
} = {
53+
and: [
54+
{
55+
parent: {
56+
equals: id,
57+
},
58+
},
59+
],
60+
}
61+
62+
if (localization && collectionConfig?.versions?.drafts) {
63+
whereQuery.and.push({
64+
snapshot: {
65+
not_equals: true,
66+
},
67+
})
68+
}
69+
4970
try {
5071
versionsData = await payload.findVersions({
5172
collection: collectionSlug,
@@ -56,20 +77,7 @@ export const VersionsView: PayloadServerReactComponent<EditViewComponent> = asyn
5677
req,
5778
sort: sort as string,
5879
user,
59-
where: {
60-
and: [
61-
{
62-
parent: {
63-
equals: id,
64-
},
65-
},
66-
{
67-
snapshot: {
68-
not_equals: true,
69-
},
70-
},
71-
],
72-
},
80+
where: whereQuery,
7381
})
7482
if (collectionConfig?.versions?.drafts) {
7583
latestDraftVersion = await getLatestVersion({
@@ -92,6 +100,15 @@ export const VersionsView: PayloadServerReactComponent<EditViewComponent> = asyn
92100

93101
if (globalSlug) {
94102
limitToUse = limitToUse || 10
103+
const whereQuery =
104+
localization && globalConfig?.versions?.drafts
105+
? {
106+
snapshot: {
107+
not_equals: true,
108+
},
109+
}
110+
: {}
111+
95112
try {
96113
versionsData = await payload.findGlobalVersions({
97114
slug: globalSlug,
@@ -102,11 +119,7 @@ export const VersionsView: PayloadServerReactComponent<EditViewComponent> = asyn
102119
req,
103120
sort: sort as string,
104121
user,
105-
where: {
106-
snapshot: {
107-
not_equals: true,
108-
},
109-
},
122+
where: whereQuery,
110123
})
111124

112125
if (globalConfig?.versions?.drafts) {

test/admin-root/e2e.spec.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import * as path from 'path'
55
import { adminRoute } from 'shared.js'
66
import { fileURLToPath } from 'url'
77

8-
import { ensureCompilationIsDone, initPageConsoleErrorCatch, login } from '../helpers.js'
8+
import {
9+
ensureCompilationIsDone,
10+
initPageConsoleErrorCatch,
11+
login,
12+
saveDocAndAssert,
13+
} from '../helpers.js'
914
import { AdminUrlUtil } from '../helpers/adminUrlUtil.js'
1015
import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js'
1116
import { TEST_TIMEOUT_LONG } from '../playwright.config.js'
@@ -54,13 +59,36 @@ test.describe('Admin Panel (Root)', () => {
5459
expect(pageURL).not.toContain('/admin')
5560
})
5661

62+
test('collection — renders versions list', async () => {
63+
await page.goto(url.create)
64+
const textField = page.locator('#field-text')
65+
await textField.fill('test')
66+
await saveDocAndAssert(page)
67+
68+
const versionsTab = page.locator('.doc-tab a[href$="/versions"]')
69+
await versionsTab.click()
70+
const firstRow = page.locator('tbody .row-1')
71+
await expect(firstRow).toBeVisible()
72+
})
73+
5774
test('global — navigates to edit view', async () => {
5875
await page.goto(url.global('menu'))
5976
const pageURL = page.url()
6077
expect(pageURL).toBe(url.global('menu'))
6178
expect(pageURL).not.toContain('/admin')
6279
})
6380

81+
test('global — renders versions list', async () => {
82+
await page.goto(url.global('menu'))
83+
const textField = page.locator('#field-globalText')
84+
await textField.fill('test')
85+
await saveDocAndAssert(page)
86+
87+
await page.goto(`${url.global('menu')}/versions`)
88+
const firstRow = page.locator('tbody .row-1')
89+
await expect(firstRow).toBeVisible()
90+
})
91+
6492
test('ui - should render default payload favicons', async () => {
6593
await page.goto(url.admin)
6694
const favicons = page.locator('link[rel="icon"]')

test/admin-root/globals/Menu/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export const menuSlug = 'menu'
44

55
export const MenuGlobal: GlobalConfig = {
66
slug: menuSlug,
7+
versions: {
8+
drafts: false,
9+
},
710
fields: [
811
{
912
name: 'globalText',

0 commit comments

Comments
 (0)