Skip to content

Commit 43891f9

Browse files
Merge pull request #133 from Geode-solutions/feat/feedback_store
Feat/feedback store
2 parents e87abff + d5baed7 commit 43891f9

File tree

16 files changed

+130
-116
lines changed

16 files changed

+130
-116
lines changed

components/Errors/Banner.vue renamed to components/FeedBack/ErrorBanner.vue

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template>
22
<v-banner
3-
v-if="server_error"
3+
v-if="feedback_store.server_error"
44
elevation="2"
5-
style="background-color: grey; z-index: 100"
5+
style="background-color: grey; z-index: 9999"
66
position="fixed"
77
>
88
<v-row>
@@ -33,7 +33,7 @@
3333
size="20"
3434
color="grey"
3535
class=".align-center"
36-
@click="errors_store.delete_server_error()"
36+
@click="feedback_store.delete_server_error()"
3737
>
3838
<v-icon icon="mdi-close" size="20" color="white" />
3939
</v-btn>
@@ -43,8 +43,7 @@
4343
</template>
4444

4545
<script setup>
46-
const errors_store = use_errors_store()
47-
const { server_error } = storeToRefs(errors_store)
46+
const feedback_store = use_feedback_store()
4847
4948
function reload() {
5049
window.location.reload()

components/Errors/Snackers.vue renamed to components/FeedBack/Snackers.vue

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
<template>
22
<v-snackbar
3-
v-for="(error, index) in errors"
4-
:key="index"
3+
v-for="(feedback, index) in feedback_store.feedbacks"
4+
:key="feedback"
55
v-model="show"
66
:style="{ 'margin-bottom': calc_margin(index) }"
7-
color="error"
7+
:color="feedback.type"
88
location="bottom right"
99
transition="slide-x-reverse-transition"
10-
max-width="30%"
10+
max-width="200px"
1111
height="20px"
1212
>
1313
<v-row dense class="flex-nowrap">
1414
<v-col cols="auto">
15-
<v-tooltip location="left">
15+
<v-tooltip v-if="feedback.type === 'error'" location="left">
1616
<span>
17-
error: {{ error.code }} {{ error.name }}<br />
18-
ressource: {{ error.route }}
17+
error: {{ feedback.code }} {{ feedback.name }}<br />
18+
ressource: {{ feedback.route }}
1919
<br />
2020
</span>
2121
<template #activator="{ props }">
@@ -24,16 +24,21 @@
2424
</v-icon>
2525
</template>
2626
</v-tooltip>
27+
<v-tooltip v-else-if="feedback.type === 'success'" location="left">
28+
<v-icon color="white" class="justify-right">
29+
mdi-check-circle-outline
30+
</v-icon>
31+
</v-tooltip>
2732
</v-col>
2833
<v-col cols="9" class="text-no-wrap overflow-hidden">
2934
<v-tooltip location="top">
3035
<span>
31-
{{ error.description }}
36+
{{ feedback.description }}
3237
<br />
3338
</span>
3439
<template #activator="{ props }">
3540
<div v-bind="props">
36-
{{ error.description }}
41+
{{ feedback.description }}
3742
</div>
3843
</template>
3944
</v-tooltip>
@@ -44,8 +49,8 @@
4449
icon
4550
variant="flat"
4651
size="20"
47-
color="error"
48-
@click="errors_store.delete_error(index)"
52+
:color="feedback.type"
53+
@click="feedback_store.delete_feedback(index)"
4954
>
5055
<v-icon icon="mdi-close" size="20" color="white" />
5156
</v-btn>
@@ -55,9 +60,7 @@
5560
</template>
5661

5762
<script setup>
58-
const errors_store = use_errors_store()
59-
const { errors } = storeToRefs(errors_store)
60-
63+
const feedback_store = use_feedback_store()
6164
const show = true
6265
6366
function calc_margin(index) {

composables/api_fetch.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ export function api_fetch(
44
{ schema, params },
55
{ request_error_function, response_function, response_error_function } = {},
66
) {
7-
const errors_store = use_errors_store()
7+
const feedback_store = use_feedback_store()
88
const geode_store = use_geode_store()
99

1010
const body = params || {}
1111

1212
const { valid, error } = validate_schema(schema, body)
1313

1414
if (!valid) {
15-
errors_store.add_error({
15+
feedback_store.add_feedback({
16+
type: "error",
1617
code: 400,
1718
route: schema.$id,
1819
name: "Bad request",
@@ -39,7 +40,8 @@ export function api_fetch(
3940
...request_options,
4041
onRequestError({ error }) {
4142
geode_store.stop_request()
42-
errors_store.add_error({
43+
feedback_store.add_feedback({
44+
type: "error",
4345
code: error.code,
4446
route: schema.$id,
4547
name: error.message,
@@ -59,7 +61,8 @@ export function api_fetch(
5961
},
6062
onResponseError({ response }) {
6163
geode_store.stop_request()
62-
errors_store.add_error({
64+
feedback_store.add_feedback({
65+
type: "error",
6366
code: response.status,
6467
route: schema.$id,
6568
name: response._data.name,

composables/upload_file.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ export async function upload_file(
22
{ route, file },
33
{ request_error_function, response_function, response_error_function } = {},
44
) {
5-
const errors_store = use_errors_store()
5+
const feedback_store = use_feedback_store()
66
const geode_store = use_geode_store()
77
if (!(file instanceof File)) {
88
throw new Error("file must be a instance of File")
@@ -22,7 +22,8 @@ export async function upload_file(
2222
...request_options,
2323
onRequestError({ error }) {
2424
geode_store.stop_request()
25-
errors_store.add_error({
25+
feedback_store.add_feedback({
26+
type: "error",
2627
code: error.code,
2728
route: route,
2829
name: error.message,
@@ -42,7 +43,8 @@ export async function upload_file(
4243
},
4344
onResponseError({ response }) {
4445
geode_store.stop_request()
45-
errors_store.add_error({
46+
feedback_store.add_feedback({
47+
type: "error",
4648
code: response.status,
4749
route: route,
4850
name: response._data.name,

composables/viewer_call.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ export function viewer_call(
22
{ schema, params = {} },
33
{ request_error_function, response_function, response_error_function } = {},
44
) {
5-
const errors_store = use_errors_store()
5+
const feedback_store = use_feedback_store()
66
const viewer_store = use_viewer_store()
77

88
const { valid, error } = validate_schema(schema, params)
99

1010
if (!valid) {
11-
errors_store.add_error({
11+
feedback_store.add_feedback({
12+
type: "error",
1213
code: 400,
1314
route: schema.route,
1415
name: "Bad request",
@@ -41,7 +42,8 @@ export function viewer_call(
4142
},
4243
)
4344
.catch((error) => {
44-
errors_store.add_error({
45+
feedback_store.add_feedback({
46+
type: "error",
4547
code: error.code,
4648
route: schema.route,
4749
name: error.message,

stores/errors.js

Lines changed: 0 additions & 17 deletions
This file was deleted.

stores/feedback.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export const use_feedback_store = defineStore("feedback", {
2+
state: () => ({
3+
feedbacks: [],
4+
server_error: false,
5+
}),
6+
actions: {
7+
add_feedback(feedback) {
8+
this.feedbacks.push(feedback)
9+
},
10+
delete_feedback(feedback_index) {
11+
this.feedbacks.splice(feedback_index, 1)
12+
},
13+
delete_server_error() {
14+
this.server_error = false
15+
},
16+
},
17+
})

stores/geode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ export const use_geode_store = defineStore("geode", {
2424
setInterval(() => this.do_ping(), 10 * 1000)
2525
},
2626
async do_ping() {
27-
const errors_store = use_errors_store()
27+
const feedback_store = use_feedback_store()
2828
const { data } = await useFetch(`${this.base_url}/ping`, {
2929
method: "POST",
3030
})
3131
if (data.value !== null) {
3232
this.is_running = true
3333
return
3434
} else {
35-
errors_store.$patch({ server_error: true })
35+
feedback_store.$patch({ server_error: true })
3636
return
3737
}
3838
},

stores/infra.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export const use_infra_store = defineStore("infra", {
6363
async create_backend() {
6464
const geode_store = use_geode_store()
6565
const viewer_store = use_viewer_store()
66-
const errors_store = use_errors_store()
66+
const feedback_store = use_feedback_store()
6767

6868
if (isElectron()) {
6969
await window.electronAPI.run_back(geode_store.PORT)
@@ -87,7 +87,7 @@ export const use_infra_store = defineStore("infra", {
8787
geode_store.$patch({ is_running: true })
8888
return geode_store.ping_task()
8989
} else {
90-
errors_store.server_error = true
90+
feedback_store.server_error = true
9191
}
9292
}
9393
},

test/components/Errors/ErrorsBanner.nuxt.test.js renamed to test/components/FeedBack/ErrorsBanner.nuxt.test.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,41 @@ import { createVuetify } from "vuetify"
66
import * as components from "vuetify/components"
77
import * as directives from "vuetify/directives"
88

9-
import ErrorsBanner from "@/components/Errors/Banner.vue"
9+
import FeedBackErrorBanner from "@/components/FeedBack/ErrorBanner.vue"
1010

1111
const vuetify = createVuetify({
1212
components,
1313
directives,
1414
})
1515

16-
describe("ErrorsBanner.vue", async () => {
16+
describe("FeedBackErrorBanner.vue", async () => {
1717
test(`Test reload`, async () => {
18-
const wrapper = mount(ErrorsBanner, {
18+
const wrapper = mount(FeedBackErrorBanner, {
1919
global: {
2020
plugins: [vuetify],
2121
},
2222
})
2323
const reload_spy = vi.spyOn(wrapper.vm, "reload")
24-
const errors_store = use_errors_store()
25-
await errors_store.$patch({ server_error: true })
26-
expect(errors_store.server_error).toBe(true)
24+
const feedback_store = use_feedback_store()
25+
await feedback_store.$patch({ server_error: true })
26+
expect(feedback_store.server_error).toBe(true)
2727
const v_btn = wrapper.findAll(".v-btn")
2828
await v_btn[0].trigger("click")
2929

3030
expect(reload_spy).toHaveBeenCalledTimes(1)
3131
}),
3232
test(`Test delete error`, async () => {
33-
const wrapper = mount(ErrorsBanner, {
33+
const wrapper = mount(FeedBackErrorBanner, {
3434
global: {
3535
plugins: [vuetify],
3636
},
3737
})
3838

39-
const errors_store = use_errors_store()
40-
await errors_store.$patch({ server_error: true })
41-
expect(errors_store.server_error).toBe(true)
39+
const feedback_store = use_feedback_store()
40+
await feedback_store.$patch({ server_error: true })
41+
expect(feedback_store.server_error).toBe(true)
4242
const v_btn = wrapper.findAll(".v-btn")
4343
await v_btn[1].trigger("click")
44-
expect(errors_store.server_error).toBe(false)
44+
expect(feedback_store.server_error).toBe(false)
4545
})
4646
})

0 commit comments

Comments
 (0)