MagicEmitter
MagicEmitter is a wrapper around mitt. The emitter is used throughout all plugins to emit custom events. By using the emitter to listen to these events, you can trigger custom callbacks, after a modal opens or a drawer closes for example.
Overview
Anatomy
<script setup>
import { onBeforeUnmount } from 'vue'
import { useMagicEmitter } from '@maas/vue-equipment/plugins/MagicEmitter'
function callback(id, payload) {
// your callback
}
useMagicEmitter().on('*', callback)
onBeforeUnmount(() => {
useMagicEmitter().off('*', callback)
})
</script>Installation
CLI
Add @maas/vue-equipment to your dependencies.
pnpm install @maas/vue-equipmentnpm install @maas/vue-equipmentyarn add @maas/vue-equipmentbun install @maas/vue-equipmentNuxt
The emitter is available as a Nuxt module. In your Nuxt config file add @maas/vue-equipment/nuxt to your modules and add MagicEmitter to the plugins in your configuration.
export default defineNuxtConfig({
modules: ['@maas/vue-equipment/nuxt'],
vueEquipment: {
plugins: ['MagicEmitter'],
},
})Composable
In order to interact with the emitter from anywhere within your app, immport the useMagicEmitter composable.
import { useMagicEmitter } from '@maas/vue-equipment/plugins/MagicEmitter'
useMagicEmitter().on('*', callback)
useMagicEmitter().off('*', callback)TIP
If you have installed the emitter as a Nuxt module, the composable will be auto-imported and is automatically available in your Nuxt app.
Peer Dependencies
If you haven’t installed the required peer dependencies automatically, you’ll need to install the following packages manually.
Installation
pnpm install @nuxt/kit mittnpm install @nuxt/kit mittyarn add @nuxt/kit mittbun install @nuxt/kit mittTypescript
The emitter is fully typesafe. We provide types to import as well as some useful utilities to type your callback functions.
All Events
import {
useMagicEmitter,
type MagicEmitterEvents,
} from '@maas/vue-equipment/plugins/MagicEmitter'
import type { ValueOf } from '@maas/vue-equipment/utils'
function callback(
id: keyof MagicEmitterEvents,
payload: ValueOf<MagicEmitterEvents>
) {
// your callbck
}
useMagicEmitter().on('*', callback)
onBeforeUnmount(() => {
useMagicEmitter().off('*', callback)
})Selected Events
import {
useMagicEmitter,
type MagicEmitterEvents,
} from '@maas/vue-equipment/plugins/MagicEmitter'
function callback(payload: MagicEmitterEvents['beforeEnter']) {
// your callbck
}
useMagicEmitter().on('beforeEnter', callback)
onBeforeUnmount(() => {
useMagicEmitter().off('beforeEnter', callback)
})