sdk/src/components/lume/LumeIdentity/LumeIdentityContext.ts

49 lines
1.4 KiB
TypeScript
Raw Normal View History

import React from "react";
export type Session = string;
2023-10-09 12:55:16 +00:00
export const LumeIdentityContext = React.createContext<
| {
session: Session | undefined;
setSession: React.Dispatch<React.SetStateAction<Session | undefined>>;
}
| undefined
>(undefined);
export function useLumeIndentity() {
const contextValue = React.useContext(LumeIdentityContext);
// When the `session` changes we want to update the `session` in the local storage?
React.useEffect(() => {
if (contextValue?.session) {
2023-10-09 12:55:16 +00:00
localStorage.setItem("lume-session", contextValue.session);
} else {
2023-10-09 12:55:16 +00:00
localStorage.removeItem("lume-session");
}
}, [contextValue?.session]);
// Get the session from the local storage
React.useEffect(() => {
2023-10-09 12:55:16 +00:00
const session = localStorage.getItem("lume-session");
if (session) {
contextValue?.setSession(session);
}
}, []);
if (contextValue === undefined) {
2023-10-09 12:55:16 +00:00
throw new Error(
"useLumeIdentity hook is being used outside of its context. Please ensure that it is wrapped within a <LumeIdentityProvider>."
);
}
return {
isSignedIn: !!contextValue.session,
signIn: (key: string) => {
2023-10-09 12:55:16 +00:00
console.log("signing in with key", key);
// TODO: From the key generate a session, and store it
2023-10-09 12:55:16 +00:00
contextValue.setSession("session");
},
signOut: () => {
contextValue.setSession(undefined);
},
};
2023-10-09 12:55:16 +00:00
}