根据API中的属性显示特定的表单

时间:2019-05-09 08:44:33

标签: reactjs react-admin admin-on-rest

我有自己的<List>硬件,其中显示了datababse中的每个硬件。每个项目都有属性odata.type,它表示硬件的类型(RAM,CPU等)。 如果我单击某些项目,它将重定向到HardwareEdit表单。我想显示基于odata.type属性的特定形式。例如,如果我要编辑某些CPU,则将显示CPUEdit表单而不是HardwareEdit表单。有可能吗?到目前为止,我将这段代码放在一起,但无法正常工作:

这将返回硬件类型:

const HWType = ({ record }) => {
  return record["odata.type"];
}

我的重定向常量:

const redirect = `/Hardware/${record => record.Id}`;

HardwareList:

export const HardwareList = props => (
 <List
  sort={{ field: "Id", order: "ASC" }}
  filters={<HardwareFilter />}
  {...props}
>
<Datagrid rowClick="edit">
  <TextField source="Name" />
  <ReferenceField label="Type" source="Id" reference="Hardware" allowEmpty>
    <FunctionField label="Type" render={record => record ? record["odata.type"].split(".")[1] : null} />
  </ReferenceField>
  <ReferenceField label="SocketType" source="SocketTypeId" reference="CPUSocketType" allowEmpty>
    <FunctionField label="Name" render={record => record ? record.Name : null} />
  </ReferenceField>
  <TextField source="CapacityGB" label="Capacity(GB)" allowEmpty/>
  <TextField source="Barcode" />
  <DateField source="CreatedDate" showTime />
</Datagrid>
</List>
);

和HardwareEdit表单:

export const HardwareEdit = props => (
<Edit {...props} title={<HardwareTitle />} aside={<Aside />}>
  {record => record["odata.type"] === HWType ? redirect={redirect} : null}
  <SimpleForm>
    <DisabledInput source="Id" />
    <TextInput source="Name" validate={required()} />
    <TextInput source="Barcode" />
    <DateField source="CreatedDate" showTime
    locales={process.env.REACT_APP_LOCALE}
    disabled={true} />
    <FileInput source="files" label="Related files" accept="" multiple={true}>
      <FileField source="Filename" title="Filename" />
    </FileInput>
  </SimpleForm>
</Edit>
);

谢谢您的任何建议。

0 个答案:

没有答案