0.1.0 • Published 2 years ago

@talesoft/event v0.1.0

Weekly downloads
1
License
MIT
Repository
github
Last release
2 years ago

Event JS

Build status Coverage Vulnerabilities

A minimalistic implementation of the event pattern.

Installation

npm i @talesoft/event

TypeScript supported out-of-the-box.

Usage

The library comes with a base class Event that will represent any kind of event you want to hook and with an EventDispatcher that will manage listeners for events and dispatch event instances to these listeners.

import { Event, EventDispatcher } from '@talesoft/event';

const dispatcher = new EventDispatcher();

class ClickEvent extends Event {}

dispatcher.addListener(ClickEvent, () => {
    console.log('Clicked!');
});

dispatcher.dispatch(new ClickEvent());

Passing Event Data

import { Event, EventDispatcher } from '@talesoft/event';

const dispatcher = new EventDispatcher();

class ResponseEvent extends Event {
    public content: string = '';
}

dispatcher.addListener(ResponseEvent, event => {
    event.content = 'Hello from Response!';
});

const event = new ResponseEvent();

dispatcher.dispatch(event);

console.log(event.content); // "Hello from Response!"

Cancelling events

import { Event, EventDispatcher } from '@talesoft/event';

const dispatcher = new EventDispatcher();

class WalkEvent extends Event {}

dispatcher.addListener(WalkEvent, () => {
    console.log('I will be called!');
});

dispatcher.addListener(WalkEvent, event => {
    console.log('I will be called, too!');

    event.cancel();
});

dispatcher.addListener(WalkEvent, () => {
    console.log('I won\'t be called anymore.');
});

const event = new WalkEvent();

const success = dispatcher.dispatch(event);

console.log(success); // false

console.log(event.cancelled); // true

Default action prevention

import { Event, EventDispatcher } from '@talesoft/event';

const dispatcher = new EventDispatcher();

class ClickEvent extends Event {}

dispatcher.addListener(ClickEvent, event => {
    event.preventDefault();
    // This is the only thing that will happen, as we'll prevent the default dispatch action
    window.location.href = 'http://other.example.com';
});

const event = new ClickEvent();
if (dispatcher.dispatch(event)) {
    // This won't happen, as dispatch will return false when the default action was prevented
    window.location.href = 'http://example.com';
}

console.log(event.defaultPrevented); // true

Contributing

Before contributing, check out the Contribution Guidelines

Requires: npm

// Pull project
git clone https://github.com/Talesoft/event-js

// Enter project directory
cd event-js

// Install development dependencies
npm install

// ... make your changes ...

// Run tests
npm run test

// Lint
npm run lint

// Fix linting problems
npm run lint:fix

// Build
npm run build

// ... create branch, commit, push, merge request etc. ...
0.1.0

2 years ago