AIvoices/frontend-nextjs/app/components/Upsell/AddCreditsModal.tsx
2025-04-08 14:05:27 +01:00

90 lines
2.8 KiB
TypeScript

import * as React from "react";
import { cn } from "@/lib/utils";
import { useMediaQuery } from "@/hooks/useMediaQuery";
import { Button } from "@/components/ui/button";
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog";
import {
Drawer,
DrawerClose,
DrawerContent,
DrawerDescription,
DrawerFooter,
DrawerHeader,
DrawerTitle,
DrawerTrigger,
} from "@/components/ui/drawer";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import StripePricingTable from "../PricingTable";
interface AddCreditsModalProps {
children: React.ReactNode;
}
function ProfileForm({ className }: React.ComponentProps<"form">) {
const buttonText = "Proceed to Payment";
return (
<form className={cn("grid items-start gap-4", className)}>
<div className="grid gap-2">
<Label htmlFor="email">Email</Label>
<Input
type="email"
id="email"
defaultValue="shadcn@example.com"
/>
</div>
<div className="grid gap-2">
<Label htmlFor="username">Username</Label>
<Input id="username" defaultValue="@shadcn" />
</div>
<Button type="submit" variant="upsell_primary">
{buttonText}
</Button>
</form>
);
}
const AddCreditsModal: React.FC<AddCreditsModalProps> = ({ children }) => {
const [open, setOpen] = React.useState(false);
const isDesktop = useMediaQuery("(min-width: 768px)");
const title = "Explore Elato's Voice Subscription Plans";
const subtitle =
"Unlock more features and get more done with Elato Premium Plans.";
if (isDesktop) {
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>{children}</DialogTrigger>
<DialogContent className="sm:max-w-[670px]">
<DialogHeader>
<DialogTitle>{title}</DialogTitle>
<DialogDescription>{subtitle}</DialogDescription>
</DialogHeader>
<StripePricingTable />
</DialogContent>
</Dialog>
);
}
return (
<Drawer open={open} onOpenChange={setOpen}>
<DrawerTrigger asChild>{children}</DrawerTrigger>
<DrawerContent>
<DrawerHeader className="text-left">
<DrawerTitle>{title}</DrawerTitle>
<DrawerDescription>{subtitle}</DrawerDescription>
</DrawerHeader>
<StripePricingTable />
</DrawerContent>
</Drawer>
);
};
export default AddCreditsModal;