Оператор динамического фильтра в 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, доступном через консоль (просто найдите имя поля).