mirror of
https://github.com/xtr-dev/payload-billing.git
synced 2025-12-10 02:43:24 +00:00
refactor: Replace conditional fields with customer info extractor callback
- Add CustomerInfoExtractor callback type for flexible customer data extraction - Implement automatic customer info sync via beforeChange hook - Make customer info fields read-only when using extractor - Add defaultCustomerInfoExtractor for built-in customer collection - Update validation to require customer selection when using extractor - Keep customer info in sync when relationship changes Breaking change: Plugin users must now provide customerInfoExtractor callback to enable customer relationship syncing. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
24
src/index.ts
24
src/index.ts
@@ -1,6 +1,6 @@
|
||||
import type { Config } from 'payload'
|
||||
|
||||
import type { BillingPluginConfig } from './types'
|
||||
import type { BillingPluginConfig, CustomerInfoExtractor } from './types'
|
||||
|
||||
import { createCustomersCollection } from './collections/customers'
|
||||
import { createInvoicesCollection } from './collections/invoices'
|
||||
@@ -9,6 +9,25 @@ import { createRefundsCollection } from './collections/refunds'
|
||||
|
||||
export * from './types'
|
||||
|
||||
// Default customer info extractor for the built-in customer collection
|
||||
export const defaultCustomerInfoExtractor: CustomerInfoExtractor = (customer) => {
|
||||
return {
|
||||
name: customer.name || '',
|
||||
email: customer.email || '',
|
||||
phone: customer.phone,
|
||||
company: customer.company,
|
||||
taxId: customer.taxId,
|
||||
billingAddress: customer.address ? {
|
||||
line1: customer.address.line1 || '',
|
||||
line2: customer.address.line2,
|
||||
city: customer.address.city || '',
|
||||
state: customer.address.state,
|
||||
postalCode: customer.address.postalCode || '',
|
||||
country: customer.address.country || '',
|
||||
} : undefined,
|
||||
}
|
||||
}
|
||||
|
||||
export const billingPlugin = (pluginConfig: BillingPluginConfig = {}) => (config: Config): Config => {
|
||||
if (pluginConfig.disabled) {
|
||||
return config
|
||||
@@ -26,7 +45,8 @@ export const billingPlugin = (pluginConfig: BillingPluginConfig = {}) => (config
|
||||
createCustomersCollection(customerSlug),
|
||||
createInvoicesCollection(
|
||||
pluginConfig.collections?.invoices || 'invoices',
|
||||
pluginConfig.collections?.customerRelation !== false ? customerSlug : undefined
|
||||
pluginConfig.collections?.customerRelation !== false ? customerSlug : undefined,
|
||||
pluginConfig.customerInfoExtractor
|
||||
),
|
||||
createRefundsCollection(pluginConfig.collections?.refunds || 'refunds'),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user