0

我使用过滤器的后端工作是这样的(例如):

filters = {
  "groupOp": "AND",
  "rules": [
    {
      "field": "id",
      "op": "equal",
      "data": 6
    },
    {
      "field": "partnerId",
      "op": "equal",
      "data": 446
    }
  ],
  "groups": [
    {
      "groupOp": "AND",
      "rules": [
        {
          "field": "username",
          "op": "startswith",
          "data": "Alex"
        }
      ],
      "groups": []
    }
  ]
}

它适用于持久性过滤器,但不适用于传递给列表组件的用户过滤器。例如:

export const OrdersFilter = (props) => (
<Filter {...props}>
    <TextInput label="username" source="username" />
    <TextInput label="partnerId" source="partnerId" />
</Filter>
);

因为它是一个键值过滤器,我不明白如何向用户过滤器字段添加其他字段。

或者我如何在@@redux-form/CHANGE 操作后包装 url 更改('@@router/LOCATION_CHANGE')以修改传递给带有过滤字段名称的 url 的原始过滤器:

filter=%7B%22partnerId%22%3A%226%22%7D&order=DESC&page=1&perPage=10'
to 
filter={"field": "partnerId","op": "equal","data": 6}&order=DESC&page=1&perPage=10 
4

2 回答 2

4

您应该简化(展平)客户端过滤器react-admin并将它们“翻译”成后端期望的形状dataProvider

于 2018-05-03T08:34:41.053 回答
1

您可以在过滤器中选择自定义属性,并通过后端应用过滤器。

const UserFilter = (props) => (
    <Filter {...props}>
        <TextInput label="Username" source="q" alwaysOn />
    </Filter>
);

后端:Loopback4 例如:

 async find(@param.filter(User) filter?: Filter<User>): Promise<User[]> {
    if(filter && filter.where){
        const where = filter.where as any;
        if(where["q"]){
          where.username = { ilike: '%'+where["q"]+'%' };
          filter.where = where;
        }
    }
    const response = await this.userRepository.find(filter);
    this.response.set("X-Total-Count", ""+response.length);
    this.response.set("access-control-expose-headers", "X-Total-Count");
    return response;
  }
于 2021-01-14T01:46:05.553 回答