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