UNPKG

trc-client-core

Version:
98 lines (93 loc) 3.65 kB
import React from 'react'; import moment from 'moment'; import Reflux from 'reflux'; import {Link} from 'react-router'; import RefluxImmutableStoreMixin from 'reflux-immutable/StoreMixin'; import QandaStore from 'trc-client-core/src/qanda/QandaStore'; import ModalManager from '../Modal/ModalManager'; import ModalConfirm from '../Modal/ModalConfirm'; import DataTable from 'bd-stampy/components/DataTable'; import Icon from 'trc-client-core/src/components/Icon'; import Tag from '../components/Tag'; import QandaActions from 'trc-client-core/src/qanda/QandaActions'; var QuestionsTable = React.createClass({ displayName: 'QuestionsTable', mixins: [ Reflux.listenTo(QandaStore, 'onStoreChange'), RefluxImmutableStoreMixin ], getStoreState() { return { questions: QandaStore.get('allQuestions'), tags: QandaStore.get('tags') }; }, render: function() { return ( <div> <Link className="Button Button-edit l-right" to="/product/qanda/new_question">New Question</Link> <h1>Q &amp; A</h1> {this.renderQuestionsTable()} </div> ); }, onDelete(question) { ModalManager.showModal(ModalConfirm, { title: `Delete ${question.questionTitle}?`, yes: 'Delete', message: 'Are you sure you want to delete this question', onYes: QandaActions.deleteQuestion.bind(null, question.id) }); }, renderQuestionsTable: function () { var tableSchema = [{ render: (item) => <Icon hexCode={item.icon}/> }, { heading: 'Question', filter: 'questionTitle', width: '40%', render: (item) => <Link to={`/product/qanda/edit/${item.id}`} className="link">{item.questionTitle}</Link> }, { heading: 'Date', filter: 'answerDate', width: 120, render: (item) => moment(item.answerDate).format('DD/MM/YYYY') // render: (item) => item.answerDate }, { heading: 'Author', filter: 'answeredBy', render: (item) => item.answeredBy || 'Unanswered' }, { heading: 'Tags', filter: 'tags', width: 120, render: (item) => <ul className="List List-comma">{item.tags.map((tag, key) => <li key={key}><Tag name={tag}></Tag></li>)}</ul> }, { heading: 'Status', filter: (item) => item.status === 'Publish' ? 'a' : 'b', render: (item) => item.status === 'Publish' ? 'Published' : 'Draft' }, { width: 100, render: (item) => { return ( <div> <Link className="Button Button-small Button-edit w100" to={`/product/qanda/edit/${item.id}`} key={item.id}>Edit</Link> <Link to={`/product/qanda/${item.id}`} className="Button Button-small Button-grey w100">View</Link> {this.renderDeleteButton(item)} </div> ); } }]; return <DataTable schema={tableSchema} data={this.state.questions.sortBy(qq => qq.get('answerDate')).toJS().reverse()} modifier="data" />; }, renderDeleteButton(question) { if(!question.status) { return <div className="Button Button-small Button-red w100" role="Button" onClick={this.onDelete.bind(null, question)}>Delete</div>; } } }); module.exports = QuestionsTable;