]> git.somenet.org - pub/jan/aic18.git/blob - service-website/src/components/SentimentAnalysis.js
Minor code cleanup, added prop types
[pub/jan/aic18.git] / service-website / src / components / SentimentAnalysis.js
1 import React, {Component} from "react";
2 import {Map} from "immutable";
3 import PdfReport from "./PdfReport";
4 import SearchTermsInput from "./SearchTermsInput";
5 import CamundaService from "../services/CamundaService";
6 import {Button, Heading, Form, Columns} from "react-bulma-components/full";
7
8 class SentimentAnalysis extends Component {
9     constructor(props, context) {
10         super(props, context);
11         this.state = {
12             terms: new Map().set(0, ''),
13             nextTermId: 1,
14             pdfLink: null,
15             isLoading: false,
16         };
17         this.handleSubmit = this.handleSubmit.bind(this);
18         this.handleTermChange = this.handleTermChange.bind(this);
19         this.handleAddTerm = this.handleAddTerm.bind(this);
20         this.handleRemoveTerm = this.handleRemoveTerm.bind(this);
21         this.addEmptyTerm = this.addEmptyTerm.bind(this);
22         this.emptyTerms = this.emptyTerms.bind(this);
23         this.getNonEmptyTerms = this.getNonEmptyTerms.bind(this);
24         this.createPdf = this.createPdf.bind(this);
25         this.setPdfLink = this.setPdfLink.bind(this);
26         this.camundaService = new CamundaService(this.setPdfLink);
27     }
28
29     handleSubmit(event) {
30         event.preventDefault();
31         const target = event.target;
32         console.log(target);
33         const terms = this.state.terms;
34         terms.forEach((term) => {
35             console.log(term);
36         });
37         this.setState({
38             isLoading: true,
39         });
40         this.createPdf();
41         this.emptyTerms();
42     }
43
44     handleTermChange(id, value) {
45         const terms = this.state.terms;
46         this.setState({
47             terms: terms.set(id, value),
48         });
49     }
50
51     handleAddTerm(event) {
52         this.addEmptyTerm();
53     }
54
55     handleRemoveTerm(id) {
56         const terms = this.state.terms;
57         this.setState({
58             terms: terms.delete(id),
59         });
60     }
61
62     addEmptyTerm() {
63         const terms = this.state.terms;
64         const termId = this.state.nextTermId;
65         this.setState({
66             terms: terms.set(termId, ''),
67             nextTermId: termId + 1,
68         });
69     }
70
71     emptyTerms() {
72         this.setState({
73             terms: new Map().set(0, ''),
74             nextTermId: 1,
75         });
76     }
77
78     getNonEmptyTerms() {
79         const terms = this.state.terms;
80         return terms.filter((value, key) => value.trim() !== '');
81     }
82
83     createPdf() {
84         const terms = this.getNonEmptyTerms();
85         if (terms.size > 0) {
86             this.camundaService.submitPdfForm(terms);
87         }
88     }
89
90     setPdfLink(url) {
91         this.setState({
92             pdfLink: url,
93         });
94     }
95
96     render() {
97         return (
98             <div className="sentiment-analysis">
99                 <Columns>
100                     <Columns.Column>
101                         <form onSubmit={this.handleSubmit}>
102                             <Heading size={3} id="headerMargin">Search Terms:</Heading>
103                             <SearchTermsInput terms={this.state.terms}
104                                               onTermChange={this.handleTermChange}
105                                               onAddTerm={this.handleAddTerm}
106                                               onRemoveTerm={this.handleRemoveTerm}/>
107                             <Form.Field kind="group">
108                                 <p className="control">
109                                     <Button color="info" type="submit" value="Submit">Submit</Button>
110                                 </p>
111                                 <p className="control">
112                                     <Button value="Reset" onClick={this.emptyTerms}>Reset</Button>
113                                 </p>
114                             </Form.Field>
115                         </form>
116                     </Columns.Column>
117                     <Columns.Column>
118                         <PdfReport pdfLink={this.state.pdfLink} loading={this.state.isLoading}/>
119                     </Columns.Column>
120                 </Columns>
121             </div>
122         );
123     }
124 }
125
126 SentimentAnalysis.propTypes = {};
127
128 export default SentimentAnalysis;