1
0
mirror of https://github.com/stolksdorf/homebrewery.git synced 2025-12-12 23:35:58 +00:00

Finished the clean up brew ui

This commit is contained in:
Scott Tolksdorf
2018-12-04 13:37:03 -05:00
parent 1184fe86a5
commit 52c0462a4f
7 changed files with 52 additions and 91 deletions

View File

@@ -8,9 +8,7 @@ const Stats = require('./stats/stats.jsx');
const Admin = createClass({ const Admin = createClass({
getDefaultProps : function() { getDefaultProps : function() {
return { return {};
adminKey : ''
};
}, },
render : function(){ render : function(){
@@ -23,11 +21,11 @@ const Admin = createClass({
</div> </div>
</header> </header>
<div className='container'> <div className='container'>
<Stats adminKey={this.props.adminKey} /> <Stats />
<hr /> <hr />
<BrewLookup adminKey={this.props.adminKey} /> <BrewLookup />
<hr /> <hr />
<BrewCleanup adminKey={this.props.adminKey} /> <BrewCleanup />
</div> </div>
</div> </div>
} }

View File

@@ -36,60 +36,9 @@ body{
} }
} }
hr{
margin : 30px 0px;
}
} }
/*.homebrewAdmin{
margin-bottom: 80px;
.brewTable{
table{
th{
padding : 10px;
font-weight : 800;
}
tr:nth-child(even){
background-color : fade(@green, 10%);
}
tr.isEmpty{
background-color : fade(@red, 30%);
}
td{
min-width : 100px;
padding : 10px;
text-align : center;
&.preview{
position : relative;
&:hover{
.content{
display : block;
}
}
.content{
position : absolute;
display : none;
top : 100%;
left : 0px;
z-index : 1000;
max-height : 500px;
width : 300px;
padding : 30px;
background-color : white;
font-family : monospace;
text-align : left;
pointer-events : none;
}
}
}
}
}
.deleteButton{
cursor: pointer;
}
button.clearOldButton{
float : right;
}
}
*/

View File

@@ -8,25 +8,22 @@ const request = require('superagent');
const BrewCleanup = createClass({ const BrewCleanup = createClass({
displayName : 'BrewCleanup', displayName : 'BrewCleanup',
getDefaultProps(){ getDefaultProps(){
return { return {};
adminKey : '',
};
}, },
getInitialState() { getInitialState() {
return { return {
count : 0, count : 0,
pending : false, pending : false,
primed : false primed : false,
err : null
}; };
}, },
prime(){ prime(){
if(this.state.primed) return this.cleanup();
this.setState({ pending: true }); this.setState({ pending: true });
request.get('/admin/cleanup') request.get('/admin/cleanup')
.query({ admin_key: this.props.adminKey }) .then((res)=> this.setState({count : res.body.count, primed : true }))
.then((res)=> this.setState({count : res.body.count }))
.catch((err)=>this.setState({ error : err })) .catch((err)=>this.setState({ error : err }))
.finally(()=>this.setState({ pending : false })) .finally(()=>this.setState({ pending : false }))
}, },
@@ -34,14 +31,42 @@ const BrewCleanup = createClass({
this.setState({ pending: true }); this.setState({ pending: true });
request.post('/admin/cleanup') request.post('/admin/cleanup')
.query({ admin_key: this.props.adminKey })
.then((res)=> this.setState({count : res.body.count })) .then((res)=> this.setState({count : res.body.count }))
.catch((err)=>this.setState({ error : err })) .catch((err)=>this.setState({ error : err }))
.finally(()=>this.setState({ pending : false, primed : false })) .finally(()=>this.setState({ pending : false, primed : false }))
}, },
renderPrimed(){
if(!this.state.primed) return;
if(!this.state.count){
return <div className='removeBox'>No Matching Brews found.</div>
}
return <div className='removeBox'>
<button onClick={this.cleanup} className='remove'>
{this.state.pending
? <i className='fa fa-spin fa-spinner' />
: <span><i className='fa fa-times' /> Remove</span>
}
</button>
<span>Found {this.state.count} Brews that could be removed. </span>
</div>
},
render(){ render(){
return <div className='BrewCleanup'> return <div className='BrewCleanup'>
BrewCleanup Component Ready. <h2> Brew Cleanup </h2>
<p>Removes very short brews to tidy up the database</p>
<button onClick={this.prime} className='query'>
{this.state.pending
? <i className='fa fa-spin fa-spinner' />
: 'Query Brews'
}
</button>
{this.renderPrimed()}
{this.state.error
&& <div className='error'>{this.state.error.toString()}</div>
}
</div>; </div>;
} }
}); });

View File

@@ -1,3 +1,10 @@
.BrewCleanup{ .BrewCleanup{
.removeBox{
margin-top: 20px;
button{
background-color: @red;
margin-right: 10px;
}
}
} }

View File

@@ -8,9 +8,7 @@ const Moment = require('moment');
const BrewLookup = createClass({ const BrewLookup = createClass({
getDefaultProps() { getDefaultProps() {
return { return {};
adminKey : '',
};
}, },
getInitialState() { getInitialState() {
return { return {
@@ -27,7 +25,6 @@ const BrewLookup = createClass({
this.setState({ searching: true, error: null }); this.setState({ searching: true, error: null });
request.get(`/admin/lookup/${this.state.query}`) request.get(`/admin/lookup/${this.state.query}`)
//.query({ admin_key: this.props.adminKey })
.then((res)=> this.setState({foundBrew : res.body})) .then((res)=> this.setState({foundBrew : res.body}))
.catch((err)=>this.setState({ error : err })) .catch((err)=>this.setState({ error : err }))
.finally(()=>this.setState({ searching : false })) .finally(()=>this.setState({ searching : false }))

View File

@@ -8,9 +8,7 @@ const request = require('superagent');
const Stats = createClass({ const Stats = createClass({
displayName : 'Stats', displayName : 'Stats',
getDefaultProps(){ getDefaultProps(){
return { return {};
adminKey : ''
};
}, },
getInitialState(){ getInitialState(){
return { return {
@@ -26,7 +24,6 @@ const Stats = createClass({
fetchStats(){ fetchStats(){
this.setState({ fetching : true}) this.setState({ fetching : true})
request.get('/admin/stats') request.get('/admin/stats')
.query({ admin_key : this.props.adminKey })
.then((res)=> this.setState({ stats : res.body })) .then((res)=> this.setState({ stats : res.body }))
.finally(()=>this.setState({fetching : false})); .finally(()=>this.setState({fetching : false}));
}, },

View File

@@ -1,16 +1,11 @@
//const auth = require('basic-auth');
const HomebrewModel = require('./homebrew.model.js').model; const HomebrewModel = require('./homebrew.model.js').model;
const router = require('express').Router(); const router = require('express').Router();
const Moment = require('moment'); const Moment = require('moment');
const render = require('vitreum/steps/render'); const render = require('vitreum/steps/render');
const templateFn = require('../client/template.js'); const templateFn = require('../client/template.js');
process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin'; process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin';
process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password3'; process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password3';
//process.env.ADMIN_KEY = process.env.ADMIN_KEY || 'admin_key';
//FIXME: remove this whole 'ADMIN_KEY' buulshit
const mw = { const mw = {
adminOnly : (req, res, next)=>{ adminOnly : (req, res, next)=>{
@@ -35,7 +30,7 @@ const mw = {
const junkBrewQuery = HomebrewModel.find({ const junkBrewQuery = HomebrewModel.find({
'$where' : 'this.text.length < 140', '$where' : 'this.text.length < 140',
createdAt : { createdAt : {
$lt : Moment().subtract(3, 'days').toDate() $lt : Moment().subtract(30, 'days').toDate()
} }
}); });
router.get('/admin/cleanup', mw.adminOnly, (req, res)=>{ router.get('/admin/cleanup', mw.adminOnly, (req, res)=>{
@@ -62,7 +57,6 @@ router.get('/admin/lookup/:id', mw.adminOnly, (req, res, next)=>{
}); });
}); });
router.get('/admin/stats', mw.adminOnly, (req, res)=>{ router.get('/admin/stats', mw.adminOnly, (req, res)=>{
HomebrewModel.count({}, (err, count)=>{ HomebrewModel.count({}, (err, count)=>{
return res.json({ return res.json({
@@ -72,14 +66,8 @@ router.get('/admin/stats', mw.adminOnly, (req, res)=>{
}); });
router.get('/admin', mw.adminOnly, (req, res)=>{ router.get('/admin', mw.adminOnly, (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');
// }
render('admin', templateFn, { render('admin', templateFn, {
url : req.originalUrl, url : req.originalUrl
adminKey : process.env.ADMIN_KEY
}) })
.then((page)=>res.send(page)) .then((page)=>res.send(page))
.catch((err)=>res.sendStatus(500)) .catch((err)=>res.sendStatus(500))