]> git.somenet.org - pub/jan/aic18.git/blob - service-website/src/components/SentimentAnalysis.js
Remove old pdf link after submitting new terms
[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.handleReset = this.handleReset.bind(this);
22         this.addEmptyTerm = this.addEmptyTerm.bind(this);
23         this.emptyTerms = this.emptyTerms.bind(this);
24         this.getNonEmptyTerms = this.getNonEmptyTerms.bind(this);
25         this.createPdf = this.createPdf.bind(this);
26         this.setPdfLink = this.setPdfLink.bind(this);
27         this.camundaService = new CamundaService(this.setPdfLink);
28     }
29
30     handleSubmit(event) {
31         event.preventDefault();
32         this.setState({
33             pdfLink: null,
34             isLoading: true,
35         }, () => {
36             this.createPdf();
37             this.emptyTerms();
38         });
39     }
40
41     handleTermChange(id, value) {
42         const terms = this.state.terms;
43         this.setState({
44             terms: terms.set(id, value),
45         });
46     }
47
48     handleAddTerm(event) {
49         this.addEmptyTerm();
50     }
51
52     handleRemoveTerm(id) {
53         const terms = this.state.terms;
54         this.setState({
55             terms: terms.delete(id),
56         });
57     }
58
59     handleReset(event) {
60         this.setState({
61             terms: new Map().set(0, ''),
62             nextTermId: 1,
63             pdfLink: null,
64             isLoading: false,
65         });
66     }
67
68     addEmptyTerm() {
69         const terms = this.state.terms;
70         const termId = this.state.nextTermId;
71         this.setState({
72             terms: terms.set(termId, ''),
73             nextTermId: termId + 1,
74         });
75     }
76
77     emptyTerms() {
78         this.setState({
79             terms: new Map().set(0, ''),
80             nextTermId: 1,
81         });
82     }
83
84     getNonEmptyTerms() {
85         const terms = this.state.terms;
86         return terms.filter((value, key) => value.trim() !== '');
87     }
88
89     createPdf() {
90         const terms = this.getNonEmptyTerms();
91         if (terms.size > 0) {
92             this.camundaService.submitPdfForm(terms);
93         }
94     }
95
96     setPdfLink(url) {
97         this.setState({
98             pdfLink: url,
99             isLoading: false,
100         });
101     }
102
103     render() {
104         return (
105             <div className="sentiment-analysis">
106                 <Columns>
107                     <Columns.Column>
108                         <form onSubmit={this.handleSubmit}>
109                             <Heading size={3} id="headerMargin">Search Terms:</Heading>
110                             <SearchTermsInput terms={this.state.terms}
111                                               onTermChange={this.handleTermChange}
112                                               onAddTerm={this.handleAddTerm}
113                                               onRemoveTerm={this.handleRemoveTerm}/>
114                             <Form.Field kind="group">
115                                 <p className="control">
116                                     <Button color="info" type="submit" value="Submit">Submit</Button>
117                                 </p>
118                                 <p className="control">
119                                     <Button value="Reset" onClick={this.handleReset}>Reset</Button>
120                                 </p>
121                             </Form.Field>
122                         </form>
123                     </Columns.Column>
124                     <Columns.Column>
125                         <PdfReport pdfLink={this.state.pdfLink} loading={this.state.isLoading}/>
126                     </Columns.Column>
127                 </Columns>
128             </div>
129         );
130     }
131 }
132
133 SentimentAnalysis.propTypes = {};
134
135 export default SentimentAnalysis;