From c7e7e0b27d99e249911ed5c59c74d875d0fd92d4 Mon Sep 17 00:00:00 2001 From: Matt Jones Date: Mon, 28 Aug 2023 10:10:42 -0700 Subject: [PATCH] Add a useClient composition PropelAuth/react#32 --- src/AuthContext.tsx | 3 +++ src/useClient.tsx | 10 ++++++++++ 2 files changed, 13 insertions(+) create mode 100644 src/useClient.tsx diff --git a/src/AuthContext.tsx b/src/AuthContext.tsx index 1c72a2a1..9ff2dc3d 100644 --- a/src/AuthContext.tsx +++ b/src/AuthContext.tsx @@ -3,6 +3,7 @@ import { createClient, RedirectToLoginOptions, RedirectToSignupOptions, + IAuthClient, } from "@propelauth/javascript" import React, { useCallback, useEffect, useMemo, useReducer, useState } from "react" import { loadOrgSelectionFromLocalStorage } from "./useActiveOrg" @@ -11,6 +12,7 @@ import { withRequiredAuthInfo } from "./withRequiredAuthInfo" interface InternalAuthState { loading: boolean authInfo: AuthenticationInfo | null + client: IAuthClient logout: (redirectOnLogout: boolean) => Promise @@ -168,6 +170,7 @@ export const AuthProvider = (props: AuthProviderProps) => { const value = { loading: authInfoState.loading, authInfo: authInfoState.authInfo, + client, logout, redirectToLoginPage, redirectToSignupPage, diff --git a/src/useClient.tsx b/src/useClient.tsx new file mode 100644 index 00000000..0f000d94 --- /dev/null +++ b/src/useClient.tsx @@ -0,0 +1,10 @@ +import { useContext } from "react" +import { AuthContext } from "./AuthContext" + +export function useClient() { + const context = useContext(AuthContext) + if (context === undefined) { + throw new Error("useClient must be used within an AuthProvider or RequiredAuthProvider") + } + return context.client; +}