diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx
index 039bc98f5..cb50e38e0 100644
--- a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx
+++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx
@@ -1,6 +1,6 @@
require('./brewItem.less');
const React = require('react');
-const createClass = require('create-react-class');
+const { useCallback } = React;
const moment = require('moment');
const request = require('../../../../utils/request-middleware.js');
@@ -8,176 +8,172 @@ const googleDriveIcon = require('../../../../googleDrive.svg');
const homebreweryIcon = require('../../../../thumbnail.png');
const dedent = require('dedent-tabs').default;
-const BrewItem = createClass({
- displayName : 'BrewItem',
- getDefaultProps : function() {
- return {
- brew : {
- title : '',
- description : '',
- authors : [],
- stubbed : true
- },
- updateListFilter : ()=>{},
- reportError : ()=>{},
- renderStorage : true
- };
+const BrewItem = ({
+ brew = {
+ title : '',
+ description : '',
+ authors : [],
+ stubbed : true,
},
+ updateListFilter = ()=>{},
+ reportError = ()=>{},
+ renderStorage = true,
+})=>{
- deleteBrew : function(){
- if(this.props.brew.authors.length <= 1){
- if(!confirm('Are you sure you want to delete this brew? Because you are the only owner of this brew, the document will be deleted permanently.')) return;
- if(!confirm('Are you REALLY sure? You will not be able to recover the document.')) return;
+ const deleteBrew = useCallback(()=>{
+ if(brew.authors.length <= 1) {
+ if(!window.confirm('Are you sure you want to delete this brew? Because you are the only owner of this brew, the document will be deleted permanently.')) return;
+ if(!window.confirm('Are you REALLY sure? You will not be able to recover the document.')) return;
} else {
- if(!confirm('Are you sure you want to remove this brew from your collection? This will remove you as an editor, but other owners will still be able to access the document.')) return;
- if(!confirm('Are you REALLY sure? You will lose editor access to this document.')) return;
+ if(!window.confirm('Are you sure you want to remove this brew from your collection? This will remove you as an editor, but other owners will still be able to access the document.')) return;
+ if(!window.confirm('Are you REALLY sure? You will lose editor access to this document.')) return;
}
- request.delete(`/api/${this.props.brew.googleId ?? ''}${this.props.brew.editId}`)
- .send()
- .end((err, res)=>{
- if(err) {
- this.props.reportError(err);
- } else {
- location.reload();
- }
- });
- },
+ request.delete(`/api/${brew.googleId ?? ''}${brew.editId}`).send().end((err, res)=>{
+ if (err) reportError(err); else window.location.reload();
+ });
+ }, [brew, reportError]);
- updateFilter : function(type, term){
- this.props.updateListFilter(type, term);
- },
+ const updateFilter = useCallback((type, term)=> updateListFilter(type, term), [updateListFilter]);
- renderDeleteBrewLink : function(){
- if(!this.props.brew.editId) return;
+ const renderDeleteBrewLink = ()=>{
+ if(!brew.editId) return null;
- return
-
- ;
- },
+ return (
+
+
+
+ );
+ };
- renderEditLink : function(){
- if(!this.props.brew.editId) return;
+ const renderEditLink = ()=>{
+ if(!brew.editId) return null;
- let editLink = this.props.brew.editId;
- if(this.props.brew.googleId && !this.props.brew.stubbed) {
- editLink = this.props.brew.googleId + editLink;
+ let editLink = brew.editId;
+ if(brew.googleId && !brew.stubbed) editLink = brew.googleId + editLink;
+
+ return (
+
+
+
+ );
+ };
+
+ const renderShareLink = ()=>{
+ if(!brew.shareId) return null;
+
+ let shareLink = brew.shareId;
+ if(brew.googleId && !brew.stubbed) {
+ shareLink = brew.googleId + shareLink;
}
- return
-
- ;
- },
+ return (
+
+
+
+ );
+ };
- renderShareLink : function(){
- if(!this.props.brew.shareId) return;
+ const renderDownloadLink = ()=>{
+ if(!brew.shareId) return null;
- let shareLink = this.props.brew.shareId;
- if(this.props.brew.googleId && !this.props.brew.stubbed) {
- shareLink = this.props.brew.googleId + shareLink;
+ let shareLink = brew.shareId;
+ if(brew.googleId && !brew.stubbed) {
+ shareLink = brew.googleId + shareLink;
}
- return
-
- ;
- },
+ return (
+
+
+
+ );
+ };
- renderDownloadLink : function(){
- if(!this.props.brew.shareId) return;
-
- let shareLink = this.props.brew.shareId;
- if(this.props.brew.googleId && !this.props.brew.stubbed) {
- shareLink = this.props.brew.googleId + shareLink;
+ const renderStorageIcon = ()=>{
+ if(!renderStorage) return null;
+ if(brew.googleId) {
+ return (
+
+
+
+
+
+ );
}
- return
-
- ;
- },
+ return (
+
+
+
+ );
+ };
- renderStorageIcon : function(){
- if(!this.props.renderStorage) return;
- if(this.props.brew.googleId) {
- return
-
-
-
- ;
- }
+ if(Array.isArray(brew.tags)) {
+ brew.tags = brew.tags?.filter((tag)=>tag); // remove tags that are empty strings
+ brew.tags.sort((a, b)=>{
+ return a.indexOf(':') - b.indexOf(':') !== 0 ? a.indexOf(':') - b.indexOf(':') : a.toLowerCase().localeCompare(b.toLowerCase());
+ });
+ }
- return
-
- ;
- },
+ const dateFormatString = 'YYYY-MM-DD HH:mm:ss';
- render : function(){
- const brew = this.props.brew;
- if(Array.isArray(brew.tags)) { // temporary fix until dud tags are cleaned
- brew.tags = brew.tags?.filter((tag)=>tag); //remove tags that are empty strings
- brew.tags.sort((a, b)=>{
- return a.indexOf(':') - b.indexOf(':') != 0 ? a.indexOf(':') - b.indexOf(':') : a.toLowerCase().localeCompare(b.toLowerCase());
- });
- }
- const dateFormatString = 'YYYY-MM-DD HH:mm:ss';
-
- return
{brew.description}