UNPKG

meses-feed

Version:

Meses feed SDK in JavaScript

71 lines (58 loc) 2.58 kB
import React from 'react' import styles from './styles.css' import FeedButton from './components/FeedButton' import FeedPopup from './components/FeedPopup' import MesesFeedApp from '../app' class MesesFeedUI extends React.Component { constructor() { super() this.state = { popup: false, unseen: 0, feedActivities: [] } this.CLASS_TAG = '[MESES_FEED_UI]' } componentWillMount() { let { targetUri, applicationId, feedName, fetchSize } = this.props let { feedActivities } = this.state const self = this this._feed = new MesesFeedApp(targetUri, applicationId).getFeed(feedName) this._previousActivityQuery = this._feed.createPreviousFeedActivityQuery() this._previousActivityQuery.load(fetchSize ? fetchSize : 10) .then(result => self.setState({ feedActivities: feedActivities.concat(result) })) .catch(err => console.error(this.CLASS_TAG, err)) this._feed.getUnseenCount() .then(result => self.setState({ unseen: result })) .catch(err => console.error(this.CLASS_TAG, err)) } handleFeedButtonOnClick() { if (this.state.unseen > 0) this._handleMarkNotifAsSeen() this.setState({ popup: !this.state.popup }) } render() { let { buttonClassName, popupClassName, fetchSize } = this.props let { activityParser } = this.props let { popup, feedActivities, unseen } = this.state return ( <div style={{ display: 'inline-block', position: 'relative' }}> <FeedButton className={ buttonClassName ? buttonClassName : '' } unseen={ unseen } onClick={ this.handleFeedButtonOnClick.bind(this) } /> { popup ? <FeedPopup className={ popupClassName ? popupClassName : '' } feedActivities={ feedActivities } activityParser={ activityParser } handleLoadMore={ this._handleLoadMoreActivities.bind(this) } handleMarkRead={ this._handleMarkActivityAsRead.bind(this) } /> : '' } </div> ) } _handleLoadMoreActivities() { let { fetchSize } = this.props let { feedActivities } = this.state const self = this this._previousActivityQuery.load(fetchSize ? fetchSize : 10) .then(result => self.setState({ feedActivities: feedActivities.concat(result) })) .catch(err => console.error(this.CLASS_TAG, err)) } _handleMarkActivityAsRead(activityId) { this._feed.markRead(activityId) } _handleMarkNotifAsSeen() { this._feed.markAsSeen(); this.setState({ unseen: 0 }) } } export default MesesFeedUI