From 77eeaf1adc2304765e1b1f2fcb19ef45674eb055 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Wed, 7 Jan 2026 23:28:07 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore:=20add=20handle=20oauth=20?= =?UTF-8?q?endpoint=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/helper/backendFetch.ts | 1 + shared/libs/shadcn/ui/spinner.tsx | 10 ++++++++ .../signin/actions/getOauthEndpoint.ts | 6 +++++ .../widgets/signin/components/SignInCard.tsx | 25 ++++++++++++++++--- 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 shared/libs/shadcn/ui/spinner.tsx create mode 100644 shared/widgets/signin/actions/getOauthEndpoint.ts diff --git a/shared/helper/backendFetch.ts b/shared/helper/backendFetch.ts index 06d48c6..9b0de2b 100644 --- a/shared/helper/backendFetch.ts +++ b/shared/helper/backendFetch.ts @@ -1,3 +1,4 @@ +"use server"; export interface BackendResponse { success: boolean; message: string; diff --git a/shared/libs/shadcn/ui/spinner.tsx b/shared/libs/shadcn/ui/spinner.tsx new file mode 100644 index 0000000..d05e6d7 --- /dev/null +++ b/shared/libs/shadcn/ui/spinner.tsx @@ -0,0 +1,10 @@ +import { cn } from "@/shared/libs/shadcn/lib/utils" +import { Loader2Icon } from "lucide-react" + +function Spinner({ className, ...props }: React.ComponentProps<"svg">) { + return ( + + ) +} + +export { Spinner } diff --git a/shared/widgets/signin/actions/getOauthEndpoint.ts b/shared/widgets/signin/actions/getOauthEndpoint.ts new file mode 100644 index 0000000..128648e --- /dev/null +++ b/shared/widgets/signin/actions/getOauthEndpoint.ts @@ -0,0 +1,6 @@ +"use client"; +import { backendFetch, BackendResponse } from "@/shared/helper/backendFetch"; + +export const getOauthEndpoint = async (url: string) => { + return (await backendFetch(url)) as BackendResponse<{ endpointUrl: string }>; +}; diff --git a/shared/widgets/signin/components/SignInCard.tsx b/shared/widgets/signin/components/SignInCard.tsx index aed6644..558ae22 100644 --- a/shared/widgets/signin/components/SignInCard.tsx +++ b/shared/widgets/signin/components/SignInCard.tsx @@ -16,19 +16,28 @@ import { GetALlThirdPartyAuthCallback, } from "../actions/getAllThirdPartyAuth"; import { Icon } from "@iconify/react"; +import { Spinner } from "@/shared/libs/shadcn/ui/spinner"; +import { getOauthEndpoint } from "../actions/getOauthEndpoint"; +import { useRouter } from "next/navigation"; const SignInCard = () => { + const router = useRouter(); + const [isLoading, setIsLoading] = useState(false); const [oAuthProviders, setOAuthProviders] = useState(null); useEffect(() => { (async () => { const res = await getAllThirdPartyAuth(); - console.log(res); setOAuthProviders(res); })(); }, []); + const getOauthEndpointUrl = async (providerReqEndpoint: string) => { + const res = await getOauthEndpoint(providerReqEndpoint); + router.push(res.data?.endpointUrl || "/"); + }; + return ( @@ -56,14 +65,17 @@ const SignInCard = () => { key={index} variant="outline" className="w-full text-neutral-300 text-xs font-normal" + disabled={isLoading} + onClick={() => getOauthEndpointUrl(provider.req_endpoint)} > + {isLoading && } Continue with {provider.name} ))} ) : ( - )} @@ -71,9 +83,14 @@ const SignInCard = () => { - + - + );