diff --git a/client/homebrew/navbar/error-navitem.jsx b/client/homebrew/navbar/error-navitem.jsx
new file mode 100644
index 000000000..19ebd0213
--- /dev/null
+++ b/client/homebrew/navbar/error-navitem.jsx
@@ -0,0 +1,84 @@
+require('./error-navitem.less');
+const React = require('react');
+const Nav = require('naturalcrit/nav/nav.jsx');
+const createClass = require('create-react-class');
+
+const ErrorNavItem = createClass({
+ getDefaultProps : function() {
+ return {
+ error : '',
+ parent : null
+ };
+ },
+ render : function() {
+ const clearError = ()=>{
+ const state = {
+ error : null
+ };
+ if(this.props.parent.state.isSaving) {
+ state.isSaving = false;
+ }
+ this.props.parent.setState(state);
+ };
+
+ const error = this.props.error;
+ const status = error.status;
+ const message = error.body?.message;
+ let errMsg = '';
+ try {
+ errMsg += `${error.toString()}\n\n`;
+ errMsg += `\`\`\`\n${error.stack}\n`;
+ errMsg += `${JSON.stringify(error.error, null, ' ')}\n\`\`\``;
+ console.log(errMsg);
+ } catch (e){}
+
+ if(status === 409) {
+ return
+ Oops!
+
+ {message ?? 'Conflict: please refresh to get latest changes'}
+
+ ;
+ } else if(status === 412) {
+ return
+ Oops!
+
+ {message ?? 'Your client is out of date. Please save your changes elsewhere and refresh.'}
+
+ ;
+ }
+
+ if(error.req.url.match(/^\/api.*Google.*$/m)){
+ return
+ Oops!
+
+ Looks like your Google credentials have
+ expired! Visit our log in page to sign out
+ and sign back in with Google,
+ then try saving again!
+
+
+ Sign In
+
+
+
+ Not Now
+
+
+ ;
+ }
+
+ return
+ Oops!
+
+ Looks like there was a problem saving.
+ Report the issue
+ here
+ .
+
+ ;
+ }
+});
+
+module.exports = ErrorNavItem;
\ No newline at end of file
diff --git a/client/homebrew/utils/render-error-nav-item.less b/client/homebrew/navbar/error-navitem.less
similarity index 94%
rename from client/homebrew/utils/render-error-nav-item.less
rename to client/homebrew/navbar/error-navitem.less
index 2161208c2..8a7cabb19 100644
--- a/client/homebrew/utils/render-error-nav-item.less
+++ b/client/homebrew/navbar/error-navitem.less
@@ -1,11 +1,16 @@
.navItem {
+ &.error {
+ position : relative;
+ background-color : @red;
+ }
+
.errorContainer{
animation-name: glideDown;
animation-duration: 0.4s;
position : absolute;
top : 100%;
left : 50%;
- z-index : 500;
+ z-index : 1000;
width : 140px;
padding : 3px;
color : white;
diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx
index d17c020af..327fe21be 100644
--- a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx
+++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx
@@ -4,7 +4,7 @@ const createClass = require('create-react-class');
const _ = require('lodash');
const cx = require('classnames');
const moment = require('moment');
-const request = require('superagent');
+const request = require('../../../../utils/request-middleware.js');
const googleDriveIcon = require('../../../../googleDrive.png');
const dedent = require('dedent-tabs').default;
@@ -18,7 +18,8 @@ const BrewItem = createClass({
description : '',
authors : [],
stubbed : true
- }
+ },
+ reportError : null
};
},
@@ -33,8 +34,12 @@ const BrewItem = createClass({
request.delete(`/api/${this.props.brew.googleId ?? ''}${this.props.brew.editId}`)
.send()
- .end(function(err, res){
- location.reload();
+ .end((err, res)=>{
+ if(err && this.props.reportError) {
+ this.props.reportError(err.response);
+ } else {
+ location.reload();
+ }
});
},
diff --git a/client/homebrew/pages/basePages/listPage/listPage.jsx b/client/homebrew/pages/basePages/listPage/listPage.jsx
index 162aba5e4..b80b04899 100644
--- a/client/homebrew/pages/basePages/listPage/listPage.jsx
+++ b/client/homebrew/pages/basePages/listPage/listPage.jsx
@@ -23,7 +23,8 @@ const ListPage = createClass({
brews : []
}
],
- navItems : <>>
+ navItems : <>>,
+ reportError : null
};
},
getInitialState : function() {
@@ -81,7 +82,7 @@ const ListPage = createClass({
if(!brews || !brews.length) return
No Brews.
;
return _.map(brews, (brew, idx)=>{
- return ;
+ return ;
});
},
diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx
index 6d8939d56..481ac280f 100644
--- a/client/homebrew/pages/editPage/editPage.jsx
+++ b/client/homebrew/pages/editPage/editPage.jsx
@@ -12,6 +12,7 @@ const Navbar = require('../../navbar/navbar.jsx');
const NewBrew = require('../../navbar/newbrew.navitem.jsx');
const HelpNavItem = require('../../navbar/help.navitem.jsx');
const PrintLink = require('../../navbar/print.navitem.jsx');
+const ErrorNavItem = require('../../navbar/error-navitem.jsx');
const Account = require('../../navbar/account.navitem.jsx');
const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
@@ -261,10 +262,6 @@ const EditPage = createClass({
},
renderSaveButton : function(){
- if(this.state.error){
- return require('../../utils/render-error-nav-item.jsx')(this, this.state.error);
- }
-
if(this.state.autoSaveWarning && this.hasChanges()){
this.setAutosaveWarning();
const elapsedTime = Math.round((new Date() - this.state.unsavedTime) / 1000 / 60);
@@ -352,10 +349,13 @@ const EditPage = createClass({
{this.renderGoogleDriveIcon()}
-
- {this.renderSaveButton()}
- {this.renderAutoSaveButton()}
-
+ {this.state.error ?
+ :
+
+ {this.renderSaveButton()}
+ {this.renderAutoSaveButton()}
+
+ }
diff --git a/client/homebrew/pages/editPage/editPage.less b/client/homebrew/pages/editPage/editPage.less
index 2eb212f3f..581e6dfa2 100644
--- a/client/homebrew/pages/editPage/editPage.less
+++ b/client/homebrew/pages/editPage/editPage.less
@@ -13,10 +13,6 @@
cursor : initial;
color : #666;
}
- &.error{
- position : relative;
- background-color : @red;
- }
}
.googleDriveStorage {
position : relative;
diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx
index b594a256e..f4a30b34b 100644
--- a/client/homebrew/pages/homePage/homePage.jsx
+++ b/client/homebrew/pages/homePage/homePage.jsx
@@ -12,6 +12,7 @@ const NewBrewItem = require('../../navbar/newbrew.navitem.jsx');
const HelpNavItem = require('../../navbar/help.navitem.jsx');
const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const AccountNavItem = require('../../navbar/account.navitem.jsx');
+const ErrorNavItem = require('../../navbar/error-navitem.jsx');
const SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
@@ -55,16 +56,13 @@ const HomePage = createClass({
brew : { ...prevState.brew, text: text }
}));
},
- renderSaveError : function(){
- if(this.state.error) {
- return require('../../utils/render-error-nav-item.jsx')(this, this.state.error);
- }
- return null;
- },
renderNavbar : function(){
return
- {this.renderSaveError()}
+ {this.state.error ?
+ :
+ null
+ }
diff --git a/client/homebrew/pages/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less
index b0320d8d2..a7523bd3c 100644
--- a/client/homebrew/pages/homePage/homePage.less
+++ b/client/homebrew/pages/homePage/homePage.less
@@ -46,9 +46,5 @@
&:hover{
background-color: @green;
}
- &.error{
- position : relative;
- background-color : @red;
- }
}
}
diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx
index 1563d0fd8..a4044a0e9 100644
--- a/client/homebrew/pages/newPage/newPage.jsx
+++ b/client/homebrew/pages/newPage/newPage.jsx
@@ -10,6 +10,7 @@ const Markdown = require('naturalcrit/markdown.js');
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const AccountNavItem = require('../../navbar/account.navitem.jsx');
+const ErrorNavItem = require('../../navbar/error-navitem.jsx');
const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const HelpNavItem = require('../../navbar/help.navitem.jsx');
@@ -156,10 +157,6 @@ const NewPage = createClass({
},
renderSaveButton : function(){
- if(this.state.error){
- return require('../../utils/render-error-nav-item.jsx')(this, this.state.error);
- }
-
if(this.state.isSaving){
return
save...
@@ -189,7 +186,10 @@ const NewPage = createClass({
- {this.renderSaveButton()}
+ {this.state.error ?
+ :
+ this.renderSaveButton()
+ }
{this.renderLocalPrintButton()}
diff --git a/client/homebrew/pages/newPage/newPage.less b/client/homebrew/pages/newPage/newPage.less
index eb80cad38..f83827ffb 100644
--- a/client/homebrew/pages/newPage/newPage.less
+++ b/client/homebrew/pages/newPage/newPage.less
@@ -4,9 +4,5 @@
&:hover{
background-color: @green;
}
- &.error{
- position : relative;
- background-color : @red;
- }
}
}
diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx
index 7341c61ad..1e051987b 100644
--- a/client/homebrew/pages/userPage/userPage.jsx
+++ b/client/homebrew/pages/userPage/userPage.jsx
@@ -12,6 +12,7 @@ const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const Account = require('../../navbar/account.navitem.jsx');
const NewBrew = require('../../navbar/newbrew.navitem.jsx');
const HelpNavItem = require('../../navbar/help.navitem.jsx');
+const ErrorNavItem = require('../../navbar/error-navitem.jsx');
const UserPage = createClass({
displayName : 'UserPage',
@@ -19,7 +20,8 @@ const UserPage = createClass({
return {
username : '',
brews : [],
- query : ''
+ query : '',
+ error : null
};
},
getInitialState : function() {
@@ -50,10 +52,19 @@ const UserPage = createClass({
brewCollection : brewCollection
};
},
+ errorReported : function(error) {
+ this.setState({
+ error
+ });
+ },
navItems : function() {
return
+ {this.state.error ?
+ :
+ null
+ }
@@ -63,7 +74,7 @@ const UserPage = createClass({
},
render : function(){
- return ;
+ return ;
}
});
diff --git a/client/homebrew/utils/render-error-nav-item.jsx b/client/homebrew/utils/render-error-nav-item.jsx
deleted file mode 100644
index 0359c1e43..000000000
--- a/client/homebrew/utils/render-error-nav-item.jsx
+++ /dev/null
@@ -1,72 +0,0 @@
-require('./render-error-nav-item.less');
-const React = require('react');
-const Nav = require('naturalcrit/nav/nav.jsx');
-
-module.exports = function(component, error){
- const clearError = ()=>{
- const state = {
- error : null
- };
- if(component.state.isSaving) {
- state.isSaving = false;
- }
- component.setState(state);
- };
-
- const status = error.status;
- const message = error.body?.message;
- let errMsg = '';
- try {
- errMsg += `${error.toString()}\n\n`;
- errMsg += `\`\`\`\n${error.stack}\n`;
- errMsg += `${JSON.stringify(error.error, null, ' ')}\n\`\`\``;
- console.log(errMsg);
- } catch (e){}
-
- if(status === 409) {
- return
- Oops!
-
- {message ?? 'Conflict: please refresh to get latest changes'}
-
- ;
- } else if(status === 412) {
- return
- Oops!
-
- {message ?? 'Your client is out of date. Please save your changes elsewhere and refresh.'}
-
- ;
- }
-
- if(error.req.url.match(/^\/api.*Google.*$/m)){
- return
- Oops!
-
- Looks like your Google credentials have
- expired! Visit our log in page to sign out
- and sign back in with Google,
- then try saving again!
-
-
- Sign In
-
-
-
- Not Now
-
-
- ;
- }
-
- return
- Oops!
-
- Looks like there was a problem saving.
- Report the issue
- here
- .
-
- ;
-};
\ No newline at end of file