UnlinkAlbyAccount.tsx raw

   1  import React from "react";
   2  import { useNavigate } from "react-router";
   3  import { toast } from "sonner";
   4  import {
   5    AlertDialog,
   6    AlertDialogAction,
   7    AlertDialogCancel,
   8    AlertDialogContent,
   9    AlertDialogDescription,
  10    AlertDialogFooter,
  11    AlertDialogHeader,
  12    AlertDialogTitle,
  13    AlertDialogTrigger,
  14  } from "src/components/ui/alert-dialog";
  15  import { useInfo } from "src/hooks/useInfo";
  16  import { request } from "src/utils/request";
  17  
  18  type UnlinkAlbyAccountProps = {
  19    navigateTo?: string;
  20    successMessage?: string;
  21  };
  22  
  23  export function UnlinkAlbyAccount({
  24    children,
  25    navigateTo = "/",
  26    successMessage = "Your hub is no longer connected to an Alby Account.",
  27  }: React.PropsWithChildren<UnlinkAlbyAccountProps>) {
  28    const navigate = useNavigate();
  29    const { mutate: refetchInfo } = useInfo();
  30  
  31    const unlinkAccount = React.useCallback(async () => {
  32      try {
  33        await request("/api/alby/unlink-account", {
  34          method: "POST",
  35          headers: {
  36            "Content-Type": "application/json",
  37          },
  38        });
  39        await refetchInfo();
  40        navigate(navigateTo);
  41        toast("Alby Account Disconnected", {
  42          description: successMessage,
  43        });
  44      } catch (error) {
  45        toast.error("Disconnect account failed", {
  46          description: (error as Error).message,
  47        });
  48      }
  49    }, [refetchInfo, navigate, navigateTo, successMessage]);
  50  
  51    return (
  52      <AlertDialog>
  53        <AlertDialogTrigger asChild>{children}</AlertDialogTrigger>
  54        <AlertDialogContent>
  55          <AlertDialogHeader>
  56            <AlertDialogTitle>Disconnect Alby Account</AlertDialogTitle>
  57            <AlertDialogDescription>
  58              <div>
  59                <p>Are you sure you want to disconnect your Alby Account?</p>
  60                <p className="text-destructive font-medium mt-4">
  61                  Your lightning address, notifications, and subscription payments
  62                  will stop working.
  63                </p>
  64              </div>
  65            </AlertDialogDescription>
  66          </AlertDialogHeader>
  67          <AlertDialogFooter>
  68            <AlertDialogCancel>Cancel</AlertDialogCancel>
  69            <AlertDialogAction onClick={unlinkAccount}>Confirm</AlertDialogAction>
  70          </AlertDialogFooter>
  71        </AlertDialogContent>
  72      </AlertDialog>
  73    );
  74  }
  75