102 lines
3.1 KiB
JavaScript
102 lines
3.1 KiB
JavaScript
/**
|
|
* @generated SignedSource<<24d5cc1cdd24704296686faf89dd36cf>>
|
|
*
|
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
* !! This file is a check-in of a static_upstream project! !!
|
|
* !! !!
|
|
* !! You should not modify this file directly. Instead: !!
|
|
* !! 1) Use `fjs use-upstream` to temporarily replace this with !!
|
|
* !! the latest version from upstream. !!
|
|
* !! 2) Make your changes, test them, etc. !!
|
|
* !! 3) Use `fjs push-upstream` to copy your changes back to !!
|
|
* !! static_upstream. !!
|
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
*
|
|
* @providesModule EventSubscriptionVendor
|
|
* @typechecks
|
|
*/
|
|
'use strict';
|
|
|
|
var invariant = require('invariant');
|
|
|
|
/**
|
|
* EventSubscriptionVendor stores a set of EventSubscriptions that are
|
|
* subscribed to a particular event type.
|
|
*/
|
|
class EventSubscriptionVendor {
|
|
|
|
constructor() {
|
|
this._subscriptionsForType = {};
|
|
this._currentSubscription = null;
|
|
}
|
|
|
|
/**
|
|
* Adds a subscription keyed by an event type.
|
|
*
|
|
* @param {string} eventType
|
|
* @param {EventSubscription} subscription
|
|
*/
|
|
addSubscription(
|
|
eventType: String, subscription: EventSubscription): EventSubscription {
|
|
invariant(
|
|
subscription.subscriber === this,
|
|
'The subscriber of the subscription is incorrectly set.');
|
|
if (!this._subscriptionsForType[eventType]) {
|
|
this._subscriptionsForType[eventType] = [];
|
|
}
|
|
var key = this._subscriptionsForType[eventType].length;
|
|
this._subscriptionsForType[eventType].push(subscription);
|
|
subscription.eventType = eventType;
|
|
subscription.key = key;
|
|
return subscription;
|
|
}
|
|
|
|
/**
|
|
* Removes a bulk set of the subscriptions.
|
|
*
|
|
* @param {?string} eventType - Optional name of the event type whose
|
|
* registered supscriptions to remove, if null remove all subscriptions.
|
|
*/
|
|
removeAllSubscriptions(eventType: ?String) {
|
|
if (eventType === undefined) {
|
|
this._subscriptionsForType = {};
|
|
} else {
|
|
delete this._subscriptionsForType[eventType];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Removes a specific subscription. Instead of calling this function, call
|
|
* `subscription.remove()` directly.
|
|
*
|
|
* @param {object} subscription
|
|
*/
|
|
removeSubscription(subscription: Object) {
|
|
var eventType = subscription.eventType;
|
|
var key = subscription.key;
|
|
|
|
var subscriptionsForType = this._subscriptionsForType[eventType];
|
|
if (subscriptionsForType) {
|
|
delete subscriptionsForType[key];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the array of subscriptions that are currently registered for the
|
|
* given event type.
|
|
*
|
|
* Note: This array can be potentially sparse as subscriptions are deleted
|
|
* from it when they are removed.
|
|
*
|
|
* TODO: This returns a nullable array. wat?
|
|
*
|
|
* @param {string} eventType
|
|
* @returns {?array}
|
|
*/
|
|
getSubscriptionsForType(eventType: String): ?Array {
|
|
return this._subscriptionsForType[eventType];
|
|
}
|
|
}
|
|
|
|
module.exports = EventSubscriptionVendor;
|