diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 8666b7d58..5fa225945 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -11,6 +11,7 @@ const SharePage = require('./pages/sharePage/sharePage.jsx'); const NewPage = require('./pages/newPage/newPage.jsx'); //const ErrorPage = require('./pages/errorPage/errorPage.jsx'); const PrintPage = require('./pages/printPage/printPage.jsx'); +const AccountPage = require('./pages/accountPage/accountPage.jsx'); const WithRoute = (props)=>{ const params = useParams(); @@ -61,24 +62,27 @@ const Homebrew = createClass({ }, render : function (){ - return -
- - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - -
-
; + return ( + +
+ + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + +
+
+ ); } }); diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 7d7d39321..7347e084b 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -76,6 +76,14 @@ const Account = createClass({ > brews + + account + + + + + + + + ; + }, + + renderUiItems : function() { + // console.log(this.props.uiItems); + return <> +
+

Account Information

+

Username: {this.props.uiItems.username || 'No user currently logged in'}

+

Last Login: {moment(this.props.uiItems.issued).format('dddd, MMMM Do YYYY, h:mm:ss a ZZ') || '-'}

+
+
+

Homebrewery Information

+

Brews on Homebrewery: {this.props.uiItems.mongoCount || '-'}

+
+
+

Google Information

+

Linked to Google: {this.props.uiItems.googleId ? 'YES' : 'NO'}

+ {this.props.uiItems.googleId ?

Brews on Google Drive: {this.props.uiItems.fileCount || '-'}

: '' } +
+ ; + }, + + render : function(){ + return + {this.renderUiItems()} + ; + } +}); + +module.exports = AccountPage; diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.jsx b/client/homebrew/pages/basePages/uiPage/uiPage.jsx new file mode 100644 index 000000000..20dc6b26b --- /dev/null +++ b/client/homebrew/pages/basePages/uiPage/uiPage.jsx @@ -0,0 +1,38 @@ +require('./uiPage.less'); +const React = require('react'); +const createClass = require('create-react-class'); + +const Nav = require('naturalcrit/nav/nav.jsx'); +const Navbar = require('../../../navbar/navbar.jsx'); +const NewBrewItem = require('../../../navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('../../../navbar/help.navitem.jsx'); +const RecentNavItem = require('../../../navbar/recent.navitem.jsx').both; +const Account = require('../../../navbar/account.navitem.jsx'); + + +const UIPage = createClass({ + displayName : 'UIPage', + + render : function(){ + return
+ + + {this.props.brew.title} + + + + + + + + + + +
+ {this.props.children} +
+
; + } +}); + +module.exports = UIPage; diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.less b/client/homebrew/pages/basePages/uiPage/uiPage.less new file mode 100644 index 000000000..9780b84ff --- /dev/null +++ b/client/homebrew/pages/basePages/uiPage/uiPage.less @@ -0,0 +1,47 @@ +.uiPage{ + .content{ + overflow-y : hidden; + width : 90vw; + background-color: #f0f0f0; + font-family: 'Open Sans'; + margin-left: auto; + margin-right: auto; + margin-top: 25px; + padding: 2% 4%; + font-size: 0.8em; + line-height: 1.8em; + .dataGroup{ + padding: 6px 20px 15px; + border: 2px solid black; + border-radius: 5px; + margin: 5px 0px; + } + h1, h2, h3, h4{ + font-weight: 900; + text-transform: uppercase; + margin: 0.5em 30% 0.25em 0; + border-bottom: 2px solid slategrey; + } + h1 { + font-size: 2em; + border-bottom: 2px solid darkslategrey; + margin-bottom: 0.5em; + margin-right: 0; + } + h2 { + font-size: 1.75em; + } + h3 { + font-size: 1.5em; + svg { + width: 19px; + } + } + h4 { + font-size: 1.25em; + } + strong { + font-weight: bold; + } + } +} diff --git a/server/app.js b/server/app.js index a3f66bb2c..4586c7220 100644 --- a/server/app.js +++ b/server/app.js @@ -1,4 +1,4 @@ -/*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ +/*eslint max-lines: ["warn", {"max": 400, "skipBlankLines": true, "skipComments": true}]*/ // Set working directory to project root process.chdir(`${__dirname}/..`); @@ -262,6 +262,53 @@ app.get('/print/:id', asyncHandler(getBrew('share')), (req, res, next)=>{ next(); }); +//Account Page +app.get('/account', asyncHandler(async (req, res, next)=>{ + const data = {}; + data.title = 'Account Information Page'; + + let auth; + let files; + if(req.account) { + if(req.account.googleId) { + try { + auth = await GoogleActions.authCheck(req.account, res); + } catch (e) { + auth = undefined; + console.log('Google auth check failed!'); + console.log(e); + } + if(auth.credentials.access_token) { + try { + files = await GoogleActions.listGoogleBrews(auth); + } catch (e) { + files = undefined; + console.log('List Google files failed!'); + console.log(e); + } + } + } + + const brews = await HomebrewModel.getByUser(req.account.username, true, 'id') + .catch((err)=>{ + console.log(err); + }); + + data.uiItems = { + username : req.account.username, + issued : req.account.issued, + mongoCount : brews.length, + googleId : Boolean(req.account.googleId), + authCheck : Boolean(req.account.googleId && auth.credentials.access_token), + fileCount : files?.length || '-' + }; + } + + req.brew = data; + return next(); +})); + + const nodeEnv = config.get('node_env'); const isLocalEnvironment = config.get('local_environments').includes(nodeEnv); // Local only @@ -276,8 +323,6 @@ if(isLocalEnvironment){ }); } - - //Render the page const templateFn = require('./../client/template.js'); app.use(asyncHandler(async (req, res, next)=>{