From c3b5991dc7130bb3905a176d71c92759e73b7634 Mon Sep 17 00:00:00 2001 From: Amir Raminfar Date: Wed, 27 Sep 2023 13:29:33 -0700 Subject: [PATCH] feat: implements a toast for alerting errors and other useful information (#2395) * feat: implements a toast for alerting errors and other useful information * removes unused code --- assets/auto-imports.d.ts | 3 +++ assets/composables/toast.ts | 29 +++++++++++++++++++++++++++++ assets/layouts/default.vue | 33 +++++++++++++++++++++++---------- assets/main.css | 2 ++ assets/modules/i18n.ts | 28 ++++++++++++++-------------- assets/stores/container.ts | 16 ++++++++++++++++ locales/en.yml | 9 ++++++++- package.json | 2 +- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 9 files changed, 114 insertions(+), 44 deletions(-) create mode 100644 assets/composables/toast.ts diff --git a/assets/auto-imports.d.ts b/assets/auto-imports.d.ts index 3a913844..997786d4 100644 --- a/assets/auto-imports.d.ts +++ b/assets/auto-imports.d.ts @@ -320,6 +320,7 @@ declare global { const useTitle: typeof import('@vueuse/core')['useTitle'] const useToNumber: typeof import('@vueuse/core')['useToNumber'] const useToString: typeof import('@vueuse/core')['useToString'] + const useToast: typeof import('./composables/toast')['useToast'] const useToggle: typeof import('@vueuse/core')['useToggle'] const useTransition: typeof import('@vueuse/core')['useTransition'] const useTrunc: typeof import('@vueuse/math')['useTrunc'] @@ -662,6 +663,7 @@ declare module 'vue' { readonly useTitle: UnwrapRef readonly useToNumber: UnwrapRef readonly useToString: UnwrapRef + readonly useToast: UnwrapRef readonly useToggle: UnwrapRef readonly useTransition: UnwrapRef readonly useUrlSearchParams: UnwrapRef @@ -997,6 +999,7 @@ declare module '@vue/runtime-core' { readonly useTitle: UnwrapRef readonly useToNumber: UnwrapRef readonly useToString: UnwrapRef + readonly useToast: UnwrapRef readonly useToggle: UnwrapRef readonly useTransition: UnwrapRef readonly useUrlSearchParams: UnwrapRef diff --git a/assets/composables/toast.ts b/assets/composables/toast.ts new file mode 100644 index 00000000..cd7fe832 --- /dev/null +++ b/assets/composables/toast.ts @@ -0,0 +1,29 @@ +type Toast = { + id: number; + createdAt: Date; + message: string; + type: "success" | "error" | "warning" | "info"; +}; + +const toasts = ref([]); + +const showToast = (message: string, type: Toast["type"]) => { + toasts.value.push({ + id: Date.now(), + createdAt: new Date(), + message, + type, + }); +}; + +const removeToast = (id: Toast["id"]) => { + toasts.value = toasts.value.filter((toast) => toast.id !== id); +}; + +export const useToast = () => { + return { + toasts, + showToast, + removeToast, + }; +}; diff --git a/assets/layouts/default.vue b/assets/layouts/default.vue index 44653fff..55eaca9f 100644 --- a/assets/layouts/default.vue +++ b/assets/layouts/default.vue @@ -24,15 +24,15 @@ - + + + + +
+
+ {{ toast.message }} +
+ +
+
+