"use client"; import {z} from "zod"; import React from "react"; import {Form, FormProvider, useForm} from "react-hook-form"; import {FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage} from "@/components/ui/form"; import {generateAimeCardId, validateAimeCardId} from "@/lib/aime-card"; import {useMediaQuery} from "@/hooks/use-media-query"; import {zodResolver} from "@hookform/resolvers/zod"; import {Button} from "@/components/ui/button"; import {Input} from "@/components/ui/input"; import {AimeCard, db} from "@/lib/database"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger } from "@/components/ui/drawer"; import {Check, X} from "lucide-react"; const schema = z.object({ name: z.string().min(1, { message: "A name/description must be provided" }), id: z.string().refine(validateAimeCardId, { message: "Card id must be 20 digits and not start with the number 3" }) }); export function CardCreationDialog(props: { children: Readonly }) { const [open, setOpen] = React.useState(false); const isDesktop = useMediaQuery("(min-width: 768px)"); if (isDesktop) { return ( {props.children} Add new card setOpen(false)}/> ); } return ( {props.children} Add card Enter the card details below, and press submit to add it to your profile.
setOpen(false)}/>
); } function AimeCardCreationForm(props: { callback?: () => void }) { const form = useForm>({ resolver: zodResolver(schema), defaultValues: { id: '', name: '' } }); async function onSubmit(values: z.infer) { const card: AimeCard = { lastUsed: 0, name: values.name, id: values.id.replaceAll(" ", "") }; const isDuplicate = await db.cards.where("id").equals(card.id).limit(1).count(); if (!isDuplicate) { await db.cards.add(card); } else { // todo toast } if (props.callback) { props.callback(); } } return (
( Name )}/> ( Card Number If you've got a card, enter the matrix code here. If not, you can form.setValue("id", generateAimeCardId())}> generate a new one. )}/>
); }