import React, { Component } from "react" import styled from "styled-components" import "bootstrap/dist/css/bootstrap.min.css" import Row from "react-bootstrap/Row" import Col from "react-bootstrap/Col" import Button from "react-bootstrap/Button" import AlertBS from "react-bootstrap/Alert" import InputGroup from "react-bootstrap/InputGroup" import FormControl from "react-bootstrap/FormControl" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faPaperPlane } from "@fortawesome/free-solid-svg-icons" import { faSpinner } from "@fortawesome/free-solid-svg-icons" import OpenblocLogo from "./openbloc-logo.png" const EmailInput = styled(FormControl)` border-radius: 22px; font-weight: 700; transition: 0.3s ease-in-out !important; ` const SubmitButton = styled(Button)` color: #ffffff; background: #df4c16; border-color: #df4c16; border-radius: 22px; font-weight: 700; transition: 0.3s ease-in-out !important; &:hover { background: #e95620; border-color: #df4c16; } ` const Form = styled.form` margin-bottom: 2em; ` const CenteredCol = styled(Col)` display: flex; justify-content: center; align-items: center; ` const A = styled.a` color: #fff; ` const Alert = styled(AlertBS)` border-radius: 22px; ` export class TopButtonContent extends Component { constructor() { super() this.state = {email: '', waiting:false, status: null} } submitForm(event) { event.preventDefault() this.setState({waiting: true}) const data = { email: this.state.email, emailType: "subscribe", labels: [], } const url = "https://blog.openbloc.com/members/api/send-magic-link/" fetch(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(data), }).then(response => { this.setState({waiting: false, status: response.status}) }) } emailChanged(event) { this.setState({ email: event.target.value }) } render() { return ( <div style={{ padding: "18px", maxWidth: "500px" }}> <h3 className="font-weight-bold">map33.js is a JavaScript library to build 3D maps</h3> <p className="my-4"> Made by Openbloc with three.js </p> <p className="my-4"> Subscribe to get the latest news! </p> <Form id="subscribe-form" className="mailing-list my-4" onSubmit={this.submitForm.bind(this)} > <InputGroup className="mb-3"> <EmailInput type="email" name="email" required="required" placeholder="Email" value={this.state.email} onChange={this.emailChanged.bind(this)} /> <InputGroup.Append> <SubmitButton id="subscribe-button" type="submit"> <FontAwesomeIcon icon={this.state.waiting ? faSpinner : faPaperPlane} size="lg" className="mr-2" spin={this.state.waiting} /> </SubmitButton> </InputGroup.Append> </InputGroup> <Alert id="subscribe-success" variant={"success"} className={this.state.result < 300 ? "" : "d-none"} > <strong>Great!</strong> Check your inbox and click the link to confirm your subscription. </Alert> <Alert id="subscribe-error" variant={"danger"} className={this.state.result >= 500 ? "" : "d-none"} > <strong>Oops...</strong> An error occurred. </Alert> </Form> <Row> <CenteredCol> <A href="https://www.openbloc.com" target="_blank"> Homepage </A> </CenteredCol> <CenteredCol> <img src={OpenblocLogo} alt="Openbloc logo"></img> </CenteredCol> <CenteredCol> <A href="https://blog.openbloc.com" target="_blank"> Blog </A> </CenteredCol> </Row> </div> ) } }