Я следую этой документации, чтобы использовать FormDataConsumer
для отображения / скрытия ввода. Но у меня есть вложенный ArrayInput / FormDataConsumer, как показано ниже:
export const MyClassCreate = ({ permissions, ...props }) => (
<Create {...props}>
<TabbedForm>
<FormTab label="summary">
<SelectInput source="className" choices={choices} optionText="choiceType"
optionValue="className"disableValue="not_available"
/>
<TextInput source="field1" />
<NumberInput source="field2" />
<FormDataConsumer>
{({ formData, ...rest }) =>
formData.className === "my.package.MyClass2" && (
<TextInput source="field3" {...rest} />
)
}
</FormDataConsumer>
<FormDataConsumer>
{({ formData, ...rest }) =>
formData.className === "my.package.MyClass1" && (
<Fragment>
<NumberInput source="field4" {...rest} />
<ArrayInput source="arrayField1">
<SimpleFormIterator>
<SelectInput source="field5.subField6" choices={choices}
optionText="choiceType"
optionValue="className"
disableValue="not_available"
/>
<TextInput source="field5.subField7" />
<FormDataConsumer>
{({ formData, scopedFormData, getSource, ...rest }) =>
scopedFormData.field5 &&
scopedFormData.field5.subField8 &&
scopedFormData.field5.subField8 ===
"my.package.MyClass3" && (
<NumberInput
source={getSource("field5.subField9")}
{...rest}
/>
)
}
</FormDataConsumer>
<FormDataConsumer>
{({ formData, scopedFormData, getSource, ...rest }) =>
scopedFormData.field5 &&
scopedFormData.field5.subField8 &&
scopedFormData.field5.subField8 ===
"my.package.MyClass4" && (
<ArrayInput source={getSource("reward.rewards")}>
<SimpleFormIterator>
<SelectInput source={getSource("problemField1")} choices={choices}
optionText="choiceType" optionValue="className"
disableValue="not_available"
/>
<TextInput source={getSource("problemField2")} />
<FormDataConsumer>
{({
formData,
scopedFormData,
getSource,
...rest
}) =>
scopedFormData.field8 &&
scopedFormData.field8 ===
"my.package.MyClass5" && (
<NumberInput
source={getSource("field8")}
{...rest}
/>
)
}
</FormDataConsumer>
</SimpleFormIterator>
</ArrayInput>
)
}
</FormDataConsumer>
</SimpleFormIterator>
</ArrayInput>
</Fragment>
)
}
</FormDataConsumer>
</FormTab>
<FormTab label="campaign">
<DateInput source="startTime" parse={dateParser} />
<DateInput source="expirationTime" parse={dateParser} />
</FormTab>
</TabbedForm>
</Create>
);
Моя проблема в том, что в problemField1
и problemField2
, хотя я звоню getSource
, как и должно быть, фактическое разрешение источника все еще используя ссылку на источник разыменования первого уровня. Есть ли способ сказать моему вложенному / внутреннему getSource
, чтобы он указывал на правильный «уровень»?