computeFrom()
function computeFrom<TForm, TTarget>(
sources,
target,
computeFn,
options?): void;
Defined in: core/behavior/behaviors/compute-from.ts:82
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ
Type Parametersβ
TFormβ
TForm
TTargetβ
TTarget
Parametersβ
sourcesβ
FieldPathNode<TForm, any, unknown>[]
ΠΠ°ΡΡΠΈΠ² ΠΏΠΎΠ»Π΅ΠΉ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
targetβ
FieldPathNode<TForm, TTarget>
ΠΠΎΠ»Π΅ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
computeFnβ
(values) => TTarget
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ)
options?β
ComputeFromOptions<TForm>
ΠΠΏΡΠΈΠΈ (debounce, condition, trigger)
Returnsβ
void
Examplesβ
import { computeFrom, type BehaviorSchemaFn } from '@reformer/core/behaviors';
interface OrderForm {
price: number;
quantity: number;
total: number;
}
export const orderBehavior: BehaviorSchemaFn<OrderForm> = (path) => {
computeFrom(
[path.price, path.quantity],
path.total,
(values) =>
(typeof values.price === 'number' ? values.price : 0) *
(typeof values.quantity === 'number' ? values.quantity : 0),
);
};
import { computeFrom, type BehaviorSchemaFn } from '@reformer/core/behaviors';
interface MortgageForm {
loanType: 'mortgage' | 'consumer';
loanAmount: number;
loanTerm: number;
interestRate: number;
monthlyPayment: number;
}
function annuity(values: MortgageForm): number {
const { loanAmount, loanTerm, interestRate } = values;
if (!loanAmount || !loanTerm || !interestRate) return 0;
const r = interestRate / 100 / 12;
const n = loanTerm;
return Math.round((loanAmount * r * Math.pow(1 + r, n)) / (Math.pow(1 + r, n) - 1));
}
export const mortgageBehavior: BehaviorSchemaFn<MortgageForm> = (path) => {
computeFrom(
[path.loanAmount, path.loanTerm, path.interestRate],
path.monthlyPayment,
annuity,
{
debounce: 300, // Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ keystroke
condition: (form) => form.loanType === 'mortgage', // ΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΈΠΏΠΎΡΠ΅ΠΊΠΈ
},
);
};