1818 />
1919 </b-input-group >
2020 <b-input-group prepend =" from" class =" pt-1" >
21- <b-input />
21+ <b-input
22+ v-model =" fromNumber"
23+ placeholder =" optional"
24+ />
2225 </b-input-group >
2326 <b-input-group prepend =" to" class =" pt-1" >
24- <b-input />
27+ <b-input
28+ v-model =" toNumber"
29+ placeholder =" optional"
30+ />
2531 </b-input-group >
2632 </b-form-group >
2733
28- <b-button type =" submit" variant =" primary" >
29- Submit
30- </b-button >
34+ <b-row align-h =" center" >
35+ <b-col md =" 6" sm =" 12" >
36+ <b-button block type =" submit" variant =" primary" >
37+ Submit
38+ </b-button >
39+ </b-col >
40+ </b-row >
3141 </b-form >
42+
43+ <b-row align-h =" center" class =" pt-4" v-if =" fetching" >
44+ <b-spinner />
45+ </b-row >
46+
47+ <b-container class =" mt-2 mb-2" v-else-if =" answer" >
48+ <b-row align-h =" center" >
49+ <h4 >Answer</h4 >
50+ </b-row >
51+ <b-row align-h =" center" >
52+ <b-img id =" answer-img" :src =" answer" />
53+ </b-row >
54+ </b-container >
55+
56+ <b-row align-h =" center" class =" p-2" v-else-if =" error" >
57+ Something went wrong...
58+ </b-row >
3259</b-container >
3360</template >
3461
3562<script >
3663export default {
3764 methods: {
38- onSubmit (event ) {
65+ async onSubmit (event ) {
3966 event .preventDefault ()
40- console .log (this .integratingFunction )
67+ const apiRoot = process .env .API_ROOT
68+ const apiEndpointUrl = new URL (` ${ apiRoot} /simple` )
69+ let requestString = ` integrate ${ this .integratingFunction } d${ this .independentVariable } `
70+ if (this .fromNumber .length > 0 ) {
71+ requestString += ` from ${ this .fromNumber } `
72+ }
73+ if (this .toNumber .length > 0 ) {
74+ requestString += ` to ${ this .toNumber } `
75+ }
76+ const params = {
77+ ' request' : requestString
78+ }
79+ apiEndpointUrl .search = new URLSearchParams (params)
80+ this .fetching = true
81+ const response = await fetch (apiEndpointUrl)
82+ if (response .status !== 200 ) {
83+ this .error = true
84+ this .answer = null
85+ } else {
86+ this .error = false
87+ const reader = new FileReader ()
88+ reader .onload = e => {
89+ this .answer = e .target .result
90+ }
91+ reader .readAsDataURL (await response .blob ())
92+ }
93+ this .fetching = false
4194 }
4295 },
4396 data () {
4497 return {
4598 integratingFunction: ' x^2' ,
46- independentVariable: ' x'
99+ independentVariable: ' x' ,
100+ fromNumber: ' ' ,
101+ toNumber: ' ' ,
102+ answer: null ,
103+ fetching: false ,
104+ error: false
47105 }
48106 }
49107}
@@ -53,4 +111,9 @@ export default {
53111.input-group-text {
54112 width : 110px ;
55113}
114+
115+ #answer-img {
116+ max-width : 100% ;
117+ width : auto ;
118+ }
56119 </style >
0 commit comments