0

I've got a subscription query, MessageFolder_Subscription, that looks like this:

QUERY

const MESSAGEFOLDER_SUBSCRIPTION_QUERY = gql`
    subscription ($localUserID: String!){
        MessageFolder_Subscription(userID: $localUserID){
            id
            remoteUserData{
                id
                name_title
                name_first
                name_last
                [...more fields...]
            }
        },
    }
`;

Here's the schema for it:

SCHEMA

type myUserData {
    id: String
    gender: String
    name_title: String
    name_first: String
    *[...more fields...]*
}

type messageFolder{
    id: String
    remoteUserData: myUserData
}

type Subscription {
    MessageFolder_Subscription(userID: String!): messageFolder
}

Here's how I'm doing the resolvers:

RESOLVERS

const resolvers = {
    //FIELD RESOLVER
        MessageFolder_Subscription: {
            subscribe: withFilter(
                () => pubsub.asyncIterator(MSGFOLDER_ADDED_CHANNEL),
                (payload, args) => {
                    debugger; <=== NEVER FIRES

                    if (typeof (payload) === 'undefined') {
                        return false;
                    }

                    let result = false;
                    const userId = Meteor.userId();
                     // let messageFolder = MessageFolder_Subscription.messageFolder; 
                    result = (userId === args.fromID || args === MSGFOLDERargs.toID);
                    return result;
                }
            )
        },
    //ROOT RESOLVER
        *[......more resolvers here.....]*
    Subscription: {
        MessageFolder_Subscription: {
            subscribe: withFilter(
                () => pubsub.asyncIterator(MSGFOLDER_ADDED_CHANNEL),
                (payload, args) => {
                    debugger;

                    if (typeof (payload) === 'undefined') {
                        return false;
                    }

                    let result = false;
                    const userId = Meteor.userId();
                     // let messageFolder = MessageFolder_Subscription.messageFolder; 
                    result = (userId === args.fromID || args === MSGFOLDERargs.toID);
                    return result;
                }
            )
        }
}

When I mutate a related item, the MessageFolder_Subscription query is fired by pubsub as expected. Tracing through, I can see that it returns true.

But for some reason, the field resolver, for the field remoteUserData on MessageFolder_Subscription, never fires.

What am I missing?

VikR
  • 4,818
  • 8
  • 51
  • 96

1 Answers1

0

Solved. I had to add the __typename: field:

const messageFolder_Subscription = {
    __typename: 'messageFolder_Subscription',
    id: userID,
}

...to the MessageFolder_Subscription subscription object, when it was created in the mutation resolver, prior to being passed to pubsub.

VikR
  • 4,818
  • 8
  • 51
  • 96