Files

95 lines
2.9 KiB
TypeScript

import { getPayload } from 'payload'
import configPromise from '../src/payload.config'
import fs from 'fs'
import path from 'path'
// Helper to remove ids
function removeIds(obj: any): any {
if (Array.isArray(obj)) return obj.map(removeIds)
if (obj !== null && typeof obj === 'object') {
const newObj: any = {}
for (const key of Object.keys(obj)) {
if (key !== 'id') {
newObj[key] = removeIds(obj[key])
}
}
return newObj
}
return obj
}
async function run() {
const payload = await getPayload({ config: configPromise })
// We already uploaded media 8 and 9 in previous script. Let's find any media.
const allMedia = await payload.find({ collection: 'media', limit: 10 })
const defaultImageId = allMedia.docs[0]?.id || 8
// Load snapshot
const snapshotPath = path.join(process.cwd(), 'scripts', 'content-snapshot.json')
const snapshot = JSON.parse(fs.readFileSync(snapshotPath, 'utf-8'))
const enTitles: Record<string, string> = {
'home': 'Home',
'uslugi': 'Services',
'jak-sie-umowic': 'How to make an appointment',
'o-nas': 'About Us',
'faq': 'FAQ',
'kontakt': 'Contact',
'stowarzyszenie': 'Association',
'polityka-prywatnosci': 'Privacy Policy',
'polityka-cookies': 'Cookie Policy',
'impressum': 'Imprint'
}
for (const pageSnapshot of snapshot.pages) {
const slug = pageSnapshot.pl.slug
if (slug === 'home') continue // Already fixed
const dbPage = await payload.find({ collection: 'pages', where: { slug: { equals: slug } }, locale: 'pl' })
if (!dbPage.docs[0]) continue
const pageId = dbPage.docs[0].id
const updateLayout = async (loc: 'pl' | 'de' | 'en', baseLoc: 'pl' | 'de') => {
let layout = removeIds(pageSnapshot[baseLoc]?.layout || pageSnapshot.pl.layout)
// Inject images
layout = layout.map((block: any) => {
if (block.blockType === 'hero' || block.blockType === 'pageHeader' || block.blockType === 'about' || block.blockType === 'contactSection') {
block.image = defaultImageId
}
if (block.blockType === 'servicesList') {
if (block.items) {
block.items = block.items.map((i: any) => ({ ...i, image: defaultImageId }))
}
}
return block
})
try {
await payload.update({
collection: 'pages',
id: pageId,
locale: loc,
data: {
title: loc === 'en' ? (enTitles[slug] || pageSnapshot[baseLoc].title) : (pageSnapshot[baseLoc]?.title || pageSnapshot.pl.title),
layout
}
})
console.log(`Successfully fixed ${slug} layout for ${loc}`)
} catch(e) {
console.error(`Failed to fix ${slug} for ${loc}`)
}
}
await updateLayout('pl', 'pl')
if (pageSnapshot.de) {
await updateLayout('de', 'de')
}
await updateLayout('en', 'pl') // Clone EN from PL base
}
process.exit(0)
}
run().catch(console.error)