0x0x230x

Untitled

Jan 9th, 2025
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. 'use client';
  2.  
  3. import { usePrivy, useWallets } from '@privy-io/react-auth';
  4. import { Button } from '@/components/ui/button';
  5. import { useDisconnect } from 'wagmi';
  6. import { useState } from 'react';
  7. import {
  8. NavigationMenu,
  9. NavigationMenuContent,
  10. NavigationMenuItem,
  11. NavigationMenuList,
  12. NavigationMenuTrigger,
  13. } from '@/components/ui/navigation-menu';
  14. import { useAsyncEffect } from '@/lib/hooks/useAsyncEffect';
  15. import useConnector from '@/lib/hooks/useConnector';
  16.  
  17. export default function ConnectWalletButton() {
  18. const { ready, authenticated, login, logout } = usePrivy();
  19. const { wallets } = useWallets();
  20. const { disconnect } = useDisconnect();
  21.  
  22. useConnector();
  23.  
  24. const [isDisconnecting, setIsDisconnecting] = useState(false);
  25.  
  26. useAsyncEffect(async () => {
  27. if (ready && !authenticated) {
  28. disconnect();
  29. await logout();
  30. }
  31. }, [ready, authenticated]);
  32.  
  33. const handleDisconnect = async () => {
  34. setIsDisconnecting(true);
  35. await disconnect();
  36. await logout();
  37. setIsDisconnecting(false);
  38. };
  39.  
  40. const renderButton = () => {
  41. if (!ready || isDisconnecting) {
  42. return (
  43. <Button className="w-[165px] h-[40px]" disabled>
  44. {isDisconnecting ? 'Disconnecting...' : 'Connecting...'}
  45. </Button>
  46. );
  47. }
  48.  
  49. if (wallets.length) {
  50. const { address } = wallets[0];
  51. return (
  52. <NavigationMenu>
  53. <NavigationMenuList>
  54. <NavigationMenuItem>
  55. <NavigationMenuTrigger className="w-[165px] h-[40px] rounded-sm font-superstar bg-primary text-primary-foreground hover:bg-primary/90 data-[state=open]:bg-primary/90 flex items-center justify-center">
  56. {address.slice(0, 6)}...{address.slice(-4)}
  57. </NavigationMenuTrigger>
  58. <NavigationMenuContent>
  59. <div className="flex flex-col p-2 w-[165px] bg-zinc-900 rounded-lg border-0 shadow-lg">
  60. {/* <Button
  61. variant="ghost"
  62. className="w-full justify-start py-2 text-white hover:bg-zinc-800 hover:text-white font-superstar"
  63. onClick={() => router.push(`/profile/${address}`)}
  64. >
  65. PROFILE
  66. </Button> */}
  67. <Button
  68. variant="ghost"
  69. className="w-full justify-start py-2 text-red-500 hover:bg-zinc-800 hover:text-red-400 font-superstar"
  70. onClick={handleDisconnect}
  71. disabled={isDisconnecting}
  72. >
  73. DISCONNECT
  74. </Button>
  75. </div>
  76. </NavigationMenuContent>
  77. </NavigationMenuItem>
  78. </NavigationMenuList>
  79. </NavigationMenu>
  80. );
  81. }
  82.  
  83. return (
  84. ready &&
  85. !authenticated && (
  86. <Button className="w-[165px] h-[40px] font-superstar" onClick={login}>
  87. Connect Wallet
  88. </Button>
  89. )
  90. );
  91. };
  92.  
  93. return <div className="h-[40px] flex items-center">{renderButton()}</div>;
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment