]> git.somenet.org - pub/jan/aic18.git/blob - service-website/src/components/SentimentAnalysis.js
Add place holder PDF link
[pub/jan/aic18.git] / service-website / src / components / SentimentAnalysis.js
1 import React, {Component} from "react";
2 import SearchTermsInput from "./SearchTermsInput";
3 import {Map} from "immutable";
4 import axios from "axios";
5
6 class SentimentAnalysis extends Component {
7     constructor(props, context) {
8         super(props, context);
9         this.state = {
10             terms: new Map().set(0, ''),
11             nextTermId: 1,
12             pdfLink: null,
13         };
14         this.handleSubmit = this.handleSubmit.bind(this);
15         this.handleTermChange = this.handleTermChange.bind(this);
16         this.handleAddTerm = this.handleAddTerm.bind(this);
17         this.handleRemoveTerm = this.handleRemoveTerm.bind(this);
18         this.addEmptyTerm = this.addEmptyTerm.bind(this);
19         this.emptyTerms = this.emptyTerms.bind(this);
20         this.createPdf = this.createPdf.bind(this);
21     }
22
23     handleSubmit(event) {
24         event.preventDefault();
25         const target = event.target;
26         console.log(target);
27         const terms = this.state.terms;
28         terms.forEach((term) => {
29             console.log(term);
30         });
31         this.createPdf();
32         this.emptyTerms();
33     }
34
35     handleTermChange(id, value) {
36         const terms = this.state.terms;
37         this.setState({
38             terms: terms.set(id, value),
39         });
40     }
41
42     handleAddTerm(event) {
43         this.addEmptyTerm();
44     }
45
46     handleRemoveTerm(id) {
47         const terms = this.state.terms;
48         this.setState({
49             terms: terms.delete(id),
50         });
51     }
52
53     addEmptyTerm() {
54         const terms = this.state.terms;
55         const termId = this.state.nextTermId;
56         this.setState({
57             terms: terms.set(termId, ''),
58             nextTermId: termId + 1,
59         });
60     }
61
62     emptyTerms() {
63         this.setState({
64             terms: new Map().set(0, ''),
65             nextTermId: 1,
66         });
67     }
68
69     createPdf() {
70         axios
71             .post('https://jsonplaceholder.typicode.com/posts', {
72                 title: 'foo',
73                 body: 'bar',
74                 userId: 1,
75             })
76             .then(response => {
77                 const data = response.data;
78                 console.log(data);
79                 this.setState({
80                     pdfLink: 'https://google.at',
81                 });
82             })
83             .catch(error => {
84                 console.log(error);
85             });
86     }
87
88     renderPdf() {
89         const pdfLink = this.state.pdfLink;
90         if (pdfLink) {
91             return (
92                 <div className="pdf-report">
93                     <a href={pdfLink} target="_blank" rel="noopener noreferrer">Download PDF report</a>
94                 </div>
95             );
96         } else {
97             return null;
98         }
99     }
100
101     render() {
102         return (
103             <div className="sentiment-analysis">
104                 <form onSubmit={this.handleSubmit}>
105                     <label>Search Terms</label>
106                     <SearchTermsInput terms={this.state.terms}
107                                       onTermChange={this.handleTermChange}
108                                       onAddTerm={this.handleAddTerm}
109                                       onRemoveTerm={this.handleRemoveTerm}/>
110                     <input type="submit" value="Submit"/>
111                 </form>
112                 {this.renderPdf()}
113             </div>
114         );
115     }
116 }
117
118 SentimentAnalysis.propTypes = {};
119
120 export default SentimentAnalysis;