给定一组 GraphQL 变量类型,是否可以使用客户端模式为集合中的每个类型创建所有有效值的映射

wva*_*aal 6 javascript relay graphql

标题主要说明了一切:我正在构建一个反应/中继应用程序,它将允许用户在运行时动态创建图表,显示指定时间范围内的各种收入流。此图表的一个特征是所述用户的指定每个收入流(例如采样间隔的能力YEARQUARTERMONTHWEEK,等)每个流的参数。

这些值在架构中定义为一个GraphQLInputObjectType实例,如下所示:

enum timeSeriesIntervalEnum {
  YEAR
  QUARTER
  MONTH
  WEEK
}
Run Code Online (Sandbox Code Playgroud)

在客户端,我react-relay定义了以下形式的片段:

fragment on BalanceSheet {
  income {
    # some income stream
    afterTax {  
      values(interval: $samplingInterval)
      dates(interval: $samplingInterval)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此变量值将作为单独组件中下拉菜单的一部分填充,其中下拉菜单中的每个值都应对应一个有效值timeSeriesIntervalEnum

虽然肯定可以简单地对这些值进行硬编码,但底层 API 仍然经常更改,我想减少耦合,而是通过为给定下拉列表(例如timeSeriesIntervalEnum)指定变量类型来动态填充这些字段,然后使用用于解析值并填充配置 json 文件(运行前)或在运行时动态分配值的 graphql 客户端架构。

注意:我已经在开始前进行了一些查询字符串和片段转换,因此如果需要,我不反对在此过程中创建 json 配置文件。

mar*_*ani 5

这可以使用自省查询来完成。

在您的情况下,这是一种可能的解决方案:

{
    __type(name: "timeSeriesIntervalEnum") {
    name
    enumValues {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

响应包含所有可能类型的列表:

{
  "data": {
    "__type": {
      "name": "timeSeriesIntervalEnum",
      "enumValues": [
        {
          "name": "YEAR"
        },
        {
          "name": "QUARTER"
        },
        {
          "name": "MONTH"
        },
        {
          "name": "WEEK"
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)