import React from 'react'; import { View, FlatList } from 'react-native'; import { type SetSeq } from 'immutable'; import ProductRecord from '../records/ProductRecord'; import { compose, pure } from 'recompose'; import { pipe } from 'ramda'; import { withFilter } from '../enhancers/filterEnhancers'; import { compareQuantity } from '../helpers/QuantityHelpers'; const sortByDistance = (productsSeq: SetSeq): SetSeq => { return productsSeq.sort((left, right) => left.distance - right.distance); }; const sortByLastUpdated = (productsSeq: SetSeq): SetSeq => { return productsSeq.sort((left, right) => right.lastupdated - left.lastupdated); }; const sortByQuantity = (productsSeq: SetSeq): SetSeq => { return productsSeq.sort((left, right) => { const quantityCompare = compareQuantity(left.quantity, right.quantity); return quantityCompare === 0 ? left.distance - right.distance : quantityCompare; }); }; const getSortBy = filter => { switch (filter.orderby) { case 'quantity': return sortByQuantity; case 'lastupdated': return sortByLastUpdated; default: return sortByDistance; } }; const intoArray = (productsSeq: SetSeq): Array => productsSeq ? productsSeq.toArray() : []; const ProductList = props => { const { filter, productsSeq, children } = props; if (!productsSeq) { return null; } const items = pipe( getSortBy(filter), intoArray )(productsSeq); return ( children(item)} keyExtractor={item => item.id} /> ); }; export default compose( pure, withFilter )(ProductList);