Skip to content

Commit 9d3c1d5

Browse files
committed
refactor: streamline user data loading and updating logic in edit user components
1 parent 58a4129 commit 9d3c1d5

File tree

7 files changed

+39
-41
lines changed

7 files changed

+39
-41
lines changed

mock-server/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
NODE_ENV=development
22
PORT=3000
3-
SIMULATED_DELAY=2000
3+
SIMULATED_DELAY=2000

mock-server/src/dals/user/user.repository.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { paginateItems } from '#common/helpers/index.js';
22
import { CollectionQuery } from '#common/models/index.js';
33
import { db } from '#dals/mock.data.js';
4-
//import { mapStringToObjectId } from '#common/mappers/index.js';
54
import * as model from './user.model.js';
65

76
export const userRepository = {
@@ -22,16 +21,10 @@ export const userRepository = {
2221
},
2322
getUserById: async (id: string): Promise<model.Usuario> => db.users.find(user => user._id.toHexString() === id),
2423
actualizarUsuario: async (id: string, usuarioActualizado: model.Usuario): Promise<boolean> => {
25-
// const listaAcualizada = db.users.map(usuario =>
26-
// usuario._id.toHexString() === usuarioActualizado._id.toHexString() ? { ...usuarioActualizado } : { ...usuario }
27-
// );
28-
// db.users = [...listaAcualizada];
29-
// return true;
30-
const usuarioIndex = db.users.findIndex(user => user._id.toHexString() === id);
31-
if (usuarioIndex !== -1) {
32-
db.users[usuarioIndex] = { ...db.users[usuarioIndex], ...usuarioActualizado };
33-
return true;
24+
const index = db.users.findIndex(user => user._id.toHexString() === id);
25+
if (index !== -1) {
26+
db.users[index] = { ...db.users[index], ...usuarioActualizado };
3427
}
35-
return false;
28+
return index !== -1;
3629
},
3730
};

mock-server/src/pods/user/user.rest-api.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,16 @@ userApi
4141
.get('/:id', async (req, res, next) => {
4242
try {
4343
const { id } = req.params;
44-
4544
const user = await userRepository.getUserById(id);
46-
console.log(mapUserFromModelToApi(user));
4745
res.send(mapUserFromModelToApi(user));
4846
} catch (error) {
4947
next(error);
5048
}
5149
})
5250
.put('/:id', async (req, res, next) => {
5351
try {
54-
const usuarioActualizado: Usuario = req.body;
5552
const { id } = req.params;
53+
const usuarioActualizado: Usuario = req.body;
5654
const modelUser = mapUserFromApiToModel(usuarioActualizado);
5755
const estaActualizado = await userRepository.actualizarUsuario(id, modelUser);
5856

src/modules/users/edit-user-sheet/edit-user-sheet.pod.tsx

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,31 @@ import React from 'react';
22
import { Spinner } from '#common/components/';
33
import { useUnidadRolList } from '#core/api/lookups/unidad-rol';
44
import { EditUser } from './edit.component';
5-
import { getUserByIdRepository } from './edit.repository';
6-
import { Usuario, createEmptyUsuario } from './edit.vm';
7-
import { useUpdateUserMutation } from './edit.query.hook';
5+
import { Usuario } from './edit.vm';
6+
import { useLoadUser, useUpdateUserMutation } from './edit.query.hook';
87

98
interface Props {
109
id: string;
1110
}
1211

1312
export const EditUserSheet: React.FC<Props> = props => {
14-
const [usuario, setUsuario] = React.useState<Usuario>(createEmptyUsuario());
1513
const { id } = props;
16-
const { unidadRolList, isLoading } = useUnidadRolList();
14+
const { unidadRolList, isLoading: isLoadingUnidadRolList } = useUnidadRolList();
1715
const { saveUser, isPending } = useUpdateUserMutation();
16+
const { usuario, isLoading: isLoadingUsuario } = useLoadUser(id);
1817

1918
const handleSubmit = (usuarioActualizado: Usuario) => {
2019
saveUser(usuarioActualizado);
2120
};
2221

23-
React.useEffect(() => {
24-
cargarDatos();
25-
}, []);
26-
27-
const cargarDatos = async () => {
28-
const usuario = await getUserByIdRepository(id);
29-
setUsuario(usuario);
30-
};
22+
const isLoading = React.useMemo(
23+
() => isLoadingUsuario || isLoadingUnidadRolList || isPending,
24+
[isLoadingUsuario, isLoadingUnidadRolList, isPending]
25+
);
3126

3227
return (
3328
<>
34-
<h3>User id: {id}</h3>
35-
<Spinner isSpinnerShowing={isLoading || isPending} />
29+
<Spinner isSpinnerShowing={isLoading} />
3630
<EditUser usuario={usuario} unidadRolList={unidadRolList} onSubmit={handleSubmit} />
3731
</>
3832
);

src/modules/users/edit-user-sheet/edit.mappers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const mapUserFromApiToVm = (user: apiModel.Usuario): viewModel.Usuario =>
1717
});
1818

1919
export const mapUserFromVmToApi = (usuario: viewModel.Usuario): apiModel.Usuario => ({
20-
id: usuario.unidad,
20+
id: usuario.id,
2121
nombre: usuario.nombre,
2222
apellido: usuario.apellido,
2323
telefono: usuario.telefono,
Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { useMutation } from '@tanstack/react-query';
2-
import { useNavigate } from '@tanstack/react-router';
1+
import { useMutation, useQuery } from '@tanstack/react-query';
32
import { queryClient } from '#core/react-query';
4-
import { updateUser } from './edit.repository';
5-
import { Usuario } from './edit.vm';
3+
import { getUserByIdRepository, updateUser } from './edit.repository';
4+
import { createEmptyUsuario, Usuario } from './edit.vm';
65
import { usersQueryKeys } from '../users-keys';
6+
import { useNavigate } from '@tanstack/react-router';
77

88
interface UseSaveUserMutationResult {
99
saveUser: (user: Usuario) => void;
@@ -15,20 +15,34 @@ export const useUpdateUserMutation = (): UseSaveUserMutationResult => {
1515

1616
const { mutate: saveUser, isPending } = useMutation({
1717
mutationFn: (user: Usuario) => updateUser(user),
18-
onSuccess: (_, variables) => {
18+
onSuccess: () => {
1919
queryClient.invalidateQueries({
20-
queryKey: [usersQueryKeys.user(variables.id), usersQueryKeys.userCollection()],
20+
queryKey: usersQueryKeys.userCollection(),
2121
});
2222

2323
navigate({ to: '/users' });
2424
},
25-
onError: () => {
26-
console.error('Error updating user');
27-
},
2825
});
2926

3027
return {
3128
saveUser,
3229
isPending,
3330
};
3431
};
32+
33+
interface UseLoadUser {
34+
usuario: Usuario;
35+
isLoading: boolean;
36+
}
37+
38+
export const useLoadUser = (id: string): UseLoadUser => {
39+
const { data = createEmptyUsuario(), isLoading } = useQuery({
40+
queryKey: usersQueryKeys.user(id),
41+
queryFn: () => getUserByIdRepository(id),
42+
});
43+
44+
return {
45+
usuario: data,
46+
isLoading,
47+
};
48+
};

src/modules/users/edit-user-sheet/edit.repository.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ export const getUserByIdRepository = async (id: string): Promise<viewModel.Usuar
1212

1313
export const updateUser = async (usuarioActualizado: viewModel.Usuario): Promise<boolean> => {
1414
const usuarioMapeado = mapUserFromVmToApi(usuarioActualizado);
15-
console.log(usuarioMapeado);
1615
const estaActualizado = await api.updateUser(usuarioMapeado);
1716

1817
return estaActualizado;

0 commit comments

Comments
 (0)