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,
}
})