mirror of
https://github.com/xtr-dev/payload-automation.git
synced 2025-12-10 17:03:22 +00:00
- Use Object.assign to create properly bound hook function - Use global.console instead of regular console for guaranteed output - Add global executor fallback for execution context isolation - Use named function (payloadAutomationHook) for better debugging - Add version metadata to help identify our hook - Don't throw errors, just log them to avoid breaking other hooks This fixes the 'hook registers but doesn't execute' issue by ensuring the function has proper scope and binding.
4.0 KiB
4.0 KiB
🔍 CRITICAL DIAGNOSTIC: Why The Plugin Works Locally But Not For You
The Key Insight
Our tests work because we define collections inline in the config:
// OUR TEST ENVIRONMENT - WORKS
export default buildConfig({
collections: [
{
slug: 'posts',
fields: [...],
// Collection defined RIGHT HERE
}
],
plugins: [
workflowsPlugin({...}) // Plugin can see collections above
]
})
The Likely Customer Setup
You probably have collections defined separately:
// YOUR ENVIRONMENT - LIKELY STRUCTURE
import { Orders } from './collections/Orders'
import { Users } from './collections/Users'
import { Products } from './collections/Products'
export default buildConfig({
collections: [
Orders, // Imported from separate file
Users, // Imported from separate file
Products // Imported from separate file
],
plugins: [
workflowsPlugin({...}) // Plugin runs but collections might be different
]
})
The Critical Question
How are your collections defined?
Option 1: Separate Files (Most Common)
// collections/Orders.ts
export const Orders: CollectionConfig = {
slug: 'orders',
hooks: {
// Your existing hooks here
},
fields: [...]
}
Option 2: Factory Functions
// collections/Orders.ts
export const Orders = (): CollectionConfig => ({
slug: 'orders',
// ...
})
Option 3: Class-based or Complex Setup
// Something more complex that might not be in config.collections yet
🚨 THE DIAGNOSTIC TEST
Add this to your payload.config.ts BEFORE the workflowsPlugin:
export default buildConfig({
collections: [Orders, Users, Products],
plugins: [
// ADD THIS DIAGNOSTIC PLUGIN FIRST
(config) => {
console.log('🔍 DIAGNOSTIC: Collections in config:')
console.log(' - config.collections exists?', !!config.collections)
console.log(' - config.collections length:', config.collections?.length)
console.log(' - Collection slugs:', config.collections?.map(c => c.slug))
// Check if orders collection has hooks already
const ordersConfig = config.collections?.find(c => c.slug === 'orders')
console.log(' - Orders collection found?', !!ordersConfig)
console.log(' - Orders has hooks?', !!ordersConfig?.hooks)
console.log(' - Orders afterChange hooks:', ordersConfig?.hooks?.afterChange?.length || 0)
return config
},
// THEN your automation plugin
workflowsPlugin({...})
]
})
🎯 What This Will Tell Us
- If collections show up: The plugin should work with v0.0.20
- If collections are empty/undefined: That's why hooks aren't registering
- If orders already has hooks: There might be a conflict
💡 The Likely Solution
If your collections are in separate files, you might need to:
Option A: Add hooks directly to collection files
// collections/Orders.ts
import { automationHook } from '@xtr-dev/payload-automation/hooks' // We'd need to export this
export const Orders: CollectionConfig = {
slug: 'orders',
hooks: {
afterChange: [
automationHook, // Add directly here
// ... your other hooks
]
}
}
Option B: Modify collections before passing to buildConfig
// payload.config.ts
import { Orders } from './collections/Orders'
import { addAutomationHooks } from '@xtr-dev/payload-automation/utils' // We'd need to create this
const OrdersWithAutomation = addAutomationHooks(Orders)
export default buildConfig({
collections: [OrdersWithAutomation, Users, Products],
// ...
})
🔑 The Bottom Line
The plugin works when collections are defined inline because they exist in config.collections when the plugin runs.
If your collections are imported from separate files, they might not be in the right structure for the plugin to modify them.
Run the diagnostic above and share the console output - it will tell us exactly why the hooks aren't registering in your environment!