Skip to main content

Compute

Overview​

The compute option can be used to extend, modify, and remove properties from the basket. This is often desirable to model the basket in a way that is more convenient for your application, remove sensitive data, or to compute derived properties.

The compute function​

The output of the compute function is merged with the basket object with the following rules:

  • Non-existing properties are added.
  • Existing properties are overwritten.
  • Properties set to undefined are removed.
important

The id property can NOT be removed or modified.

Deriving properties​

declo.config.ts
.compute((basket) => {
const products = basket.objects.filter((obj) => obj.type === 'product')
const delivery = basket.objects.find((obj) => obj.type === 'delivery')
const totalPrice = basket.objects.reduce((acc, obj) => acc + obj.price, 0)
const totalVat = totalPrice * 0.25

return {
products,
delivery,
totalVat,
totalPrice,
}
})

Modifying properties​

declo.config.ts
.compute((basket) => {
return {
data: { ...basket.data, discount: 0.1, },
objects: basket.objects.filter((obj) => obj.type !== 'delivery'),
}
})

Removing properties​

declo.config.ts
.compute((basket) => {
return {
data: undefined,
}
})

Combining all​

declo.config.ts
.compute((basket) => {
const products = basket.objects.filter((obj) => obj.type === 'product')
const delivery = basket.objects.find((obj) => obj.type === 'delivery')
const totalPrice = basket.objects.reduce((acc, obj) => acc + obj.price, 0)
const totalVat = totalPrice * 0.25

return {
data: undefined,
objects: undefined,
products,
delivery,
totalVat,
totalPrice,
}
})