diff --git a/src/components/Api.js b/src/Components/Api.js
similarity index 100%
rename from src/components/Api.js
rename to src/Components/Api.js
diff --git a/src/components/App.js b/src/Components/App.js
similarity index 82%
rename from src/components/App.js
rename to src/Components/App.js
index 86d1817..ec40e81 100644
--- a/src/components/App.js
+++ b/src/Components/App.js
@@ -4,9 +4,9 @@ import {
BrowserRouter as Router, Route,
Switch,
} from 'react-router-dom';
-import Map from './Map';
-import Home from './Home';
-import Vegetables from './Vegetables';
+import Map from '../Routes/Map';
+import Home from '../Routes/Home';
+import Vegetables from '../Routes/Vegetables';
class App extends Component {
constructor(props) {
@@ -43,8 +43,7 @@ class App extends Component {
-
-
+
diff --git a/src/components/Header.js b/src/Components/Header.js
similarity index 100%
rename from src/components/Header.js
rename to src/Components/Header.js
diff --git a/src/Components/Map.js b/src/Components/Map.js
new file mode 100644
index 0000000..3681600
--- /dev/null
+++ b/src/Components/Map.js
@@ -0,0 +1,120 @@
+import React from 'react';
+import {
+ Row,
+ Col,
+ Tooltip
+} from 'reactstrap';
+import {
+ FaMapMarkerAlt
+} from 'react-icons/fa';
+import {
+ Link
+} from 'react-router-dom';
+import strToSlug from '../StrToSlug'
+
+import '../css/Map.css'
+
+const MapDimensions = {
+ width: 734,
+ height: 530,
+};
+
+export default class Map extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ selectedType: this.props.selectedType,
+ selectedVegetable: this.props.selectedVegetable,
+ Map: {
+ width: '20px',
+ height: '20px',
+ },
+ tooltipOpen: false
+ }
+
+ this.selectVegetable = this.selectVegetable.bind(this);
+ this.setMap = this.setMap.bind(this);
+ this.toggle = this.toggle.bind(this);
+ }
+
+ componentWillReceiveProps(newProps) {
+ this.setState(prevState => ({
+ ...prevState,
+ selectedType: newProps.selectedType,
+ selectedVegetable: newProps.selectedVegetable
+ }));
+ }
+
+ componentDidMount() {
+ window.addEventListener('resize', this.setMap);
+ this.setMap();
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.setMap);
+ }
+
+ setMap() {
+ const width = document.getElementById('MapContainer').clientWidth;
+ let MapWidth = MapDimensions.width;
+ let MapHeight = MapDimensions.height;
+
+ if (width < MapDimensions.width) {
+ MapWidth = width;
+ MapHeight = Math.round(MapDimensions.height * MapWidth / MapDimensions.width);
+ }
+
+ this.setState({
+ Map: {
+ width: MapWidth,
+ height: MapHeight,
+ },
+ });
+ }
+
+ selectVegetable(vegetable) {
+ this.setState({
+ selectedVegetable: vegetable
+ })
+ this.props.selectVegetable(vegetable)
+ }
+
+ toggle(id) {
+ this.setState(prevState => ({
+ tooltipOpen: prevState.tooltipOpen === id ? false : id
+ }));
+ }
+
+ render() {
+ return (
+
+
+
+
+ {
+ this.state.selectedType &&
+ this.state.selectedType.Vegetables &&
+ this.state.selectedType.Vegetables.map((vegetable, key) =>
+ (
+ this.selectVegetable(vegetable)}
+ >
+ this.toggle(vegetable.id)}>
+ {vegetable.name}
+
+
+
+ )
+ )
+ }
+
+
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/Components/Vegetables.js b/src/Components/Vegetables.js
new file mode 100644
index 0000000..a4e5c16
--- /dev/null
+++ b/src/Components/Vegetables.js
@@ -0,0 +1,56 @@
+import React from 'react';
+import {
+ ListGroup,
+ ListGroupItem
+} from 'reactstrap';
+import {
+ Link
+} from 'react-router-dom';
+import strToSlug from '../StrToSlug'
+
+import '../css/Vegetables.css'
+
+export default class Map extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ selectedType: this.props.selectedType,
+ selectedVegetable: this.props.selectVegetable
+ }
+ }
+
+ componentWillReceiveProps(newProps) {
+ this.setState(newProps);
+ }
+
+ render() {
+ return (
+
+
+
+
+ {
+ this.state.selectedType &&
+ this.state.selectedType.Vegetables &&
+ this.state.selectedType.Vegetables.map((vegetable, key) =>
+ (
+ this.props.selectVegetable(vegetable)}
+ >
+
+ {vegetable.name}
+
+
+
+ )
+ )
+ }
+
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/components/Home.js b/src/Routes/Home.js
similarity index 98%
rename from src/components/Home.js
rename to src/Routes/Home.js
index 9ff0ecb..fe71638 100644
--- a/src/components/Home.js
+++ b/src/Routes/Home.js
@@ -7,7 +7,7 @@ import {
import '../css/Home.css';
-export default class Home extends React.Component {
+export default class RouterHome extends React.Component {
render() {
return (
diff --git a/src/Routes/Map.js b/src/Routes/Map.js
new file mode 100644
index 0000000..ef4d0e9
--- /dev/null
+++ b/src/Routes/Map.js
@@ -0,0 +1,108 @@
+import React from 'react';
+import {
+ Container,
+ Row,
+ Col,
+ ListGroup,
+ ListGroupItem,
+ Badge
+} from 'reactstrap';
+import Api from '../Components/Api';
+import {
+ NotificationContainer,
+ NotificationManager
+} from 'react-notifications';
+import MapItem from '../Components/Map'
+import Vegetables from '../Components/Vegetables'
+
+export default class RouterMap extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ types: [],
+ vegetables: [],
+ selectedType: {},
+ selectedVegetable: {}
+ }
+
+ this.getVegetablesTypes = this.getVegetablesTypes.bind(this);
+ this.selectType = this.selectType.bind(this);
+ this.selectVegetable = this.selectVegetable.bind(this);
+
+ this.getVegetablesTypes();
+ }
+
+ getVegetablesTypes() {
+ Api.get('types')
+ .then(res => {
+ this.setState({
+ types: res.data.rows
+ });
+ })
+ .catch(() => {
+ NotificationManager.error('Erreur lors de la récupération des catégories');
+ })
+ }
+
+ selectType(type) {
+ this.setState({
+ selectedType: type
+ });
+ }
+
+ selectVegetable(vegetable) {
+ this.setState({
+ selectedVegetable: vegetable
+ })
+ }
+
+ render() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ this.state.types.map((type, key) =>
+ (
+ this.selectType(type)}>
+ {type.name}
+ {type.Vegetables.length}
+
+ )
+ )
+ }
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/Routes/Vegetables.js b/src/Routes/Vegetables.js
new file mode 100644
index 0000000..c0376ae
--- /dev/null
+++ b/src/Routes/Vegetables.js
@@ -0,0 +1,78 @@
+import React from 'react';
+import {
+ Container,
+ Row,
+ Col
+} from 'reactstrap';
+import Api from '../Components/Api';
+import {
+ NotificationContainer,
+ NotificationManager
+} from 'react-notifications';
+import MapItem from '../Components/Map'
+import VegetablesList from '../Components/Vegetables'
+
+export default class RouterVegetables extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ typeId: props.match.params.typeId,
+ selectedType: {},
+ selectedVegetable: {}
+ }
+
+ this.getItem = this.getItem.bind(this);
+ this.selectVegetable = this.selectVegetable.bind(this);
+
+ this.getItem();
+ }
+
+ selectVegetable(vegetable) {
+ this.setState({
+ selectedVegetable: vegetable
+ })
+ }
+
+ getItem() {
+ Api.get(`/types/${this.state.typeId}`)
+ .then(res => {
+ this.setState({
+ selectedType: res.data
+ });
+ })
+ .catch(() => {
+ NotificationManager.error('Erreur lors de la récupération des végétaux');
+ })
+
+ }
+
+ render() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/components/Map.js b/src/components/Map.js
deleted file mode 100644
index 3103831..0000000
--- a/src/components/Map.js
+++ /dev/null
@@ -1,206 +0,0 @@
-import React from 'react';
-import {
- Container,
- Row,
- Col,
- ListGroup,
- ListGroupItem,
- Badge,
- Tooltip
-} from 'reactstrap';
-import Api from './Api';
-import {
- FaMapMarkerAlt
-} from 'react-icons/fa';
-import {
- NotificationContainer,
- NotificationManager
-} from 'react-notifications';
-import {
- Link
-} from 'react-router-dom';
-import strToSlug from '../StrToSlug'
-
-import '../css/Map.css'
-
-const MapDimensions = {
- width: 734,
- height: 530,
-};
-
-export default class Map extends React.Component {
- constructor(props) {
- super(props);
-
- this.state = {
- types: [],
- vegetables: [],
- selectedType: {},
- selectedVegetable: {},
- Map: {
- width: '20px',
- height: '20px',
- },
- tooltipOpen: false
- }
-
- this.getVegetablesTypes = this.getVegetablesTypes.bind(this);
- this.selectType = this.selectType.bind(this);
- this.selectVegetable = this.selectVegetable.bind(this);
- this.setMap = this.setMap.bind(this);
- this.toggle = this.toggle.bind(this);
-
- this.getVegetablesTypes();
- }
-
- componentDidMount() {
- window.addEventListener('resize', this.setMap);
- this.setMap();
- }
-
- componentWillUnmount() {
- window.removeEventListener('resize', this.setMap);
- }
-
- setMap() {
- const width = document.getElementById('MapContainer').clientWidth;
- let MapWidth = MapDimensions.width;
- let MapHeight = MapDimensions.height;
-
- if (width < MapDimensions.width) {
- MapWidth = width;
- MapHeight = Math.round(MapDimensions.height * MapWidth / MapDimensions.width);
- }
-
- this.setState({
- Map: {
- width: MapWidth,
- height: MapHeight,
- },
- });
- }
-
- getVegetablesTypes() {
- Api.get('types')
- .then(res => {
- this.setState({
- types: res.data.rows
- });
- })
- .catch(() => {
- NotificationManager.error('Erreur lors de la récupération des catégories');
- })
- }
-
- getVegetable(id) {
- Api.get(`types/${id}`)
- .then(res => {
- this.setState({
- vegetables: res.data
- });
- })
- .catch(() => {
- NotificationManager.error('Erreur lors de la récupération des végétaux');
- })
- }
-
- selectType(type) {
- this.setState({
- selectedType: type
- });
- }
-
- selectVegetable(vegetable) {
- this.setState({
- selectedVegetable: vegetable
- })
- }
-
- toggle(id) {
- this.setState(prevState => ({
- tooltipOpen: prevState.tooltipOpen === id ? false : id
- }));
- }
-
- render() {
- return (
-
-
-
-
-
-
-
-
- {
- this.state.selectedType &&
- this.state.selectedType.Vegetables &&
- this.state.selectedType.Vegetables.map((vegetable, key) =>
- (
- this.selectVegetable(vegetable)}
- >
- this.toggle(vegetable.id)}>
- {vegetable.name}
-
-
-
- )
- )
- }
-
-
-
-
-
-
-
-
-
-
-
- {
- this.state.types.map((type, key) =>
- (
- this.selectType(type)}>
- {type.name}
- {type.Vegetables.length}
-
- )
- )
- }
-
-
-
-
-
-
-
-
- {
- this.state.selectedType &&
- this.state.selectedType.Vegetables &&
- this.state.selectedType.Vegetables.map((vegetable, key) =>
- (
- this.selectVegetable(vegetable)}>
- {vegetable.name}
-
- )
- )
- }
-
-
-
-
-
-
-
-
- );
- }
-}
\ No newline at end of file
diff --git a/src/components/Vegetables.js b/src/components/Vegetables.js
deleted file mode 100644
index 4eb9f48..0000000
--- a/src/components/Vegetables.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-
-export default class Vegetables extends React.Component {
- render() {
- return (
-
-
-
- );
- }
-}
\ No newline at end of file
diff --git a/src/css/Vegetables.css b/src/css/Vegetables.css
new file mode 100644
index 0000000..82a8250
--- /dev/null
+++ b/src/css/Vegetables.css
@@ -0,0 +1,3 @@
+.vegetables--types--group.list-group a {
+ color: #212529;
+}
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 68871a9..1cdbac9 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,6 +1,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
-import App from './components/App';
+import App from './Components/App';
import * as serviceWorker from './serviceWorker';
import 'react-notifications/lib/notifications.css';