Как реализовать фильтр по запросу в Apollo?

Я пытаюсь отфильтровать запрос по определенному полю. Я могу добиться этого в проводнике Apollo в инструментах разработки, но я не могу перевести это в код.

Следующие работы в проводнике Apollo:

query ListUsersByType($filter: TableUsersFilterInput) {
  listUsers(filter: $filter) {
    items {
      email
      id
      type
    }
  }
}
{
  "filter": {
    "type": {
      "eq": "ADMIN"
    }
  }
}

Однако я не уверен, как это переводится в код с использованием хука useQuery.

Когда я пытаюсь сделать следующее, он вообще не фильтрует список, он просто извлекает их все независимо от типа:

const ListUsersByType = gql`
  query ListUsersByType($type: TableUsersFilterInput) {
    listUsers(filter: $type) {
      items {
        email
        id
        type
      }
    }
  }
`
  const { data, loading, error } = useQuery(ListUsersByType, {
    variables: {
      filter: {
        type: {
          eq: 'ADMIN',
        },
      },
    },
  })

Что мне здесь не хватает?

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

Ответы 1

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

Ваши имена неверны

Вот вы говорите filter will use the variable type

const ListUsersByType = gql`
  query ListUsersByType($type: TableUsersFilterInput) {
    listUsers(filter: $type) {
      items {
        email
        id
        type
      }
    }
  }
`

И вот ты проходишь filter

  const { data, loading, error } = useQuery(ListUsersByType, {
    variables: {
      filter: {
        type: {
          eq: 'ADMIN',
        },
      },
    },
  })

Вы можете

Первое решение

заменить $type на $filter

const ListUsersByType = gql`
  query ListUsersByType($filter: TableUsersFilterInput) {
    listUsers(filter: $filter) {
      items {
        email
        id
        type
      }
    }
  }
`

Второе решение

переименуйте переменную filter в type

  const { data, loading, error } = useQuery(ListUsersByType, {
    variables: {
      type: {
        type: {
          eq: 'ADMIN',
        },
      },
    },
  })

Мое мнение

Я позволяю вам выбирать, но первый вариант кажется лучшим

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