Skip to content

Commit b99e7e7

Browse files
author
Antonio Contreras LEMONCODE
committed
Create project mappers and refactor others components
1 parent ab96f96 commit b99e7e7

9 files changed

Lines changed: 95 additions & 10 deletions

File tree

src/pods/employee/employee.container.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ export const EmployeeContainer: React.FunctionComponent = () => {
1616
const [isEditMode, setIsEditMode] = React.useState<boolean>(false);
1717
const { showMessage } = useSnackbarContext();
1818

19-
const onLoadProjectSummary = async () => {
19+
const onLoadEmployee = async () => {
2020
try {
2121
const apiEmployee = await trackPromise(getEmployeeById(id));
2222
const viewModelEmployee = mapEmployeeFromApiToVm(apiEmployee);
2323
setEmployee(viewModelEmployee);
2424
} catch (error) {
2525
error &&
26-
showMessage('Ha ocurrido un error al cargar los proyectos', 'error');
26+
showMessage('Ha ocurrido un error al cargar el empleado', 'error');
2727
}
2828
};
2929

@@ -44,7 +44,7 @@ export const EmployeeContainer: React.FunctionComponent = () => {
4444
const isEditMode = isEditModeHelper(id);
4545
setIsEditMode(isEditMode);
4646
if (isEditMode) {
47-
onLoadProjectSummary();
47+
onLoadEmployee();
4848
}
4949
}, []);
5050

src/pods/project/api/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './employee.api';

src/pods/project/api/project.api-model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export interface Project {
44
externalId?: string;
55
comments?: string;
66
isActive: boolean;
7-
emplyees: EmployeeSummary[];
7+
employees: EmployeeSummary[];
88
}
99

1010
export interface EmployeeSummary {

src/pods/project/api/project.mock-data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ export const mockProject: Project = {
2929
isActive: true,
3030
comments: 'Comentario',
3131
externalId: '1234',
32-
emplyees: mockEmployeeSummaryList,
32+
employees: mockEmployeeSummaryList,
3333
};
Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
import React from 'react';
2+
import { Formik, Form } from 'formik';
3+
import { SelectComponent } from 'common/components';
4+
import { monthList } from 'common/constants';
5+
import { CommandFooterComponent } from 'common-app/command-footer';
26

37
export const ReportComponent: React.FunctionComponent = () => {
4-
return <h1>Hello Report Component</h1>;
8+
return (
9+
<Formik initialValues={{}} enableReinitialize={true} onSubmit={console.log}>
10+
{() => (
11+
<Form>
12+
<SelectComponent
13+
name="month"
14+
label="Mes"
15+
items={monthList}
16+
disabled
17+
/>
18+
<SelectComponent
19+
name="year"
20+
label="Año"
21+
items={[
22+
{
23+
id: '2020',
24+
name: '2020',
25+
},
26+
]}
27+
disabled
28+
/>
29+
<CommandFooterComponent
30+
onCancel={console.log}
31+
labels={{ saveButton: 'Generar', cancelButton: 'Cancelar' }}
32+
/>
33+
</Form>
34+
)}
35+
</Formik>
36+
);
537
};

src/pods/project/project.component.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export const ProjectComponent: React.FunctionComponent<Props> = ({
2424
<AppBar position="static">
2525
<TabListComponent value={tab} onChange={setTab}>
2626
<TabComponent label="Datos" />
27-
<TabComponent label="Empleados" disabled={isEditMode} />
28-
<TabComponent label="Informes" disabled={isEditMode} />
27+
<TabComponent label="Empleados" disabled={!isEditMode} />
28+
<TabComponent label="Informes" disabled={!isEditMode} />
2929
</TabListComponent>
3030
</AppBar>
3131
<TabPanelComponent value={tab} index={0}>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,37 @@
11
import React from 'react';
22
import { ProjectComponent } from './project.component';
33
import { useParams } from 'react-router-dom';
4+
import { useSnackbarContext } from 'common/components';
5+
import { getProjectById } from './api';
6+
import { trackPromise } from 'react-promise-tracker';
7+
import { mapProjectFromApiToVm } from './project.mapper';
8+
import { Project, createEmptyProject } from './project.vm';
9+
import { isEditModeHelper } from 'common/helpers';
410

511
export const ProjectContainer: React.FunctionComponent = () => {
612
const { id } = useParams();
13+
const [project, setProject] = React.useState<Project>(createEmptyProject());
714
const [isEditMode, setIsEditMode] = React.useState<boolean>(false);
15+
const { showMessage } = useSnackbarContext();
16+
17+
const onLoadProject = async () => {
18+
try {
19+
const apiProject = await trackPromise(getProjectById(id));
20+
const viewModelProject = mapProjectFromApiToVm(apiProject);
21+
setProject(viewModelProject);
22+
} catch (error) {
23+
error &&
24+
showMessage('Ha ocurrido un error al cargar el proyecto', 'error');
25+
}
26+
};
27+
28+
React.useEffect(() => {
29+
const isEditMode = isEditModeHelper(id);
30+
setIsEditMode(isEditMode);
31+
if (isEditMode) {
32+
onLoadProject();
33+
}
34+
}, []);
835

936
return <ProjectComponent isEditMode={isEditMode} />;
1037
};

src/pods/project/project.mapper.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { mapToCollection } from 'common/mappers';
2+
import * as apiModel from './api/project.api-model';
3+
import * as viewModel from './project.vm';
4+
5+
const mapEmployeeSummaryFromApiToVm = (
6+
employeeSummary: apiModel.EmployeeSummary
7+
): viewModel.ProloyeeSummary => ({
8+
...employeeSummary,
9+
});
10+
11+
const mapEmployeeSummaryListFromApiToVm = (
12+
employeeSummary: apiModel.EmployeeSummary[]
13+
): viewModel.ProloyeeSummary[] =>
14+
mapToCollection(employeeSummary, es => mapEmployeeSummaryFromApiToVm(es));
15+
16+
export const mapProjectFromApiToVm = (
17+
project: apiModel.Project
18+
): viewModel.Project => {
19+
return Boolean(project)
20+
? {
21+
...project,
22+
employees: mapEmployeeSummaryListFromApiToVm(project.employees),
23+
}
24+
: viewModel.createEmptyProject();
25+
};

src/pods/project/project.vm.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export interface Project {
44
externalId?: string;
55
comments?: string;
66
isActive: boolean;
7-
emplyees: ProloyeeSummary[];
7+
employees: ProloyeeSummary[];
88
}
99

1010
export interface ProloyeeSummary {
@@ -19,5 +19,5 @@ export const createEmptyProject = (): Project => ({
1919
externalId: '',
2020
comments: '',
2121
isActive: false,
22-
emplyees: [],
22+
employees: [],
2323
});

0 commit comments

Comments
 (0)