trc-client-core
Version:
The core of the TRC Client
98 lines (93 loc) • 3.65 kB
JSX
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 & 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;