使用 vue3 apollo 和复杂 where 键入文档节点

Typed document node with vue3 apollo and complex where

我使用这个包 https://github.com/dotansimha/graphql-typed-document-node 我通常这样称呼它 useQuery(peopleDocument, variables).

但是laravel lighthouse有一个复杂的where插件,它会自动为各种查询where条件添加所有类型,例如

{ people(where: { column: AGE, operator: EQ, value: 42 }) { name } }

我希望允许用户使用自己的运算符构建自己的过滤器,但是当过滤器及其运算符是动态的时,我如何定义此类查询?

模糊的解释在某种程度上有所帮助。所以我会回答我自己的问题。

我不确定是否应该使用它,但它确实有效。

Lighthouse 使用@whereConditions 指令自动生成运算符和列枚举。所以你必须再次 运行 yarn graphql-codegen 来获取它们。

然后简单地导入然后简单地在组件中使用它们

Lighthouse 架构定义示例:

type Query {
  contact(where: _ @whereConditions(columns: ["id", "email", "mobile"])): Contact @first
}

查询定义:

query contact($where: QueryContactWhereWhereConditions) {
  contact(where: $where) {
    id
    email
    mobile
  }
}

Vue组件:

import { ContactDocument, QueryContactWhereColumn, SqlOperator } from 'src/typed-document-nodes.ts';

useQuery(ContactDocument, {where: {column: QueryContactWhereColumn.Email, operator: SqlOperator.Like, value: '%@example.com'}})