JSFiddle - React, Tailwind, and code Playground

by Alexey

JavaScript

const user = {
  name: 'Kim',
  active: true,
  cart: [],
  purchases: []
}
const history1 = [];

/* function compose(f, g) {
  console.log(g)

  return function(...args) {
    return f(g(...args))
  }
} */

const purchaseItem = (...fns) => {
  return fns.reduce((f, g) => {
    return function(...args) {
      console.log(args)
      return f(g(...args))
    }
  })
};

purchaseItem(emptyUserCart, buyItem, applyTaxToItems, addItemToCart)(user, {
  name: 'laptop',
  price: 50
});






function addItemToCart(user, item) {
  history1.push(user)
  const updatedCart = user.cart.concat(item)
  return Object.assign({}, user, {
    cart: updatedCart
  });
}

function applyTaxToItems(user) {
  history1.push(user)
  const {
    cart
  } = user;
  const taxRate = 1.3;
  const updatedCart = cart.map(item => {
    return {
      name: item.name,
      price: item.price * taxRate
    }
  })
  return Object.assign({}, user, {
    cart: updatedCart
  });
}

function buyItem(user) {
  history1.push(user)
  const itemsInCart = user.cart;
  return Object.assign({}, user, {
    purchases: itemsInCart
  });
}

function emptyUserCart(user) {
  history1.push(user)
  return Object.assign({}, user, {
    cart: []
  });
}

function refundItem() {

}

function getUserState() {

}

function goBack() {

}

function goForward() {

}