From 9ad36d04c3a352afc6f9a1322c7401200332877a Mon Sep 17 00:00:00 2001 From: François Schmidts Date: Tue, 2 Feb 2016 23:05:16 +0100 Subject: reload and fold all button --- src/web/js/actions/MenuActions.js | 6 +++ src/web/js/components/Menu.react.js | 59 ++++++++++++++++++++++++------ src/web/js/components/MiddlePanel.react.js | 10 ++--- src/web/js/constants/JarrConstants.js | 1 + src/web/js/stores/MenuStore.js | 6 ++- src/web/static/css/one-page-app.css | 6 ++- 6 files changed, 68 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/web/js/actions/MenuActions.js b/src/web/js/actions/MenuActions.js index d3a0d25d..b9154581 100644 --- a/src/web/js/actions/MenuActions.js +++ b/src/web/js/actions/MenuActions.js @@ -26,6 +26,12 @@ var MenuActions = { filter: filter, }); }, + toggleAllFolding: function(all_folded) { + JarrDispatcher.dispatch({ + type: ActionTypes.TOGGLE_MENU_FOLD, + all_folded: all_folded, + }); + }, }; module.exports = MenuActions; diff --git a/src/web/js/components/Menu.react.js b/src/web/js/components/Menu.react.js index 76304f9a..60578f8a 100644 --- a/src/web/js/components/Menu.react.js +++ b/src/web/js/components/Menu.react.js @@ -84,9 +84,13 @@ var CategoryGroup = React.createClass({ name: React.PropTypes.string.isRequired, feeds: React.PropTypes.array.isRequired, unread: React.PropTypes.number.isRequired, + folded: React.PropTypes.bool.isRequired, }, getInitialState: function() { - return {unfolded: true}; + return {folded: this.props.folded}; + }, + componentWillReceiveProps: function(nextProps) { + this.setState({folded: nextProps.folded}); }, render: function() { // hidden the no category if empty @@ -96,7 +100,7 @@ var CategoryGroup = React.createClass({ var filter = this.props.filter; var a_type = this.props.active_type; var a_id = this.props.active_id; - if(this.state.unfolded) { + if(!this.state.folded) { // filtering according to this.props.filter var feeds = this.props.feeds.filter(function(feed) { if (filter == 'unread' && feed.unread <= 0) { @@ -119,11 +123,11 @@ var CategoryGroup = React.createClass({ var feeds = []; } var unread = null; - if(this.props.unread){ + if(this.props.unread) { unread = {this.props.unread}; } - var ctrl = ( + var ctrl = ( ); return (
    @@ -137,7 +141,7 @@ var CategoryGroup = React.createClass({ ); }, toggleFolding: function(evnt) { - this.setState({unfolded: !this.state.unfolded}); + this.setState({folded: !this.state.folded}); evnt.stopPropagation(); }, }); @@ -145,32 +149,56 @@ var CategoryGroup = React.createClass({ var MenuFilter = React.createClass({ propTypes: {feed_in_error: React.PropTypes.bool, filter: React.PropTypes.string.isRequired}, + getInitialState: function() { + return {allFolded: false}; + }, render: function() { var error_button = null; if (this.props.feed_in_error) { error_button = ( ); } - return ( + if(this.state.allFolded) { + var foldBtnTitle = "Unfold all categories"; + var foldBtnGlyph = "option-horizontal"; + } else { + var foldBtnTitle = "Fold all categories"; + var foldBtnGlyph = "option-vertical"; + } + return (
    + {error_button} + + + + + + +
    ); }, setAllFilter: function() { @@ -182,12 +210,17 @@ var MenuFilter = React.createClass({ setErrorFilter: function() { MenuActions.setFilter("error"); }, + toggleFold: function() { + this.setState({allFolded: !this.state.allFolded}, function() { + MenuActions.toggleAllFolding(this.state.allFolded); + }.bind(this)); + }, }); var Menu = React.createClass({ getInitialState: function() { return {filter: 'all', categories: {}, feeds: {}, - active_type: null, active_id: null}; + all_folded: false, active_type: null, active_id: null}; }, render: function() { var feed_in_error = false; @@ -218,6 +251,7 @@ var Menu = React.createClass({ active_id={this.state.active_id} name={this.state.categories[cat_id].name} cat_id={this.state.categories[cat_id].id} + folded={this.state.all_folded} unread={unread} />); } @@ -244,7 +278,8 @@ var Menu = React.createClass({ categories: datas.categories, categories_order: datas.categories_order, active_type: datas.active_type, - active_id: datas.active_id}); + active_id: datas.active_id, + all_folded: datas.all_folded}); }, }); diff --git a/src/web/js/components/MiddlePanel.react.js b/src/web/js/components/MiddlePanel.react.js index eca56541..e251447e 100644 --- a/src/web/js/components/MiddlePanel.react.js +++ b/src/web/js/components/MiddlePanel.react.js @@ -158,31 +158,31 @@ var MiddlePanelFilter = React.createClass({ - -