diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx similarity index 98% rename from client/homebrew/pages/userPage/brewItem/brewItem.jsx rename to client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx index b0b647b86..a89dad11e 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx @@ -6,7 +6,7 @@ const cx = require('classnames'); const moment = require('moment'); const request = require('superagent'); -const googleDriveIcon = require('../../../googleDrive.png'); +const googleDriveIcon = require('../../../../googleDrive.png'); const dedent = require('dedent-tabs').default; const BrewItem = createClass({ diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.less b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less similarity index 100% rename from client/homebrew/pages/userPage/brewItem/brewItem.less rename to client/homebrew/pages/basePages/listPage/brewItem/brewItem.less diff --git a/client/homebrew/pages/basePages/listPage/listPage.jsx b/client/homebrew/pages/basePages/listPage/listPage.jsx new file mode 100644 index 000000000..e1f300ab2 --- /dev/null +++ b/client/homebrew/pages/basePages/listPage/listPage.jsx @@ -0,0 +1,160 @@ +require('./listPage.less'); +const React = require('react'); +const createClass = require('create-react-class'); +const _ = require('lodash'); +const moment = require('moment'); + +const BrewItem = require('./brewItem/brewItem.jsx'); + +const ListPage = createClass({ + displayName : 'ListPage', + getDefaultProps : function() { + return { + brewCollection : [ + { + title : '', + class : '', + brews : [] + } + ], + navItems : <> + }; + }, + getInitialState : function() { + return { + sortType : 'alpha', + sortDir : 'asc', + filterString : '' + }; + }, + + renderBrews : function(brews){ + if(!brews || !brews.length) return
No Brews.
; + + return _.map(brews, (brew, idx)=>{ + return ; + }); + }, + + sortBrewOrder : function(brew){ + if(!brew.title){brew.title = 'No Title';} + const mapping = { + 'alpha' : _.deburr(brew.title.toLowerCase()), + 'created' : moment(brew.createdAt).format(), + 'updated' : moment(brew.updatedAt).format(), + 'views' : brew.views, + 'latest' : moment(brew.lastViewed).format() + }; + return mapping[this.state.sortType]; + }, + + handleSortOptionChange : function(event){ + this.setState({ + sortType : event.target.value + }); + }, + + handleSortDirChange : function(event){ + this.setState({ + sortDir : `${(this.state.sortDir == 'asc' ? 'desc' : 'asc')}` + }); + }, + + renderSortOption : function(sortTitle, sortValue){ + return + + ; + }, + + handleFilterTextChange : function(e){ + this.setState({ + filterString : e.target.value + }); + return; + }, + + renderFilterOption : function(){ + return + + ; + }, + + renderSortOptions : function(){ + return
+ + + + + {this.renderSortOption('Title', 'alpha')} + {this.renderSortOption('Created Date', 'created')} + {this.renderSortOption('Updated Date', 'updated')} + {this.renderSortOption('Views', 'views')} + {/* {this.renderSortOption('Latest', 'latest')} */} + + + {this.renderFilterOption()} + + +
+
Sort by :
+
+
Direction :
+
+ +
+
; + }, + + getSortedBrews : function(brews){ + const testString = _.deburr(this.state.filterString).toLowerCase(); + brews = _.filter(brews, (brew)=>{ + return (_.deburr(brew.title).toLowerCase().includes(testString)) || + (_.deburr(brew.description).toLowerCase().includes(testString)); + }); + + return _.orderBy(brews, (brew)=>{ return this.sortBrewOrder(brew); }, this.state.sortDir); + }, + + renderBrewCollection : function(brewCollection){ + return _.map(brewCollection, (brewGroup, idx)=>{ + return
+

{brewGroup.title || 'No Title'}

+ {this.renderBrews(this.getSortedBrews(brewGroup.brews))} +
; + }); + }, + + render : function(){ + return
+ + {this.props.navItems} + +
+
+ {this.renderSortOptions()} + {this.renderBrewCollection(this.props.brewCollection)} +
+
+
; + } +}); + +module.exports = ListPage; diff --git a/client/homebrew/pages/userPage/userPage.less b/client/homebrew/pages/basePages/listPage/listPage.less similarity index 99% rename from client/homebrew/pages/userPage/userPage.less rename to client/homebrew/pages/basePages/listPage/listPage.less index d968aab9a..6be946404 100644 --- a/client/homebrew/pages/userPage/userPage.less +++ b/client/homebrew/pages/basePages/listPage/listPage.less @@ -11,7 +11,7 @@ -webkit-column-gap : auto; -moz-column-gap : auto; } -.userPage{ +.listPage{ .content{ overflow-y : scroll; .phb{ diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index 2cc283af3..a78ba11af 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -1,10 +1,9 @@ -require('./userPage.less'); const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); -const moment = require('moment'); +const ListPage = require('../basePages/listPage/listPage.jsx'); const Nav = require('naturalcrit/nav/nav.jsx'); const Navbar = require('../../navbar/navbar.jsx'); @@ -12,17 +11,8 @@ const Navbar = require('../../navbar/navbar.jsx'); const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; const Account = require('../../navbar/account.navitem.jsx'); const NewBrew = require('../../navbar/newbrew.navitem.jsx'); -const BrewItem = require('./brewItem/brewItem.jsx'); const HelpNavItem = require('../../navbar/help.navitem.jsx'); -// const brew = { -// title : 'SUPER Long title woah now', -// authors : [] -// }; - -//const BREWS = _.times(25, ()=>{ return brew;}); - - const UserPage = createClass({ displayName : 'UserPage', getDefaultProps : function() { @@ -32,160 +22,47 @@ const UserPage = createClass({ }; }, getInitialState : function() { - return { - sortType : 'alpha', - sortDir : 'asc', - filterString : '' - }; - }, - getUsernameWithS : function() { - if(this.props.username.endsWith('s')) - return `${this.props.username}'`; - return `${this.props.username}'s`; - }, + const usernameWithS = this.props.username + (this.props.username.endsWith('s') ? `'` : `'s`); - renderBrews : function(brews){ - if(!brews || !brews.length) return
No Brews.
; - - const sortedBrews = this.sortBrews(brews); - - return _.map(sortedBrews, (brew, idx)=>{ - return ; - }); - }, - - sortBrewOrder : function(brew){ - if(!brew.title){brew.title = 'No Title';} - const mapping = { - 'alpha' : _.deburr(brew.title.toLowerCase()), - 'created' : moment(brew.createdAt).format(), - 'updated' : moment(brew.updatedAt).format(), - 'views' : brew.views, - 'latest' : moment(brew.lastViewed).format() - }; - return mapping[this.state.sortType]; - }, - - sortBrews : function(brews){ - return _.orderBy(brews, (brew)=>{ return this.sortBrewOrder(brew); }, this.state.sortDir); - }, - - handleSortOptionChange : function(event){ - this.setState({ - sortType : event.target.value - }); - }, - - handleSortDirChange : function(event){ - this.setState({ - sortDir : `${(this.state.sortDir == 'asc' ? 'desc' : 'asc')}` - }); - }, - - renderSortOption : function(sortTitle, sortValue){ - return - - ; - }, - - handleFilterTextChange : function(e){ - this.setState({ - filterString : e.target.value - }); - return; - }, - - renderFilterOption : function(){ - return - - ; - }, - - renderSortOptions : function(){ - return
- - - - - {this.renderSortOption('Title', 'alpha')} - {this.renderSortOption('Created Date', 'created')} - {this.renderSortOption('Updated Date', 'updated')} - {this.renderSortOption('Views', 'views')} - {/* {this.renderSortOption('Latest', 'latest')} */} - - - {this.renderFilterOption()} - - -
-
Sort by :
-
-
Direction :
-
- -
-
; - }, - - getSortedBrews : function(){ - const testString = _.deburr(this.state.filterString).toLowerCase(); - const brewCollection = this.state.filterString ? _.filter(this.props.brews, (brew)=>{ - return (_.deburr(brew.title).toLowerCase().includes(testString)) || - (_.deburr(brew.description).toLowerCase().includes(testString)); - }) : this.props.brews; - return _.groupBy(brewCollection, (brew)=>{ + const brews = _.groupBy(this.props.brews, (brew)=>{ return (brew.published ? 'published' : 'private'); }); + + const brewCollection = [ + { + title : `${usernameWithS} published brews`, + class : 'published', + brews : brews.published + } + ]; + if(this.props.username == global.account?.username){ + brewCollection.push( + { + title : `${usernameWithS} unpublished brews`, + class : 'unpublished', + brews : brews.private + } + ); + } + + return { + brewCollection : brewCollection + }; + }, + + navItems : function() { + return + + + + + + + ; }, render : function(){ - const brews = this.getSortedBrews(); - - return
- - - - - - - - - - -
-
- {this.renderSortOptions()} -
-

{this.getUsernameWithS()} published brews

- {this.renderBrews(brews.published)} -
- {this.props.username == global.account?.username && -
-

{this.getUsernameWithS()} unpublished brews

- {this.renderBrews(brews.private)} -
- } -
-
-
; + return ; } });