1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 04:46:40 +07:00

fixed user hydration

This commit is contained in:
Fedor Katurov 2022-11-22 10:46:41 +06:00
parent ed9694c246
commit 75dc20ca0b
13 changed files with 194 additions and 95 deletions

View file

@ -16,5 +16,6 @@ export const useAuth = () => {
setToken: auth.setToken,
isTester: auth.isTester,
setIsTester: auth.setIsTester,
fetched: auth.fetched,
};
};

View file

@ -10,11 +10,19 @@ import { IUser } from '~/types/auth';
import { showErrorToast } from '~/utils/errors/showToast';
export const useUser = () => {
const { token, setUser } = useAuthStore();
const { data, mutate } = useSWR(token ? API.USER.ME : null, () => apiAuthGetUser(), {
onSuccess: data => setUser(data?.user || EMPTY_USER),
onError: error => showErrorToast(error),
});
const { token, setUser, setFetched, user } = useAuthStore();
const { data, mutate } = useSWR(
token ? API.USER.ME : null,
() => apiAuthGetUser(),
{
onSuccess: (data) => {
setUser(data?.user || EMPTY_USER);
setFetched(true);
},
onError: (error) => showErrorToast(error),
fallbackData: { user },
},
);
const update = useCallback(
async (user: Partial<IUser>, revalidate?: boolean) => {
@ -25,7 +33,7 @@ export const useUser = () => {
await mutate({ ...data, user: { ...data.user, ...user } }, revalidate);
},
[data, mutate]
[data, mutate],
);
return { user: data?.user || EMPTY_USER, update };

View file

@ -4,12 +4,24 @@ import { useUser } from '~/hooks/auth/useUser';
import { INode } from '~/types';
import { canEditNode, canLikeNode, canStarNode } from '~/utils/node';
import { useAuth } from '../auth/useAuth';
export const useNodePermissions = (node?: INode) => {
const { user } = useUser();
const { fetched, isUser } = useAuth();
const edit = useMemo(() => canEditNode(node, user), [node, user]);
const like = useMemo(() => canLikeNode(node, user), [node, user]);
const star = useMemo(() => canStarNode(node, user), [node, user]);
const edit = useMemo(
() => fetched && isUser && canEditNode(node, user),
[node, user, fetched, isUser],
);
const like = useMemo(
() => fetched && isUser && canLikeNode(node, user),
[node, user, fetched, isUser],
);
const star = useMemo(
() => fetched && isUser && canStarNode(node, user),
[node, user, fetched, isUser],
);
return [edit, like, star];
};