diff --git a/src/components/swapv2/LimitOrder/OrderBook/index.tsx b/src/components/swapv2/LimitOrder/OrderBook/index.tsx index e422f7b0d0..6a8fb2aedc 100644 --- a/src/components/swapv2/LimitOrder/OrderBook/index.tsx +++ b/src/components/swapv2/LimitOrder/OrderBook/index.tsx @@ -20,6 +20,7 @@ import { formatDisplayNumber } from 'utils/numbers' import RefreshLoading from '../ListLimitOrder/RefreshLoading' import { NoResultWrapper } from '../ListOrder' +import { groupToMap } from '../helpers' import { LimitOrderFromTokenPair, LimitOrderFromTokenPairFormatted } from '../type' import OrderItem from './OrderItem' import TableHeader from './TableHeader' @@ -130,7 +131,7 @@ const formatOrders = ( // Merge orders with the same rate const mergedOrders: LimitOrderFromTokenPairFormatted[] = [] - const groupOrders = Map.groupBy(ordersFormatted, ({ rate }: LimitOrderFromTokenPairFormatted) => rate) + const groupOrders = groupToMap(ordersFormatted, ({ rate }: LimitOrderFromTokenPairFormatted) => rate) groupOrders.forEach((group: LimitOrderFromTokenPairFormatted[]) => { const mergedOrder = group?.reduce( diff --git a/src/components/swapv2/LimitOrder/helpers.ts b/src/components/swapv2/LimitOrder/helpers.ts index fdc05df0a1..dfdf1b5b77 100644 --- a/src/components/swapv2/LimitOrder/helpers.ts +++ b/src/components/swapv2/LimitOrder/helpers.ts @@ -166,3 +166,13 @@ export const getPayloadTracking = (order: LimitOrder, networkName: string, paylo order_id: id, } } + +export const groupToMap = (items: Iterable, keySelector: (item: T, index?: number) => K): Map => { + return [...items].reduce((accumulator: Map, currentValue: T) => { + const newValue = accumulator.get(keySelector(currentValue)) || [] + newValue.push(currentValue) + accumulator.set(keySelector(currentValue), newValue) + + return accumulator + }, new Map()) +} diff --git a/src/types/object.d.ts b/src/types/object.d.ts index fa8c73f1b5..2bb60cea06 100644 --- a/src/types/object.d.ts +++ b/src/types/object.d.ts @@ -4,23 +4,4 @@ interface ObjectConstructor { * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. */ keys(o: { [keys in T]: unknown }): T[] - - /** - * Groups members of an iterable according to the return value of the passed callback. - * @param items An iterable. - * @param keySelector A callback which will be invoked for each item in items. - */ - groupBy( - items: Iterable, - keySelector: (item: T, index: number) => K, - ): Partial> -} - -interface MapConstructor { - /** - * Groups members of an iterable according to the return value of the passed callback. - * @param items An iterable. - * @param keySelector A callback which will be invoked for each item in items. - */ - groupBy(items: Iterable, keySelector: (item: T, index: number) => K): Map }