feat: invalidate queries on user related actions

This commit is contained in:
kasia.oczkowska
2024-03-20 15:00:54 +00:00
parent 55c9b5566c
commit d8d7d86359
3 changed files with 14 additions and 1 deletions

View File

@@ -2,6 +2,8 @@ import PropTypes from 'prop-types';
import { useMutation } from '@apollo/client'; import { useMutation } from '@apollo/client';
import DeleteIcon from '@mui/icons-material/Delete'; import DeleteIcon from '@mui/icons-material/Delete';
import IconButton from '@mui/material/IconButton'; import IconButton from '@mui/material/IconButton';
import { useQueryClient } from '@tanstack/react-query';
import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar';
import * as React from 'react'; import * as React from 'react';
import ConfirmationDialog from 'components/ConfirmationDialog'; import ConfirmationDialog from 'components/ConfirmationDialog';
@@ -17,9 +19,13 @@ function DeleteUserButton(props) {
}); });
const formatMessage = useFormatMessage(); const formatMessage = useFormatMessage();
const enqueueSnackbar = useEnqueueSnackbar(); const enqueueSnackbar = useEnqueueSnackbar();
const queryClient = useQueryClient();
const handleConfirm = React.useCallback(async () => { const handleConfirm = React.useCallback(async () => {
try { try {
await deleteUser(); await deleteUser();
queryClient.invalidateQueries({ queryKey: ['admin', 'users'] });
queryClient.invalidateQueries({ queryKey: ['admin', 'user', userId] });
setShowConfirmation(false); setShowConfirmation(false);
enqueueSnackbar(formatMessage('deleteUserButton.successfullyDeleted'), { enqueueSnackbar(formatMessage('deleteUserButton.successfullyDeleted'), {
variant: 'success', variant: 'success',
@@ -31,6 +37,7 @@ function DeleteUserButton(props) {
throw new Error('Failed while deleting!'); throw new Error('Failed while deleting!');
} }
}, [deleteUser]); }, [deleteUser]);
return ( return (
<> <>
<IconButton <IconButton

View File

@@ -6,6 +6,7 @@ import MuiTextField from '@mui/material/TextField';
import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar';
import * as React from 'react'; import * as React from 'react';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useQueryClient } from '@tanstack/react-query';
import Can from 'components/Can'; import Can from 'components/Can';
import Container from 'components/Container'; import Container from 'components/Container';
@@ -29,6 +30,7 @@ export default function CreateUser() {
const { data, loading: isRolesLoading } = useRoles(); const { data, loading: isRolesLoading } = useRoles();
const roles = data?.data; const roles = data?.data;
const enqueueSnackbar = useEnqueueSnackbar(); const enqueueSnackbar = useEnqueueSnackbar();
const queryClient = useQueryClient();
const handleUserCreation = async (userData) => { const handleUserCreation = async (userData) => {
try { try {
@@ -44,7 +46,7 @@ export default function CreateUser() {
}, },
}, },
}); });
queryClient.invalidateQueries({ queryKey: ['admin', 'users'] });
enqueueSnackbar(formatMessage('createUser.successfullyCreated'), { enqueueSnackbar(formatMessage('createUser.successfullyCreated'), {
variant: 'success', variant: 'success',
persist: true, persist: true,

View File

@@ -7,6 +7,7 @@ import MuiTextField from '@mui/material/TextField';
import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar';
import * as React from 'react'; import * as React from 'react';
import { useNavigate, useParams } from 'react-router-dom'; import { useNavigate, useParams } from 'react-router-dom';
import { useQueryClient } from '@tanstack/react-query';
import Can from 'components/Can'; import Can from 'components/Can';
import Container from 'components/Container'; import Container from 'components/Container';
@@ -34,6 +35,7 @@ export default function EditUser() {
const roles = data?.data; const roles = data?.data;
const enqueueSnackbar = useEnqueueSnackbar(); const enqueueSnackbar = useEnqueueSnackbar();
const navigate = useNavigate(); const navigate = useNavigate();
const queryClient = useQueryClient();
const handleUserUpdate = async (userDataToUpdate) => { const handleUserUpdate = async (userDataToUpdate) => {
try { try {
@@ -49,6 +51,8 @@ export default function EditUser() {
}, },
}, },
}); });
queryClient.invalidateQueries({ queryKey: ['admin', 'users'] });
queryClient.invalidateQueries({ queryKey: ['admin', 'user', userId] });
enqueueSnackbar(formatMessage('editUser.successfullyUpdated'), { enqueueSnackbar(formatMessage('editUser.successfullyUpdated'), {
variant: 'success', variant: 'success',