diff --git a/src/app/EmployeesHistory/Components/EmployeeDetails.js b/src/app/EmployeesHistory/Components/EmployeeDetails.js new file mode 100644 index 0000000..8049764 --- /dev/null +++ b/src/app/EmployeesHistory/Components/EmployeeDetails.js @@ -0,0 +1,31 @@ +import React from 'react'; +import ProjectsHistoryDetails from './ProjectsHistoryDetails'; +import Evaluations from './Evaluations'; + +class EmployeeDetails extends React.Component { + state = { + projectsHistory: [], + evaluations: [] + }; + + componentWillReceiveProps(nextProps) { + this.setState({ + projectsHistory: nextProps.employee.projectsHistory, + evaluations: nextProps.employee.employeeEvaluations + }); + } + + render() { + return ( +
+ Employee Details +
+ +
+ +
+ ); + } +} + +export default EmployeeDetails; diff --git a/src/app/EmployeesHistory/Components/EmployeeSummary.js b/src/app/EmployeesHistory/Components/EmployeeSummary.js new file mode 100644 index 0000000..13f5f60 --- /dev/null +++ b/src/app/EmployeesHistory/Components/EmployeeSummary.js @@ -0,0 +1,46 @@ +import React, { Component } from 'react'; +import ItemsList from './ItemsList'; +import ProjectsItemList from './ProjectsItemList'; + +class EmployeeSummary extends Component { + render() { + const employee = this.props.employee; + + return ( +
+
+ Employee Summary + + + + + + + + + + + + + + + + + + + +
Joined date + {employee.joinDate} +
Techinical experience + +
Passions + +
Projects history + +
+
+ ); + } +} + +export default EmployeeSummary; diff --git a/src/app/EmployeesHistory/Components/EvaluationItemsList.js b/src/app/EmployeesHistory/Components/EvaluationItemsList.js new file mode 100644 index 0000000..ce44f4e --- /dev/null +++ b/src/app/EmployeesHistory/Components/EvaluationItemsList.js @@ -0,0 +1,18 @@ +import React from 'react'; + +const EvaluationItemsList = props => { + const evaluationItems = props.items.map((item, index) => { + return ( +
  • + {item.date}: {item.feedback} +
  • + ); + }); + return ( + + ); +}; + +export default EvaluationItemsList; diff --git a/src/app/EmployeesHistory/Components/Evaluations.js b/src/app/EmployeesHistory/Components/Evaluations.js new file mode 100644 index 0000000..d60400b --- /dev/null +++ b/src/app/EmployeesHistory/Components/Evaluations.js @@ -0,0 +1,13 @@ +import React from 'react'; +import EvaluationItemsList from './EvaluationItemsList'; + +const Evaluations = props => { + return ( +
    + Evaluations + +
    + ); +}; + +export default Evaluations; diff --git a/src/app/EmployeesHistory/Components/ItemsList.js b/src/app/EmployeesHistory/Components/ItemsList.js new file mode 100644 index 0000000..704c04a --- /dev/null +++ b/src/app/EmployeesHistory/Components/ItemsList.js @@ -0,0 +1,27 @@ +import React from 'react'; + +class ItemsList extends React.Component { + state = { items: [] }; + + componentWillReceiveProps(nextProps) { + this.setState({ items: nextProps.items }); + } + + render() { + const listItems = this.state.items.map((value, index) => { + return ( +
  • + {value} +
  • + ); + }); + + return ( + + ); + } +} + +export default ItemsList; diff --git a/src/app/EmployeesHistory/Components/ProjectsHistoryDetails.js b/src/app/EmployeesHistory/Components/ProjectsHistoryDetails.js new file mode 100644 index 0000000..672b034 --- /dev/null +++ b/src/app/EmployeesHistory/Components/ProjectsHistoryDetails.js @@ -0,0 +1,13 @@ +import React from 'react'; +import ProjectsTimeline from './ProjectsTimeline'; + +const ProjectsHistoryDetails = props => { + return ( +
    + Projects + +
    + ); +}; + +export default ProjectsHistoryDetails; diff --git a/src/app/EmployeesHistory/Components/ProjectsItemList.js b/src/app/EmployeesHistory/Components/ProjectsItemList.js new file mode 100644 index 0000000..44e6780 --- /dev/null +++ b/src/app/EmployeesHistory/Components/ProjectsItemList.js @@ -0,0 +1,27 @@ +import React from 'react'; + +class ProjectItemList extends React.Component { + state = { items: [] }; + + componentWillReceiveProps(nextProps) { + this.setState({ items: nextProps.items }); + } + + render() { + const listItems = this.state.items.map((value, index) => { + return ( +
  • + {value.projectName} +
  • + ); + }); + + return ( + + ); + } +} + +export default ProjectItemList; diff --git a/src/app/EmployeesHistory/Components/ProjectsTimeline.js b/src/app/EmployeesHistory/Components/ProjectsTimeline.js new file mode 100644 index 0000000..69b38d5 --- /dev/null +++ b/src/app/EmployeesHistory/Components/ProjectsTimeline.js @@ -0,0 +1,20 @@ +import React from 'react'; + +const ProjectsTimeline = props => { + const timelines = props.projectsTimeline.map((projectTimeline, index) => { + return ( +
  • + {projectTimeline.projectName} : ({projectTimeline.startDate}{' '} + - {projectTimeline.endDate}) +
  • + ); + }); + + return ( + + ); +}; + +export default ProjectsTimeline; diff --git a/src/app/EmployeesHistory/Components/employeeDetails.js b/src/app/EmployeesHistory/Components/employeeDetails.js new file mode 100644 index 0000000..8049764 --- /dev/null +++ b/src/app/EmployeesHistory/Components/employeeDetails.js @@ -0,0 +1,31 @@ +import React from 'react'; +import ProjectsHistoryDetails from './ProjectsHistoryDetails'; +import Evaluations from './Evaluations'; + +class EmployeeDetails extends React.Component { + state = { + projectsHistory: [], + evaluations: [] + }; + + componentWillReceiveProps(nextProps) { + this.setState({ + projectsHistory: nextProps.employee.projectsHistory, + evaluations: nextProps.employee.employeeEvaluations + }); + } + + render() { + return ( +
    + Employee Details +
    + +
    + +
    + ); + } +} + +export default EmployeeDetails; diff --git a/src/app/EmployeesHistory/Components/employeeSummary.js b/src/app/EmployeesHistory/Components/employeeSummary.js new file mode 100644 index 0000000..13f5f60 --- /dev/null +++ b/src/app/EmployeesHistory/Components/employeeSummary.js @@ -0,0 +1,46 @@ +import React, { Component } from 'react'; +import ItemsList from './ItemsList'; +import ProjectsItemList from './ProjectsItemList'; + +class EmployeeSummary extends Component { + render() { + const employee = this.props.employee; + + return ( +
    +
    + Employee Summary + + + + + + + + + + + + + + + + + + + +
    Joined date + {employee.joinDate} +
    Techinical experience + +
    Passions + +
    Projects history + +
    +
    + ); + } +} + +export default EmployeeSummary; diff --git a/src/app/EmployeesHistory/Components/evaluationItemsList.js b/src/app/EmployeesHistory/Components/evaluationItemsList.js new file mode 100644 index 0000000..ce44f4e --- /dev/null +++ b/src/app/EmployeesHistory/Components/evaluationItemsList.js @@ -0,0 +1,18 @@ +import React from 'react'; + +const EvaluationItemsList = props => { + const evaluationItems = props.items.map((item, index) => { + return ( +
  • + {item.date}: {item.feedback} +
  • + ); + }); + return ( + + ); +}; + +export default EvaluationItemsList; diff --git a/src/app/EmployeesHistory/Components/evaluations.js b/src/app/EmployeesHistory/Components/evaluations.js new file mode 100644 index 0000000..d60400b --- /dev/null +++ b/src/app/EmployeesHistory/Components/evaluations.js @@ -0,0 +1,13 @@ +import React from 'react'; +import EvaluationItemsList from './EvaluationItemsList'; + +const Evaluations = props => { + return ( +
    + Evaluations + +
    + ); +}; + +export default Evaluations; diff --git a/src/app/EmployeesHistory/Components/itemsList.js b/src/app/EmployeesHistory/Components/itemsList.js new file mode 100644 index 0000000..704c04a --- /dev/null +++ b/src/app/EmployeesHistory/Components/itemsList.js @@ -0,0 +1,27 @@ +import React from 'react'; + +class ItemsList extends React.Component { + state = { items: [] }; + + componentWillReceiveProps(nextProps) { + this.setState({ items: nextProps.items }); + } + + render() { + const listItems = this.state.items.map((value, index) => { + return ( +
  • + {value} +
  • + ); + }); + + return ( + + ); + } +} + +export default ItemsList; diff --git a/src/app/EmployeesHistory/Components/projectsHistoryDetails.js b/src/app/EmployeesHistory/Components/projectsHistoryDetails.js new file mode 100644 index 0000000..672b034 --- /dev/null +++ b/src/app/EmployeesHistory/Components/projectsHistoryDetails.js @@ -0,0 +1,13 @@ +import React from 'react'; +import ProjectsTimeline from './ProjectsTimeline'; + +const ProjectsHistoryDetails = props => { + return ( +
    + Projects + +
    + ); +}; + +export default ProjectsHistoryDetails; diff --git a/src/app/EmployeesHistory/Components/projectsTimeline.js b/src/app/EmployeesHistory/Components/projectsTimeline.js new file mode 100644 index 0000000..69b38d5 --- /dev/null +++ b/src/app/EmployeesHistory/Components/projectsTimeline.js @@ -0,0 +1,20 @@ +import React from 'react'; + +const ProjectsTimeline = props => { + const timelines = props.projectsTimeline.map((projectTimeline, index) => { + return ( +
  • + {projectTimeline.projectName} : ({projectTimeline.startDate}{' '} + - {projectTimeline.endDate}) +
  • + ); + }); + + return ( + + ); +}; + +export default ProjectsTimeline; diff --git a/src/app/EmployeesHistory/EmployeeHistory.css b/src/app/EmployeesHistory/EmployeeHistory.css new file mode 100644 index 0000000..84f1681 --- /dev/null +++ b/src/app/EmployeesHistory/EmployeeHistory.css @@ -0,0 +1,16 @@ +table { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; +} + +td, +th { + border: 1px solid #dddddd; + text-align: left; + padding: 8px; +} + +tr:nth-child(even) { + background-color: #dddddd; +} diff --git a/src/app/EmployeesHistory/database/employeeHistory.json b/src/app/EmployeesHistory/database/employeeHistory.json new file mode 100644 index 0000000..d8bb553 --- /dev/null +++ b/src/app/EmployeesHistory/database/employeeHistory.json @@ -0,0 +1,35 @@ +{ + "employees": [ + { + "id": 1, + "name": "Ion", + "joinDate": "22/06/2015", + "technicalExperience": ["Java", "React", "Css"], + "hobbies": ["Football", "Reading"], + "projectsHistory": [ + { + "projectId": 1, + "projectName": "Project 1", + "startDate": "10/05/2015", + "endDate": "10/05/2016" + }, + { + "projectId": 2, + "projectName": "Project 2", + "startDate": "19/07/2016", + "endDate": "04/07/2017" + } + ], + "employeeEvaluations": [ + { + "feedback": "Needs to improve front-end skills", + "date": "22/06/2016" + }, + { + "feedback": "Promoted to TD2", + "date": "22/06/2017" + } + ] + } + ] +} diff --git a/src/app/EmployeesHistory/employeeHistoryProvider.js b/src/app/EmployeesHistory/employeeHistoryProvider.js new file mode 100644 index 0000000..369aaa7 --- /dev/null +++ b/src/app/EmployeesHistory/employeeHistoryProvider.js @@ -0,0 +1,11 @@ +class EmployeeHistoryProvider { + endpointPath = 'http://localhost:3000'; + + getEmployee(employeeId) { + return fetch( + this.endpointPath + '/employees/' + employeeId + ).then(response => response.json()); + } +} + +export default EmployeeHistoryProvider; diff --git a/src/app/EmployeesHistory/index.js b/src/app/EmployeesHistory/index.js index c09cdf8..c333562 100644 --- a/src/app/EmployeesHistory/index.js +++ b/src/app/EmployeesHistory/index.js @@ -1,10 +1,30 @@ import React from 'react'; +import EmployeeDetails from './Components/EmployeeDetails'; +import EmployeeSummary from './Components/EmployeeSummary'; +import EmployeeHistoryProvider from './employeeHistoryProvider'; +import './EmployeeHistory.css'; -const Mock = ({ match }) => -
    -

    - {match.url} -

    -
    ; +const employeeProvider = new EmployeeHistoryProvider(); -export default Mock; +class EmployeeHistory extends React.Component { + employeeId = 1; + state = { currentEmployee: {} }; + + componentDidMount() { + employeeProvider.getEmployee(this.employeeId).then(data => { + this.setState({ currentEmployee: data }); + }); + } + + render() { + return ( +
    + +
    +
    + +
    + ); + } +} +export default EmployeeHistory;