Skip to content

Commit

Permalink
Add off method to unsubscribe events
Browse files Browse the repository at this point in the history
Fixes mapbox#193
Inspired by tristen commit ref mapbox#40
  • Loading branch information
patrix committed Oct 24, 2018
1 parent 07ebea2 commit 329d51a
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
22 changes: 21 additions & 1 deletion API.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
- [getWaypoints](#getwaypoints)
- [removeRoutes](#removeroutes)
- [on](#on)
- [off](#off)

## MapboxDirections

Expand Down Expand Up @@ -168,7 +169,8 @@ Subscribe to events that happen within the plugin.

**Parameters**

- `type` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** name of event. Available events and the data passed into their respective event objects are:- **clear** `{ type: } Type is one of 'origin' or 'destination'`
- `type` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** name of event. Available events and the data passed into their respective event objects are:
- **clear** `{ type: } Type is one of 'origin' or 'destination'`
- **loading** `{ type: } Type is one of 'origin' or 'destination'`
- **profile** `{ profile } Profile is one of 'driving', 'walking', or 'cycling'`
- **origin** `{ feature } Fired when origin is set`
Expand All @@ -178,3 +180,21 @@ Subscribe to events that happen within the plugin.
- `fn` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** function that's called when the event is emitted.

Returns **[MapboxDirections](#mapboxdirections)** this;

### off

Unsubscribe to events previously registered.

**Parameters**

- `type` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** name of event. Available events and the data passed into their respective event objects are:
- **clear** `{ type: } Type is one of 'origin' or 'destination'`
- **loading** `{ type: } Type is one of 'origin' or 'destination'`
- **profile** `{ profile } Profile is one of 'driving', 'walking', or 'cycling'`
- **origin** `{ feature } Fired when origin is set`
- **destination** `{ feature } Fired when destination is set`
- **route** `{ route } Fired when a route is updated`
- **error** \`{ error } Error as string
- `fn` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** function used when the event was registered.

Returns **[MapboxDirections](#mapboxdirections)** this;
28 changes: 28 additions & 0 deletions src/actions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,34 @@ export function eventSubscribe(type, fn) {
};
}

export function eventUnsubscribe(type, fn) {
return (dispatch, getState) => {
const { events } = getState();

if (!events[type]) {
return {
type: types.EVENTS,
events
};
}

if (fn) {
// Drop the event if it exists in the events object
const fnToDelete = events[type].indexOf(fn);
if (fnToDelete >= 0) {
events[type].splice(fnToDelete, 1);
}
} else {
delete events[type];
}

return {
type: types.EVENTS,
events: events
};
};
}

export function eventEmit(type, data) {
return (dispatch, getState) => {
const { events } = getState();
Expand Down
11 changes: 11 additions & 0 deletions src/directions.js
Original file line number Diff line number Diff line change
Expand Up @@ -551,4 +551,15 @@ export default class MapboxDirections {
this.actions.eventSubscribe(type, fn);
return this;
}

/**
* Unsubscribe to events
* @param {String} type name of event. Available events are outlined in `on`
* @param {Function} fn optional. The function that's called when the event is emitted.
* @returns {Directions} this;
*/
off(type, fn) {
this.actions.eventUnsubscribe(type, fn);
return this;
}
}

0 comments on commit 329d51a

Please sign in to comment.