diff --git a/packages/core/src/schema.ts b/packages/core/src/schema.ts index 6f5713fcde5..7759a441a95 100644 --- a/packages/core/src/schema.ts +++ b/packages/core/src/schema.ts @@ -132,6 +132,16 @@ export const PaywallLockConfig = z.object({ 'Hardcoded address for the recipient of the NFT. Can be used with skipRecipient.', }) .optional(), + paymentMethods: z + .object({ + card: z.boolean().optional(), + crypto: z.boolean().optional(), + crossmint: z.boolean().optional(), + swap: z.boolean().optional(), + crosschain: z.boolean().optional(), + claim: z.boolean().optional(), + }) + .optional(), }) export type PaywallLockConfigType = z.infer @@ -281,6 +291,16 @@ export const PaywallConfig = z 'Hardcoded address for the recipient of the NFT. Can be used with skipRecipient.', }) .optional(), + paymentMethods: z + .object({ + card: z.boolean().optional(), + crypto: z.boolean().optional(), + crossmint: z.boolean().optional(), + swap: z.boolean().optional(), + crosschain: z.boolean().optional(), + claim: z.boolean().optional(), + }) + .optional(), }) .passthrough() diff --git a/unlock-app/src/components/interface/checkout/main/Payment.tsx b/unlock-app/src/components/interface/checkout/main/Payment.tsx index 1f6d2e98005..fa11a0d177d 100644 --- a/unlock-app/src/components/interface/checkout/main/Payment.tsx +++ b/unlock-app/src/components/interface/checkout/main/Payment.tsx @@ -53,6 +53,16 @@ const AmountBadge = ({ symbol, amount }: AmountBadgeProps) => { ) } +// All enabled by default. +const defaultPaymentMethods = { + crypto: true, + card: true, + crossmint: true, + swap: true, + crosschain: true, + claim: true, +} + export function Payment({ injectedProvider, checkoutService }: Props) { const [state, send] = useActor(checkoutService) const config = useConfig() @@ -63,6 +73,16 @@ export function Payment({ injectedProvider, checkoutService }: Props) { const baseSymbol = networkConfig.nativeCurrency.symbol const symbol = lockTickerSymbol(lock, baseSymbol) + const configPaymentMethods = + state.context.paywallConfig.locks[lock.address]?.paymentMethods || + state.context.paywallConfig.paymentMethods || + {} + + const paymentMethods = { + ...defaultPaymentMethods, + ...configPaymentMethods, + } + const { isLoading: isLoading, data: enableCreditCard } = useCreditCardEnabled( { network: lock.network, @@ -101,7 +121,7 @@ export function Payment({ injectedProvider, checkoutService }: Props) { recipients, }) - const enableCrossmint = crossmintEnabled + const enableCrossmint = !!crossmintEnabled const { isLoading: isBalanceLoading, data: balance } = useBalance({ account: account!, @@ -177,7 +197,7 @@ export function Payment({ injectedProvider, checkoutService }: Props) { enableClaim, enableCrypto, universalCardEnabled, - !!enableCrossmint, + enableCrossmint, ].every((item) => !item) return ( @@ -199,7 +219,7 @@ export function Payment({ injectedProvider, checkoutService }: Props) { ) : (
{/* Card Payment via Stripe! */} - {enableCreditCard && !enableClaim && ( + {enableCreditCard && paymentMethods['card'] && !enableClaim && (
)} + {/* All disabled */} {allDisabled && (