CouponInput
DomainCoupon code input with apply/remove flow. Calls onApply which returns success/error; shows applied state once a valid code is accepted.
Have a coupon?
Try: SAVE20
<CouponInput onApply={async (code) => validateCoupon(code)} />Have a coupon?
SAVE20 applied
<CouponInput appliedCode="SAVE20" onApply={handleApply} onRemove={handleRemove} />