Aufräumarbeiten, Entfernen von User-Router
This commit is contained in:
parent
ebc97b5470
commit
482b476831
9
app.js
9
app.js
|
@ -3,7 +3,6 @@ var express = require('express');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var logger = require('morgan');
|
var logger = require('morgan');
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
var sassMiddleware = require('node-sass-middleware');
|
|
||||||
|
|
||||||
var xml = require('xml');
|
var xml = require('xml');
|
||||||
|
|
||||||
|
@ -19,7 +18,6 @@ const PORT = process.env.PORT || 4000;
|
||||||
|
|
||||||
|
|
||||||
var indexRouter = require('./routes/index');
|
var indexRouter = require('./routes/index');
|
||||||
var usersRouter = require('./routes/users');
|
|
||||||
var valuelistRouter = require('./routes/valuelist');
|
var valuelistRouter = require('./routes/valuelist');
|
||||||
var recepieRouter = require('./routes/recepie');
|
var recepieRouter = require('./routes/recepie');
|
||||||
var personRouter = require('./routes/v1/person');
|
var personRouter = require('./routes/v1/person');
|
||||||
|
@ -43,12 +41,6 @@ app.use(cors(corsOptions));
|
||||||
app.use(logger('dev'));
|
app.use(logger('dev'));
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(express.urlencoded({ extended: false }));
|
app.use(express.urlencoded({ extended: false }));
|
||||||
app.use(sassMiddleware({
|
|
||||||
src: path.join(__dirname, 'public'),
|
|
||||||
dest: path.join(__dirname, 'public'),
|
|
||||||
indentedSyntax: true, // true = .sass and false = .scss
|
|
||||||
sourceMap: true
|
|
||||||
}));
|
|
||||||
app.use(express.static(path.join(__dirname, 'public')));
|
app.use(express.static(path.join(__dirname, 'public')));
|
||||||
|
|
||||||
app.use('/', (req, res, next ) => {
|
app.use('/', (req, res, next ) => {
|
||||||
|
@ -62,7 +54,6 @@ app.use('/api/v1', (req, res, next ) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
app.use('/', indexRouter);
|
app.use('/', indexRouter);
|
||||||
app.use('/users', usersRouter);
|
|
||||||
app.use('/wl', valuelistRouter);
|
app.use('/wl', valuelistRouter);
|
||||||
app.use('/vl', valuelistRouter);
|
app.use('/vl', valuelistRouter);
|
||||||
app.use('/recepies', recepieRouter);
|
app.use('/recepies', recepieRouter);
|
||||||
|
|
116
index.js
116
index.js
|
@ -1,116 +0,0 @@
|
||||||
|
|
||||||
const express = require('express');
|
|
||||||
const router = express.Router();
|
|
||||||
const pg = require('pg');
|
|
||||||
const path = require('path');
|
|
||||||
const { Pool } = require('pg');
|
|
||||||
const pool = new Pool({
|
|
||||||
user: 'postgres',
|
|
||||||
host: 'localhost',
|
|
||||||
database: 'hogwarts',
|
|
||||||
password: 'postgres',
|
|
||||||
port: 5432
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
pool.on('error', (err, client) => {
|
|
||||||
console.error('Unexpected error on idle client', err)
|
|
||||||
process.exit(-1)
|
|
||||||
});
|
|
||||||
|
|
||||||
router.use(function(req, res, next) {
|
|
||||||
res.header("Access-Control-Allow-Origin", "*");
|
|
||||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
|
|
||||||
/* GET home page. */
|
|
||||||
router.get('/', function(req, res, next) {
|
|
||||||
res.render('index', { title: 'Express' });
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
router.get('/api/v1/person', function(req, res, next) {
|
|
||||||
const results = [];
|
|
||||||
pool.connect((err, client, done) => {
|
|
||||||
if (err) throw err
|
|
||||||
client.query('SELECT * FROM v_person ORDER BY name ASC;', (err, rs) => {
|
|
||||||
|
|
||||||
for(var i= 0; i<rs.rows.length; i++) {
|
|
||||||
results.push(rs.rows[i]);
|
|
||||||
}
|
|
||||||
console.log(err, rs);
|
|
||||||
done();
|
|
||||||
return res.json(results);
|
|
||||||
|
|
||||||
});
|
|
||||||
//done();
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
router.get('/api/v1/person/:person_id', function(req, res, next) {
|
|
||||||
const results = [];
|
|
||||||
const id = req.params.person_id;
|
|
||||||
|
|
||||||
pool.connect((err, client, done) => {
|
|
||||||
if (err) throw err
|
|
||||||
client.query('SELECT * FROM v_person WHERE id = $1;',[id], (err, rs) => {
|
|
||||||
|
|
||||||
for(var i= 0; i<rs.rows.length; i++) {
|
|
||||||
results.push(rs.rows[i]);
|
|
||||||
}
|
|
||||||
console.log(err, rs);
|
|
||||||
done();
|
|
||||||
return res.json(results);
|
|
||||||
|
|
||||||
});
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
router.get('/api/v1/schuljahr', function(req, res, next) {
|
|
||||||
const results = [];
|
|
||||||
pool.connect((err, client, done) => {
|
|
||||||
if (err) throw err
|
|
||||||
client.query('SELECT * FROM schuljahr ORDER BY von ASC;', (err, rs) => {
|
|
||||||
|
|
||||||
for(var i= 0; i<rs.rows.length; i++) {
|
|
||||||
results.push(rs.rows[i]);
|
|
||||||
}
|
|
||||||
console.log(err, rs);
|
|
||||||
done();
|
|
||||||
return res.json(results);
|
|
||||||
|
|
||||||
});
|
|
||||||
//done();
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
router.get('/api/v1/punkte/:schuljahr', function(req, res, next) {
|
|
||||||
const results = [];
|
|
||||||
const id = req.params.schuljahr;
|
|
||||||
const group = req.query.group;
|
|
||||||
|
|
||||||
var queryString = 'SELECT * FROM v_hauspunkte_small WHERE schuljahr = $1;';
|
|
||||||
|
|
||||||
if(group==1) queryString = 'SELECT schuljahr, haus, sum(punkte) FROM v_hauspunkte WHERE schuljahr = $1 GROUP BY schuljahr, haus;'
|
|
||||||
|
|
||||||
pool.connect((err, client, done) => {
|
|
||||||
if (err) throw err
|
|
||||||
client.query(queryString,[id], (err, rs) => {
|
|
||||||
|
|
||||||
for(var i= 0; i<rs.rows.length; i++) {
|
|
||||||
results.push(rs.rows[i]);
|
|
||||||
}
|
|
||||||
console.log(err, rs);
|
|
||||||
done();
|
|
||||||
return res.json(results);
|
|
||||||
|
|
||||||
});
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
|
File diff suppressed because it is too large
Load Diff
|
@ -4,11 +4,7 @@
|
||||||
"description": "Cookbook app for Families to share their recipies",
|
"description": "Cookbook app for Families to share their recipies",
|
||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
|
||||||
"start": "node ./bin/www"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bcrypt": "^3.0.3",
|
|
||||||
"body-parser": "^1.18.3",
|
"body-parser": "^1.18.3",
|
||||||
"connect-pg-simple": "^5.0.0",
|
"connect-pg-simple": "^5.0.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
|
@ -18,8 +14,6 @@
|
||||||
"http-errors": "~1.6.2",
|
"http-errors": "~1.6.2",
|
||||||
"morgan": "~1.9.0",
|
"morgan": "~1.9.0",
|
||||||
"multer": "^1.4.2",
|
"multer": "^1.4.2",
|
||||||
"node-sass-middleware": "0.11.0",
|
|
||||||
"passport-local": "^1.0.0",
|
|
||||||
"pg": "^7.7.1",
|
"pg": "^7.7.1",
|
||||||
"pug": "2.0.0-beta11",
|
"pug": "2.0.0-beta11",
|
||||||
"rand-token": "^0.4.0",
|
"rand-token": "^0.4.0",
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
body {
|
|
||||||
padding: 50px;
|
|
||||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; }
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #00B7FF; }
|
|
||||||
|
|
||||||
/*# sourceMappingURL=style.css.map */
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"file": "style.css",
|
|
||||||
"sources": [
|
|
||||||
"style.sass"
|
|
||||||
],
|
|
||||||
"names": [],
|
|
||||||
"mappings": "AAAA,AAAA,IAAI,CAAC;EACH,OAAO,EAAE,IAAI;EACb,IAAI,EAAE,kDAAkD,GAAG;;AAE7D,AAAA,CAAC,CAAC;EACA,KAAK,EAAE,OAAO,GAAG"
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
body
|
|
||||||
padding: 50px
|
|
||||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif
|
|
||||||
|
|
||||||
a
|
|
||||||
color: #00B7FF
|
|
|
@ -3,7 +3,7 @@ const router = express.Router();
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
|
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const ingredientsRouter = require('./recepieIngredients');
|
const ingredientsRouter = require('./recepieIngredients');
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router({mergeParams:true});
|
const router = express.Router({mergeParams:true});
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router({mergeParams:true});
|
const router = express.Router({mergeParams:true});
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
|
@ -24,7 +24,7 @@ const upload = multer({
|
||||||
fileFilter:fileFilter
|
fileFilter:fileFilter
|
||||||
})
|
})
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router({mergeParams:true});
|
const router = express.Router({mergeParams:true});
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router({mergeParams:true});
|
const router = express.Router({mergeParams:true});
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router({mergeParams:true});
|
const router = express.Router({mergeParams:true});
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router({mergeParams:true});
|
const router = express.Router({mergeParams:true});
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
|
||||||
|
@ -37,32 +37,32 @@ router.get('/', function(req, res, next) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post('/', function(req, res, next) {
|
// router.post('/', function(req, res, next) {
|
||||||
let user = req.body.users[0];
|
// let user = req.body.users[0];
|
||||||
bcrypt.hash(user.kennwort, 10, function(err, hash) {
|
// bcrypt.hash(user.kennwort, 10, function(err, hash) {
|
||||||
let query = "INSERT INTO nutzer ( name, email, kennwort, beschreibung) "+
|
// let query = "INSERT INTO nutzer ( name, email, kennwort, beschreibung) "+
|
||||||
" VALUES ('"+user.name+"','"+user.email+"','"+hash+"','"+user.beschreibung+"')" +
|
// " VALUES ('"+user.name+"','"+user.email+"','"+hash+"','"+user.beschreibung+"')" +
|
||||||
" returning *";
|
// " returning *";
|
||||||
if(DEBUG) console.log(query);
|
// if(DEBUG) console.log(query);
|
||||||
|
//
|
||||||
req.db.query(query, (err, rs) => {
|
// req.db.query(query, (err, rs) => {
|
||||||
if(err && err.constraint && err.constraint ==='idx_nutzer_email') {
|
// if(err && err.constraint && err.constraint ==='idx_nutzer_email') {
|
||||||
return res.status(409).send("Email-adress already in use");
|
// return res.status(409).send("Email-adress already in use");
|
||||||
} else if (err){
|
// } else if (err){
|
||||||
next(err);
|
// next(err);
|
||||||
} else {
|
// } else {
|
||||||
let result = {};
|
// let result = {};
|
||||||
let user = {};
|
// let user = {};
|
||||||
user['name'] = rs.rows[0].name;
|
// user['name'] = rs.rows[0].name;
|
||||||
user['email'] = rs.rows[0].email;
|
// user['email'] = rs.rows[0].email;
|
||||||
user['id'] = rs.rows[0].id;
|
// user['id'] = rs.rows[0].id;
|
||||||
user['beschreibung'] = rs.rows[0].beschreibung;
|
// user['beschreibung'] = rs.rows[0].beschreibung;
|
||||||
result['users'] = user;
|
// result['users'] = user;
|
||||||
res.status(200).json(result);
|
// res.status(200).json(result);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
|
|
||||||
|
|
||||||
router.put('/login', function(req, res, next) {
|
router.put('/login', function(req, res, next) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ const cors = require('cors');
|
||||||
const xml = require('xml');
|
const xml = require('xml');
|
||||||
|
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
|
|
|
@ -2,7 +2,7 @@ const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
|
|
|
@ -2,7 +2,7 @@ const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
|
|
|
@ -2,7 +2,7 @@ const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
|
|
|
@ -2,7 +2,7 @@ const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
|
||||||
const randToken = require('rand-token');
|
const randToken = require('rand-token');
|
||||||
|
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
|
|
17
src/Users.js
17
src/Users.js
|
@ -1,17 +0,0 @@
|
||||||
|
|
||||||
import { getUserByEmail } from ('./../db/');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class User {
|
|
||||||
|
|
||||||
findOne(username) {
|
|
||||||
getUserByEmail(username).then()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default User;
|
|
|
@ -1,4 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import ReactDOM from 'react-dom';
|
|
||||||
import App from './views/App';
|
|
||||||
ReactDOM.render(<App />, document.getElementById('root'));
|
|
|
@ -1,26 +0,0 @@
|
||||||
{
|
|
||||||
"name": "schmeckWieDaheim-FrontEnd",
|
|
||||||
"version": "0.1.0",
|
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
|
||||||
"react": "^16.7.0",
|
|
||||||
"react-dom": "^16.7.0",
|
|
||||||
"react-scripts": "2.1.2",
|
|
||||||
"whatwg-fetch": "^3.0.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"start": "react-scripts start",
|
|
||||||
"build": "react-scripts build",
|
|
||||||
"test": "react-scripts test",
|
|
||||||
"eject": "react-scripts eject"
|
|
||||||
},
|
|
||||||
"eslintConfig": {
|
|
||||||
"extends": "react-app"
|
|
||||||
},
|
|
||||||
"browserslist": [
|
|
||||||
">0.2%",
|
|
||||||
"not dead",
|
|
||||||
"not ie <= 11",
|
|
||||||
"not op_mini all"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
// API-Class to fetch Information from "schmektWieDaheim"
|
|
||||||
|
|
||||||
import 'whatwg-fetch';
|
|
||||||
|
|
||||||
const Cookbook = {};
|
|
||||||
const baseUrl = 'http://localhost:4000';
|
|
||||||
|
|
||||||
Cookbook.getRecepies = () => {
|
|
||||||
const url = `${baseUrl}/recepies`;
|
|
||||||
|
|
||||||
return fetch(url).then(response => {
|
|
||||||
if(!response.ok) {
|
|
||||||
return new Proimse(resolve => resolve([]));
|
|
||||||
}
|
|
||||||
return response.json().then(jsonResponse => {
|
|
||||||
return jsonResponse.recepies.map(recepie);
|
|
||||||
})
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Export Module
|
|
||||||
|
|
||||||
export default Cookbook;
|
|
|
@ -1,33 +0,0 @@
|
||||||
import React, { Component } from 'react';
|
|
||||||
import { Link, HashRouter as Router, Route, browserHistory } from 'react-router-dom';
|
|
||||||
|
|
||||||
|
|
||||||
import Recepie from './Recepie';
|
|
||||||
|
|
||||||
class App extends Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
this.state = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
return (
|
|
||||||
<Router history={browserHistory}>
|
|
||||||
<div className="App">
|
|
||||||
<header>
|
|
||||||
<Link to="/" className="logo">
|
|
||||||
<img src='public/img/logo.svg' alt="logo" />
|
|
||||||
</Link>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<Route exact path="/" component={Landing} />
|
|
||||||
|
|
||||||
|
|
||||||
<Route path="/recepies/:id" component={Employee} />
|
|
||||||
</div>
|
|
||||||
</Router>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default App;
|
|
|
@ -1,34 +0,0 @@
|
||||||
import React, { Component } from 'react';
|
|
||||||
import { withRouter } from "react-router-dom";
|
|
||||||
|
|
||||||
import Cookbook from '../utils/Cookbook';
|
|
||||||
|
|
||||||
|
|
||||||
class Cookbook extends Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
recepie: null,
|
|
||||||
ingredients: [],
|
|
||||||
durations: []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
render() {
|
|
||||||
|
|
||||||
if (!this.state.recepie) {
|
|
||||||
return <div className="Recepie">Kein Rezept gefunden</div>
|
|
||||||
}
|
|
||||||
const recepie = this.state.recepie;
|
|
||||||
return (
|
|
||||||
<div className="Recepie">Rezept gefunden</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export default withRouter(Cookbook);
|
|
Loading…
Reference in New Issue