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