aboutsummaryrefslogtreecommitdiff
path: root/src/Thread.js
diff options
context:
space:
mode:
authorLibravatar Renard 2019-09-15 20:52:10 -0300
committerLibravatar Renard 2019-09-15 20:52:10 -0300
commit4a39a75a5a8beda6b28b311c78990d72f1cfe7cf (patch)
treec4ee1daf161604637961a5bc86690ade32a0e484 /src/Thread.js
parent674880a5376e759c149d7aa6cb4ccbc8247cbd94 (diff)
downloadbai-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.js95
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