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
+
+
+
+
+ Sort by :
+ |
+ {this.renderSortOption('Title', 'alpha')}
+ {this.renderSortOption('Created Date', 'created')}
+ {this.renderSortOption('Updated Date', 'updated')}
+ {this.renderSortOption('Views', 'views')}
+ {/* {this.renderSortOption('Latest', 'latest')} */}
+
+ Direction :
+ |
+
+
+ |
+ {this.renderFilterOption()}
+
+
+
+
;
+ },
+
+ 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
-
-
-
-
- Sort by :
- |
- {this.renderSortOption('Title', 'alpha')}
- {this.renderSortOption('Created Date', 'created')}
- {this.renderSortOption('Updated Date', 'updated')}
- {this.renderSortOption('Views', 'views')}
- {/* {this.renderSortOption('Latest', 'latest')} */}
-
- Direction :
- |
-
-
- |
- {this.renderFilterOption()}
-
-
-
-
;
- },
-
- 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 ;
}
});