过滤嵌套对象

时间:2021-06-04 12:21:58

标签: filter nested react-admin

我想用“statut”过滤。 这就是我的成员 JSON 的样子。 JSON

我设法访问了 id(示例中为 7)并且当 id == 7 时过滤器工作良好 Filter work fine code

但是,当我尝试检索成员的“状态”时,它不起作用。 Does not work Does not work

你有什么想法吗?

对不起我的英语。 ^^

2 个答案:

答案 0 :(得分:0)

import * as React from "react";
import AccessTimeIcon from "@material-ui/icons/AccessTime";
import MonetizationOnIcon from "@material-ui/icons/MonetizationOnOutlined";
import MailIcon from "@material-ui/icons/MailOutline";
import { FilterList, FilterListItem, FilterLiveSearch } from "react-admin";
import {
  endOfYesterday,
  startOfWeek,
  subWeeks,
  startOfMonth,
  subMonths,
} from "date-fns";
import { Card as MuiCard, CardContent, withStyles } from "@material-ui/core";

const LastVisitedFilter = () => (
  <FilterList label="Dernières visites" icon={<AccessTimeIcon />}>
    <FilterListItem
      label="Aujourd'hui"
      value={{
        created_at_gte: endOfYesterday().toISOString(),
        created_at_lte: undefined,
      }}
    />
    <FilterListItem
      label="Cette semaine"
      value={{
        created_at_gte: startOfWeek(new Date()).toISOString(),
        created_at_lte: undefined,
      }}
    />
    <FilterListItem
      label="La semaine dernière"
      value={{
        created_at_gte: subWeeks(startOfWeek(new Date()), 1).toISOString(),
        created_at_lte: startOfWeek(new Date()).toISOString(),
      }}
    />
    <FilterListItem
      label="Ce mois-ci"
      value={{
        created_at_gte: startOfMonth(new Date()).toISOString(),
        created_at_lte: undefined,
      }}
    />
    <FilterListItem
      label="Le mois dernier"
      value={{
        created_at_gte: subMonths(startOfMonth(new Date()), 1).toISOString(),
        created_at_lte: startOfMonth(new Date()).toISOString(),
      }}
    />
  </FilterList>
);
const HasOrderedFilter = () => (
  <FilterList label="Has ordered" icon={<MonetizationOnIcon />}>
    <FilterListItem
      label="True"
      value={{
        nb_commands_gte: 1,
        nb_commands_lte: undefined,
      }}
    />
    <FilterListItem
      label="False"
      value={{
        nb_commands_gte: undefined,
        nb_commands_lte: 0,
      }}
    />
  </FilterList>
);
const HasNewsletterFilter = () => (
  <FilterList label="Has newsletter" icon={<MailIcon />}>
    <FilterListItem label="True" value={{ has_newsletter: true }} />
    <FilterListItem label="False" value={{ has_newsletter: false }} />
  </FilterList>
);

const KichtaStatut = () => (
  <FilterList label="Statut kichta" icon={<MailIcon />}>
    <FilterListItem label="Bleu" value={{ informations_personnelles.statut: "Vert" }} />

  </FilterList>
);
const Card = withStyles((theme) => ({
  root: {
    [theme.breakpoints.up("sm")]: {
      order: -1, // display on the left rather than on the right of the list
      width: "15em",
      marginRight: "1em",
    },
    [theme.breakpoints.down("sm")]: {
      display: "none",
    },
  },
}))(MuiCard);

const FilterSidebar = () => (
  <Card>
    <CardContent>
      <FilterLiveSearch label="Rechercher par ID" source="id" />
      <LastVisitedFilter />
      <KichtaStatut />
      {/* <HasOrderedFilter /> */}
      {/* <HasNewsletterFilter /> */}
    </CardContent>
  </Card>
);

    enter code here

export { FilterSidebar };

它是这个过滤器 =>

const KichtaStatut = () => (
  <FilterList label="Statut kichta" icon={<MailIcon />}>
    <FilterListItem label="Bleu" value={{ informations_personnelles.statut: "Vert" }} />

  </FilterList>
);

答案 1 :(得分:0)

我认为您发布的代码可能存在编译错误。 试试这个:

const KichtaStatut = () => (
    <FilterList label="Statut kichta" icon={<MailIcon />}>
        <FilterListItem
            label="Bleu"
            // Note the quotes around the field name
            value={{ 'informations_personnelles.statut': "Vert" }}
        />
    </FilterList>
);
相关问题