Обновление запросов в apollo-клиенте независимо от входных параметров

У меня возникла проблема с повторной выборкой запросов в apollo-client после мутации. Надеюсь, кто-нибудь сможет помочь.

Моя схема Graphql имеет один запрос и одну мутацию:

type Query {
  alerts(filter: AlertFilter!): AlertsResponse!
}

type Mutation {
  closeAlert(input: CloseAlertRequest!): CloseAlertResponse!
}

Запрос alerts принимает AlertFilter со статусом = OPEN или CLOSED. Он возвращает список оповещений вместе с количеством открытых и закрытых оповещений.

Мутация closeAlert закрывает указанное оповещение.

Я пытаюсь повторно получить запрос alerts при каждом вызове мутации closeAlert. Это делается для того, чтобы у меня был самый последний список оповещений + последнее количество открытий/закрытий.

Вот как я закодировал свою мутацию closeAlert. Он пытается повторно получить запрос alertsPage после мутации.

export function useCloseAlert() {
  return useMutation(closeAlertDocument, {
    refetchQueries: ['alertsPage'],
  });
}

Мой запрос alertsPage закодирован следующим образом:

const alertsPageDocument = graphql(/* GraphQL */ `
  query alertsPage($filter: AlertFilter!) {
    alerts(filter: $filter) {
      alerts {
        id
        ...AlertItem
      }
      counts {
        status
        count
        ...AlertCountItem
      }
    }
  }
`);

Однако, глядя на расширение Apollo Client DevTools, я вижу, что в кеше есть два разных запроса alertsPage (см. снимок экрана ниже): один для фильтра status = "OPEN" и другой для фильтра status = "Closed". Мутация только повторно извлекает запрос для фильтра status = "OPEN" — я вижу, как количество открытий уменьшается, а количество закрытых увеличивается. Однако запрос фильтра status = "CLOSED" не перезагружается, и счетчики вообще не меняются.

Вопрос: Как я могу сказать клиенту Apollo, чтобы он возвращал все запросы alertsPage, независимо от входных значений?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечая на свой же вопрос...

Чтобы обновить оба запроса (для status=OPEN и status=CLOSED), мне пришлось изменить refetchQueries следующим образом:

export function useCloseAlert() {
  return useMutation(closeAlertDocument, {
    refetchQueries: [
      {
        query: AlertsPageDocument,
        variables: {
          filter: { status: 'OPEN' },
        },
      },
      {
        query: AlertsPageDocument,
        variables: {
          filter: { status: 'CLOSED' },
        },
      },
    ],
  });
}

Другие вопросы по теме