From 2c0e17cb977a1e8782799b337df8b1583d019906 Mon Sep 17 00:00:00 2001 From: François Schmidts Date: Mon, 12 Oct 2015 22:36:01 +0200 Subject: bootstraping react --- src/web/js/components/MainApp.react.js | 18 +++++ src/web/js/components/Menu.react.js | 119 +++++++++++++++++++++++++++++ src/web/js/components/MiddlePanel.react.js | 103 +++++++++++++++++++++++++ 3 files changed, 240 insertions(+) create mode 100644 src/web/js/components/MainApp.react.js create mode 100644 src/web/js/components/Menu.react.js create mode 100644 src/web/js/components/MiddlePanel.react.js (limited to 'src/web/js/components') diff --git a/src/web/js/components/MainApp.react.js b/src/web/js/components/MainApp.react.js new file mode 100644 index 00000000..743c9510 --- /dev/null +++ b/src/web/js/components/MainApp.react.js @@ -0,0 +1,18 @@ +var Menu = require('./Menu.react'); +var MiddlePanel = require('./MiddlePanel.react'); +var React = require('react'); + + +var MainApp = React.createClass({ + render: function() { + return (
+
+ + +
+
+ ); + }, +}); + +module.exports = MainApp; diff --git a/src/web/js/components/Menu.react.js b/src/web/js/components/Menu.react.js new file mode 100644 index 00000000..caf8c3a8 --- /dev/null +++ b/src/web/js/components/Menu.react.js @@ -0,0 +1,119 @@ +var React = require('react'); +var MenuStore = require('../stores/MenuStore'); +var MenuActions = require('../actions/MenuActions'); +var MiddlePanelActions = require('../actions/MiddlePanelActions'); + +var FeedItem = React.createClass({ + propTypes: {feed_id: React.PropTypes.number.isRequired, + title: React.PropTypes.string.isRequired, + unread: React.PropTypes.number.isRequired, + icon_url: React.PropTypes.string, + }, + getInitialState: function() { + return {feed_id: this.props.feed_id, + title: this.props.title, + unread: this.props.unread, + icon_url: this.props.icon_url, + }; + }, + render: function() { + var unread = undefined; + var icon = undefined; + if(this.state.icon_url){ + icon = (); + } else { + icon = (); + } + if(this.state.unread){ + unread = ( + + {this.state.unread} + + ); + } + return (
  • + {icon} {this.state.title} {unread} +
  • + ); + }, + handleClick: function() { + MiddlePanelActions.setFeedFilter(this.state.feed_id); + }, +}); + +var Category = React.createClass({ + propTypes: {category_id: React.PropTypes.number.isRequired, + name: React.PropTypes.string.isRequired, + feeds: React.PropTypes.array.isRequired, + unread: React.PropTypes.number.isRequired, + }, + getInitialState: function() { + return {category_id: this.props.category_id, + name: this.props.name, + feeds: this.props.feeds, + unread: this.props.unread, + }; + }, + render: function() { + unread = undefined; + if(this.state.unread){ + unread = ( + + {this.state.unread} + + ); + } + return (
    +

    + {this.state.name} {unread} +

    +
      + {this.state.feeds.map(function(feed){ + return ;})} +
    +
    + ); + }, + handleClick: function() { + MiddlePanelActions.setCategoryFilter(this.state.category_id); + }, +}); + +var Menu = React.createClass({ + getInitialState: function() { + return {categories: [], all_unread_count: 0}; + }, + render: function() { + return ( + ); + }, + + componentDidMount: function() { + MenuActions.reload(); + MenuStore.addChangeListener(this._onChange); + }, + componentWillUnmount: function() { + MenuStore.removeChangeListener(this._onChange); + }, + _onChange: function() { + var datas = MenuStore.getAll(); + this.setState({categories: datas.categories, + all_unread_count: datas.all_unread_count}); + }, +}); + +module.exports = Menu; diff --git a/src/web/js/components/MiddlePanel.react.js b/src/web/js/components/MiddlePanel.react.js new file mode 100644 index 00000000..51d582c0 --- /dev/null +++ b/src/web/js/components/MiddlePanel.react.js @@ -0,0 +1,103 @@ +var React = require('react'); +var MiddlePanelStore = require('../stores/MiddlePanelStore'); +var MiddlePanelActions = require('../actions/MiddlePanelActions'); + +var TableLine = React.createClass({ + propTypes: {article_id: React.PropTypes.number.isRequired, + feed_title: React.PropTypes.string.isRequired, + icon_url: React.PropTypes.string, + title: React.PropTypes.string.isRequired, + date: React.PropTypes.string.isRequired, + read: React.PropTypes.bool.isRequired, + liked: React.PropTypes.bool.isRequired, + }, + getInitialState: function() { + return {article_id: this.props.article_id, + title: this.props.title, + icon_url: this.props.icon_url, + feed_title: this.props.feed_title, + date: this.props.date, + read: this.props.read, + liked: this.props.liked, + }; + }, + render: function() { + var read = this.state.read ? 'r' : ''; + var liked = this.state.liked ? 'l' : ''; + var icon = undefined; + if(this.state.icon_url){ + icon = (); + } else { + icon = (); + } + return ( + + {icon}{liked} + + + {this.state.feed_title} + + + + + {this.state.title} + + + {this.state.date} + + ); + }, +}); + +var TableBody = React.createClass({ + propTypes: {articles: React.PropTypes.array.isRequired, + }, + getInitialState: function() { + return {articles: this.props.articles, + }; + }, + render: function() { + return (
    + + + {this.state.articles.map(function(article){ + return ();})} + +
    +
    + ); + } +}); + +var MiddlePanel = React.createClass({ + getInitialState: function() { + return {articles: []}; + }, + render: function() { + var body = null; + if(this.state.articles.length) { + body = (); + } + return (
    {body}
    ); + }, + componentDidMount: function() { + MiddlePanelActions.reload(); + MiddlePanelStore.addChangeListener(this._onChange); + }, + componentWillUnmount: function() { + MiddlePanelStore.removeChangeListener(this._onChange); + }, + _onChange: function() { + var datas = MiddlePanelStore.getAll(); + this.setState({articles: datas.articles}); + }, +}); + +module.exports = MiddlePanel; -- cgit From 41aea41aaff0886fd6c211f03db2b54863a97165 Mon Sep 17 00:00:00 2001 From: François Schmidts Date: Thu, 21 Jan 2016 13:48:06 +0100 Subject: filters are working ! --- src/web/js/components/MiddlePanel.react.js | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'src/web/js/components') diff --git a/src/web/js/components/MiddlePanel.react.js b/src/web/js/components/MiddlePanel.react.js index 51d582c0..c5a9c3f9 100644 --- a/src/web/js/components/MiddlePanel.react.js +++ b/src/web/js/components/MiddlePanel.react.js @@ -50,10 +50,8 @@ var TableLine = React.createClass({ }); var TableBody = React.createClass({ - propTypes: {articles: React.PropTypes.array.isRequired, - }, getInitialState: function() { - return {articles: this.props.articles, + return {articles: [], }; }, render: function() { @@ -73,19 +71,6 @@ var TableBody = React.createClass({ ); - } -}); - -var MiddlePanel = React.createClass({ - getInitialState: function() { - return {articles: []}; - }, - render: function() { - var body = null; - if(this.state.articles.length) { - body = (); - } - return (
    {body}
    ); }, componentDidMount: function() { MiddlePanelActions.reload(); @@ -95,8 +80,16 @@ var MiddlePanel = React.createClass({ MiddlePanelStore.removeChangeListener(this._onChange); }, _onChange: function() { - var datas = MiddlePanelStore.getAll(); - this.setState({articles: datas.articles}); + this.setState({articles: MiddlePanelStore.getArticles()}); + }, +}); + +var MiddlePanel = React.createClass({ + render: function() { + return (
    + +
    + ); }, }); -- cgit From c542f58b99e0bd625f52e1ac9c3d2ad7d9ee4bd5 Mon Sep 17 00:00:00 2001 From: François Schmidts Date: Fri, 22 Jan 2016 17:26:56 +0100 Subject: adding basic bootstrap --- src/web/js/components/Menu.react.js | 20 +++++++++++++++++--- src/web/js/components/MiddlePanel.react.js | 20 +++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) (limited to 'src/web/js/components') diff --git a/src/web/js/components/Menu.react.js b/src/web/js/components/Menu.react.js index caf8c3a8..c1cee9de 100644 --- a/src/web/js/components/Menu.react.js +++ b/src/web/js/components/Menu.react.js @@ -1,4 +1,7 @@ var React = require('react'); +var Button = require('react-bootstrap/lib/Button'); +var ButtonGroup = require('react-bootstrap/lib/ButtonGroup'); + var MenuStore = require('../stores/MenuStore'); var MenuActions = require('../actions/MenuActions'); var MiddlePanelActions = require('../actions/MiddlePanelActions'); @@ -85,11 +88,22 @@ var Category = React.createClass({ var Menu = React.createClass({ getInitialState: function() { - return {categories: [], all_unread_count: 0}; + return {filter: 'all', categories: [], all_unread_count: 0}; }, render: function() { return (