var React = require('react') var Markdown = require('markdown.jsx') var Icon = require('icon.jsx') var Link = require('react-router').Link var Clock = require('clock.jsx') var UserID = require('userID.jsx') var { Error } = require('status-components.jsx') var Comments = require('comment.jsx').Comments module.exports = React.createClass({ getInitialState () { return { loading: true } }, componentDidMount () { if (this.props.api) { this.props.api.getEventEmitter().on('init', (err, limited) => { if (!err || limited) this.init(this.props) }) if (this.props.api.isInit || this.props.api.limited) this.init(this.props) } }, componentWillReceiveProps (props) { this.init(props) }, init (props) { var boards = props.api if (!boards) return this.setState({ error: 'Could not connect to IPFS' }) this.setState({ loading: true, userid: boards.getMyID() }) boards.downloadPost(props.hash, props.adminID, props.board, (err, hash, date, post) => { this.setState({ error: err, post: post, loading: false }) }) }, postLink () { if (this.state.post.op) { if (this.props.board) { return '/@' + this.state.post.op + '/' + this.props.board + '/' + this.props.hash } else { return '/@' + this.state.post.op + '/post/' + this.props.hash } } else { return '/post/' + this.props.hash } }, editorLink () { if (this.state.post.op === this.state.userid) { var board = this.props.board || this.state.post.board if (board) { var url = '/edit/board/' + board + '/post/' + this.props.hash return <Link to={url} className="nounderline"> <Icon name="edit" className="not-first"/> Edit </Link> } else { return <span/> } } else return <span/> }, getContent () { if (this.state.error) { return <Error className="content" error={this.state.error} /> } else if (this.state.loading) { return <div className="text-center"> <div className="center-block" style={{marginTop: '1em'}}> <Icon className="center-block fa-spin fa-2x light" name="refresh" /> </div> <h5>Downloading Post</h5> </div> } else { return <div className="content"> { this.state.post.title ? <div><h5>{this.state.post.title}</h5><hr/></div> : <div /> } <Markdown source={this.state.post.text} /><hr/> <div className="icons"> <UserID id={this.state.post.op} api={this.props.api} ></UserID> <Clock className="not-first" date={this.state.post.date} /> <Icon name="comments" className="not-first" /> <Link className="nounderline" to={this.postLink()}>View</Link> {this.editorLink()} </div> </div> } }, render () { return <div> <div className="post">{this.getContent()}</div> <Comments parent={this.props.hash} post={this.props.hash} api={this.props.api} adminID={this.props.adminID} board={this.props.board} /> </div> } })