Мне очень трудно получить доступ к объектам в массиве полей по рассчитанной цене поля * количество = общее количество. Попробовал несколько регулярных выражений для декорированного поля, включая field: /invoiceItems\[\d+\]/ ,
для доступа и решения из этого PR (https://github.com/final-form/final-form-calculate/pull/21/commits/dab00f8125079fed402712a4b0ed71663be0ba14)
В PR я не могу получить доступ к индексу. Каков наилучший способ сделать расчет с окончательной формой расчета и массивами? Я попробовал это и в Formik, но столкнулся с той же проблемой.
Код
Форма:
onSubmit={onSubmit}
decorators={[calculator]}
mutators={{
...arrayMutators,
}}
initialValues={{
companyName: "",
companyAddress: "",
companyCity: "",
companyState: "",
companyZip: "",
invoiceNumber: shortid.generate(),
invoicePaymentStatus: "",
invoiceStatus: "",
invoiceItems: [
],
invoiceDate: new Date(),
invoiceDueDate: new Date(
new Date().getTime() + 7 * 24 * 60 * 60 * 1000
),
clientFname: "",
clientLname: "",
billingAddress: "",
billingCity: "",
billingState: "",
billingZip: "",
propertyAddress: "",
propertyCity: "",
propertyState: "",
propertyZip: "",
invoiceTotal: "",
tax: "",
}}
render={({
handleSubmit,
reset,
submitting,
pristine,
values,
form: {
mutators: { push, pop },
},
}) => (
<form onSubmit={handleSubmit} noValidate>
Массив поля:
type="button"
onClick={() => push("invoiceItems", undefined)}
>
Add Line Item
</button>
<FieldArray name="invoiceItems">
{({ fields }) =>
fields.map((item, index) => (
<div key={item}>
<Field
name={`${item}.description`}
component={TextField}
placeholder="Description"
/>
<Field
name={`${item}.price`}
component={TextField}
placeholder="Price"
/>
<Field
name={`${item}.quantity`}
component={TextField}
placeholder="Quantity"
/>
<Field
name={`${item}.total`}
component={TextField}
placeholder="Total"
/>
<span
onClick={() => fields.remove(index)}
style={{ cursor: "pointer" }}
>
❌
</span>
</div>
))
}
</FieldArray>
Вот некоторые из описанных мной декораторов. (Это катастрофа с таким количеством разных попыток и игнорировать математику, поскольку мы просто пытались заставить ее работать)
{
field: /invoiceItems\[\d+\]/ ,
updates: {(name, index, value) => {
[`invoiceItems[${index}].total`]: (_ignored, values) => 2
//invoiceItems.total: (price, allValues) => price * 2
}
}
)