import { ExternalLinkIcon } from "@heroicons/react/solid"; import { ReactNode } from "react"; import { useIntercom } from "react-use-intercom"; import { useLocale } from "@lib/hooks/useLocale"; import SettingsShell from "@components/SettingsShell"; import Shell, { useMeQuery } from "@components/Shell"; import Button from "@components/ui/Button"; type CardProps = { title: string; description: string; className?: string; children: ReactNode }; const Card = ({ title, description, className = "", children }: CardProps): JSX.Element => ( <div className={`bg-white border sm:rounded-sm ${className}`}> <div className="px-4 py-5 sm:p-6"> <h3 className="text-lg font-medium leading-6 text-gray-900">{title}</h3> <div className="max-w-xl mt-2 text-sm text-gray-500"> <p>{description}</p> </div> <div className="mt-5">{children}</div> </div> </div> ); export default function Billing() { const { t } = useLocale(); const query = useMeQuery(); const { data } = query; const { boot, show } = useIntercom(); return ( <Shell heading={t("billing")} subtitle={t("manage_your_billing_info")}> <SettingsShell> <div className="py-6 lg:pb-8 lg:col-span-9"> {data?.plan && ["FREE", "TRIAL"].includes(data.plan) && ( <Card title={t("plan_description", { plan: data.plan })} description={t("plan_upgrade_invitation")} className="mb-4"> <form method="POST" action={`/api/upgrade`}> <Button type="submit"> {t("upgrade_now")} <ExternalLinkIcon className="w-4 h-4 ml-1" /> </Button> </form> </Card> )} <Card title={t("view_and_manage_billing_details")} description={t("view_and_edit_billing_details")}> <form method="POST" action={`/api/integrations/stripepayment/portal`}> <Button type="submit" color="secondary"> {t("go_to_billing_portal")} <ExternalLinkIcon className="w-4 h-4 ml-1" /> </Button> </form> </Card> <div className="mt-4 border bg-gray-50 sm:rounded-sm"> <div className="px-4 py-5 sm:p-6"> <h3 className="text-lg font-medium leading-6 text-gray-900">{t("need_anything_else")}</h3> <div className="max-w-xl mt-2 text-sm text-gray-500"> <p>{t("further_billing_help")}</p> </div> <div className="mt-5"> <Button onClick={() => { boot(); show(); }} color="secondary"> {t("contact_our_support_team")} </Button> </div> </div> </div> </div> </SettingsShell> </Shell> ); }