stockOrder$.tuple(stock$).addDataReaction({
dataConsumer: ([stockOrders, stocks]) => {
let newAlerts: StockAlert[] = [];
stockOrders.forEach(stockOrder => {
const stock = stocks.find(it => it.id === stockOrder.stockId);
let operation: 'buy' | 'sell' | 'keep';
if (stock.price >= stockOrder.sell) {
} else if (stock.price <= stockOrder.buy) {
orderSnapshot: stockOrder,
let nextState: IKeyValuePairs<StockAlert[]> = {...alertsByStock$.getData()};
newAlerts.forEach(newAlert => {
if (nextState[newAlert.stockSnapshot.id] == null) {
nextState[newAlert.stockSnapshot.id] = [newAlert];
let alertsForStock: StockAlert[] = nextState[newAlert.stockSnapshot.id];
let lastAlert = alertsForStock[alertsForStock.length - 1];
!Objects.deepEquals(newAlert.stockSnapshot, lastAlert.stockSnapshot) ||
!Objects.deepEquals(newAlert.orderSnapshot, lastAlert.orderSnapshot)
alertsForStock.push(newAlert);
alertsByStock$.do.update(nextState);