Окончательные формы для расчета документов, скажем, что средство обновления может быть:
Либо объект функций средства обновления, либо функция, которая генерирует обновления для нескольких полей.
В вашем примере код был неким сочетанием между ними. Также value.sum
содержит введенные числа, а не value
.
Вот как это сделать правильно, с объектом функций обновления :
const calculator = createDecorator({
field: /day\[\d\]\.sum/,
updates: {
total: (ignoredValue, allValues) => (allValues.day || []).reduce((sum, value) => sum + Number(value.sum || 0), 0)
}
});
или обновления для нескольких полей (на самом деле только одно, но может быть и больше):
const calculator = createDecorator({
field: /day\[\d\]\.sum/,
updates: (ignoredValue, fieldName, allValues) => {
const total = (allValues.day || []).reduce((sum, value) => sum + Number(value.sum || 0), 0);
return { total };
}
});
Кроме того, вот определения обновлений Typescript, для справки:
export type UpdatesByName = {
[FieldName: string]: (value: any, allValues?: Object, prevValues?: Object) => any
}
export type UpdatesForAll = (
value: any,
field: string,
allValues?: Object,
prevValues?: Object,
) => { [FieldName: string]: any }
export type Updates = UpdatesByName | UpdatesForAll