Todos los componentes (204)
Cupón de descuento
Campos · CouponField
Qué es y cuándo usarlo
El código de descuento de la cesta. Empieza plegado detrás de «¿Tienes un código de descuento?» porque la mayoría no tiene código, y un campo vacío a la vista en el paso de pago manda a la gente a buscar uno a Google.
Cuándo usarlo
- En la cesta o en el paso de pago, con
onApplypreguntando al servidor: devuelve{ valid: true, description }o{ valid: false, reason }. Lo que devuelva es la verdad: el componente no decide si un cupón vale, solo lo pregunta y lo cuenta. Si vale, llama aonAcceptcon el cupón. - Con el cupón ya aplicado (
applied), en vez del campo sale el cupón con «Quitar», que llama aonRemove. collapsed={false}cuando el código es parte del flujo (una campaña que lo anuncia).
Cuándo no
- Dentro de otro
<form>: el cupón lleva el suyo (por eso Intro lo envía a él), y un formulario dentro de otro no es HTML válido. Va al lado del formulario de pago, no dentro. - Un código de verificación:
CodeField.
Teclado: el botón de desplegar se pulsa con Intro o Espacio. El código se envía con Intro o con «Aplicar»; mientras se comprueba, el botón se queda en espera sin perder el foco. Al aplicar o al quitar, el bloque cambia entero y el foco se va con él, en vez de caerse a la página.
Accesibilidad: el desplegable dice si está abierto (aria-expanded). El motivo del rechazo lo pone el servidor y se enseña tal cual («ese código caducó el 31 de mayo» ayuda; «código no válido», no), y si ni siquiera se pudo preguntar se dice eso, que es otra cosa. Aplicar y quitar se anuncian («Código VERANO10 aplicado: 10 % de descuento»). Los códigos se comparan sin espacios y en mayúsculas.
Aspecto fino: sin variables propias: el campo usa --amset-field-* y el bloque se ajusta con las clases amset-coupon__form, amset-coupon__field, amset-coupon__brand, amset-coupon__code y amset-coupon__description.
Cómo se ve
<CouponField
applied={cupon}
collapsed={false}
onApply={comprobarEnElServidor}
onAccept={setCupon}
onRemove={() => setCupon(null)}
/>Props
Se importa con import { CouponField } from '@amset/ui'. Las obligatorias van marcadas.
| Prop | Tipo | Para qué sirve |
|---|---|---|
appliedobligatoria | AppliedCoupon | null | El cupon ya aplicado. Con el, en vez del campo sale el cupon y «Quitar». |
onAcceptobligatoria | (coupon: AppliedCoupon) => void | Se llama cuando el servidor da el cupon por bueno. |
onApplyobligatoria | (code: string) => Promise<CouponResult> | Comprueba el codigo. Lo que devuelva es la verdad: el componente no decide si un cupon vale, solo lo pregunta y lo cuenta. |
onRemoveobligatoria | () => void | — |
className | string | Se une a las clases de la biblioteca, no las sustituye. |
collapsed | boolean | Empieza plegado detras de «¿Tienes un código?». |
label | string | — |
size | "sm" | "md" | "lg" | — |
variant | FieldVariant | — |
Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.
En el banco de pruebas
Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech:
