# triggers

Custom event trigger system for application-wide event handling.

## Functions

| Function | Description                      | Example                                  |
| -------- | -------------------------------- | ---------------------------------------- |
| `add`    | Add event listener               | `dphelper.triggers.add(event, callback)` |
| `on`     | Listen for event (alias for add) | `dphelper.triggers.on(event, callback)`  |
| `emit`   | Trigger an event with data       | `dphelper.triggers.emit(event, data)`    |
| `remove` | Remove all listeners for event   | `dphelper.triggers.remove(event)`        |
| `off`    | Remove specific callback         | `dphelper.triggers.off(event, callback)` |
| `clear`  | Clear all triggers               | `dphelper.triggers.clear()`              |
| `list`   | List all registered events       | `dphelper.triggers.list()`               |

## Description

Custom event system:

* **Event Listeners** - Add/remove custom event listeners
* **Event Emission** - Emit events with data payloads
* **Namespacing** - Organize events by name
* **Error Handling** - Safe callback execution

## Usage Examples

### Add Event Listeners

```javascript
// Listen for custom events
dphelper.triggers.add('user:login', (user) => {
  console.log('User logged in:', user);
});

dphelper.triggers.on('data:loaded', (data) => {
  console.log('Data received:', data);
});
```

### Emit Events

```javascript
// Emit events with data
dphelper.triggers.emit('user:login', { id: 1, name: 'John' });

dphelper.triggers.emit('notification', {
  type: 'success',
  message: 'Operation complete!'
});
```

### Remove Listeners

```javascript
// Remove all listeners for an event
dphelper.triggers.remove('user:login');

// Remove specific callback
const handler = (data) => console.log(data);
dphelper.triggers.on('event', handler);
// ... later
dphelper.triggers.off('event', handler);
```

### List Registered Events

```javascript
// See all registered events
const events = dphelper.triggers.list();
console.log(events); // ['user:login', 'data:loaded', ...]

// Clear all triggers
dphelper.triggers.clear();
```

### Event-Driven Architecture

```javascript
// Pub/Sub event system
class EventBus {
  constructor() {
    this.triggers = dphelper.triggers;
  }

  subscribe(event, callback) {
    this.triggers.on(event, callback);
    return () => this.triggers.off(event, callback);
  }

  publish(event, data) {
    this.triggers.emit(event, data);
  }
}

const bus = new EventBus();

// Subscribe
const unsubscribe = bus.subscribe('order:created', (order) => {
  console.log('Order created:', order.id);
});

// Publish
bus.publish('order:created', { id: 123, total: 99.99 });

// Unsubscribe
unsubscribe();
```

### Component Communication

```javascript
// Component A - Sender
function notifyUser(userId, message) {
  dphelper.triggers.emit('notification', { userId, message });
}

// Component B - Receiver
dphelper.triggers.on('notification', ({ userId, message }) => {
  showToast(`User ${userId}: ${message}`);
});
```

## Details

* **Author:** Dario Passariello
* **Version:** 0.0.1
* **Creation Date:** 20250220
* **Last Modified:** 20250220
* **Environment:** client (browser)

***

*Automatically generated document*
