diff --git a/docs/configuration/localization.mdx b/docs/configuration/localization.mdx index 8a01635958b..52f741bc236 100644 --- a/docs/configuration/localization.mdx +++ b/docs/configuration/localization.mdx @@ -150,9 +150,10 @@ export default buildConfig({ The following experimental options are available related to localization: -| Option | Description | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`localizeStatus`** | **Boolean.** When `true`, shows document status per locale in the admin panel instead of always showing the latest overall status. Opt-in for backwards compatibility. Defaults to `false`. | +| Option | Description | +| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`localizeStatus`** | **Boolean.** When `true`, shows document status per locale in the admin panel instead of always showing the latest overall status. Opt-in for backwards compatibility. Defaults to `false`. | +| **`allLocaleStatus`** | **Boolean.** When `true`, adds an `_allLocaleStatus` field that stores the status of each locale. In list views, this field is rendered as a custom cell with colored status pills. Defaults to `false`. | ## Field Localization diff --git a/docs/experimental/overview.mdx b/docs/experimental/overview.mdx index 57bb84699d7..0097e8b339d 100644 --- a/docs/experimental/overview.mdx +++ b/docs/experimental/overview.mdx @@ -27,9 +27,10 @@ const config = buildConfig({ The following options are available: -| Option | Description | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`localizeStatus`** | **Boolean.** When `true`, shows document status per locale in the admin panel instead of always showing the latest overall status. Opt-in for backwards compatibility. Defaults to `false`. | +| Option | Description | +| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`localizeStatus`** | **Boolean.** When `true`, shows document status per locale in the admin panel instead of always showing the latest overall status. Opt-in for backwards compatibility. Defaults to `false`. | +| **`allLocaleStatus`** | **Boolean.** When `true`, adds an `_allLocaleStatus` field that stores the status of each locale. In list views, this field is rendered as a custom cell with colored status pills. Defaults to `false`. | This list may change without notice. diff --git a/packages/payload/src/collections/config/sanitize.ts b/packages/payload/src/collections/config/sanitize.ts index 617d8cdb0d6..e6d05acd078 100644 --- a/packages/payload/src/collections/config/sanitize.ts +++ b/packages/payload/src/collections/config/sanitize.ts @@ -9,6 +9,7 @@ import type { import { authCollectionEndpoints } from '../../auth/endpoints/index.js' import { getBaseAuthFields } from '../../auth/getAuthFields.js' import { TimestampsRequired } from '../../errors/TimestampsRequired.js' +import { baseAllLocaleStatusField } from '../../fields/baseFields/baseAllLocaleStatusField.js' import { sanitizeFields } from '../../fields/config/sanitize.js' import { fieldAffectsData } from '../../fields/config/types.js' import { mergeBaseFields } from '../../fields/mergeBaseFields.js' @@ -256,6 +257,10 @@ export const sanitizeCollection = async ( sanitized.fields = mergeBaseFields(sanitized.fields, getBaseAuthFields(sanitized.auth)) } + if (config.localization && config.experimental?.allLocaleStatus && collection.versions) { + sanitized.fields = mergeBaseFields(sanitized.fields, baseAllLocaleStatusField) + } + if (collection?.admin?.pagination?.limits?.length) { sanitized.admin!.pagination!.limits = collection.admin.pagination.limits } diff --git a/packages/payload/src/config/client.ts b/packages/payload/src/config/client.ts index dc267f46ddc..0035a4e85b8 100644 --- a/packages/payload/src/config/client.ts +++ b/packages/payload/src/config/client.ts @@ -229,6 +229,10 @@ export const createClientConfig = ({ if (config.experimental?.localizeStatus) { clientConfig.experimental.localizeStatus = config.experimental.localizeStatus } + + if (config.experimental?.allLocaleStatus) { + clientConfig.experimental.allLocaleStatus = config.experimental.allLocaleStatus + } } break diff --git a/packages/payload/src/config/types.ts b/packages/payload/src/config/types.ts index 1e4b04293d4..425c9b51784 100644 --- a/packages/payload/src/config/types.ts +++ b/packages/payload/src/config/types.ts @@ -731,6 +731,15 @@ export type ImportMapGenerators = Array< * These may be unstable and may change or be removed in future releases. */ export type ExperimentalConfig = { + /** + * Adds `_localeStatus` group field which maintains the statuses of all locales. + * @default false + */ + allLocaleStatus?: boolean + /** + * Returns status of the current locale instead of overall document. + * @default false + */ localizeStatus?: boolean } diff --git a/packages/payload/src/fields/baseFields/baseAllLocaleStatusField.ts b/packages/payload/src/fields/baseFields/baseAllLocaleStatusField.ts new file mode 100644 index 00000000000..41b36c0828e --- /dev/null +++ b/packages/payload/src/fields/baseFields/baseAllLocaleStatusField.ts @@ -0,0 +1,23 @@ +import type { Field } from '../config/types.js' + +/** + * This field is never used directly. + * The field type is `text` just so the column appears. + * + * It adds a custom cell component to display the status for all locales in the admin list view. + * The component queries the versions table for the `localeStatus` field on the latest version. + */ +export const baseAllLocaleStatusField: Field[] = [ + { + name: '_localeStatusCell', + type: 'text', + admin: { + components: { + Cell: '@payloadcms/ui/rsc#AllLocaleStatusCell', + }, + disableListFilter: true, + hidden: true, + }, + label: ({ t }) => t('fields:allLocaleStatus'), + }, +] diff --git a/packages/payload/src/versions/buildCollectionFields.ts b/packages/payload/src/versions/buildCollectionFields.ts index f047373f857..92ba68b8d2a 100644 --- a/packages/payload/src/versions/buildCollectionFields.ts +++ b/packages/payload/src/versions/buildCollectionFields.ts @@ -63,7 +63,7 @@ export const buildVersionCollectionFields = ( }), }) - if (config.experimental?.localizeStatus) { + if (config.experimental.localizeStatus || config.experimental.allLocaleStatus) { const localeStatusFields = buildLocaleStatusField(config) fields.push({ diff --git a/packages/payload/src/versions/buildGlobalFields.ts b/packages/payload/src/versions/buildGlobalFields.ts index b9675ddbd06..243f223b489 100644 --- a/packages/payload/src/versions/buildGlobalFields.ts +++ b/packages/payload/src/versions/buildGlobalFields.ts @@ -57,7 +57,7 @@ export const buildVersionGlobalFields = ( }), }) - if (config.experimental.localizeStatus) { + if (config.experimental.localizeStatus || config.experimental.allLocaleStatus) { const localeStatusFields = buildLocaleStatusField(config) fields.push({ diff --git a/packages/payload/src/versions/saveVersion.ts b/packages/payload/src/versions/saveVersion.ts index d101aa05ca8..fd218979924 100644 --- a/packages/payload/src/versions/saveVersion.ts +++ b/packages/payload/src/versions/saveVersion.ts @@ -130,41 +130,35 @@ export const saveVersion = async ({ } if (createNewVersion) { - let localeStatus = {} + let localeStatus: Record = {} const localizationEnabled = payload.config.localization && payload.config.localization.locales.length > 0 if ( localizationEnabled && payload.config.localization !== false && - payload.config.experimental?.localizeStatus + (payload.config.experimental?.localizeStatus || + payload.config.experimental?.allLocaleStatus) ) { - const allLocales = ( - (payload.config.localization && payload.config.localization?.locales) || - [] - ).map((locale) => (typeof locale === 'string' ? locale : locale.code)) - // If `publish all`, set all locales to published if (versionData._status === 'published' && !publishSpecificLocale) { - localeStatus = Object.fromEntries(allLocales.map((code) => [code, 'published'])) + for (const code of payload.config.localization.localeCodes) { + localeStatus[code] = 'published' + } } else if (publishSpecificLocale || (locale && versionData._status === 'draft')) { const status: 'draft' | 'published' = publishSpecificLocale ? 'published' : 'draft' - const incomingLocale = String(publishSpecificLocale || locale) + const incomingLocale = (publishSpecificLocale || locale) as string const existing = latestVersion?.localeStatus // If no locale statuses are set, set it and set all others to draft if (!existing) { - localeStatus = { - ...Object.fromEntries( - allLocales.filter((code) => code !== incomingLocale).map((code) => [code, 'draft']), - ), - [incomingLocale]: status, + for (const code of payload.config.localization.localeCodes) { + localeStatus[code] = code === incomingLocale ? status : 'draft' } } else { // If locales already exist, update the status for the incoming locale - const { [incomingLocale]: _, ...rest } = existing localeStatus = { - ...rest, + ...existing, [incomingLocale]: status, } } diff --git a/packages/translations/src/clientKeys.ts b/packages/translations/src/clientKeys.ts index 66ac0954fd9..066e3c81ffa 100644 --- a/packages/translations/src/clientKeys.ts +++ b/packages/translations/src/clientKeys.ts @@ -99,6 +99,7 @@ export const clientTranslationKeys = createClientTranslationKeys([ 'fields:addNewLabel', 'fields:addRelationship', 'fields:addUpload', + 'fields:allLocaleStatus', 'fields:block', 'fields:blocks', 'fields:blockType', diff --git a/packages/translations/src/languages/ar.ts b/packages/translations/src/languages/ar.ts index 3836edb8f1e..b7bdd89f2df 100644 --- a/packages/translations/src/languages/ar.ts +++ b/packages/translations/src/languages/ar.ts @@ -140,6 +140,7 @@ export const arTranslations: DefaultTranslationsObject = { addNewLabel: 'أضف {{label}} جديد', addRelationship: 'أضف علاقة', addUpload: 'أضف تحميل', + allLocaleStatus: 'الحالة - جميع الأماكن', block: 'وحدة محتوى', blocks: 'وحدات المحتوى', blockType: 'نوع وحدة المحتوى', diff --git a/packages/translations/src/languages/az.ts b/packages/translations/src/languages/az.ts index c1136be3bc9..10702d4fe96 100644 --- a/packages/translations/src/languages/az.ts +++ b/packages/translations/src/languages/az.ts @@ -143,6 +143,7 @@ export const azTranslations: DefaultTranslationsObject = { addNewLabel: 'Yeni {{label}} əlavə et', addRelationship: 'Relationship əlavə et', addUpload: 'Yükləmə əlavə et', + allLocaleStatus: 'Bütün Dil Variantları - Status', block: 'Blok', blocks: 'bloklar', blockType: 'Blok Növü', diff --git a/packages/translations/src/languages/bg.ts b/packages/translations/src/languages/bg.ts index 009431d9a35..4a88b999ddf 100644 --- a/packages/translations/src/languages/bg.ts +++ b/packages/translations/src/languages/bg.ts @@ -143,6 +143,7 @@ export const bgTranslations: DefaultTranslationsObject = { addNewLabel: 'Добави нов {{label}}', addRelationship: 'Добави отношение', addUpload: 'Качи', + allLocaleStatus: 'Статус - всички езици', block: 'Блок', blocks: 'блокове', blockType: 'Тип блок', diff --git a/packages/translations/src/languages/bnBd.ts b/packages/translations/src/languages/bnBd.ts index 9c17f5c460d..3f3aec56cc0 100644 --- a/packages/translations/src/languages/bnBd.ts +++ b/packages/translations/src/languages/bnBd.ts @@ -144,6 +144,7 @@ export const bnBdTranslations: DefaultTranslationsObject = { addNewLabel: 'নতুন {{label}} যোগ করুন', addRelationship: 'সম্পর্ক যোগ করুন', addUpload: 'আপলোড যোগ করুন', + allLocaleStatus: 'স্ট্যাটাস - সমস্ত লোকাল', block: 'ব্লক', blocks: 'ব্লকগুলি', blockType: 'ব্লক প্রকার', diff --git a/packages/translations/src/languages/bnIn.ts b/packages/translations/src/languages/bnIn.ts index 53932927e63..474ed1000ac 100644 --- a/packages/translations/src/languages/bnIn.ts +++ b/packages/translations/src/languages/bnIn.ts @@ -144,6 +144,7 @@ export const bnInTranslations: DefaultTranslationsObject = { addNewLabel: 'নতুন {{label}} যোগ করুন', addRelationship: 'সম্পর্ক যোগ করুন', addUpload: 'আপলোড যোগ করুন', + allLocaleStatus: 'স্থিতি - সমস্ত লোকেলস্', block: 'ব্লক', blocks: 'ব্লকগুলি', blockType: 'ব্লক প্রকার', diff --git a/packages/translations/src/languages/ca.ts b/packages/translations/src/languages/ca.ts index 2a52ae5b8d4..cb1c53a34fb 100644 --- a/packages/translations/src/languages/ca.ts +++ b/packages/translations/src/languages/ca.ts @@ -144,6 +144,7 @@ export const caTranslations: DefaultTranslationsObject = { addNewLabel: 'Afegeix nou {{label}}', addRelationship: 'Afegeix relació', addUpload: 'Afegeix pujada', + allLocaleStatus: 'Estat - Totes les configuracions regionals', block: 'Bloc', blocks: 'blocs', blockType: 'Tipus de bloc', diff --git a/packages/translations/src/languages/cs.ts b/packages/translations/src/languages/cs.ts index c9ad698b7b1..de638907b36 100644 --- a/packages/translations/src/languages/cs.ts +++ b/packages/translations/src/languages/cs.ts @@ -143,6 +143,7 @@ export const csTranslations: DefaultTranslationsObject = { addNewLabel: 'Přidat nový {{label}}', addRelationship: 'Přidat vztah', addUpload: 'Přidat nahrávání', + allLocaleStatus: 'Status - Všechny lokality', block: 'Blok', blocks: 'bloky', blockType: 'Typ bloku', diff --git a/packages/translations/src/languages/da.ts b/packages/translations/src/languages/da.ts index 0f501abe7d9..d1518b54f88 100644 --- a/packages/translations/src/languages/da.ts +++ b/packages/translations/src/languages/da.ts @@ -142,6 +142,7 @@ export const daTranslations: DefaultTranslationsObject = { addNewLabel: 'Tilføj ny {{label}}', addRelationship: 'Tilføj forhold', addUpload: 'Tilføj upload', + allLocaleStatus: 'Status - Alle lokaliteter', block: 'Blok', blocks: 'blokke', blockType: 'Blok type', diff --git a/packages/translations/src/languages/de.ts b/packages/translations/src/languages/de.ts index 7278f0484ae..333d585f8ff 100644 --- a/packages/translations/src/languages/de.ts +++ b/packages/translations/src/languages/de.ts @@ -148,6 +148,7 @@ export const deTranslations: DefaultTranslationsObject = { addNewLabel: '{{label}} erstellen', addRelationship: 'Verknüpfung hinzufügen', addUpload: 'Neue Datei hochladen', + allLocaleStatus: 'Status - Alle Gebietsschemata', block: 'Block', blocks: 'Blöcke', blockType: 'Block-Typ', diff --git a/packages/translations/src/languages/en.ts b/packages/translations/src/languages/en.ts index 57e0f169e62..5248984c878 100644 --- a/packages/translations/src/languages/en.ts +++ b/packages/translations/src/languages/en.ts @@ -1,5 +1,3 @@ -import { title } from 'process' - import type { Language } from '../types.js' export const enTranslations = { @@ -145,6 +143,7 @@ export const enTranslations = { addNewLabel: 'Add new {{label}}', addRelationship: 'Add Relationship', addUpload: 'Add Upload', + allLocaleStatus: 'Status - All Locales', block: 'Block', blocks: 'blocks', blockType: 'Block Type', diff --git a/packages/translations/src/languages/es.ts b/packages/translations/src/languages/es.ts index b247074e981..e3b30e9cee3 100644 --- a/packages/translations/src/languages/es.ts +++ b/packages/translations/src/languages/es.ts @@ -147,6 +147,7 @@ export const esTranslations: DefaultTranslationsObject = { addNewLabel: 'Añadir {{label}}', addRelationship: 'Añadir Relación', addUpload: 'Añadir documento', + allLocaleStatus: 'Estado - Todos los Idiomas', block: 'Bloque', blocks: 'bloques', blockType: 'Tipo de bloque', diff --git a/packages/translations/src/languages/et.ts b/packages/translations/src/languages/et.ts index c83f5f8df93..00d385a4771 100644 --- a/packages/translations/src/languages/et.ts +++ b/packages/translations/src/languages/et.ts @@ -142,6 +142,7 @@ export const etTranslations: DefaultTranslationsObject = { addNewLabel: 'Lisa uus {{label}}', addRelationship: 'Lisa seos', addUpload: 'Lisa üleslaadimine', + allLocaleStatus: 'Olekõik Lokalid - Staatus', block: 'Plokk', blocks: 'plokid', blockType: 'Ploki tüüp', diff --git a/packages/translations/src/languages/fa.ts b/packages/translations/src/languages/fa.ts index 8d881d4ad54..69820f00603 100644 --- a/packages/translations/src/languages/fa.ts +++ b/packages/translations/src/languages/fa.ts @@ -141,6 +141,7 @@ export const faTranslations: DefaultTranslationsObject = { addNewLabel: 'افزودن {{label}} تازه', addRelationship: 'افزودن پیوستگی', addUpload: 'افزودن بارگذار', + allLocaleStatus: 'وضعیت - همه مکان‌ها', block: 'بلوک', blocks: 'بلوک‌ها', blockType: 'نوع بلوک', diff --git a/packages/translations/src/languages/fr.ts b/packages/translations/src/languages/fr.ts index da84806762f..9a940cb4ffc 100644 --- a/packages/translations/src/languages/fr.ts +++ b/packages/translations/src/languages/fr.ts @@ -149,6 +149,7 @@ export const frTranslations: DefaultTranslationsObject = { addNewLabel: 'Ajouter nouveau ou nouvelle {{label}}', addRelationship: 'Ajouter une relation', addUpload: 'Ajouter le téléchargement', + allLocaleStatus: 'Statut - Toutes les locales', block: 'Bloc', blocks: 'blocs', blockType: 'Type de bloc', diff --git a/packages/translations/src/languages/he.ts b/packages/translations/src/languages/he.ts index 7d866883cb8..db49a9a53f0 100644 --- a/packages/translations/src/languages/he.ts +++ b/packages/translations/src/languages/he.ts @@ -138,6 +138,7 @@ export const heTranslations: DefaultTranslationsObject = { addNewLabel: 'הוסף {{label}} חדש', addRelationship: 'הוסף יחס', addUpload: 'הוסף העלאה', + allLocaleStatus: 'סטטוס - כל המקומות', block: 'בלוק', blocks: 'בלוקים', blockType: 'סוג בלוק', diff --git a/packages/translations/src/languages/hr.ts b/packages/translations/src/languages/hr.ts index b74c4af9d6f..87a15b3112b 100644 --- a/packages/translations/src/languages/hr.ts +++ b/packages/translations/src/languages/hr.ts @@ -144,6 +144,7 @@ export const hrTranslations: DefaultTranslationsObject = { addNewLabel: 'Dodaj novi {{label}}', addRelationship: 'Dodaj odnos', addUpload: 'Dodaj učitavanje', + allLocaleStatus: 'Status - Svi lokaliteti', block: 'Blokiranje', blocks: 'blokiranja', blockType: 'Vrsta blokiranja', diff --git a/packages/translations/src/languages/hu.ts b/packages/translations/src/languages/hu.ts index 903502596ac..a444d49f97e 100644 --- a/packages/translations/src/languages/hu.ts +++ b/packages/translations/src/languages/hu.ts @@ -145,6 +145,7 @@ export const huTranslations: DefaultTranslationsObject = { addNewLabel: 'Új {{label}} hozzáadása', addRelationship: 'Kapcsolat hozzáadása', addUpload: 'Feltöltés hozzáadása', + allLocaleStatus: 'Állapot - Minden helyszín', block: 'Blokk', blocks: 'blokkok', blockType: 'Blokk típusa', diff --git a/packages/translations/src/languages/hy.ts b/packages/translations/src/languages/hy.ts index 2f9bce9549b..adcce24a044 100644 --- a/packages/translations/src/languages/hy.ts +++ b/packages/translations/src/languages/hy.ts @@ -143,6 +143,7 @@ export const hyTranslations: DefaultTranslationsObject = { addNewLabel: 'Ավելացնել նոր {{label}}', addRelationship: 'Ավելացնել հարաբերություն', addUpload: 'Վերբեռնել', + allLocaleStatus: 'Ստատուս - Բոլոր լոկալները', block: 'բլոկ', blocks: 'բլոկներ', blockType: 'Բլոկի տեսակ', diff --git a/packages/translations/src/languages/id.ts b/packages/translations/src/languages/id.ts index 0e31622af72..81ae22d70f2 100644 --- a/packages/translations/src/languages/id.ts +++ b/packages/translations/src/languages/id.ts @@ -144,6 +144,7 @@ export const idTranslations: DefaultTranslationsObject = { addNewLabel: 'Tambah {{label}} baru', addRelationship: 'Tambah Hubungan', addUpload: 'Tambah Unggahan', + allLocaleStatus: 'Status - Semua Lokal', block: 'Blok', blocks: 'blok', blockType: 'Tipe Blok', diff --git a/packages/translations/src/languages/is.ts b/packages/translations/src/languages/is.ts index 7ee92561a89..62805a953e8 100644 --- a/packages/translations/src/languages/is.ts +++ b/packages/translations/src/languages/is.ts @@ -143,6 +143,7 @@ export const isTranslations: DefaultTranslationsObject = { addNewLabel: 'Bæta við nýju {{label}}', addRelationship: 'Bæta við tengingu', addUpload: 'Bæta við skráarupphleðslu', + allLocaleStatus: 'Staða - Allar staðfærslur', block: 'blokk', blocks: 'blokkir', blockType: 'Blokkartegund', diff --git a/packages/translations/src/languages/it.ts b/packages/translations/src/languages/it.ts index b0c4121c50f..dc9a3890e3b 100644 --- a/packages/translations/src/languages/it.ts +++ b/packages/translations/src/languages/it.ts @@ -147,6 +147,7 @@ export const itTranslations: DefaultTranslationsObject = { addNewLabel: 'Aggiungi nuovo {{label}}', addRelationship: 'Aggiungi Relazione', addUpload: 'aggiungi Carica', + allLocaleStatus: 'Stato - Tutti i luoghi', block: 'Blocco', blocks: 'blocchi', blockType: 'Tipo di Blocco', diff --git a/packages/translations/src/languages/ja.ts b/packages/translations/src/languages/ja.ts index a71c271f23b..850f3812fc1 100644 --- a/packages/translations/src/languages/ja.ts +++ b/packages/translations/src/languages/ja.ts @@ -144,6 +144,7 @@ export const jaTranslations: DefaultTranslationsObject = { addNewLabel: '{{label}} を新規追加', addRelationship: 'リレーションシップを追加', addUpload: 'アップロードを追加', + allLocaleStatus: 'ステータス - すべてのロケール', block: 'ブロック', blocks: 'ブロック', blockType: 'ブロックタイプ', diff --git a/packages/translations/src/languages/ko.ts b/packages/translations/src/languages/ko.ts index 750fd868fd9..eba78fb153b 100644 --- a/packages/translations/src/languages/ko.ts +++ b/packages/translations/src/languages/ko.ts @@ -143,6 +143,7 @@ export const koTranslations: DefaultTranslationsObject = { addNewLabel: '새로운 {{label}} 추가', addRelationship: '관계 추가', addUpload: '업로드 추가', + allLocaleStatus: '상태 - 모든 로케일', block: '블록', blocks: '블록', blockType: '블록 유형', diff --git a/packages/translations/src/languages/lt.ts b/packages/translations/src/languages/lt.ts index 91824191351..793718a83f8 100644 --- a/packages/translations/src/languages/lt.ts +++ b/packages/translations/src/languages/lt.ts @@ -145,6 +145,7 @@ export const ltTranslations: DefaultTranslationsObject = { addNewLabel: 'Pridėti naują {{label}}', addRelationship: 'Pridėti santykį', addUpload: 'Pridėti Įkelti', + allLocaleStatus: 'Statusas - Visos lokalės', block: 'Blokas', blocks: 'blokai', blockType: 'Blokas Tipas', diff --git a/packages/translations/src/languages/lv.ts b/packages/translations/src/languages/lv.ts index 8fbd69266d3..37b4fc20eec 100644 --- a/packages/translations/src/languages/lv.ts +++ b/packages/translations/src/languages/lv.ts @@ -143,6 +143,7 @@ export const lvTranslations: DefaultTranslationsObject = { addNewLabel: 'Pievienot jaunu {{label}}', addRelationship: 'Pievienot saistību', addUpload: 'Pievienot augšupielādi', + allLocaleStatus: 'Statuss - Visas lokālās versijas', block: 'Bloks', blocks: 'bloki', blockType: 'Bloka tips', diff --git a/packages/translations/src/languages/my.ts b/packages/translations/src/languages/my.ts index 0941d1c730c..48f91a29d42 100644 --- a/packages/translations/src/languages/my.ts +++ b/packages/translations/src/languages/my.ts @@ -144,6 +144,7 @@ export const myTranslations: DefaultTranslationsObject = { addNewLabel: '{{label}} အားအသစ် ထည့်သွင်းမည်။', addRelationship: 'Relationship အသစ်ထည့်သွင်းမည်။', addUpload: 'Upload ထည့်ပါ။', + allLocaleStatus: 'Status - Semua Locale', block: 'ဘလောက်', blocks: 'ဘလောက်များ', blockType: 'ဘလောက် အမျိုးအစား', diff --git a/packages/translations/src/languages/nb.ts b/packages/translations/src/languages/nb.ts index 9fb5e1472a1..ee2deeedca6 100644 --- a/packages/translations/src/languages/nb.ts +++ b/packages/translations/src/languages/nb.ts @@ -143,6 +143,7 @@ export const nbTranslations: DefaultTranslationsObject = { addNewLabel: 'Legg til ny {{label}}', addRelationship: 'Legg til relasjon', addUpload: 'Legg til opplasting', + allLocaleStatus: 'Status - Alle lokaliteter', block: 'Blokk', blocks: 'blokker', blockType: 'Blokktype', diff --git a/packages/translations/src/languages/nl.ts b/packages/translations/src/languages/nl.ts index b2cb1d1f876..b1e0a103fa8 100644 --- a/packages/translations/src/languages/nl.ts +++ b/packages/translations/src/languages/nl.ts @@ -145,6 +145,7 @@ export const nlTranslations: DefaultTranslationsObject = { addNewLabel: 'Nieuw(e) {{label}} toevoegen', addRelationship: 'Nieuwe Relatie', addUpload: 'Upload Toevoegen', + allLocaleStatus: 'Status - Alle Locales', block: 'Blok', blocks: 'blokken', blockType: 'Bloktype', diff --git a/packages/translations/src/languages/pl.ts b/packages/translations/src/languages/pl.ts index 2f6a35efb64..2854708a4e5 100644 --- a/packages/translations/src/languages/pl.ts +++ b/packages/translations/src/languages/pl.ts @@ -142,6 +142,7 @@ export const plTranslations: DefaultTranslationsObject = { addNewLabel: 'Dodaj nowy {{label}}', addRelationship: 'Dodaj Relację', addUpload: 'Dodaj ładowanie', + allLocaleStatus: 'Status - Wszystkie lokalizacje', block: 'Blok', blocks: 'Bloki', blockType: 'Typ Bloku', diff --git a/packages/translations/src/languages/pt.ts b/packages/translations/src/languages/pt.ts index 5aa78d11b71..899d72f8d6e 100644 --- a/packages/translations/src/languages/pt.ts +++ b/packages/translations/src/languages/pt.ts @@ -143,6 +143,7 @@ export const ptTranslations: DefaultTranslationsObject = { addNewLabel: 'Adicionar novo {{label}}', addRelationship: 'Adicionar Relação', addUpload: 'Adicionar Upload', + allLocaleStatus: 'Status - Todos os Locales', block: 'Bloco', blocks: 'blocos', blockType: 'Tipo de bloco', diff --git a/packages/translations/src/languages/ro.ts b/packages/translations/src/languages/ro.ts index 99de2fd2dbf..7788bd5799e 100644 --- a/packages/translations/src/languages/ro.ts +++ b/packages/translations/src/languages/ro.ts @@ -147,6 +147,7 @@ export const roTranslations: DefaultTranslationsObject = { addNewLabel: 'Adăugați un nou {{label}}', addRelationship: 'Adăugați o relație', addUpload: 'Adăugați un fișier', + allLocaleStatus: 'Stare - Toate localitățile', block: 'Bloc', blocks: 'Blocuri', blockType: 'Tip de bloc', diff --git a/packages/translations/src/languages/rs.ts b/packages/translations/src/languages/rs.ts index aed84d4cbed..bc6d877b8f9 100644 --- a/packages/translations/src/languages/rs.ts +++ b/packages/translations/src/languages/rs.ts @@ -144,6 +144,7 @@ export const rsTranslations: DefaultTranslationsObject = { addNewLabel: 'Додај нови {{label}}', addRelationship: 'Додај релацију', addUpload: 'Додај учитавање', + allLocaleStatus: 'Status - Sve Lokacije', block: 'Блокирање', blocks: 'блокирања', blockType: 'Врста блокирања', diff --git a/packages/translations/src/languages/rsLatin.ts b/packages/translations/src/languages/rsLatin.ts index fd2fe176508..6cbbfc914ed 100644 --- a/packages/translations/src/languages/rsLatin.ts +++ b/packages/translations/src/languages/rsLatin.ts @@ -144,6 +144,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = { addNewLabel: 'Dodaj novi {{label}}', addRelationship: 'Dodaj relaciju', addUpload: 'Dodaj učitavanje', + allLocaleStatus: 'Status - Sve Lokalizacije', block: 'Blokiranje', blocks: 'blokiranja', blockType: 'Vrsta blokiranja', diff --git a/packages/translations/src/languages/ru.ts b/packages/translations/src/languages/ru.ts index 254333ca680..51153898623 100644 --- a/packages/translations/src/languages/ru.ts +++ b/packages/translations/src/languages/ru.ts @@ -145,6 +145,7 @@ export const ruTranslations: DefaultTranslationsObject = { addNewLabel: 'Добавить {{label}}', addRelationship: 'Добавить Отношения', addUpload: 'Добавить загрузку', + allLocaleStatus: 'Статус - все локали', block: 'Блок', blocks: 'Блоки', blockType: 'Тип Блока', diff --git a/packages/translations/src/languages/sk.ts b/packages/translations/src/languages/sk.ts index 148fa2b6f22..444c53e54bf 100644 --- a/packages/translations/src/languages/sk.ts +++ b/packages/translations/src/languages/sk.ts @@ -146,6 +146,7 @@ export const skTranslations: DefaultTranslationsObject = { addNewLabel: 'Pridať nový {{label}}', addRelationship: 'Pridať vzťah', addUpload: 'Pridať nahrávanie', + allLocaleStatus: 'Stav - Všetky jazykové verzie', block: 'Blok', blocks: 'bloky', blockType: 'Typ bloku', diff --git a/packages/translations/src/languages/sl.ts b/packages/translations/src/languages/sl.ts index 49895148f20..bc3307fc559 100644 --- a/packages/translations/src/languages/sl.ts +++ b/packages/translations/src/languages/sl.ts @@ -143,6 +143,7 @@ export const slTranslations: DefaultTranslationsObject = { addNewLabel: 'Dodaj nov {{label}}', addRelationship: 'Dodaj povezavo', addUpload: 'Dodaj nalaganje', + allLocaleStatus: 'Stanje - Vse jezikovne različice', block: 'Blok', blocks: 'bloki', blockType: 'Tip bloka', diff --git a/packages/translations/src/languages/sv.ts b/packages/translations/src/languages/sv.ts index 13ea0e1bdad..d9739b43051 100644 --- a/packages/translations/src/languages/sv.ts +++ b/packages/translations/src/languages/sv.ts @@ -143,6 +143,7 @@ export const svTranslations: DefaultTranslationsObject = { addNewLabel: 'Lägg till ny {{label}}', addRelationship: 'Lägg till relation', addUpload: 'Lägg till uppladdning', + allLocaleStatus: 'Status - Alla språkinställningar', block: 'Block', blocks: 'block', blockType: 'Blocktyp', diff --git a/packages/translations/src/languages/ta.ts b/packages/translations/src/languages/ta.ts index 5a7a76a66bd..ec3d2e4c314 100644 --- a/packages/translations/src/languages/ta.ts +++ b/packages/translations/src/languages/ta.ts @@ -142,6 +142,7 @@ export const taTranslations: DefaultTranslationsObject = { addNewLabel: 'புதிய {{label}} சேர்க்கவும்', addRelationship: 'உறவைக் (Relationship) சேர்க்கவும்', addUpload: 'பதிவேற்றத்தைச் சேர்க்கவும்', + allLocaleStatus: 'நிலை - அனைத்து மாவட்டங்கள்', block: 'தொகுதி', blocks: 'தொகுதிகள்', blockType: 'தொகுதி வகை', diff --git a/packages/translations/src/languages/th.ts b/packages/translations/src/languages/th.ts index 7fe52fa8a6a..1d09c66003d 100644 --- a/packages/translations/src/languages/th.ts +++ b/packages/translations/src/languages/th.ts @@ -141,6 +141,7 @@ export const thTranslations: DefaultTranslationsObject = { addNewLabel: 'เพิ่ม {{label}} ใหม่', addRelationship: 'เพิ่มความสัมพันธ์', addUpload: 'เพิ่มการอัปโหลด', + allLocaleStatus: 'สถานะ - ทุกภาษา', block: 'Block', blocks: 'Blocks', blockType: 'ประเภท Block', diff --git a/packages/translations/src/languages/tr.ts b/packages/translations/src/languages/tr.ts index 8ece021f966..d2e0d4c4139 100644 --- a/packages/translations/src/languages/tr.ts +++ b/packages/translations/src/languages/tr.ts @@ -145,6 +145,7 @@ export const trTranslations: DefaultTranslationsObject = { addNewLabel: 'Yeni {{label}}', addRelationship: 'İlişki Ekle', addUpload: 'Yükleme Ekle', + allLocaleStatus: 'Durum - Tüm Yerel Ayarlar', block: 'Blok', blocks: 'blok', blockType: 'Blok tipi', diff --git a/packages/translations/src/languages/uk.ts b/packages/translations/src/languages/uk.ts index cf5fe3bcb8f..100cfcc069c 100644 --- a/packages/translations/src/languages/uk.ts +++ b/packages/translations/src/languages/uk.ts @@ -144,6 +144,7 @@ export const ukTranslations: DefaultTranslationsObject = { addNewLabel: 'Створити {{label}}', addRelationship: "Додати взаємозв'язок", addUpload: 'Додати завантаження', + allLocaleStatus: 'Статус - Всі локалі', block: 'Блок', blocks: 'блоки', blockType: 'Тип блока', diff --git a/packages/translations/src/languages/vi.ts b/packages/translations/src/languages/vi.ts index c31022cfaf7..e585bc7e2ba 100644 --- a/packages/translations/src/languages/vi.ts +++ b/packages/translations/src/languages/vi.ts @@ -143,6 +143,7 @@ export const viTranslations: DefaultTranslationsObject = { addNewLabel: 'Thêm mới: {{label}}', addRelationship: 'Thêm mối quan hệ (relationship)', addUpload: 'Thêm tải lên (upload)', + allLocaleStatus: 'Trạng thái - Tất cả các địa phương', block: 'Block', blocks: 'blocks', blockType: 'Block Type', diff --git a/packages/translations/src/languages/zh.ts b/packages/translations/src/languages/zh.ts index 93c165add5e..246904fd24c 100644 --- a/packages/translations/src/languages/zh.ts +++ b/packages/translations/src/languages/zh.ts @@ -136,6 +136,7 @@ export const zhTranslations: DefaultTranslationsObject = { addNewLabel: '添加新的{{label}}', addRelationship: '添加关系', addUpload: '添加上传', + allLocaleStatus: '状态 - 所有地区设置', block: '区块', blocks: '区块', blockType: '区块类型', diff --git a/packages/translations/src/languages/zhTw.ts b/packages/translations/src/languages/zhTw.ts index d146f2b8d8a..755c461f1a5 100644 --- a/packages/translations/src/languages/zhTw.ts +++ b/packages/translations/src/languages/zhTw.ts @@ -135,6 +135,7 @@ export const zhTwTranslations: DefaultTranslationsObject = { addNewLabel: '新增 {{label}}', addRelationship: '新增關聯', addUpload: '新增上傳', + allLocaleStatus: '狀態 - 所有地區設定', block: '區塊', blocks: '區塊', blockType: '區塊類型', diff --git a/packages/ui/src/elements/Status/AllLocaleStatusCell/index.scss b/packages/ui/src/elements/Status/AllLocaleStatusCell/index.scss new file mode 100644 index 00000000000..fa047e27202 --- /dev/null +++ b/packages/ui/src/elements/Status/AllLocaleStatusCell/index.scss @@ -0,0 +1,10 @@ +@import '../../../scss/styles.scss'; + +@layer payload-default { + .locale-status-cell { + display: flex; + align-items: center; + gap: calc(var(--base) / 2); + flex-wrap: wrap; + } +} diff --git a/packages/ui/src/elements/Status/AllLocaleStatusCell/index.server.tsx b/packages/ui/src/elements/Status/AllLocaleStatusCell/index.server.tsx new file mode 100644 index 00000000000..7ff76f14f3d --- /dev/null +++ b/packages/ui/src/elements/Status/AllLocaleStatusCell/index.server.tsx @@ -0,0 +1,71 @@ +import type { DefaultServerCellComponentProps, SanitizedLocalizationConfig } from 'payload' + +import { createLocalReq } from 'payload' +import React from 'react' + +import { Pill } from '../../Pill/index.js' +import './index.scss' + +const baseClass = 'locale-status-cell' + +export const AllLocaleStatusCell = async ({ + collectionConfig, + payload, + rowData, +}: DefaultServerCellComponentProps) => { + const localization = payload.config.localization as SanitizedLocalizationConfig + const req = await createLocalReq({}, payload) + const fallbackStatus = rowData?._status + + const availableLocales = + (await localization.filterAvailableLocales?.({ + locales: localization.locales, + req, + })) ?? localization.locales + + const selectLocales: Record = {} + availableLocales.forEach((locale) => { + if (typeof locale === 'string') { + selectLocales[locale] = true + } else { + selectLocales[locale.code] = true + } + }) + + const versionStatus = await payload.db + .findVersions({ + collection: collectionConfig.slug, + limit: 1, + select: { + localeStatus: selectLocales, + }, + where: { + parent: { + equals: rowData.id, + }, + }, + }) + .then((result) => result.docs[0]) + + if (!fallbackStatus && !versionStatus?.localeStatus) { + return null + } + + return ( +
+ {availableLocales.map((locale) => { + const status = versionStatus?.localeStatus?.[locale.code] || fallbackStatus + + return ( + + {locale.code} + + ) + })} +
+ ) +} diff --git a/packages/ui/src/exports/rsc/index.ts b/packages/ui/src/exports/rsc/index.ts index 2e8d5221877..1686e2a01df 100644 --- a/packages/ui/src/exports/rsc/index.ts +++ b/packages/ui/src/exports/rsc/index.ts @@ -3,6 +3,7 @@ export { FieldDiffLabel } from '../../elements/FieldDiffLabel/index.js' export { FolderTableCell } from '../../elements/FolderView/Cell/index.server.js' export { FolderField } from '../../elements/FolderView/FolderField/index.server.js' export { getHTMLDiffComponents } from '../../elements/HTMLDiff/index.js' +export { AllLocaleStatusCell } from '../../elements/Status/AllLocaleStatusCell/index.server.js' export { _internal_renderFieldHandler } from '../../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js' export { File } from '../../graphics/File/index.js' export { CheckIcon } from '../../icons/Check/index.js' diff --git a/test/localization/config.ts b/test/localization/config.ts index 8389526a374..9f056cf2e27 100644 --- a/test/localization/config.ts +++ b/test/localization/config.ts @@ -430,6 +430,7 @@ export default buildConfigWithDefaults({ ], experimental: { localizeStatus: true, + allLocaleStatus: true, }, localization: { filterAvailableLocales: ({ locales }) => {