JSFiddle - React, Tailwind, and code Playground

by amindunited

JavaScript

const dealFuntions = {
  // ads, number of items, new price per unit
  volumePrice: (filtered, numItems, pricePerUnit) => {
    const arrLen = filtered.length;
    // the last item in the array that we will apply the deal to
    const lastIndex = ( Math.floor(arrLen / numItems) ) * numItems;
    const dealObject = {
      price: pricePerUnit,
      msg: 'Discount Applied',
    };
    const result = filtered.map((item, index) => {
      if (index < lastIndex) {
        return Object.assign({}, item, dealObject);
      }
      return item;
    });
    console.log('volumePrice ', result);
    return result;
  }
}

const processDeals = (cart, deals) => {

  const results = cart.slice();
  console.log('processing, ', cart, deals);
  const dealResults = deals.map((deal) => {
    const filtered = cart.filter((item) => {
      return (item.id === deal.id);
    });
    console.log('filtered', filtered);
    let dealF = dealFuntions[deal.dealType](filtered, deal.volume, deal.pricePerUnit);
    console.log('dealF', dealF);
    return dealF;
  });

  results.map((item) => {
    dealResults.filter((deal) => {
      if (deal.uid === item.uid ) { return deal }
      return false
    });
    return dealResults.length ? dealResults[1] : item;
  });
  return results;
}

const cartSort = (cart) => {
  const orgCart = cart.slice();

  let sorted = orgCart.sort((prev, curr) => {
    return adIds.indexOf(prev.id) - adIds.indexOf(curr.id);
  });

  return sorted;
}



let items = [
  {id:1, price:1},
  {id:2, price:1},
  {id:3, price:1},
  {id:4, price:1}, 
  {id:5, price:1}, 
  {id:6, price:1} ,
  {id:7, price:1}
];

let numItems = 4;
volumePrice(items, numItems, "230");