在 react-apollo 中建模可选的过滤器参数

Modeling optional filter params in react-apollo

我正在使用 react-apollo 访问网络应用程序中的 graphql

我有一个类似这样的查询,它允许我过滤游戏时间表:

query($pagination:Int!, $divisionId:ID, $teamId:ID, $startDate:DateTime!, $endDate:DateTime!
){
 games: allGames (
 orderBy: date_ASC,
 first: $pagination,
 filter: {
   date_gte: $startDate,
   date_lte: $endDate,
   division: {id: $divisionId},
   OR: [
    {homeTeam: {id: $teamId} },
    {awayTeam: {id: $teamId} },
   ]
  }
){
 id
 .... more fields
}

每个请求都需要 startDateendDate 变量,但不需要 teamIddivisionId。我想在初始请求中显示所有 teamIdsdivisionIds,并允许根据需要过滤/向下钻取。

我想看看是否可以添加通配符 (*) 或类似的东西,但不确定是否可行。使用 graphql 突变,变量的 null 值允许我编写适用于多个用例的单个突变(部分更新和创建),但我无法弄清楚如何通过查询实现类似的功能。

我是否需要为每个筛选方案调用不同的查询(一个用于没有 divisionIdteamId,一个仅用于 divisionId,一个仅用于 teamId,以及divisionIdteamId 都有一个吗?fragments 可以帮助我以更少的开销实现这一目标吗(因为最后一句话让这个过程看起来有点太麻烦/不干)。

或者我将 divisionid 切换为 division_inid_in 并传递给它们(有点大)数组,其中包含 [=18= 的所有可能值] 和 teamdIds 作为初始道具?

所以事实证明你实际上将整个过滤器存储为一个变量(这非常棒)。

这是更新后的查询:

query( $first:Int!, $skip:Int!, $gameFilter:GameFilter! ){
  games: allGames (
    orderBy: date_ASC,
    first: $first,
    skip: $skip,
    filter: $gameFilter
  ){
    id
    ... more fields
   }
}

以及对应的HOC:

export default graphql(gamesQuery, {
  options: props => ({
    return { variables: {props.gameFilter}
  });
})(GamesPage);

给这些家伙的小费: