import type { InputHTMLAttributes } from 'react' import { useRequest, useToggle } from 'ahooks' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { Button } from '@repo/ui/components/ui/button' import { Input } from '@repo/ui/components/ui/input' import { Spinner } from '@repo/ui/components/ui/spinner' import { Popover, PopoverContent, PopoverTrigger } from '@repo/ui/components/ui/popover' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@repo/ui/components/ui/form' export const formSchema = z.object({ coupon: z.string().min(3, { error: 'Digite um cupom válido' }).trim() }) export type Schema = z.infer interface DiscountProps extends Omit< InputHTMLAttributes, 'value' | 'onChange' > { onChange?: (value: any) => void } export function Discount({ onChange, ...props }: DiscountProps) { const form = useForm({ resolver: zodResolver(formSchema) }) const [open, { toggle, set }] = useToggle() const { runAsync } = useRequest( async (coupon) => { return await fetch(`/~/api/coupons/${coupon}`, { method: 'GET' }) }, { manual: true } ) const { handleSubmit, control, formState, setError, reset } = form const onSubmit = async (data: Schema) => { const r = await runAsync(data.coupon) if (!r.ok) { return setError('coupon', { message: 'Cupom inválido' }) } onChange?.(await r.json()) reset() set(false) } return (
{ e.stopPropagation() e.preventDefault() await handleSubmit(onSubmit)(e) }} >

Recebeu um cupom?

Aplique seu cupom e tenha acesso aos cursos com descontos exclusivos.

( Cupom )} />
) }