создание пользовательского крючка подписки с помощью клиента apollo

#reactjs #react-hooks #apollo-client #subscription

Вопрос:

я задаюсь одним вопросом. В моем проекте каждый раз после подписки я обновляю кэш apollo. И в соответствии с СУХИМИ правилами я понял, что повторяюсь, и решил написать свой собственный крюк подписки. Крючок работает, но я чувствую, что это неправильный код. У кого-нибудь есть лучшее решение для этого?

Использование подписки с помощью cache.ts

 type ApplyFunc = (exisitingData: any, newData: any) => any;

const useSubscriptionWithCache = (
   subscription: DocumentNode | TypedDocumentNode,
   variables: object,
   newDataFieldName: string,
   updatedFieldName: string,
   applyFunc: ApplyFunc
) => {
   useSubscription(subscription, {
      variables: {
         ...variables,
      },
      onSubscriptionData: ({ client, subscriptionData: { data } }) => {
         if (data) {
            const newData = data[newDataFieldName]?.data;
            client.cache.modify({
               fields: {
                  [updatedFieldName]: (existingData = []) => {
                     return {
                        data: applyFunc(existingData, newData),
                     };
                  },
               },
            });
         }
      },
   });
};
 

и если я хочу использовать внутри одного компонента

 useSubscriptionWithCache(
      CREATED_CUSTOMER_SPECIAL_PACKAGE_SUBSCRIPTION,
      {
         token,
         customer: customer._id,
      },
      'createdCustomerSpecialPackage',
      'products',
      (existing, newData) => [...existing.data, newData]
   );