mirror of
https://github.com/xtr-dev/payload-mailing.git
synced 2025-12-10 08:13:23 +00:00
Add templateSlug field auto-populated from template relationship and bump version to 0.4.17
Added templateSlug text field to Emails collection that is automatically populated via beforeChange hook when template relationship is set, making template slug accessible in beforeSend hook. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,7 @@ const Emails: CollectionConfig = {
|
||||
description: 'Email delivery and status tracking',
|
||||
},
|
||||
defaultPopulate: {
|
||||
template: true,
|
||||
templateSlug: true,
|
||||
to: true,
|
||||
cc: true,
|
||||
bcc: true,
|
||||
@@ -40,6 +40,14 @@ const Emails: CollectionConfig = {
|
||||
description: 'Email template used (optional if custom content provided)',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'templateSlug',
|
||||
type: 'text',
|
||||
admin: {
|
||||
description: 'Slug of the email template (auto-populated from template relationship)',
|
||||
readOnly: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'to',
|
||||
type: 'text',
|
||||
@@ -208,6 +216,27 @@ const Emails: CollectionConfig = {
|
||||
},
|
||||
],
|
||||
hooks: {
|
||||
beforeChange: [
|
||||
async ({ data, req }) => {
|
||||
// Auto-populate templateSlug from template relationship
|
||||
if (data.template) {
|
||||
try {
|
||||
const template = await req.payload.findByID({
|
||||
collection: 'email-templates',
|
||||
id: typeof data.template === 'string' ? data.template : data.template.id,
|
||||
})
|
||||
data.templateSlug = template.slug
|
||||
} catch (error) {
|
||||
// If template lookup fails, clear the slug
|
||||
data.templateSlug = undefined
|
||||
}
|
||||
} else {
|
||||
// Clear templateSlug if template is removed
|
||||
data.templateSlug = undefined
|
||||
}
|
||||
return data
|
||||
}
|
||||
],
|
||||
// Simple approach: Only use afterChange hook for job management
|
||||
// This avoids complex interaction between hooks and ensures document ID is always available
|
||||
afterChange: [
|
||||
|
||||
@@ -14,6 +14,7 @@ export type JSONValue = string | number | boolean | { [k: string]: unknown } | u
|
||||
export interface BaseEmailDocument {
|
||||
id: string | number
|
||||
template?: any
|
||||
templateSlug?: string | null
|
||||
to: string[]
|
||||
cc?: string[] | null
|
||||
bcc?: string[] | null
|
||||
|
||||
Reference in New Issue
Block a user