From 0075b0836a1617daf24b70c3ec1e8ffdd57ed157 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Aug 2021 15:36:57 -0400 Subject: [PATCH] Popup error when gDrive credentials are expired on both /edit and /new --- client/homebrew/pages/editPage/editPage.jsx | 25 ++++++- client/homebrew/pages/newPage/newPage.jsx | 77 ++++++++++++++++++-- client/homebrew/pages/newPage/newPage.less | 80 +++++++++++++++++++-- server/googleActions.js | 4 +- server/homebrew.api.js | 18 +++-- 5 files changed, 188 insertions(+), 16 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index a643296d4..0967e05e2 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -322,7 +322,9 @@ const EditPage = createClass({ let errMsg = ''; try { errMsg += `${this.state.errors.toString()}\n\n`; - errMsg += `\`\`\`\n${JSON.stringify(this.state.errors.response.error, null, ' ')}\n\`\`\``; + errMsg += `\`\`\`\n${this.state.errors.stack}\n`; + errMsg += `${JSON.stringify(this.state.errors.response.error, null, ' ')}\n\`\`\``; + console.log(errMsg); } catch (e){} if(this.state.errors.status == '401'){ @@ -344,6 +346,27 @@ const EditPage = createClass({ ; } + if(this.state.errors.status == '403' && this.state.errors.response.body.errors[0].reason == 'insufficientPermissions'){ + return + Oops! +
+ Looks like your Google credentials have + expired! Visit the log in page to sign out + and sign back in with Google + to save this to Google Drive! + +
+ Sign In +
+
+
+ Not Now +
+
+
; + } + return Oops!
diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 1925d2dfa..e77fbc987 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -61,7 +61,7 @@ const NewPage = createClass({ isSaving : false, saveGoogle : (global.account && global.account.googleId ? true : false), - errors : [], + errors : null, htmlErrors : Markdown.validate(this.props.brew.text) }; }, @@ -138,6 +138,14 @@ const NewPage = createClass({ })); }, + clearErrors : function(){ + this.setState({ + errors : null, + isSaving : false + + }); + }, + save : async function(){ this.setState({ isSaving : true @@ -161,7 +169,7 @@ const NewPage = createClass({ console.log(err.status === 401 ? 'Not signed in!' : 'Error Creating New Google Brew!'); - this.setState({ isSaving: false }); + this.setState({ isSaving: false, errors: err }); return; }); @@ -191,12 +199,73 @@ const NewPage = createClass({ }, renderSaveButton : function(){ + if(this.state.errors){ + let errMsg = ''; + try { + errMsg += `${this.state.errors.toString()}\n\n`; + errMsg += `\`\`\`\n${this.state.errors.stack}\n`; + errMsg += `${JSON.stringify(this.state.errors.response.error, null, ' ')}\n\`\`\``; + console.log(errMsg); + } catch (e){} + + if(this.state.errors.status == '401'){ + return + Oops! +
+ You must be signed in to a Google account + to save this to
Google Drive!
+ +
+ Sign In +
+
+
+ Not Now +
+
+
; + } + + if(this.state.errors.status == '403' && this.state.errors.response.body.errors[0].reason == 'insufficientPermissions'){ + return + Oops! +
+ Looks like your Google credentials have + expired! Visit the log in page to sign out + and sign back in with Google + to save this to Google Drive! + +
+ Sign In +
+
+
+ Not Now +
+
+
; + } + + return + Oops! +
+ Looks like there was a problem saving.
+ Report the issue + here + . +
+
; + } + if(this.state.isSaving){ - return + return save... ; } else { - return + return save ; } diff --git a/client/homebrew/pages/newPage/newPage.less b/client/homebrew/pages/newPage/newPage.less index 8cd21b2ec..4f39e626d 100644 --- a/client/homebrew/pages/newPage/newPage.less +++ b/client/homebrew/pages/newPage/newPage.less @@ -1,10 +1,82 @@ .newPage{ - - .saveButton{ + .navItem.save{ background-color: @orange; &:hover{ background-color: @green; } + &.error{ + position : relative; + background-color : @red; + } } - -} \ No newline at end of file + .errorContainer{ + animation-name: glideDown; + animation-duration: 0.4s; + position : absolute; + top : 100%; + left : 50%; + z-index : 100000; + width : 140px; + padding : 3px; + color : white; + background-color : #333; + border : 3px solid #444; + border-radius : 5px; + transform : translate(-50% + 3px, 10px); + text-align : center; + font-size : 10px; + font-weight : 800; + text-transform : uppercase; + a{ + color : @teal; + } + &:before { + content: ""; + width: 0px; + height: 0px; + position: absolute; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid transparent; + border-bottom: 10px solid #444; + left: 53px; + top: -23px; + } + &:after { + content: ""; + width: 0px; + height: 0px; + position: absolute; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid transparent; + border-bottom: 10px solid #333; + left: 53px; + top: -19px; + } + .deny { + width : 48%; + margin : 1px; + padding : 5px; + background-color : #333; + display : inline-block; + border-left : 1px solid #666; + .animate(background-color); + &:hover{ + background-color : red; + } + } + .confirm { + width : 48%; + margin : 1px; + padding : 5px; + background-color : #333; + display : inline-block; + color : white; + .animate(background-color); + &:hover{ + background-color : teal; + } + } + } +} diff --git a/server/googleActions.js b/server/googleActions.js index bfe1b406f..eab6babf3 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -168,6 +168,7 @@ GoogleActions = { .catch((err)=>{ console.log('Error saving to google'); console.error(err); + throw (err); //return res.status(500).send('Error while saving'); }); } @@ -203,8 +204,9 @@ GoogleActions = { media : media }) .catch((err)=>{ + console.log('Error while creating new Google brew'); console.error(err); - return res.status(500).send('Error while creating google brew'); + throw (err); }); if(!obj) return; diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 1f988761d..36d0aa576 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -141,9 +141,12 @@ const newGoogleBrew = async (req, res, next)=>{ req.body = brew; - const newBrew = await GoogleActions.newGoogleBrew(oAuth2Client, brew); - - return res.status(200).send(newBrew); + try { + const newBrew = await GoogleActions.newGoogleBrew(oAuth2Client, brew); + return res.status(200).send(newBrew); + } catch (err) { + return res.status(err.response.status).send(err); + } }; const updateGoogleBrew = async (req, res, next)=>{ @@ -154,9 +157,12 @@ const updateGoogleBrew = async (req, res, next)=>{ const brew = req.body; brew.text = mergeBrewText(brew.text, brew.style); - const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew); - - return res.status(200).send(updatedBrew); + try { + const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew); + return res.status(200).send(updatedBrew); + } catch (err) { + return res.status(err.response.status).send(err); + } }; router.post('/api', newBrew);