diff options
author | Renard | 2019-09-15 20:52:10 -0300 |
---|---|---|
committer | Renard | 2019-09-15 20:52:10 -0300 |
commit | 4a39a75a5a8beda6b28b311c78990d72f1cfe7cf (patch) | |
tree | c4ee1daf161604637961a5bc86690ade32a0e484 /src/Thread.js | |
parent | 674880a5376e759c149d7aa6cb4ccbc8247cbd94 (diff) | |
download | bai-client-4a39a75a5a8beda6b28b311c78990d72f1cfe7cf.tar.gz bai-client-4a39a75a5a8beda6b28b311c78990d72f1cfe7cf.tar.xz bai-client-4a39a75a5a8beda6b28b311c78990d72f1cfe7cf.zip |
Refractor BBSThread
Diffstat (limited to 'src/Thread.js')
-rw-r--r-- | src/Thread.js | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/Thread.js b/src/Thread.js new file mode 100644 index 0000000..eb9d63a --- /dev/null +++ b/src/Thread.js @@ -0,0 +1,95 @@ +import React, { Component } from "react"; +import { Header, Icon, Loader, Message, Segment, Comment } from "semantic-ui-react"; +import Moment from "react-moment"; +import "moment/locale/es"; +import Post from "./Post"; +import ReplyForm from "./ReplyForm"; + +class Thread extends Component { + constructor(props) { + super(props); + this.state = { + isLoading: true, + thread: [], + error: null + } + } + + componentDidMount() { + + let apiURl; + if (this.props.id > 1000000) { + apiURl = `https://bienvenidoainternet.org/cgi/api/thread?dir=${this.props.dir}&ts=${this.props.id}`; + } else { + apiURl = `https://bienvenidoainternet.org/cgi/api/thread?dir=${this.props.dir}&id=${this.props.id}`; + } + console.log(apiURl); + fetch(apiURl) + .then((response) => { return response.json() }) + .then((resource => { + if (resource["state"] === "error") { + console.log("API Error:" + resource["message"]); + this.setState({ error: resource }); + } + this.setState({ isLoading: false, thread: resource }); + })) + .catch(console.error); + } + render() { + const { isLoading, error } = this.state; + + if (isLoading) { + return ( + <Loader active centered="true"> + Cargando ... + </Loader > + ) + } + + if (error != null) { + return ( + <div> + <Message negative> + <Message.Header>API Status: {error.state}</Message.Header> + <p>{error.message}</p> + </Message> + </div> + ); + } + + const { posts, subject, timestamp, total_replies, locked, id } = this.state.thread; + + return ( + <div> + <Header as="h2"> + <Header.Content className="postMessage"> + {subject}{locked ? <Icon name='lock' /> : null} + </Header.Content> + + <Header.Subheader> + + Creado <Moment fromNow unix locale="es" date={timestamp} /><br /> + {total_replies} respuestas<br /> + + </Header.Subheader> + </Header> + + <Comment.Group> + {posts.map((post, index) => + post.IS_DELETED === 0 ? + (<Post key={index} index={index} post={post} locked={locked} dir={this.props.dir} threadId={id} />) : + (<Segment secondary> + #{index} Eliminado <Moment fromNow unix locale="es" date={post.timestamp} /> + </Segment>) + ) + } + </Comment.Group> + + <ReplyForm dir={this.props.dir} parent={id} /> + + <a href={`https://bienvenidoainternet.org/cgi/api/thread?dir=${this.props.dir}&id=${this.props.id}`}>API Link</a> + </div>); + } +} + +export default Thread;
\ No newline at end of file |