0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-06-22 04:58:40 +00:00

Merge pull request #4836 from 5e-Cleric/add-cleaning-tool-to-admin

brewCleanup to functional component
This commit is contained in:
Víctor Losada Hernández
2026-05-27 20:38:08 +02:00
committed by GitHub
@@ -1,71 +1,72 @@
import React from 'react'; import React, { useState } from 'react';
import createReactClass from 'create-react-class';
import request from 'superagent'; import request from 'superagent';
const BrewCleanup = createReactClass({ const BrewCleanup = ({})=>{
displayName : 'BrewCleanup', const [count, setCount] = useState(0);
getDefaultProps(){ const [pending, setPending] = useState(false);
return {}; const [primed, setPrimed] = useState(false);
}, const [error, setError] = useState(null);
getInitialState() {
return {
count : 0,
pending : false, const prime = async ()=>{
primed : false, setPending(true);
err : null
};
},
prime(){
this.setState({ pending: true });
request.get('/admin/cleanup') try {
.then((res)=>this.setState({ count: res.body.count, primed: true })) const res = await request.get('/admin/cleanup');
.catch((err)=>this.setState({ error: err }))
.finally(()=>this.setState({ pending: false }));
},
cleanup(){
this.setState({ pending: true });
request.post('/admin/cleanup') setCount(res.body.count);
.then((res)=>this.setState({ count: res.body.count })) setPrimed(true);
.catch((err)=>this.setState({ error: err })) } catch (err) {
.finally(()=>this.setState({ pending: false, primed: false })); setError(err);
}, } finally {
renderPrimed(){ setPending(false);
if(!this.state.primed) return;
if(!this.state.count){
return <div className='result noBrews'>No Matching Brews found.</div>;
} }
};
const cleanup = async ()=>{
setPending(true);
try {
const res = await request.post('/admin/cleanup');
setCount(res.body.count);
} catch (err) {
setError(err);
} finally {
setPending(false);
setPrimed(false);
}
};
const renderPrimed = ()=>{
if(!primed) return;
if(!count) return <div className='result noBrews'>No Matching Brews found.</div>;
return <div className='result'> return <div className='result'>
<button onClick={this.cleanup} className='remove'> <button onClick={()=>cleanup()} className='remove'>
{this.state.pending {pending
? <i className='fas fa-spin fa-spinner' /> ? <i className='fas fa-spin fa-spinner' />
: <span><i className='fas fa-times' /> Remove</span> : <span><i className='fas fa-times' /> Remove</span>
} }
</button> </button>
<span>Found {this.state.count} Brews that could be removed. </span> <span>Found {count} Brews that could be removed. </span>
</div>; </div>;
}, };
render(){
return <div className='brewUtil brewCleanup'> return <div className='brewUtil brewCleanup'>
<h2> Brew Cleanup </h2> <h2> Brew Cleanup </h2>
<p>Removes very short brews to tidy up the database</p> <p>Removes very short brews to tidy up the database</p>
<button onClick={this.prime} className='query'> <button onClick={()=>prime()} className='query'>
{this.state.pending {pending
? <i className='fas fa-spin fa-spinner' /> ? <i className='fas fa-spin fa-spinner' />
: 'Query Brews' : 'Query Brews'
} }
</button> </button>
{this.renderPrimed()} {renderPrimed()}
{this.state.error {error && <div className='error noBrews'>{error.toString()}</div>}
&& <div className='error noBrews'>{this.state.error.toString()}</div>
}
</div>; </div>;
}
}); };
export default BrewCleanup; export default BrewCleanup;