Add user and rooms to global state

This commit is contained in:
2023-11-20 17:52:51 +07:00
parent 8377a7d5b0
commit 4aae26e994
15 changed files with 329 additions and 43 deletions
@@ -6,6 +6,7 @@ import { createRoom as createRoomFn } from '@service/roomServices';
// Constants
import { ADD_SUCCESS } from '@constant/messages';
import { useUserRoomAvailable } from '@hook/useUserRoomAvailable';
/**
* Create room on database
@@ -13,12 +14,19 @@ import { ADD_SUCCESS } from '@constant/messages';
*/
const useCreateRoom = () => {
const queryClient = useQueryClient();
const { dispatch } = useUserRoomAvailable();
const { mutate: createRoom, isPending: isCreating } = useMutation({
mutationFn: createRoomFn,
onSuccess: () => {
onSuccess: (room) => {
toast.success(ADD_SUCCESS);
queryClient.invalidateQueries({ queryKey: ['rooms'] });
// Add room available to global state
dispatch!({
type: 'addRoom',
payload: [{ id: room.id, name: room.name }],
});
},
onError: (err) => toast.error(err.message),
});
@@ -6,6 +6,7 @@ import { updateRoom as updateRoomFn } from '@service/roomServices';
// Constants
import { UPDATE_SUCCESS } from '@constant/messages';
import { useUserRoomAvailable } from '@hook/useUserRoomAvailable';
/**
* Update room from database
@@ -13,12 +14,19 @@ import { UPDATE_SUCCESS } from '@constant/messages';
*/
const useUpdateRoom = () => {
const queryClient = useQueryClient();
const { dispatch } = useUserRoomAvailable();
const { mutate: updateRoom, isPending: isUpdating } = useMutation({
mutationFn: updateRoomFn,
onSuccess: () => {
onSuccess: (room) => {
toast.success(UPDATE_SUCCESS);
queryClient.invalidateQueries({ queryKey: ['rooms'] });
// Update name room in global state
dispatch!({
type: 'updateRoomName',
payload: [{ id: room.id, name: room.name }],
});
},
onError: (err) => toast.error(err.message),
});
@@ -0,0 +1,16 @@
import { UserRoomAvailableContext } from '@context/UserRoomAvailableContext';
import { useContext } from 'react';
const useUserRoomAvailable = () => {
const context = useContext(UserRoomAvailableContext);
if (context === undefined) {
throw new Error(
'UserRoomAvailableContext was used outside of UserRoomAvailableProvider'
);
}
return context;
};
export { useUserRoomAvailable };
@@ -6,6 +6,7 @@ import { createUser as createUserFn } from '@service/userServices';
// Constants
import { ADD_SUCCESS } from '@constant/messages';
import { useUserRoomAvailable } from '@hook/useUserRoomAvailable';
/**
* Create user in database
@@ -13,12 +14,19 @@ import { ADD_SUCCESS } from '@constant/messages';
*/
const useCreateUser = () => {
const queryClient = useQueryClient();
const { dispatch } = useUserRoomAvailable();
const { mutate: createUser, isPending: isCreating } = useMutation({
mutationFn: createUserFn,
onSuccess: () => {
onSuccess: (user) => {
toast.success(ADD_SUCCESS);
queryClient.invalidateQueries({ queryKey: ['users'] });
// Add user to global statement
dispatch!({
type: 'addUser',
payload: [{ id: user.id, name: user.name }],
});
},
onError: (err) => toast.error(err.message),
});
@@ -6,6 +6,7 @@ import { updateUser as updateUserFn } from '@service/userServices';
// Messages
import { UPDATE_SUCCESS } from '@constant/messages';
import { useUserRoomAvailable } from '@hook/useUserRoomAvailable';
/**
* Update user from database
@@ -13,12 +14,19 @@ import { UPDATE_SUCCESS } from '@constant/messages';
*/
const useUpdateUser = () => {
const queryClient = useQueryClient();
const { dispatch } = useUserRoomAvailable();
const { mutate: updateUser, isPending: isUpdating } = useMutation({
mutationFn: updateUserFn,
onSuccess: () => {
onSuccess: (user) => {
toast.success(UPDATE_SUCCESS);
queryClient.invalidateQueries({ queryKey: ['users'] });
// Update name in global state
dispatch!({
type: 'updateUserName',
payload: [{ id: user.id, name: user.name }],
});
},
onError: (err) => toast.error(err.message),
});