JSFiddle - React, Tailwind, and code Playground

by evgkch

JavaScript

const getPrice = (pricesArray) => (key) => {
		
    let pricesMap = new Map(pricesArray)
    let keys = Array.from(pricesMap.keys())

    return (pricesMap.has(key))
        ? pricesMap.get(key)
        : pricesMap.get(getKeyIndex(keys)(key));
}


const getKeyIndex = (keys) => (key) => {

    let keyPos = [...keys, key]
        .sort((a, b) => a - b)
        .findIndex(i => i === key)

    return keys[keyPos - 1];
}

const getPossibleQty = (qty, moq) =>

    moq * Math.ceil(qty / moq)


const setLocalStore = (getPossibleQty, getPrice) => (qty) => (el) =>

    ({
        id: el.id,
        dstr: el.dstr,
        moq: el.moq,
        curr: el.curr,
        qty: getPossibleQty(qty, el.moq),
        price: getPrice(el.prices)(getPossibleQty(qty, el.moq)),
        sum: Math.round(getPrice(el.prices)(getPossibleQty(qty, el.moq)) * getPossibleQty(qty, el.moq) * 100) / 100,
    })

    
const sortDistributors = (getLocalStore) => (data) =>

    data.map(getLocalStore).sort( (a, b) =>  a.sum - b.sum)