diff --git a/backend/build/server.js b/backend/build/server.js index f585d34..f6aa941 100644 --- a/backend/build/server.js +++ b/backend/build/server.js @@ -79,7 +79,7 @@ router.get('/search', function () { var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(req, res, next) { - var bounds, minPrice, maxPrice, minSize, maxSize, rooms, adType, properties, query, _bounds$split$map, _bounds$split$map2, lat1, lng1, lat2, lng2, box, all; + var bounds, minPrice, maxPrice, minSize, maxSize, rooms, adType, properties, query, _bounds$split$map, _bounds$split$map2, lat1, lng1, lat2, lng2, box, price, allRooms, or, size, all; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { @@ -117,77 +117,85 @@ }); } - if (minPrice) { + if (minPrice || maxPrice) { + price = {}; + + if (minPrice) { + price["$gte"] = parseFloat(minPrice); + } + + if (maxPrice) { + price["$lte"] = parseFloat(maxPrice); + } + query = Object.assign(query, { - price: { - "$gte": parseFloat(minPrice), - "$ne": -1 - } + price: price }); } - if (maxPrice) { - query = Object.assign(query, { - price: { - "$lte": parseFloat(maxPrice), - "$ne": -1 + if (rooms) { + allRooms = rooms.split(','); + or = allRooms.map(function (val) { + if (val === '4+') { + return { + rooms: { + "$gte": 4 + } + }; } + return { + rooms: parseFloat(val) + }; + }); + + + query = Object.assign(query, { + "$or": or }); } - if (rooms === "4+") { + if (minSize || maxSize) { + size = {}; + + if (minSize) { + size["$gte"] = parseFloat(minSize); + } + + if (maxSize) { + size["$lte"] = parseFloat(maxSize); + } + query = Object.assign(query, { - rooms: { - "$gte": 4 - } - }); - } else if (rooms) { - query = Object.assign(query, { - rooms: parseFloat(rooms) + size: size }); } - if (minSize) { - query = Object.assign(query, { - size: { - "$gte": parseFloat(minSize) - } - }); - } - - if (maxSize) { - query = Object.assign(query, { - size: { - "$lte": parseFloat(maxSize) - } - }); - } - - _context.next = 19; + console.log('QUERY: ', query); + _context.next = 18; return properties.find(query).toArray(); - case 19: + case 18: all = _context.sent; res.json(all); res.end(); - _context.next = 28; + _context.next = 27; break; - case 24: - _context.prev = 24; + case 23: + _context.prev = 23; _context.t0 = _context['catch'](0); console.log('error:', _context.t0); next(_context.t0); - case 28: + case 27: case 'end': return _context.stop(); } } - }, _callee, undefined, [[0, 24]]); + }, _callee, undefined, [[0, 23]]); })); return function (_x, _x2, _x3) { diff --git a/backend/server.js b/backend/server.js index 093b5e6..79ad61d 100644 --- a/backend/server.js +++ b/backend/server.js @@ -48,52 +48,57 @@ router.get('/search', async (req, res, next) => { }); } - if (minPrice) { + if (minPrice || maxPrice) { + const price = {} + if (minPrice) { + price["$gte"] = parseFloat(minPrice); + } + + if (maxPrice) { + price["$lte"] = parseFloat(maxPrice); + } + query = Object.assign(query, { - price: { - "$gte": parseFloat(minPrice), - "$ne": -1 - } + price }); } - if (maxPrice) { - query = Object.assign(query, { - price: { - "$lte": parseFloat(maxPrice), - "$ne": -1 + if (rooms) { + const allRooms = rooms.split(','); + const or = allRooms.map(val => { + if (val === '4+') { + return { + rooms: { + "$gte": 4 + } + } } + return { + rooms: parseFloat(val) + }; + }); + + query = Object.assign(query, { + "$or": or }); } - if (rooms === "4+") { + if (minSize || maxSize) { + const size = {} + if (minSize) { + size["$gte"] = parseFloat(minSize); + } + + if (maxSize) { + size["$lte"] = parseFloat(maxSize); + } + query = Object.assign(query, { - rooms: { - "$gte": 4 - } - }) - } else if (rooms) { - query = Object.assign(query, { - rooms: parseFloat(rooms) - }); - } - - if (minSize) { - query = Object.assign(query, { - size: { - "$gte": parseFloat(minSize) - } - }); - } - - if (maxSize) { - query = Object.assign(query, { - size: { - "$lte": parseFloat(maxSize) - } + size }); } + console.log('QUERY: ', query); const all = await properties.find(query).toArray(); res.json(all); diff --git a/web/components/Filters.js b/web/components/Filters.js index 2a427c1..269fa1f 100644 --- a/web/components/Filters.js +++ b/web/components/Filters.js @@ -8,6 +8,10 @@ export default class Filters extends React.Component { } } + onMaxPriceChange (e) { + this.props.dispatch({type: 'SET_MAX_PRICE', action: {maxPrice: e.target.value}}) + } + onMinPriceChange (e) { this.props.dispatch({type: 'SET_MIN_PRICE', action: {minPrice: e.target.value}}) } @@ -17,6 +21,10 @@ export default class Filters extends React.Component { this.props.dispatch({type: 'SET_ROOMS', action: {rooms}}); } + onRefreshClick () { + this.props.dispatch({type: 'UPDATE_SEARCH'}); + } + render() { const {filters} = this.props; @@ -38,7 +46,8 @@ export default class Filters extends React.Component {