import React from 'react'; import ReactDOM from 'react-dom'; import JqxTree from '../../../jqwidgets-react/react_jqxtree.js'; import JqxSplitter from '../../../jqwidgets-react/react_jqxsplitter.js'; import JqxExpander from '../../../jqwidgets-react/react_jqxexpander.js'; import JqxListBox from '../../../jqwidgets-react/react_jqxlistbox.js'; import JqxPanel from '../../../jqwidgets-react/react_jqxpanel.js'; class App extends React.Component { constructor(props) { super(props); this.state = { config: { feeds: { 'CNN.com': 'cnn', 'Geek.com': 'geek', 'ScienceDaily': 'sciencedaily' }, currentFeedContent: {} } }; } componentDidMount () { this.refs.mainSplitter.expand(); let firstItem = this.refs.myTree.getItems()[0].element; this.refs.myTree.expandItem(firstItem); this.refs.myTree.on('select', (event) => { let item = this.refs.myTree.getItem(event.args.element); if(this.state.config['feeds'][item.label] !== undefined) { this.getFeed(this.state.config['feeds'][item.label]); } }); this.refs.myListBox.on('select', (event) => { this.loadContent(event.args.index); }); this.getFeed('sciencedaily'); } getFeed (feed) { feed = 'data/' + feed + '.txt'; this.loadFeed(feed); }; loadFeed (feed, callback) { $.jqx.data.ajax({ 'dataType': 'json', 'url': feed, success: (data) => { let channel = data.rss.channel; this.setState({ config: { feeds: { 'CNN.com': 'cnn', 'Geek.com': 'geek', 'ScienceDaily': 'sciencedaily' }, currentFeedContent: channel.item } }); this.displayFeedList(this.state.config.currentFeedContent); this.displayFeedHeader(channel.title); this.selectFirst(); }, error: (msg) => { } }); }; displayFeedList (items) { let headers = this.getHeaders(items); this.refs.myListBox.source(headers); }; displayFeedHeader (header) { this.refs.feedListExpander.setHeaderContent(header); }; selectFirst () { this.refs.myListBox.selectIndex(0); this.loadContent(0); }; loadContent (index) { let item = this.state.config.currentFeedContent[index]; if (item != null) { this.refs.myPanel.clearcontent(); this.refs.myPanel.prepend('
' + item.description + '
'); this.addContentHeaderData(item); } }; getHeaders (items) { let headers = [], header; for (let i = 0; i < items.length; i += 1) { header = items[i].title; headers.push(header); } return headers; }; addContentHeaderData (item) { let link = document.createElement('a'); link.style.whiteSpace = 'nowrap'; link.style.marginLeft = '15px'; link.target = '_blank'; let text = document.createTextNode('Source'); link.appendChild(text); let date = document.createElement('div'); date.style.whiteSpace = 'nowrap'; date.style.marginLeft = '30px'; date.appendChild(document.createTextNode(item.pubDate)); let container = document.createElement('table'); container.style.height = '100%'; let element1 = document.createElement('tr'); container.appendChild(element1); container.appendChild(document.createElement('td')); container.appendChild(document.createElement('td')); link.href = item.link; document.getElementById('feedItemHeader').innerHTML = null; document.getElementById('feedItemHeader').appendChild(container); container.getElementsByTagName('td')[0].appendChild(link); container.querySelector('td:last-child').appendChild(date); this.refs.feedListExpander.setHeaderContent(container.outerHTML); }; render () { return (
Feeds
  • News and Blogs
    • Favorites
      • ScienceDaily
    • Geek.com
    • CNN.com
Select a news item to see it's content
) } } //Render our App Component to the desirable element ReactDOM.render(, document.getElementById('app'));