101 lines
2.9 KiB
TypeScript
101 lines
2.9 KiB
TypeScript
import { getPayload } from 'payload'
|
|
import configPromise from '../src/payload.config'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
async function run() {
|
|
const payload = await getPayload({ config: configPromise })
|
|
|
|
// 1. Create media records
|
|
const mediaDir = path.join(process.cwd(), 'media')
|
|
const files = fs.readdirSync(mediaDir).filter(f => f !== '.DS_Store' && f !== 'placeholder-desk.jpg' && f.endsWith('.png'))
|
|
|
|
const mediaIds = []
|
|
|
|
for (const file of files) {
|
|
const filePath = path.join(mediaDir, file)
|
|
const existing = await payload.find({
|
|
collection: 'media',
|
|
where: { filename: { equals: file } }
|
|
})
|
|
|
|
if (existing.docs.length > 0) {
|
|
mediaIds.push(existing.docs[0].id)
|
|
} else {
|
|
console.log(`Creating media record for ${file}`)
|
|
try {
|
|
const created = await payload.create({
|
|
collection: 'media',
|
|
data: { alt: 'Hero background' },
|
|
file: {
|
|
data: fs.readFileSync(filePath),
|
|
mimetype: 'image/png',
|
|
name: file,
|
|
size: fs.statSync(filePath).size
|
|
}
|
|
})
|
|
mediaIds.push(created.id)
|
|
} catch (e) {
|
|
console.error("Error creating", file, e.message)
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(`Available hero media IDs: ${mediaIds.join(', ')}`)
|
|
|
|
if (mediaIds.length === 0) {
|
|
console.error("No media ids found! Exiting.")
|
|
process.exit(1)
|
|
}
|
|
|
|
// 2. Update all pages
|
|
const locales = ['pl', 'de']
|
|
let mediaIndex = 0
|
|
|
|
for (const locale of locales) {
|
|
const pages = await payload.find({ collection: 'pages', locale: locale as any, limit: 100 })
|
|
|
|
for (const page of pages.docs) {
|
|
const imgId = mediaIds[mediaIndex % mediaIds.length]
|
|
mediaIndex++
|
|
|
|
let changed = false
|
|
const layout = page.layout || []
|
|
|
|
if (page.slug === 'home') {
|
|
// Find hero block
|
|
const heroBlock = layout.find((b: any) => b.blockType === 'hero')
|
|
if (heroBlock && !heroBlock.backgroundImage) {
|
|
heroBlock.backgroundImage = imgId
|
|
changed = true
|
|
console.log(`Updated home page (${locale}) hero image.`)
|
|
}
|
|
} else {
|
|
// Find pageHeader block
|
|
const headerBlock = layout.find((b: any) => b.blockType === 'pageHeader')
|
|
if (headerBlock && !headerBlock.image) {
|
|
headerBlock.image = imgId
|
|
changed = true
|
|
console.log(`Updated ${page.slug} (${locale}) pageHeader image.`)
|
|
} else if (!headerBlock) {
|
|
// If no pageHeader, should we add it?
|
|
// Usually every page has it, except some legal pages. Let's just update existing ones first.
|
|
}
|
|
}
|
|
|
|
if (changed) {
|
|
await payload.update({
|
|
collection: 'pages',
|
|
id: page.id,
|
|
locale: locale as any,
|
|
data: { layout }
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log("Done updating pages.")
|
|
process.exit(0)
|
|
}
|
|
run().catch(console.error)
|