Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 25x 25x 2517x 2517x 2517x 2517x 2517x 2517x 1x 2x 2x 2x 1x 1x 1x 2517x 2517x 36x 2517x 21x 21x 1x 1x 2517x 15x 15x 15x 45x 2517x 5x 2517x | import { showMessage } from "@common/Toast";
import {
QKEY_ALL_NOTIFICATIONS,
QKEY_UNREAD_NOTIFICATIONS,
QKEY_CHECK_NEW_NOTIFICATIONS,
} from "@constants/queryKeys";
import { useAppSelector } from "@redux/hooks";
import { selectSelectedAccount } from "@redux/slices/auth/accounts";
import { TNotificationIds, markAsRead } from "@services/api/notifications/user";
import { PROFILE_MODAL } from "modals/modal_names";
import { useMutation, useQueryClient } from "react-query";
import useRedirect from "@hooks/common/router/useRedirect";
import { selectUser } from "@redux/slices/auth/auth";
const infiniteQueries = [QKEY_UNREAD_NOTIFICATIONS, QKEY_ALL_NOTIFICATIONS];
const useNotificationsActions = () => {
const selectedUser = useAppSelector(selectSelectedAccount);
const user = useAppSelector(selectUser);
const merchantId = selectedUser?.id || 0;
const userId = user?.userAccID || 0;
const queryClient = useQueryClient();
const refetchQueries = () => {
infiniteQueries.forEach((key) => {
queryClient.setQueryData(key, (oldData: any) => {
Eif (!oldData) return undefined;
return {
pages: [
{
data: [],
nextCursor: null,
total: 0,
},
],
pageParams: [undefined],
};
});
});
infiniteQueries.forEach((q) => queryClient.invalidateQueries(q));
queryClient.invalidateQueries(QKEY_CHECK_NEW_NOTIFICATIONS);
queryClient.invalidateQueries(QKEY_UNREAD_NOTIFICATIONS);
queryClient.invalidateQueries(QKEY_ALL_NOTIFICATIONS);
};
const { redirectToModal } = useRedirect();
const markAsReadMutation = useMutation(
(notificationsIds: TNotificationIds) => {
return markAsRead(merchantId, userId, notificationsIds);
},
);
const markAllAsRead = () => {
Iif (!userId || !merchantId) return;
markAsReadMutation.mutate(["*"], {
onSuccess: () => {
refetchQueries();
},
onError: () => {
showMessage("Error", "Whoops... an error occured");
},
});
};
const markNotificationAsRead = async (id: number) => {
Iif (!userId || !merchantId) return;
await markAsReadMutation.mutateAsync([id]);
[...infiniteQueries, QKEY_CHECK_NEW_NOTIFICATIONS].forEach((key) =>
queryClient.invalidateQueries(key),
);
};
const handleConfigurationClick = () =>
redirectToModal(PROFILE_MODAL, {
initialTab: "Notifications",
});
return {
markAllAsRead,
markNotificationAsRead,
handleConfigurationClick,
};
};
export default useNotificationsActions;
|