add calls to new 'me' endpoint

This commit is contained in:
Davor 2022-06-21 11:54:07 +02:00
parent 281a0ed4e7
commit a797027c7e
3 changed files with 83 additions and 4 deletions

View file

@ -11,8 +11,18 @@ import { UserModalProps } from './types';
export const UserModal = ({ open, onClose, userId, setUserId }: UserModalProps) => { export const UserModal = ({ open, onClose, userId, setUserId }: UserModalProps) => {
const [deleteModal, setDeleteModal] = useState(false); const [deleteModal, setDeleteModal] = useState(false);
const { user, loadUser, editUserById, createNewUser, userModalLoading, deleteUserById, clearSelectedUser } = const [isPersonalModal, setPersonalModal] = useState(false);
useUsers(); const {
user,
loadUser,
loadPersonalInfo,
editUserById,
editPersonalInfo,
createNewUser,
userModalLoading,
deleteUserById,
clearSelectedUser,
} = useUsers();
const { currentUser, isAdmin } = useAuth(); const { currentUser, isAdmin } = useAuth();
const { control, reset, handleSubmit } = useForm<User>({ const { control, reset, handleSubmit } = useForm<User>({
@ -26,8 +36,14 @@ export const UserModal = ({ open, onClose, userId, setUserId }: UserModalProps)
useEffect(() => { useEffect(() => {
if (userId) { if (userId) {
const currentUserId = currentUser?.id;
if (currentUserId === userId) {
setPersonalModal(true);
loadPersonalInfo();
} else {
loadUser(userId); loadUser(userId);
} }
}
reset(initialUserForm); reset(initialUserForm);
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
@ -45,7 +61,9 @@ export const UserModal = ({ open, onClose, userId, setUserId }: UserModalProps)
const handleSave = async () => { const handleSave = async () => {
try { try {
if (userId) { if (isPersonalModal) {
await handleSubmit((data) => editPersonalInfo(data))();
} else if (userId) {
await handleSubmit((data) => editUserById(data))(); await handleSubmit((data) => editUserById(data))();
} else { } else {
await handleSubmit((data) => createNewUser(data))(); await handleSubmit((data) => createNewUser(data))();
@ -134,6 +152,7 @@ export const UserModal = ({ open, onClose, userId, setUserId }: UserModalProps)
name={`app_roles.${index}.role`} name={`app_roles.${index}.role`}
label="Role" label="Role"
options={[ options={[
{ value: UserRole.NoAccess, name: 'No Access' },
{ value: UserRole.User, name: 'User' }, { value: UserRole.User, name: 'User' },
{ value: UserRole.Admin, name: 'Admin' }, { value: UserRole.Admin, name: 'Admin' },
]} ]}

View file

@ -3,7 +3,9 @@ import {
getUsers, getUsers,
fetchUsers, fetchUsers,
fetchUserById, fetchUserById,
fetchPersonalInfo,
updateUserById, updateUserById,
updatePersonalInfo,
createUser, createUser,
deleteUser, deleteUser,
clearCurrentUser, clearCurrentUser,
@ -25,6 +27,10 @@ export function useUsers() {
return dispatch(fetchUserById(id)); return dispatch(fetchUserById(id));
} }
function loadPersonalInfo() {
return dispatch(fetchPersonalInfo());
}
function clearSelectedUser() { function clearSelectedUser() {
return dispatch(clearCurrentUser()); return dispatch(clearCurrentUser());
} }
@ -33,6 +39,10 @@ export function useUsers() {
return dispatch(updateUserById(data)); return dispatch(updateUserById(data));
} }
function editPersonalInfo(data: any) {
return dispatch(updatePersonalInfo(data));
}
function createNewUser(data: any) { function createNewUser(data: any) {
return dispatch(createUser(data)); return dispatch(createUser(data));
} }
@ -46,7 +56,9 @@ export function useUsers() {
user, user,
loadUser, loadUser,
loadUsers, loadUsers,
loadPersonalInfo,
editUserById, editUserById,
editPersonalInfo,
userModalLoading, userModalLoading,
userTableLoading, userTableLoading,
createNewUser, createNewUser,

View file

@ -69,6 +69,26 @@ export const fetchUserById = (id: string) => async (dispatch: Dispatch<any>) =>
dispatch(setUserModalLoading(false)); dispatch(setUserModalLoading(false));
}; };
export const fetchPersonalInfo = () => async (dispatch: Dispatch<any>) => {
dispatch(setUserModalLoading(true));
try {
const { data } = await performApiCall({
path: '/me',
method: 'GET',
});
dispatch({
type: UserActionTypes.FETCH_USER,
payload: transformUser(data),
});
} catch (err) {
console.error(err);
}
dispatch(setUserModalLoading(false));
};
export const updateUserById = (user: any) => async (dispatch: Dispatch<any>, getState: any) => { export const updateUserById = (user: any) => async (dispatch: Dispatch<any>, getState: any) => {
dispatch(setUserModalLoading(true)); dispatch(setUserModalLoading(true));
@ -103,6 +123,34 @@ export const updateUserById = (user: any) => async (dispatch: Dispatch<any>, get
dispatch(setUserModalLoading(false)); dispatch(setUserModalLoading(false));
}; };
export const updatePersonalInfo = (user: any) => async (dispatch: Dispatch<any>, getState: any) => {
dispatch(setUserModalLoading(true));
try {
const { data } = await performApiCall({
path: '/me',
method: 'PUT',
body: transformRequestUser(user),
});
dispatch({
type: UserActionTypes.UPDATE_USER,
payload: transformUser(data),
});
dispatch({
type: AuthActionTypes.UPDATE_AUTH_USER,
payload: transformUser(data),
});
showToast('Personal information updated successfully.', ToastType.Success);
} catch (err) {
console.error(err);
}
dispatch(setUserModalLoading(false));
};
export const createUser = (user: any) => async (dispatch: Dispatch<any>) => { export const createUser = (user: any) => async (dispatch: Dispatch<any>) => {
dispatch(setUserModalLoading(true)); dispatch(setUserModalLoading(true));