基于react admin中的记录的字段/输入标签

时间:2018-12-17 15:37:50

标签: reactjs react-admin recompose

我希望记录的一部分包含在BooleanField(和BooleanInput)的标签中。我正在尝试使用WithProps完成此操作。

如果我使用

<BooleanField source="FileSystem" label="FileSystem" />

这似乎很好。如果可以,我会尝试包装它

const makeLabel = (props)=>{
    let label = `Filesystem for ${props.record.id}`;

    return {label};
}

const withLabel = withProps(makeLabel);
const BooleanFieldWithLabel = compose(withLabel)((props)=>{
    console.log("props after compose",props);
    return <BooleanField {...props}/>
});

然后使用<BooleanFieldWithLabel source="FileSystem" />它不会呈现任何标签。我尝试了几种不同的方法,尽管在console.log中可以看到正确的标签位于props中,但似乎没有任何效果。我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我无法在“显示”页面上基于字段的值显示标签。 从react-admin源代码来看,似乎只有我在“ SimpleShowLayout”或“ TabbedShowLayout”的直接子级上设置“ addLabel”道具,然后我才能在自定义字段上看到标签。

但是它不是可配置的,我想基于字段的值显示/隐藏标签。我是否需要实现自己的自定义“ SimpleShowLayout”或“ TabbedShowLayout”?还是有更好的方法?

更新我的帖子。 我只是通过实现以下HOC来找出解决方案。我想知道是否有更好的方法来实现相同的功能?

import React from "react";
    import get from "lodash/get";
    import { TextField, DateField, Labeled } from "react-admin";

    const NullableField = WrappedComponent => props => {
      const { record, source } = props;
      const value = get(record, source);
      return value ? (
        <Labeled {...props}>
          <WrappedComponent {...props} />
        </Labeled>
      ) : null;
    };
    const NullableTextField = NullableField(TextField);
    const NullableDateField = NullableField(DateField);
    export { NullableTextField, NullableDateField };