UNPKG

trc-client-core

Version:
115 lines (106 loc) 3.88 kB
import {History} from 'react-router'; import React from 'react'; import Reflux from 'reflux'; import RefluxImmutableStoreMixin from 'reflux-immutable/StoreMixin'; import Immutable from 'immutable'; import moment from 'moment'; import Tag from 'trc-client-core/src/components/Tag'; import DataTable from 'bd-stampy/components/DataTable'; import Icon from 'trc-client-core/src/components/Icon'; import QandaAskForm from 'trc-client-core/src/qanda/QandaAskForm'; import QandaStore from 'trc-client-core/src/qanda/QandaStore'; import NavigationStore from 'trc-client-core/src/global/NavigationStore'; import NavigationActions from 'trc-client-core/src/global/NavigationActions'; var QandaFeed = React.createClass({ displayName: 'QandaFeed', contextTypes: { location: React.PropTypes.object }, mixins: [ History, Reflux.listenTo(QandaStore, 'onStoreChange'), Reflux.listenTo(NavigationStore, 'onStoreChange'), RefluxImmutableStoreMixin ], getStoreState() { return { questions: QandaStore.get('questions'), query: NavigationStore.get('query') }; }, getDefaultProps() { return { filter: [] }; }, render: function() { return ( <div> <QandaAskForm defaultTag={this.props.defaultTag}/> {this.renderSearchingForTags()} {this.renderQuestions()} </div> ); }, renderQuestions() { if(!this.state.questions) { return null; } var tableSchema = [{ width: 1, render: (item) => <div className="Widget"><Icon hexCode={item.icon}/></div> }, { render: (item) => { return <div className="row hug-top"> <h3 className="hug"> <a href={`/#/product/qanda/${item.id}`}> {this.renderNew(item)} {item.questionTitle} </a> </h3> <div className="t-muted">{moment(item.answerDate).format('MMMM Do YYYY')}</div> <ul className="t-muted List List-comma"> {item.tags.map((tag, key) => <li key={key}><Tag name={tag} /></li>)} </ul> </div>; } }]; var questionFilter = (question) => { var tag = this.context.location.query.tag || []; var filterArray = Immutable.List(this.props.filter).concat(tag); if(filterArray.size) { return filterArray.isSubset(question.get('tags')); } return true; }; if(!this.state.questions.filter(questionFilter).size){ return null; } return ( <DataTable modifier="top" schema={tableSchema} data={this.state.questions.filter(questionFilter).sortBy(qq => qq.get('answerDate')).reverse().toJS()} /> ); }, renderNew(question) { if(moment().subtract(14, "days").isBefore(question.answerDate)) { return <span className="Badge Badge-small vertical-middle">New</span>; } }, renderSearchingForTags() { var {tag} = this.context.location.query; if (tag) { return ( <div className="p"> <span className="gamma">Searching for: <em>{tag.replace('_', ' ')}</em> </span> <span role="button" onClick={this.onRemoveTag} className="link">show all?</span> </div> ); } }, onRemoveTag() { this.history.pushState(null, '/product/qanda', null); } }); module.exports = QandaFeed;