Оператор динамического фильтра в GraphQL с использованием Apollo (в приложении React)

Я использую Apollo для запросов к моему серверу GraphQL.

Мой запрос выглядит следующим образом:

export const QUERY_ITEMS = gql`
    query get_items($date: date) {
        items(where: {date: {_eq: $date}}) {
            name
        }
    }
`;

const {data} = useQuery(QUERY_ITEMS, variable: {date: '2020-01-01'});

Обратите внимание, как сейчас _eqоператор жестко запрограммирован. Я реализую функцию, в которой я делаю этот оператор динамическим, чтобы включить такие вещи, как'_gt' а также '_lt'.Как я могу этого добиться?

2 ответа

gql может получать переменную-заполнитель

функция gql(литералы: любые, ... заполнители: любые []): любые;

так что вы можете использовать что-то вроде этого

export const QUERY_ITEMS = (placeholder) => gql`
    query get_items($date: date) {
        items(where: {date: {${placeholder}: $date}}) {
            name
        }
    }
`;

Вместо того, чтобы передавать дату в качестве переменной, вы можете передать все выражение целиком

query get_items($exp: SomeType) {
  items(where: { date: $exp }) {
    name
  }
}

или весь аргумент

query get_items($where: SomeOtherType) {
  items(where: $where) {
    name
  }
}

Типы, которые вы используете для своей переменной, зависят от схемы - вы можете найти информацию о схеме, генерируемой Hasura, в интерфейсе GraphiQL, доступном через консоль (просто найдите имя поля).

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