diff --git a/js/apis/FoodItemsApi.js b/js/apis/FoodItemsApi.js index 1d0f616..386ef37 100644 --- a/js/apis/FoodItemsApi.js +++ b/js/apis/FoodItemsApi.js @@ -19,6 +19,7 @@ export type RawFoodItem = { latitude: number, longitude: number, distance: number, + lastupdated: number, }; export type FoodItemsForLocation = { diff --git a/js/components/FilterModal.js b/js/components/FilterModal.js index 9c888c5..fe6e4c4 100644 --- a/js/components/FilterModal.js +++ b/js/components/FilterModal.js @@ -53,6 +53,7 @@ const FilterModal = (props: Props) => { value={isChecked ? 0 : 1} checked={isChecked} onCheck={toggleCategory(category, isChecked)} + label="" /> diff --git a/js/components/FoodItemTile.js b/js/components/FoodItemTile.js index 3ea16c1..00422e3 100644 --- a/js/components/FoodItemTile.js +++ b/js/components/FoodItemTile.js @@ -7,37 +7,33 @@ import typeof PlaceRecord from '../records/PlaceRecord'; import theme from '../ui-theme'; import { Link } from 'react-router-native'; import { routeWithTitle } from '../helpers/RouteHelpers'; -import { TileBox, StrongText, SubText, Thumbnail } from './ItemTile'; +import { TileBox, StrongText, SubText, Thumbnail, QuantityLine } from './ItemTile'; import { withPlace } from '../enhancers/placeEnhancers'; const PlaceNameAndDistance = withPlace(({ place = {}, distance = 999.9 }: { place: PlaceRecord, distance: number }) => { return {`${place.name || 'Loading...'} - ${parseFloat(distance).toFixed(1)} mi`}; }); -export default pure( - ({ foodItem }: { foodItem: FoodItemRecord }) => { - if (!foodItem) { - return ; - } - - return ( - - - - - - {foodItem.name || ''} - - - - - - ); +export default pure(({ foodItem }: { foodItem: FoodItemRecord }) => { + if (!foodItem) { + return ; } -); + + return ( + + + + + + {foodItem.name || ''} + + + + + + + ); +}); diff --git a/js/components/ItemTile.js b/js/components/ItemTile.js index c31530c..7f1be29 100644 --- a/js/components/ItemTile.js +++ b/js/components/ItemTile.js @@ -2,8 +2,15 @@ import React from 'react'; import { Text, View, Image } from 'react-native'; import theme from '../ui-theme'; +import { getQuantityLabelText } from '../helpers/QuantityHelpers'; +import moment from 'moment'; +import type { Quantity } from '../constants/QuantityConstants'; -export const Thumbnail = ({ thumb }: { thumb: ?string }) => +const getRelativeDateText = (lastupdated: ?number) => { + return lastupdated ? ` - ${moment(lastupdated).fromNow()}` : ''; +}; + +export const Thumbnail = ({ thumb }: { thumb: ?string }) => ( margin: 10, }} > - {!!thumb && + {!!thumb && ( borderRadius: Math.round(theme.itemTile.thumbnailSize / 2), }} source={{ uri: thumb }} - />} - ; + /> + )} + +); export const StrongText = ({ children, style = {} }: { children?: string, style?: Object }) => { - return ( - - {children} - - ); + return {children}; }; export const SubText = ({ children, style = {} }: { children?: string, style?: Object }) => { - return ( - - {children} - - ); + return {children}; }; -export const TileBox = ({ children, style = {} }: { children?: any, style?: Object }) => - +export const TileBox = ({ children, style = {} }: { children?: any, style?: Object }) => ( + {children} - ; + +); + +export const QuantityLine = ({ quantity, lastupdated }: { quantity: Quantity, lastupdated: ?number }) => ( + + {getQuantityLabelText(quantity)} + {getRelativeDateText(lastupdated)} + +); diff --git a/js/components/QuantityPicker.js b/js/components/QuantityPicker.js index 89b3eab..7d03690 100644 --- a/js/components/QuantityPicker.js +++ b/js/components/QuantityPicker.js @@ -1,6 +1,6 @@ // @flow import React from 'react'; -import { getQuantityText } from '../helpers/QuantityHelpers'; +import { getQuantityDropdownText } from '../helpers/QuantityHelpers'; import { Picker, View } from 'react-native'; import theme from '../ui-theme'; import { pure } from 'recompose'; @@ -16,7 +16,7 @@ const getItemColor = (selected, current) => (selected === current ? selectedColo const renderQuantityItem = (selectedQuantity: Quantity) => (quantity: Quantity) => ( diff --git a/js/helpers/QuantityHelpers.js b/js/helpers/QuantityHelpers.js index 6180331..264c52a 100644 --- a/js/helpers/QuantityHelpers.js +++ b/js/helpers/QuantityHelpers.js @@ -1,15 +1,25 @@ // @flow import { type Quantity } from '../constants/QuantityConstants'; -export const getQuantityText = (quantity: Quantity) => { +const quantityLabels: { [Quantity]: string } = { + none: 'None left', + few: 'A few left', + lots: 'A lot left', + many: 'Plenty left', +}; + +export const getQuantityLabelText = (quantity: Quantity) => quantityLabels[quantity] || quantityLabels['many']; + +export const getQuantityDropdownText = (quantity: Quantity) => { + const label = quantityLabels[quantity]; switch (quantity) { case 'none': - return 'None left - 0'; + return `${label} - 0`; case 'few': - return 'A few left - 6 or fewer'; + return `${label} - 6 or fewer`; case 'lots': - return 'A lot Left - 10 or fewer'; + return `${label} - 10 or fewer`; default: - return 'Plenty left - more than 10'; + return `${label} - more than 10`; } }; diff --git a/js/records/FoodItemRecord.js b/js/records/FoodItemRecord.js index e985602..5462ca5 100644 --- a/js/records/FoodItemRecord.js +++ b/js/records/FoodItemRecord.js @@ -16,6 +16,7 @@ export type FoodItem = { images: List, thumbImage: ?string, titleImage: ?string, + lastupdated: number, }; const FoodRecordDefaults: FoodItem = { @@ -30,6 +31,7 @@ const FoodRecordDefaults: FoodItem = { images: new List(), thumbImage: '', titleImage: '', + lastupdated: 0, }; const FoodItemRecord = Record(FoodRecordDefaults, 'FoodItemRecord'); diff --git a/package.json b/package.json index a5ae086..c6b2ccb 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "babel-preset-es2015": "^6.24.0", "immutable": "^3.8.1", + "moment": "^2.19.2", "ramda": "^0.24.1", "react": "~15.4.1", "react-native": "~0.42.0", diff --git a/yarn.lock b/yarn.lock index 1bb7dc9..81c85ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3208,6 +3208,10 @@ moment@2.x.x: version "2.18.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" +moment@^2.19.2: + version "2.19.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.2.tgz#8a7f774c95a64550b4c7ebd496683908f9419dbe" + morgan@~1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2"