From 8767e5aacccf1b6242255da1ea0aca70524e7509 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 14 Apr 2025 10:23:56 +0200 Subject: [PATCH 1/5] feat(feedback timeout): auto customisable timeout --- stores/feedback.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/stores/feedback.js b/stores/feedback.js index c54e019b..0bea6c86 100644 --- a/stores/feedback.js +++ b/stores/feedback.js @@ -2,6 +2,7 @@ export const use_feedback_store = defineStore("feedback", { state: () => ({ feedbacks: [], server_error: false, + feedbacks_timeout_miliseconds: 5000, }), actions: { async add_error(code, route, name, description) { @@ -12,12 +13,20 @@ export const use_feedback_store = defineStore("feedback", { name, description, }) + const feedback_index = this.feedbacks.length - 1 + setTimeout(() => { + this.delete_feedback(feedback_index) + }, this.feedbacks_timeout_miliseconds) }, async add_success(description) { await this.feedbacks.push({ type: "success", description, }) + const feedback_index = this.feedbacks.length - 1 + setTimeout(() => { + this.delete_feedback(feedback_index) + }, this.feedbacks_timeout_miliseconds) }, async delete_feedback(feedback_index) { await this.feedbacks.splice(feedback_index, 1) From 442931914b853b798c7d50c734edec3d702f4c4e Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 14:59:30 +0200 Subject: [PATCH 2/5] fix(feddbackId): add id for callback feedback delete --- components/FeedBack/Snackers.vue | 2 +- package.json | 1 + stores/feedback.js | 18 ++++++++++++------ test/stores/Feedback.nuxt.test.js | 21 +++++++++++++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/components/FeedBack/Snackers.vue b/components/FeedBack/Snackers.vue index 881e7752..a1343f85 100644 --- a/components/FeedBack/Snackers.vue +++ b/components/FeedBack/Snackers.vue @@ -51,7 +51,7 @@ variant="flat" size="20" :color="feedback.type" - @click="feedback_store.delete_feedback(index)" + @click="feedback_store.delete_feedback(feedback.id)" > diff --git a/package.json b/package.json index 677d1eed..da9d38aa 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "pinia": "^2.2.2", "sass": "^1.77.8", "semver": "^7.6.3", + "uuid": "^11.1.0", "vue-recaptcha": "^2.0.3", "vue3-carousel": "^0.3.3" }, diff --git a/stores/feedback.js b/stores/feedback.js index 0bea6c86..c8f2d8a3 100644 --- a/stores/feedback.js +++ b/stores/feedback.js @@ -1,3 +1,5 @@ +import { v4 as uuidv4 } from "uuid" + export const use_feedback_store = defineStore("feedback", { state: () => ({ feedbacks: [], @@ -6,30 +8,34 @@ export const use_feedback_store = defineStore("feedback", { }), actions: { async add_error(code, route, name, description) { + const feedbackId = uuidv4() await this.feedbacks.push({ + id: feedbackId, type: "error", code, route, name, description, }) - const feedback_index = this.feedbacks.length - 1 setTimeout(() => { - this.delete_feedback(feedback_index) + this.delete_feedback(feedbackId) }, this.feedbacks_timeout_miliseconds) }, async add_success(description) { + const feedbackId = uuidv4() await this.feedbacks.push({ + id: feedbackId, type: "success", description, }) - const feedback_index = this.feedbacks.length - 1 setTimeout(() => { - this.delete_feedback(feedback_index) + this.delete_feedback(feedbackId) }, this.feedbacks_timeout_miliseconds) }, - async delete_feedback(feedback_index) { - await this.feedbacks.splice(feedback_index, 1) + async delete_feedback(feedbackId) { + this.feedbacks = this.feedbacks.filter( + (feedback) => feedback.id !== feedbackId, + ) }, async delete_server_error() { this.server_error = false diff --git a/test/stores/Feedback.nuxt.test.js b/test/stores/Feedback.nuxt.test.js index fb5fc90b..2570dbf6 100644 --- a/test/stores/Feedback.nuxt.test.js +++ b/test/stores/Feedback.nuxt.test.js @@ -34,11 +34,32 @@ describe("Feedback Store", () => { }) }) + describe("add_error", () => { + test("test feedbacks_timeout", () => { + feedback_store.feedbacks_timeout_miliseconds = 500 + feedback_store.add_error( + 500, + "/test", + "test message", + "test description", + ) + expect(feedback_store.feedbacks.length).toBe(1) + setTimeout(() => { + expect(feedback_store.feedbacks.length).toBe(0) + }, 1000) + }) + }) + describe("add_success", () => { test("test add_success", () => { + feedback_store.feedbacks_timeout_miliseconds = 500 feedback_store.add_success("test description") expect(feedback_store.feedbacks.length).toBe(1) expect(feedback_store.feedbacks[0].type).toBe("success") + + setTimeout(() => { + expect(feedback_store.feedbacks.length).toBe(0) + }, 1000) }) }) describe("delete_feedback", () => { From 970aa995899e5f7f802b3347ca9c6a0139caafc2 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 15:06:59 +0200 Subject: [PATCH 3/5] test eslint-plugin-vue 9.33.0" --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index da9d38aa..bb0b198d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "eslint-plugin-nuxt": "^4.0.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier-vue": "^5.0.0", - "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-vue": "^9.33.0", "eslint-plugin-vuetify": "^2.4.0", "happy-dom": "^15.11.7", "jsdom": "^24.1.3", @@ -75,4 +75,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file From 59b31ae6afbfc87086633ff2e1c9a8693b212d10 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:07:20 +0000 Subject: [PATCH 4/5] Apply prepare changes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb0b198d..dca5f599 100644 --- a/package.json +++ b/package.json @@ -75,4 +75,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} From 457168eef1d01c9cce83cd78c78a316dabc38be5 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:18:54 +0000 Subject: [PATCH 5/5] Apply prepare changes --- .eslintrc.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 9f950f6f..ec5fbe65 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -7,7 +7,7 @@ module.exports = { }, extends: [ "eslint:recommended", - "plugin:vue/vue3-recommended", + "plugin:vue/recommended", "plugin:vuetify/recommended", "plugin:nuxt/recommended", ],