Are you submitting a bug report or a feature request?
Feature Request
What is the current behavior?
I have following use case in my form:
Fields:
currencyPair
- defines pair of fromCurrency
and toCurrency
fromCurrency
- source currency to get exchangeRate
for
toCurrency
- desination currency to get exchangeRate
for
exchangeRate
- the exchange rate fromCurrency
to toCurrency
With following calculation rules:
- When
currencyPair
changes - fill fromCurrency
and toCurrency
from currencyPair
and fetch exchangeRate
- When
fromCurrency
changes, fetch echangeRate
- When
toCurrency
changes fetch exchangeRate
When i define the decorator like so:
createDecorator(
{
field: "currencyPair",
updates: (currencyPair) => {
"fromCurrency": currencyPair.fromCurrency,
"toCurrency": currencyPair.toCurrency,
"exchangeRate": fetchRate(currencyPair.fromCurrency, currencyPair.toCurrency)
},
},
{
field: "fromCurrency",
updates: {
"exchangeRate": (fromCurrency, allValues) => fetchRate(fromCurrency, allValues.toCurrency)
},
},
{
field: "toCurrency",
updates: {
"exchangeRate": (toCurrency, allValues) => fetchRate(allValues.fromCurrency, toCurrency)
},
},
)
The problem is when currencyPair
field is changed, exchangeRate
is unnecessarily fetched three times.
What is the expected behavior?
I'd love a way to configure field update blocks on chained field updates. For example:
createDecorator(
{
field: "currencyPair",
updates: (currencyPair) => {
"fromCurrency": currencyPair.fromCurrency,
"toCurrency": currencyPair.toCurrency,
"exchangeRate": fetchRate(currencyPair.fromCurrency, currencyPair.toCurrency)
},
blockUpdates: ["exchangeRate"]
},
{
field: "fromCurrency",
updates: {
"exchangeRate": (fromCurrency, allValues) => fetchRate(fromCurrency, allValues.toCurrency)
},
},
{
field: "toCurrency",
updates: {
"exchangeRate": (toCurrency, allValues) => fetchRate(allValues.fromCurrency, toCurrency)
},
},
)
This way when currencyPair
changes, the exchangeRate
will be fetched only once, but still will be fetched when either fromCurrency
or toCurrency
changes.
Any other proposals on how to tackle this issue welcomed.