Skip to content

Commit 10d7343

Browse files
Merge pull request #180 from Geode-solutions/feat/feedbacks_timeout
feat(feedback timeout): auto customisable timeout
2 parents 23df5fa + 457168e commit 10d7343

File tree

5 files changed

+42
-5
lines changed

5 files changed

+42
-5
lines changed

.eslintrc.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = {
77
},
88
extends: [
99
"eslint:recommended",
10-
"plugin:vue/vue3-recommended",
10+
"plugin:vue/recommended",
1111
"plugin:vuetify/recommended",
1212
"plugin:nuxt/recommended",
1313
],

components/FeedBack/Snackers.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
variant="flat"
5252
size="20"
5353
:color="feedback.type"
54-
@click="feedback_store.delete_feedback(index)"
54+
@click="feedback_store.delete_feedback(feedback.id)"
5555
>
5656
<v-icon icon="mdi-close" size="20" color="white" />
5757
</v-btn>

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"eslint-plugin-nuxt": "^4.0.0",
1818
"eslint-plugin-prettier": "^5.1.3",
1919
"eslint-plugin-prettier-vue": "^5.0.0",
20-
"eslint-plugin-vue": "^9.26.0",
20+
"eslint-plugin-vue": "^9.33.0",
2121
"eslint-plugin-vuetify": "^2.4.0",
2222
"happy-dom": "^15.11.7",
2323
"jsdom": "^24.1.3",
@@ -54,6 +54,7 @@
5454
"pinia": "^2.2.2",
5555
"sass": "^1.77.8",
5656
"semver": "^7.6.3",
57+
"uuid": "^11.1.0",
5758
"vue-recaptcha": "^2.0.3",
5859
"vue3-carousel": "^0.3.3"
5960
},

stores/feedback.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
1+
import { v4 as uuidv4 } from "uuid"
2+
13
export const use_feedback_store = defineStore("feedback", {
24
state: () => ({
35
feedbacks: [],
46
server_error: false,
7+
feedbacks_timeout_miliseconds: 5000,
58
}),
69
actions: {
710
async add_error(code, route, name, description) {
11+
const feedbackId = uuidv4()
812
await this.feedbacks.push({
13+
id: feedbackId,
914
type: "error",
1015
code,
1116
route,
1217
name,
1318
description,
1419
})
20+
setTimeout(() => {
21+
this.delete_feedback(feedbackId)
22+
}, this.feedbacks_timeout_miliseconds)
1523
},
1624
async add_success(description) {
25+
const feedbackId = uuidv4()
1726
await this.feedbacks.push({
27+
id: feedbackId,
1828
type: "success",
1929
description,
2030
})
31+
setTimeout(() => {
32+
this.delete_feedback(feedbackId)
33+
}, this.feedbacks_timeout_miliseconds)
2134
},
22-
async delete_feedback(feedback_index) {
23-
await this.feedbacks.splice(feedback_index, 1)
35+
async delete_feedback(feedbackId) {
36+
this.feedbacks = this.feedbacks.filter(
37+
(feedback) => feedback.id !== feedbackId,
38+
)
2439
},
2540
async delete_server_error() {
2641
this.server_error = false

test/stores/Feedback.nuxt.test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,32 @@ describe("Feedback Store", () => {
3434
})
3535
})
3636

37+
describe("add_error", () => {
38+
test("test feedbacks_timeout", () => {
39+
feedback_store.feedbacks_timeout_miliseconds = 500
40+
feedback_store.add_error(
41+
500,
42+
"/test",
43+
"test message",
44+
"test description",
45+
)
46+
expect(feedback_store.feedbacks.length).toBe(1)
47+
setTimeout(() => {
48+
expect(feedback_store.feedbacks.length).toBe(0)
49+
}, 1000)
50+
})
51+
})
52+
3753
describe("add_success", () => {
3854
test("test add_success", () => {
55+
feedback_store.feedbacks_timeout_miliseconds = 500
3956
feedback_store.add_success("test description")
4057
expect(feedback_store.feedbacks.length).toBe(1)
4158
expect(feedback_store.feedbacks[0].type).toBe("success")
59+
60+
setTimeout(() => {
61+
expect(feedback_store.feedbacks.length).toBe(0)
62+
}, 1000)
4263
})
4364
})
4465
describe("delete_feedback", () => {

0 commit comments

Comments
 (0)