Files
TheGame/packages/web/lib/hooks/index.ts
Michiel Quellhorst 1d74d7beea Quest Editor Implemented (#760)
* added WYSIWYG Editor for quest description
rebased

* remove console output

* completed quest editor

* removed html-to-draftjs

* fix: file directory updates

* feat: js-dom added
rebase

* fix: fixed UI bugs

* fix: toast error message added for insufficient pSEED

* fix: replaced text with Box

* fix: limit description to 4 lines

* fix: removed incorrect condition from useUser hook

* fix: webpack 5 added in next.config

* fix: next.config webpack bug and rebased

* chore: remove comment

Co-authored-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
2021-12-01 15:57:32 -05:00

61 lines
1.6 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';
import { RequestPolicy } from 'urql';
export const useWeb3 = (): Web3ContextType => useContext(Web3Context);
type UseUserOpts = {
redirectTo?: string;
redirectIfNotFound?: boolean;
forLoginDisplay?: boolean;
requestPolicy?: RequestPolicy | undefined;
};
export const useUser = ({
redirectTo,
redirectIfNotFound = false,
forLoginDisplay = false,
requestPolicy = 'cache-first',
}: UseUserOpts = {}): {
user: MeType | null;
fetching: boolean;
} => {
const { authToken } = useWeb3();
const router = useRouter();
const [{ data, error, fetching }] = useGetMeQuery({
pause: !authToken,
variables: { forLoginDisplay },
requestPolicy,
});
const me = data?.me[0];
const user = error || !authToken || !me ? null : me;
useEffect(() => {
if (!redirectTo) return;
if (
// If redirectTo is set and redirectIfNotFound is set then redirect if the user was not found.
redirectTo &&
redirectIfNotFound &&
!user
) {
router.push(redirectTo);
}
}, [router, user, redirectIfNotFound, redirectTo]);
return { 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;
};