graphql-redis-subscriptions icon indicating copy to clipboard operation
graphql-redis-subscriptions copied to clipboard

Ability to dynamically add/remove topics to/from asyncIterator

Open dimatillck opened this issue 3 years ago • 0 comments

Hi, I wonder if there is a place for such functionality in this library. What I'm trying to achieve is to be able to do something like that:

const SOMETHING_CHANGED_TOPIC = 'something_changed';
const SOMETHING_OTHER_CHANGED_TOPIC = 'something_other_changed';

export const resolvers = {
  Subscription: {
    anythingChanged: {
      subscribe: () => {
        const asyncIterator = pubsub.asyncIterator(SOMETHING_CHANGED_TOPIC);
        
        subscribeToInternalEvent('internal_event', (event) => {
          if (event.shouldSubscribeToSomethingOther) {
            asyncIterator.subscribe(SOMETHING_OTHER_CHANGED_TOPIC);
          }

          if (event.shouldUnsubscribeFromSomethingOther) {
            asyncIterator.unsubscribe(SOMETHING_OTHER_CHANGED_TOPIC);
          }
        });

        return asyncIterator;
      },
    },
  },
}

I've created the same issue in https://github.com/apollographql/graphql-subscriptions

I have some implementation of this feature and I can create a PR to continue the discussion if there is a place for this feature in this library.

dimatillck avatar May 17 '22 16:05 dimatillck