State Operators
upsertItem
Usage
ctx.setState(
patch<FoodModel>({
foods: upsertItem<Food>(f => f.id === foodId, food)
})
);State Operator Code
import { StateOperator } from '@ngxs/store';
import { compose, iif, insertItem, NoInfer, patch, Predicate, updateItem } from '@ngxs/store/operators';
export function upsertItem<T>(
selector: number | Predicate<T>,
upsertValue: NoInfer<T>
): StateOperator<T[]> {
return compose<T[]>(
items => <T[]>(items || []),
iif<T[]>(
items => Number(selector) === selector,
iif<T[]>(
items => selector < items.length,
updateItem(selector, patch(upsertValue)),
insertItem(upsertValue, <number>selector)
),
iif<T[]>(
items => items.some(<Predicate<T>>selector),
updateItem(selector, patch(upsertValue)),
insertItem(upsertValue)
)
)
);
}Collaborate with your awesome operator!
Last updated

