From f69d3f00b12cd630e652c845bb536328552ec9f4 Mon Sep 17 00:00:00 2001 From: premsgr77 Date: Wed, 28 May 2025 17:51:55 +0545 Subject: [PATCH] feat: display notification for invitation events --- packages/vue/src/locales/en/account.json | 6 ++ packages/vue/src/locales/fr/account.json | 6 ++ packages/vue/src/views/Invitations/Index.vue | 79 +++++++++++++------ .../views/Invitations/_components/Form.vue | 20 +---- .../_components/InvitationModal.vue | 14 +++- 5 files changed, 81 insertions(+), 44 deletions(-) diff --git a/packages/vue/src/locales/en/account.json b/packages/vue/src/locales/en/account.json index 7dcc847c..8d1a23d9 100644 --- a/packages/vue/src/locales/en/account.json +++ b/packages/vue/src/locales/en/account.json @@ -23,6 +23,12 @@ "role": "Please select a role" } }, + "messages": { + "created": "Invitation sent to {email}.", + "deleted": "Invitation deleted for {email}.", + "resend": "Invitation resent to {email}.", + "revoked": "Invitation revoked for {email}." + }, "modal": { "title": "Invite an user" }, diff --git a/packages/vue/src/locales/fr/account.json b/packages/vue/src/locales/fr/account.json index 686e1690..55f6c343 100644 --- a/packages/vue/src/locales/fr/account.json +++ b/packages/vue/src/locales/fr/account.json @@ -23,6 +23,12 @@ "role": "Veuillez sélectionner un rôle" } }, + "messages": { + "created": "Invitation envoyée à {email}.", + "deleted": "Invitation supprimée pour {email}.", + "resend": "Invitation renvoyée à {email}.", + "revoked": "Invitation révoquée pour {email}." + }, "modal": { "title": "Inviter un utilisateur" }, diff --git a/packages/vue/src/views/Invitations/Index.vue b/packages/vue/src/views/Invitations/Index.vue index 881e83a0..2d1c9df0 100644 --- a/packages/vue/src/views/Invitations/Index.vue +++ b/packages/vue/src/views/Invitations/Index.vue @@ -22,17 +22,16 @@ v-if="showInvitationModal" :show="showInvitationModal" @close="showInvitationModal = false" - @created="handleInvitationCreated" + @invitation:created="handleInvitationCreated" /> diff --git a/packages/vue/src/views/Invitations/_components/Form.vue b/packages/vue/src/views/Invitations/_components/Form.vue index f178fa6d..0a93a279 100644 --- a/packages/vue/src/views/Invitations/_components/Form.vue +++ b/packages/vue/src/views/Invitations/_components/Form.vue @@ -52,13 +52,12 @@ import { import type { AccountInvitationCreateInput } from "../../../types/accountInvitation"; import type { SaasConfig } from "../../../types/config"; -import type { SaasEventHandlers, EventMessage } from "../../../types/plugin"; defineProps({ loading: Boolean, }); -defineEmits(["cancel"]); +const emit = defineEmits(["cancel", "invitation:created"]); const config = useConfig(); const invitationStore = useInvitationStore(); @@ -82,25 +81,10 @@ const roles = computed(() => { return saasConfig?.saasAccountRoles || SAAS_ACCOUNT_ROLES_DEFAULT; }); -const eventHandlers = inject( - Symbol.for("saas.eventHandlers"), - { notification: undefined } -); - async function onSubmit() { try { await addInvitation(accountId, formData.value, config.apiBaseUrl).then( - (response) => { - const message: EventMessage = { - type: "success", - message: t("account.invitations.messages.created"), - details: { - invitation: response, - }, - }; - - eventHandlers?.notification?.(message); - } + (response) => emit("invitation:created", response) ); } catch (error) { console.error("Form submission error:", error); diff --git a/packages/vue/src/views/Invitations/_components/InvitationModal.vue b/packages/vue/src/views/Invitations/_components/InvitationModal.vue index bc2e8827..1aabb6d3 100644 --- a/packages/vue/src/views/Invitations/_components/InvitationModal.vue +++ b/packages/vue/src/views/Invitations/_components/InvitationModal.vue @@ -4,7 +4,11 @@ :title="t('account.invitations.modal.title')" @on:close="$emit('close')" > - + @@ -15,15 +19,21 @@ import { Modal } from "@dzangolab/vue3-ui"; import InvitationForm from "./Form.vue"; import { useTranslations } from "../../../index"; +import type { AccountInvitation } from "../../../types/accountInvitation"; + defineProps({ show: Boolean, loading: Boolean, }); -defineEmits(["close"]); +const emit = defineEmits(["close", "invitation:created"]); const messages = useTranslations(); const { t } = useI18n({ messages, locale: "en" }); + +function onInvitationCreated(invitation: AccountInvitation) { + emit("invitation:created", invitation); +}