Skip to content

πŸ“„ $eventbus – Event Communication API ​

The $eventbus enables decoupled communication between different parts of your plugin and the entire application.

It is based on a lightweight EventEmitter pattern.


🧠 Core Concept ​

Instead of directly calling functions across modules:

πŸ‘‰ emit events β†’ listen β†’ react


πŸ”§ Basic Usage ​

ts
$eventbus.on("myEvent", (payload) => {
  console.log(payload)
})

$eventbus.emit("myEvent", { foo: "bar" })

🌍 Global vs Local ​

Plugin-local events ​

ts
$eventbus.on(...)
$eventbus.emit(...)
  • scoped to your plugin
  • no global side effects

Global events ​

ts
$eventbus.global.on(...)
$eventbus.global.emit(...)
  • shared across all plugins
  • automatically enriched with sender info
ts
$eventbus.global.emit("ui/addToSnackbar", {
  message: "Hello",
})

Payload becomes:

ts
{
  sender: "<pluginKey>",
  data: { message: "Hello" }
}

πŸ“‘ API Methods ​

on ​

ts
const remove = $eventbus.on("event", callback)
  • registers listener
  • returns cleanup function

emit ​

ts
$eventbus.emit("event", payload)
  • triggers all listeners

once ​

ts
$eventbus.once("event", callback)
  • triggers only once
  • auto-removes listener
  • timeout fallback (~5s)

removeListener ​

ts
remove()
  • unregisters listener

πŸ” Typical Patterns ​

UI communication ​

ts
$eventbus.global.emit("ui/addToSnackbar", {
  message: "Saved!",
  color: "green",
})

Cross-component sync ​

ts
$eventbus.on("todoUpdated", () => {
  execute()
})

One-time event ​

ts
$eventbus.once("initDone", () => {
  console.log("Initialized")
})

🧠 Event Validation ​

  • Events can be restricted via whitelist
  • Wildcards are supported
  • Invalid events may throw errors

🧠 Mental Model ​

  • $eventbus = internal messaging system
  • decouples components and services
  • avoids tight coupling

βš–οΈ When to Use $eventbus ​

Use it for:

  • UI interactions (snackbars, dialogs)
  • cross-component communication
  • plugin-wide events
  • global app events

🚫 Important Notes ​

  • Events are not reactive
  • No persistence (fire-and-forget)
  • Overuse can make flow hard to trace

🧠 Key Takeaway ​

$eventbus enables flexible, decoupled communication

πŸ‘‰ Think: emit β†’ listen β†’ react