Skip to content

Commit ab84d4d

Browse files
Integral view implementation
1 parent 75998ad commit ab84d4d

File tree

1 file changed

+71
-8
lines changed

1 file changed

+71
-8
lines changed

web_site/frontend/src/components/pages/Integral.vue

Lines changed: 71 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,90 @@
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>
3663
export 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

Comments
 (0)