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:
parent
ed9694c246
commit
75dc20ca0b
13 changed files with 194 additions and 95 deletions
|
@ -16,5 +16,6 @@ export const useAuth = () => {
|
|||
setToken: auth.setToken,
|
||||
isTester: auth.isTester,
|
||||
setIsTester: auth.setIsTester,
|
||||
fetched: auth.fetched,
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -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];
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue