Files
TheGame/packages/web/lib/hooks/index.ts
dan13ram 965be2782a setup brightId verified labels (#361)
* setup basic brightId hook

* updated brightId logo

* polling brightId status & refreshing

* incorporated review comments
2021-03-02 17:50:13 +05:30

51 lines
1.4 KiB
TypeScript

import { Web3Context, Web3ContextType } from 'contexts/Web3Context';
import { useGetMeQuery } from 'graphql/autogen/types';
import { MeType } from 'graphql/types';
import { useRouter } from 'next/router';
import React, { useContext, useEffect } from 'react';
export const useWeb3 = (): Web3ContextType => useContext(Web3Context);
type UseUserOpts = {
redirectTo?: string;
redirectIfFound?: boolean;
};
export const useUser = ({ redirectTo, redirectIfFound }: UseUserOpts = {}): {
user: MeType | null;
fetching: boolean;
} => {
const { authToken } = useWeb3();
const router = useRouter();
const [{ data, error, fetching }] = useGetMeQuery({
pause: !authToken,
});
const user = data?.me[0];
useEffect(() => {
if (!redirectTo || !user) return;
if (
// If redirectTo is set, redirect if the user was not found.
(redirectTo && !redirectIfFound && !user) ||
// If redirectIfFound is also set, redirect if the user was found
(redirectIfFound && user)
) {
router.push(redirectTo);
}
}, [router, user, redirectIfFound, redirectTo]);
return { user: error ? null : user, fetching };
};
export const useMounted = (): boolean => {
// https://www.joshwcomeau.com/react/the-perils-of-rehydration/
const [hasMounted, setHasMounted] = React.useState(false);
React.useEffect(() => {
setHasMounted(true);
}, []);
return hasMounted;
};