diff --git a/proto/scripts/migrate-content-to-payload.ts b/proto/scripts/migrate-content-to-payload.ts index 5bb54f4..33d83e9 100644 --- a/proto/scripts/migrate-content-to-payload.ts +++ b/proto/scripts/migrate-content-to-payload.ts @@ -12,6 +12,14 @@ * írja a Payload-ban lévő korábbi állapotot. NEM törli/nem érinti a JSON * fájlokat. * + * MITHOME-92 tapasztalat: a versions.drafts bekapcsolása után a `_status` + * mező defaultValue-ja 'draft' — ha egy create/update hívás data-jában + * nincs explicit `_status`, ÚJ dokumentum létrehozásakor 'draft' lesz, és + * frissítéskor a meglévő (draft) érték marad meg (nem íródik felül + * automatikusan 'published'-re). Ezért itt minden Globals/LegalPages/ + * Partners írás explicit `_status: 'published'`-t ad át — a migrációs + * script eredménye mindig publikált tartalom legyen, sosem draft. + * * MITHOME-110 tapasztalat: ha egy mezőt utólag `localized: true`-ra * állítasz (MITHOME-111/112 retrofit), a korábban beírt érték a régi, * nem-lokalizált tárolási alakban marad, és `locale: defaultLocale`-lal @@ -112,12 +120,12 @@ async function upsertLegalPage(payload: Payload, slug: string, json: LegalPageJs await payload.update({ collection: 'legal-pages', id: existing.docs[0].id, - data: { slug, ...json }, + data: { slug, ...json, _status: 'published' }, }) } else { await payload.create({ collection: 'legal-pages', - data: { slug, ...json }, + data: { slug, ...json, _status: 'published' }, }) } } @@ -160,12 +168,12 @@ async function upsertPartner(payload: Payload, partner: PartnerJson) { await payload.update({ collection: 'partners', id: existingPartner.docs[0].id, - data: { name: partner.name, url: partner.url, logo: mediaId }, + data: { name: partner.name, url: partner.url, logo: mediaId, _status: 'published' }, }) } else { await payload.create({ collection: 'partners', - data: { name: partner.name, url: partner.url, logo: mediaId }, + data: { name: partner.name, url: partner.url, logo: mediaId, _status: 'published' }, }) } } @@ -173,19 +181,19 @@ async function upsertPartner(payload: Payload, partner: PartnerJson) { async function run() { const payload = await getPayload({ config }) - await payload.updateGlobal({ slug: 'home', data: buildHomeData(homeJson) }) + await payload.updateGlobal({ slug: 'home', data: { ...buildHomeData(homeJson), _status: 'published' } }) payload.logger.info('Home global migrálva') - await payload.updateGlobal({ slug: 'about', data: buildAboutData(aboutJson) }) + await payload.updateGlobal({ slug: 'about', data: { ...buildAboutData(aboutJson), _status: 'published' } }) payload.logger.info('About global migrálva') - await payload.updateGlobal({ slug: 'services', data: buildServicesData(servicesJson) }) + await payload.updateGlobal({ slug: 'services', data: { ...buildServicesData(servicesJson), _status: 'published' } }) payload.logger.info('Services global migrálva') - await payload.updateGlobal({ slug: 'contact', data: contactJson }) + await payload.updateGlobal({ slug: 'contact', data: { ...contactJson, _status: 'published' } }) payload.logger.info('Contact global migrálva') - await payload.updateGlobal({ slug: 'common', data: commonJson }) + await payload.updateGlobal({ slug: 'common', data: { ...commonJson, _status: 'published' } }) payload.logger.info('Common global migrálva') await upsertLegalPage(payload, 'adatvedelem', adatvedelemJson) diff --git a/proto/src/collections/LegalPages.ts b/proto/src/collections/LegalPages.ts index b3be2c0..30cf599 100644 --- a/proto/src/collections/LegalPages.ts +++ b/proto/src/collections/LegalPages.ts @@ -1,11 +1,13 @@ import type { CollectionConfig } from 'payload' +import { collectionVersions } from '../lib/payload-versions' + /** * Mirrors LegalPageContent (proto/src/content/types.ts) — MITHOME-88. * Slug-alapú collection a jogi oldalaknak (adatvedelem, hasznalati-feltetelek). * - * WHY `content` textarea és nem lexical richText: a jelenlegi frontend - * (proto/src/app/(frontend)/adatvedelem/page.tsx) a szekció-tartalmat egy + * WHY `content` textarea és nem lexical richText: a frontend + * (proto/src/components/views/LegalPageView.tsx) a szekció-tartalmat egy * kézzel írt regex-alapú "•"/"**bold**" -> HTML konverzióval rendereli, nem * valódi Markdown- vagy richText-parserrel. Ugyanaz a döntés, mint a * Contact global gdpr.label mezőjénél (MITHOME-87) — a bootstrap szinten @@ -17,6 +19,7 @@ export const LegalPages: CollectionConfig = { useAsTitle: 'title', group: 'Oldalak', }, + versions: collectionVersions, fields: [ { name: 'slug', diff --git a/proto/src/collections/Partners.ts b/proto/src/collections/Partners.ts index a7313b3..89fe7fc 100644 --- a/proto/src/collections/Partners.ts +++ b/proto/src/collections/Partners.ts @@ -1,5 +1,7 @@ import type { CollectionConfig } from 'payload' +import { collectionVersions } from '../lib/payload-versions' + /** * Mirrors home.json `partners.items` (proto/src/content/pages/home.json) — * MITHOME-89 (MVP). Korábban a Home Global szándékosan NEM tartalmazta ezt @@ -12,6 +14,7 @@ export const Partners: CollectionConfig = { useAsTitle: 'name', group: 'Oldalak', }, + versions: collectionVersions, fields: [ { name: 'name', type: 'text', required: true }, { name: 'url', type: 'text', required: true }, diff --git a/proto/src/globals/About.ts b/proto/src/globals/About.ts index eaa8ceb..66303a8 100644 --- a/proto/src/globals/About.ts +++ b/proto/src/globals/About.ts @@ -1,6 +1,7 @@ import type { GlobalConfig } from 'payload' import { stringArrayField } from './fields/stringArray' +import { globalVersions } from '../lib/payload-versions' /** Mirrors AboutPageContent (proto/src/content/types.ts) — MITHOME-87. */ export const About: GlobalConfig = { @@ -8,6 +9,7 @@ export const About: GlobalConfig = { admin: { group: 'Oldalak', }, + versions: globalVersions, fields: [ { name: 'meta', diff --git a/proto/src/globals/Common.ts b/proto/src/globals/Common.ts index 2258482..63758b9 100644 --- a/proto/src/globals/Common.ts +++ b/proto/src/globals/Common.ts @@ -1,5 +1,7 @@ import type { GlobalConfig } from 'payload' +import { globalVersions } from '../lib/payload-versions' + /** * Mirrors CommonContent (proto/src/content/types.ts) — MITHOME-87. * @@ -14,6 +16,7 @@ export const Common: GlobalConfig = { admin: { group: 'Oldalak', }, + versions: globalVersions, fields: [ { name: 'buttons', diff --git a/proto/src/globals/Contact.ts b/proto/src/globals/Contact.ts index 7ae951d..fbfa54c 100644 --- a/proto/src/globals/Contact.ts +++ b/proto/src/globals/Contact.ts @@ -1,5 +1,7 @@ import type { GlobalConfig } from 'payload' +import { globalVersions } from '../lib/payload-versions' + /** * Mirrors ContactPageContent (proto/src/content/types.ts) — MITHOME-87. * @@ -14,6 +16,7 @@ export const Contact: GlobalConfig = { admin: { group: 'Oldalak', }, + versions: globalVersions, fields: [ { name: 'meta', diff --git a/proto/src/globals/Home.ts b/proto/src/globals/Home.ts index 05cffb1..f1a6296 100644 --- a/proto/src/globals/Home.ts +++ b/proto/src/globals/Home.ts @@ -1,6 +1,7 @@ import type { GlobalConfig } from 'payload' import { stringArrayField } from './fields/stringArray' +import { globalVersions } from '../lib/payload-versions' /** * Mirrors HomePageContent (proto/src/content/types.ts) — MITHOME-87. @@ -15,6 +16,7 @@ export const Home: GlobalConfig = { admin: { group: 'Oldalak', }, + versions: globalVersions, fields: [ { name: 'hero', diff --git a/proto/src/globals/Services.ts b/proto/src/globals/Services.ts index 3fccecd..a3454c9 100644 --- a/proto/src/globals/Services.ts +++ b/proto/src/globals/Services.ts @@ -1,6 +1,7 @@ import type { GlobalConfig } from 'payload' import { stringArrayField } from './fields/stringArray' +import { globalVersions } from '../lib/payload-versions' /** Mirrors ServicesPageContent (proto/src/content/types.ts) — MITHOME-87. */ export const Services: GlobalConfig = { @@ -8,6 +9,7 @@ export const Services: GlobalConfig = { admin: { group: 'Oldalak', }, + versions: globalVersions, fields: [ { name: 'meta', diff --git a/proto/src/lib/payload-versions.ts b/proto/src/lib/payload-versions.ts new file mode 100644 index 0000000..9eedf21 --- /dev/null +++ b/proto/src/lib/payload-versions.ts @@ -0,0 +1,27 @@ +import type { GlobalConfig, CollectionConfig } from 'payload' + +/** + * MITHOME-92: közös draft/verziózás beállítás — ez az elődje a régi egyedi + * CMS "Verziók panel"-jének (MITHOME-64: mentéslista, diff-nézet, egy- + * kattintásos visszaállítás). A Payload beépített verziózása/draft-rendszere + * ugyanezt adja natívan (Payload admin "Versions" fül minden dokumentumon), + * nem kellett újraépíteni. + * + * WHY `autosave` nincs bekapcsolva: az ügyfél explicit "Save Draft" / + * "Publish" gombokkal dolgozzon, ne automatikus mentés — ugyanaz a + * szándékos, kézi mentés-modell, mint a régi CMS-nél volt. + * + * WHY a Local API hívásaink (src/lib/payload-content.ts) nem törnek el + * ettől: `findGlobal`/`find` alapból a PUBLISHED verziót adja vissza, amíg + * explicit `draft: true` paramétert nem adunk át — ezt sehol nem tesszük, + * így a publikus oldal renderelése változatlan marad. + */ +export const globalVersions: GlobalConfig['versions'] = { + drafts: true, + max: 50, +} + +export const collectionVersions: CollectionConfig['versions'] = { + drafts: true, + maxPerDoc: 50, +}