From 905c7c8c791a0f174d6c4961522eb596586c4d2c Mon Sep 17 00:00:00 2001 From: Renard Date: Tue, 1 Oct 2019 15:59:47 -0300 Subject: Modal creación de hilos --- src/App.js | 5 +- src/Board.js | 14 ++- src/NewThread.js | 272 ++++++++++++++++++++++++++++++++++++++++--------------- src/ReplyForm.js | 2 - 4 files changed, 215 insertions(+), 78 deletions(-) diff --git a/src/App.js b/src/App.js index 9fffc93..1f4daa4 100644 --- a/src/App.js +++ b/src/App.js @@ -47,7 +47,10 @@ class App extends Component { dir: "polka", maxsize: 500, name: "Testing field", - postarea_desc: "" + postarea_desc: "", + disable_name: 0, + disable_subject: 0, + allow_spoilers: 0 }; if (localStorage.getItem("thereisnourflevel") === null) { polka = {}; diff --git a/src/Board.js b/src/Board.js index c30844d..6992bd3 100644 --- a/src/Board.js +++ b/src/Board.js @@ -6,10 +6,12 @@ import { Header, Comment, Divider, - Breadcrumb + Breadcrumb, + Button } from "semantic-ui-react"; import { Link } from "@reach/router"; import Post from "./Post"; +import NewThread from "./NewThread"; class Board extends Component { constructor() { super(); @@ -147,8 +149,16 @@ class Board extends Component { dangerouslySetInnerHTML={{ __html: currentBoard.postarea_desc }} >

- Lista de hilos + + + Crear un hilo} + currentBoard={currentBoard} + /> + {threadList.map(thread => ( diff --git a/src/NewThread.js b/src/NewThread.js index c76f515..4452f35 100644 --- a/src/NewThread.js +++ b/src/NewThread.js @@ -1,12 +1,13 @@ import React, { Component } from "react"; import { - Segment, Button, Form, Icon, Checkbox, - Header + Message, + Modal } from "semantic-ui-react"; +import { quotes } from "./Quotes"; class NewThread extends Component { constructor(props) { @@ -18,18 +19,128 @@ class NewThread extends Component { message: "", attachment: "", selectedFile: null, - isSpoiler: false + isSpoiler: false, + submittedName: "", + submittedEmail: "", + submittedMessage: "", + submittedSubject: "", + replyRes: null }; this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handleClick = this.handleClick.bind(this); } handleChange(e) { const { name, value } = e.target; - this.setState({ [name]: value }); + if (name === "hiddenInput") { + let hiddenInput = document.getElementById("hiddenInput"); + if (hiddenInput.files.length === 0) { + this.setState({ selectedFile: null }); + } else { + let file = hiddenInput.files[0].name; + this.setState({ selectedFile: file }); + } + } else { + this.setState({ [name]: value }); + } + } + + handleClick(e) { + e.preventDefault(); + document.getElementById("hiddenInput").click(); + } + handleSubmit() { + const { name, email, message, subject } = this.state; + this.setState( + { + submittedName: name, + submittedEmail: email, + submittedMessage: message, + submittedSubject: subject, + replyRes: null + }, + () => { + var { + submittedName, + submittedEmail, + submittedMessage, + submittedSubject, + selectedFile, + isSpoiler + } = this.state; + const { currentBoard } = this.props; + let password = JSON.parse(localStorage.getItem("settings")) + .postPassword; + let data = { + board: currentBoard.dir, + name: "", + email: "", + fielda: submittedName, + fieldb: submittedEmail, + message: submittedMessage, + subject: submittedSubject, + password: password + }; + + if (selectedFile !== null) { + let file = document.getElementById("hiddenInput").files[0]; + data["file"] = file; + } + + if (currentBoard.allow_spoilers) { + data["spoil"] = isSpoiler; + } + + let userData = { name: name, email: email }; + localStorage.setItem("userData", JSON.stringify(userData)); + + const formData = new FormData(); + for (var key in data) { + formData.append(key, data[key]); + } + + fetch("https://bienvenidoainternet.org/cgi/api/post", { + method: "POST", + mode: "cors", + redirect: "follow", + body: formData + }) + .then(response => { + return response.json(); + }) + .then(resource => { + if (resource.state === "success") { + this.randomQuote = + quotes[Math.floor(Math.random() * quotes.length)]; + this.setState({ + replyRes: resource, + message: "", + selectedFile: null + }); + let ownPosts = JSON.parse(localStorage.getItem("ownPosts")); + if (ownPosts === null) { + ownPosts = {}; + } + // eslint-disable-next-line no-prototype-builtins + if (!ownPosts.hasOwnProperty(currentBoard.dir)) { + ownPosts[currentBoard.dir] = []; + } + ownPosts[currentBoard.dir] = ownPosts[currentBoard.dir].concat({ + thread_id: resource.post_id, + reply_id: resource.post_id + }); + localStorage.setItem("ownPosts", JSON.stringify(ownPosts)); + } else { + this.setState({ replyRes: resource }); + } + }); + } + ); } render() { - const { boardList, dir } = this.props; + const { currentBoard, trigger } = this.props; const { subject, name, @@ -37,84 +148,99 @@ class NewThread extends Component { message, attachment, selectedFile, - isSpoiler + isSpoiler, + replyRes } = this.state; - const currentBoard = boardList.find(board => { - return board.dir === dir; - }); return ( - -
- Crear un nuevo hilo en {currentBoard.name} -
-
- {currentBoard.disable_subject === 0 && ( - - )} - - {currentBoard.disable_name === 0 && ( + + Crear un nuevo hilo en {currentBoard.name} + + {replyRes !== null && + (replyRes.state === "success" ? ( + + Gracias por tu post + {this.randomQuote} +
+ + Nos tomó {replyRes.time_taken} segundos procesar tu mensaje. + +
+ ) : ( + + {replyRes.state} + {replyRes.message} + + ))} + + + {currentBoard.disable_subject === 0 && ( )} - - {currentBoard.allow_image_replies === 1 && ( - - + {currentBoard.disable_name === 0 && ( + - - - {selectedFile === null ? "Adjuntar archivo" : selectedFile} - - - )} -
- - {currentBoard.allow_spoilers === 1 && ( - + {currentBoard.allow_image_replies === 1 && ( + + + + + {selectedFile === null ? "Adjuntar archivo" : selectedFile} + + + )} + + - )} - - -
+ {currentBoard.allow_spoilers === 1 && ( + + )} + + + + ); } } diff --git a/src/ReplyForm.js b/src/ReplyForm.js index bac770e..6e5b810 100644 --- a/src/ReplyForm.js +++ b/src/ReplyForm.js @@ -46,7 +46,6 @@ class ReplyForm extends Component { } handleSubmit() { - console.log("submit event"); const { name, email, message } = this.state; this.setState( { @@ -190,7 +189,6 @@ class ReplyForm extends Component { onChange={this.handleChange} maxLength="50" /> - {/* TODO: Archivos adjuntos */} {currentBoard.allow_image_replies === 1 ? (