mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-01-14 08:58:02 -05:00
* feat: metamask switch network support + fixed dependancy cycle * feat: moved landing to index * feat: updated favicon * fix: fixed landing page issues + scrollSnap * feat: join button * fix: fixed seed script with new prod schema * feat: join button redirects based on user creation date * fix: minor ui bug fixes * feat: connect to mainnet to continue with switch network on metamask * fix: uniform setup screens * fix: fixed XP on dashboard * feat: added start page * fix: fixed issues on landing page * fix: fixed minor issues on dashboard * fix: update idx profile in auth webhook for new players * fix: minor fixes in seed page * fix: player avatar & type * fix: incorporated review comments from @dysbulic & @vidvidvid * fix: more review comments
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { Maybe } from '@metafam/utils';
|
|
import { Player, useGetMeQuery } from 'graphql/autogen/types';
|
|
import { useWeb3 } from 'lib/hooks/useWeb3';
|
|
import { useRouter } from 'next/router';
|
|
import { useEffect, useMemo } from 'react';
|
|
import { CombinedError, RequestPolicy } from 'urql';
|
|
|
|
type UseUserOpts = {
|
|
redirectTo?: string;
|
|
redirectIfNotFound?: boolean;
|
|
requestPolicy?: RequestPolicy;
|
|
};
|
|
|
|
export const useUser = ({
|
|
redirectTo,
|
|
redirectIfNotFound = false,
|
|
requestPolicy = 'cache-first',
|
|
}: UseUserOpts = {}): {
|
|
connecting: boolean;
|
|
connected: boolean;
|
|
user: Maybe<Player>;
|
|
fetching: boolean;
|
|
error?: CombinedError;
|
|
} => {
|
|
const { authToken, connecting, connected } = useWeb3();
|
|
const router = useRouter();
|
|
const [{ data, error, fetching }] = useGetMeQuery({
|
|
pause: connecting || !connected || !authToken,
|
|
requestPolicy,
|
|
});
|
|
const [me] = data?.me ?? [];
|
|
const user = useMemo(
|
|
() => (!error && authToken && me ? (me.record as Player) : null),
|
|
[error, authToken, me],
|
|
);
|
|
|
|
if (error) {
|
|
// eslint-disable-next-line no-console
|
|
console.error(`useUser Error: ${error.message}`);
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (!redirectTo || fetching || connecting) return;
|
|
|
|
// If redirectTo is set and redirectIfNotFound is set then
|
|
// redirect if the user was not found.
|
|
if (redirectTo && redirectIfNotFound && !user) {
|
|
router.push(redirectTo);
|
|
}
|
|
}, [router, user, fetching, connecting, redirectIfNotFound, redirectTo]);
|
|
|
|
return {
|
|
connecting,
|
|
connected,
|
|
user,
|
|
fetching,
|
|
error,
|
|
};
|
|
};
|