0x0x230x

Untitled

Nov 20th, 2024
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. import { Button } from '@/components/ui/button';
  2. import { Label } from '@/components/ui/label';
  3. import Image from 'next/image';
  4. import { SignInButton, SignedIn, SignedOut, useUser } from '@clerk/nextjs';
  5. import { useEffect, useState } from 'react';
  6. import { useAsyncEffect } from '@/lib/hooks/useAsyncEffect';
  7. import { env } from '@/lib/config/env';
  8. import { ClipLoader } from 'react-spinners';
  9. import { usePostHog } from 'posthog-js/react';
  10. import { isClerkAPIResponseError, isEmailLinkError } from '@clerk/nextjs/errors'
  11.  
  12. export default function SelectSocialLogin({
  13. onNext,
  14. }: {
  15. onNext: (hasFid: boolean) => void;
  16. }) {
  17. const { isSignedIn, user } = useUser();
  18. const [isLoading, setIsLoading] = useState(false);
  19. const postHog = usePostHog();
  20.  
  21. useEffect(() => {
  22. postHog.capture('ext_onboard_10');
  23. }, []);
  24.  
  25. useAsyncEffect(async () => {
  26. if (!isSignedIn) {
  27. return;
  28. }
  29.  
  30. setIsLoading(true);
  31.  
  32. const body = JSON.stringify({
  33. social_login: 'twitter',
  34. username: user.username,
  35. email: user.emailAddresses[0].emailAddress,
  36. pfp_url: user.imageUrl,
  37. display_name: user.firstName,
  38. clerk_user_id: user.id,
  39. });
  40.  
  41. const url = new URL(`${env.NEXT_PUBLIC_DEGEN_EXT_API}/auth/register`);
  42.  
  43. const options = {
  44. method: 'POST',
  45. headers: {
  46. 'Content-Type': 'application/json',
  47. },
  48. body,
  49. };
  50.  
  51. try {
  52. const response = await fetch(url, options);
  53.  
  54. if (!response.ok) {
  55. setIsLoading(false);
  56. onNext(false);
  57. return;
  58. }
  59.  
  60. const data = await response.json();
  61. const fid = data.data.fid;
  62.  
  63. setIsLoading(false);
  64. onNext(fid !== null);
  65. } catch (error) {
  66. setIsLoading(false);
  67. onNext(false);
  68. }
  69. }, [isSignedIn, user]);
  70.  
  71. return (
  72. <div className="flex flex-col items-center bg-[#2f2f2f] rounded-lg w-[488px] py-10 gap-10 px-4">
  73. <Label className="text-[#c4c8cc] text-[28px] font-normal leading-9 uppercase text-center">
  74. Connect your X and Farcaster Accounts to get started
  75. </Label>
  76. <SignedOut>
  77. <SignInButton>
  78. <Button
  79. disabled={isLoading}
  80. className="bg-[#3A3A3A] hover:bg-[#3A3A3A]/20 rounded-[14.45px] border-2 border-[#434343] py-6 w-[380px]"
  81. >
  82. {isLoading ? (
  83. <div className="flex items-center justify-center gap-2">
  84. <ClipLoader color="#fff" size={15} />
  85. <Label className="leading-9 tracking-tight text-lg">
  86. SIGNING IN...
  87. </Label>
  88. </div>
  89. ) : (
  90. <>
  91. <Image
  92. src="/twitter-icon.svg"
  93. alt="twitter-icon"
  94. className="size-5 mr-2"
  95. width={0}
  96. height={0}
  97. />
  98. <Label className="leading-9 tracking-tight text-lg cursor-pointer">
  99. SIGN INTO X
  100. </Label>
  101. </>
  102. )}
  103. </Button>
  104. </SignInButton>
  105. </SignedOut>
  106. <SignedIn>
  107. <Button
  108. disabled={true}
  109. className="bg-[#3A3A3A] hover:bg-[#3A3A3A]/20 rounded-[14.45px] border-2 border-[#434343] py-6 w-[380px]"
  110. >
  111. <div className="flex items-center justify-center gap-2">
  112. <ClipLoader color="#fff" size={15} />
  113. <Label className="leading-9 tracking-tight text-lg">
  114. SIGNING IN...
  115. </Label>
  116. </div>
  117. </Button>
  118. </SignedIn>
  119. </div>
  120. );
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment