1

Here's my client-side code for Apollo subscriptions, based on the Githunt-React-master sample code:

componentWillReceiveProps(nextProps) {
    const fromID = Meteor.userId();
    const toID = nextProps.toID;
    if (!this.subscription && !nextProps.loading) {
        this.subscription = this.props.subscribeToMore({
            document: IM_SUBSCRIPTION_QUERY,
            variables: {fromID: `${fromID}`, toID: `${toID}`},
            updateQuery: (previousResult, {subscriptionData}) => {
                if (!subscriptionData.data) {
                    return previousResult;
                }
                const newFeedItem = subscriptionData.data.createIM[0];
                return update(previousResult, {
                    instant_message: {
                        $push: [newMsg],
                    },
                });
            }
        });
    }
}

My subscription resolver isn't being called. That is, a debugger statement placed in it, never halts program execution.

What am I missing?

Thanks in advance to all for any info.

VikR
  • 4,818
  • 8
  • 51
  • 96

1 Answers1

0

In the standard case this.props does not contain a subscribeToMore functionality. It is added in the end of the file at githunt react master.

Did you also add something like:

const withData = graphql(COMMENT_QUERY, {
  options: ({
    params
  }) => ({
    variables: {
      repoName: `${params.org}/${params.repoName}`
    },
  }),
  props: ({
    data: {
      loading,
      currentUser,
      entry,
      subscribeToMore
    }
  }) => ({
    loading,
    currentUser,
    entry,
    subscribeToMore, // props.data.subscribeToMore is mapped to props.subscribeToMore
  }),
});

Else you could try and use this.props.data.subscribeToMore inside your componentWillRecieveProps functionality

Locco0_0
  • 3,420
  • 5
  • 30
  • 42