fix(ui): fallback localization data was appearing in document (#11743)

This commit is contained in:
Jarrod Flesch
2025-03-17 16:09:01 -04:00
committed by GitHub
parent 8a51fe1a17
commit ebfb0eb014
4 changed files with 54 additions and 28 deletions

View File

@@ -14,34 +14,39 @@ export function addLocalesToRequestFromData(req: PayloadRequest): void {
} = req } = req
if (data) { if (data) {
let localeOnReq = req.locale const localeOnReq = req.locale
let fallbackLocaleOnReq = req.fallbackLocale const fallbackLocaleOnReq = req.fallbackLocale
let localeFromData
let fallbackLocaleFromData
if (!localeOnReq && data?.locale && typeof data.locale === 'string') { if (!localeOnReq && data?.locale && typeof data.locale === 'string') {
localeOnReq = data.locale localeFromData = data.locale
} }
if (!fallbackLocaleOnReq) { if (!fallbackLocaleOnReq) {
if (data?.['fallback-locale'] && typeof data?.['fallback-locale'] === 'string') { if (data?.['fallback-locale'] && typeof data?.['fallback-locale'] === 'string') {
fallbackLocaleOnReq = data['fallback-locale'] fallbackLocaleFromData = data['fallback-locale']
} }
if (data?.['fallbackLocale'] && typeof data?.['fallbackLocale'] === 'string') { if (data?.['fallbackLocale'] && typeof data?.['fallbackLocale'] === 'string') {
fallbackLocaleOnReq = data['fallbackLocale'] fallbackLocaleFromData = data['fallbackLocale']
} }
} }
const { fallbackLocale, locale } = sanitizeLocales({ if (!localeOnReq || !fallbackLocaleOnReq) {
fallbackLocale: fallbackLocaleOnReq, const { fallbackLocale, locale } = sanitizeLocales({
locale: localeOnReq, fallbackLocale: fallbackLocaleFromData,
localization: config.localization, locale: localeFromData,
}) localization: config.localization,
})
if (locale) { if (localeFromData) {
req.locale = locale req.locale = locale
} }
if (fallbackLocale) {
req.fallbackLocale = fallbackLocale if (fallbackLocaleFromData) {
req.fallbackLocale = fallbackLocale
}
} }
} }
} }

View File

@@ -11,7 +11,6 @@ import { getPayload } from '../index.js'
import { sanitizeLocales } from './addLocalesToRequest.js' import { sanitizeLocales } from './addLocalesToRequest.js'
import { getRequestLanguage } from './getRequestLanguage.js' import { getRequestLanguage } from './getRequestLanguage.js'
import { parseCookies } from './parseCookies.js' import { parseCookies } from './parseCookies.js'
import { sanitizeFallbackLocale } from './sanitizeFallbackLocale.js'
type Args = { type Args = {
config: Promise<SanitizedConfig> | SanitizedConfig config: Promise<SanitizedConfig> | SanitizedConfig
@@ -66,18 +65,13 @@ export const createPayloadRequest = async ({
: {} : {}
if (localization) { if (localization) {
fallbackLocale = sanitizeFallbackLocale({
fallbackLocale,
locale,
localization,
})
const locales = sanitizeLocales({ const locales = sanitizeLocales({
fallbackLocale, fallbackLocale,
locale, locale,
localization, localization,
}) })
fallbackLocale = locales.fallbackLocale
locale = locales.locale locale = locales.locale
} }

View File

@@ -20,12 +20,15 @@ export const sanitizeFallbackLocale = ({
locale, locale,
localization, localization,
}: Args): null | string => { }: Args): null | string => {
const hasFallbackLocale = let hasFallbackLocale = false
fallbackLocale === undefined || fallbackLocale === null
? localization && localization.fallback if (fallbackLocale === undefined || fallbackLocale === null) {
: fallbackLocale hasFallbackLocale = Boolean(localization && localization.fallback)
? !['false', 'none', 'null'].includes(fallbackLocale) }
: false
if (fallbackLocale && !['false', 'none', 'null'].includes(fallbackLocale)) {
hasFallbackLocale = true
}
if (hasFallbackLocale) { if (hasFallbackLocale) {
if (!fallbackLocale) { if (!fallbackLocale) {

View File

@@ -556,6 +556,30 @@ describe('Localization', () => {
await cdpSession.detach() await cdpSession.detach()
}) })
test('should not show fallback data after saving data', async () => {
await page.goto(url.create)
await changeLocale(page, defaultLocale)
await page.locator('#field-title').fill(title)
await saveDocAndAssert(page)
await changeLocale(page, spanishLocale)
// POST data
await page.locator('#field-description').fill('non-localized description')
await saveDocAndAssert(page)
// POST updated data
await page.locator('#field-description').fill('non-localized description 2')
await saveDocAndAssert(page)
// The title should not have posted with a value
await expect
.poll(() => page.locator('#field-title').inputValue(), {
timeout: POLL_TOPASS_TIMEOUT,
})
.not.toBe(title)
})
}) })
test('should use label in search filter when string or object', async () => { test('should use label in search filter when string or object', async () => {