diff --git a/changelog.md b/changelog.md
index 4426e17f0..b7a40ab7c 100644
--- a/changelog.md
+++ b/changelog.md
@@ -3,6 +3,7 @@
### Thursday, 19/01/2017 - v2.7.0
- Fixed saving multiple authors and multiple systems on brew metadata (thanks u/PalaNolho re:282)
- Adding in line highlight for new pages
+- Added in a simple brew lookup for admin
### Saturday, 14/01/2017 - v2.7.0
diff --git a/client/admin/admin.jsx b/client/admin/admin.jsx
index 1ee3181ac..4fd8d5505 100644
--- a/client/admin/admin.jsx
+++ b/client/admin/admin.jsx
@@ -27,8 +27,6 @@ var Admin = React.createClass({
diff --git a/client/admin/homebrewAdmin/brewLookup/brewLookup.jsx b/client/admin/homebrewAdmin/brewLookup/brewLookup.jsx
new file mode 100644
index 000000000..ad43b13b6
--- /dev/null
+++ b/client/admin/homebrewAdmin/brewLookup/brewLookup.jsx
@@ -0,0 +1,67 @@
+const React = require('react');
+const _ = require('lodash');
+const cx = require('classnames');
+
+const request = require('superagent');
+const Moment = require('moment');
+
+
+const BrewLookup = React.createClass({
+ getDefaultProps: function() {
+ return {
+ adminKey : '',
+ };
+ },
+ getInitialState: function() {
+ return {
+ query:'',
+ resultBrew : null,
+ searching : false
+ };
+ },
+
+ handleChange : function(e){
+ this.setState({
+ query : e.target.value
+ })
+ },
+ lookup : function(){
+ this.setState({ searching : true });
+
+ request.get(`/admin/lookup/${this.state.query}`)
+ .query({ admin_key : this.props.adminKey })
+ .end((err, res) => {
+ this.setState({
+ searching : false,
+ resultBrew : (err ? null : res.body)
+ });
+ })
+ },
+
+ renderFoundBrew : function(){
+ if(this.state.searching) return
;
+ if(!this.state.resultBrew) return No brew found.
;
+
+ const brew = this.state.resultBrew;
+ return
+
{brew.title}
+
{brew.authors.join(', ')}
+
+
+
{Moment(brew.updatedAt).fromNow()}
+
{brew.views}
+
+ },
+
+ render: function(){
+ return
+
Brew Lookup
+
+
+
+ {this.renderFoundBrew()}
+
+ }
+});
+
+module.exports = BrewLookup;
diff --git a/client/admin/homebrewAdmin/brewLookup/brewLookup.less b/client/admin/homebrewAdmin/brewLookup/brewLookup.less
new file mode 100644
index 000000000..071028c20
--- /dev/null
+++ b/client/admin/homebrewAdmin/brewLookup/brewLookup.less
@@ -0,0 +1,8 @@
+.brewLookup{
+ height : 200px;
+ input{
+ height : 33px;
+ padding : 0px 10px;
+ margin-bottom: 20px;
+ }
+}
\ No newline at end of file
diff --git a/client/admin/homebrewAdmin/homebrewAdmin.jsx b/client/admin/homebrewAdmin/homebrewAdmin.jsx
index 704c5da90..70b593c62 100644
--- a/client/admin/homebrewAdmin/homebrewAdmin.jsx
+++ b/client/admin/homebrewAdmin/homebrewAdmin.jsx
@@ -7,6 +7,8 @@ var Moment = require('moment');
var BrewSearch = require('./brewSearch.jsx');
+var BrewLookup = require('./brewLookup/brewLookup.jsx');
+
var HomebrewAdmin = React.createClass({
getDefaultProps: function() {
@@ -35,6 +37,7 @@ var HomebrewAdmin = React.createClass({
page : page
})
.end((err, res)=>{
+ if(err || !res.body || !res.body.brews) return;
this.state.brewCache[page] = res.body.brews;
this.setState({
brewCache : this.state.brewCache,
@@ -141,9 +144,18 @@ var HomebrewAdmin = React.createClass({
render : function(){
var self = this;
return
+
+
+
+ {/*
Homebrews - {this.state.total}
+
+
+
+
+
{this.renderPagnination()}
{this.renderBrewTable()}
@@ -152,6 +164,7 @@ var HomebrewAdmin = React.createClass({
+ */}
}
});
diff --git a/scripts/dev.js b/scripts/dev.js
index 88f02b847..6fda537e6 100644
--- a/scripts/dev.js
+++ b/scripts/dev.js
@@ -10,8 +10,12 @@ const livereload = require('vitreum/steps/livereload.js').partial;
const Proj = require('./project.json');
Promise.resolve()
- .then(jsx('homebrew', './client/homebrew/homebrew.jsx', Proj.libs, 'shared'))
+ .then(jsx('homebrew', './client/homebrew/homebrew.jsx', Proj.libs, './shared'))
.then(less('homebrew', './shared'))
+
+ .then(jsx('admin', './client/admin/admin.jsx', Proj.libs, './shared'))
+ .then(less('admin', './shared'))
+
.then(assets(Proj.assets, ['./shared', './client']))
.then(livereload())
.then(server('./server.js', ['server']))
diff --git a/server.js b/server.js
index 791ffc30d..bddf5cc0e 100644
--- a/server.js
+++ b/server.js
@@ -3,7 +3,7 @@ const jwt = require('jwt-simple');
const express = require("express");
const app = express();
-app.use(express.static(__dirname + '/build'));
+app.use(express.static(__dirname + '/build'));''
app.use(require('body-parser').json({limit: '25mb'}));
app.use(require('cookie-parser')());
@@ -34,7 +34,7 @@ app.use((req, res, next) => {
app.use(require('./server/homebrew.api.js'));
-//app.use(require('./server/admin.api.js'));
+app.use(require('./server/admin.api.js'));
const HomebrewModel = require('./server/homebrew.model.js').model;
diff --git a/server/admin.api.js b/server/admin.api.js
index 8739ce6d0..8e4376c36 100644
--- a/server/admin.api.js
+++ b/server/admin.api.js
@@ -2,7 +2,6 @@ const _ = require('lodash');
const auth = require('basic-auth');
const HomebrewModel = require('./homebrew.model.js').model;
const router = require('express').Router();
-const vitreumRender = require('vitreum/render');
const mw = {
@@ -42,28 +41,42 @@ router.get('/api/invalid', mw.adminOnly, (req, res)=>{
}
});
+router.get('/admin/lookup/:id', mw.adminOnly, (req, res, next) => {
+ //search for mathcing edit id
+ //search for matching share id
+ // search for partial match
+
+ HomebrewModel.findOne({ $or:[
+ {editId : { "$regex": req.params.id, "$options": "i" }},
+ {shareId : { "$regex": req.params.id, "$options": "i" }},
+ ]}).exec((err, brew) => {
+ return res.json(brew);
+ });
+});
+
//Admin route
-
+const render = require('vitreum/steps/render');
+const templateFn = require('../client/template.js');
router.get('/admin', function(req, res){
const credentials = auth(req)
if (!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) {
res.setHeader('WWW-Authenticate', 'Basic realm="example"')
return res.status(401).send('Access denied')
}
- vitreumRender({
- page: './build/admin/bundle.dot',
- prerenderWith : './client/admin/admin.jsx',
- clearRequireCache : !process.env.PRODUCTION,
- initialProps: {
+ render('admin', templateFn, {
url: req.originalUrl,
admin_key : process.env.ADMIN_KEY,
- },
- }, function (err, page) {
- return res.send(page)
- });
+ })
+ .then((page) => {
+ return res.send(page)
+ })
+ .catch((err) => {
+ console.log(err);
+ return res.sendStatus(500);
+ });
});