From ce2d6c5bd065210d15a0cf391079b4f1599486f8 Mon Sep 17 00:00:00 2001 From: Mark Moffat Date: Wed, 25 Mar 2020 15:43:45 +1030 Subject: [PATCH] Added config to sort products --- config/settings.json | 2 ++ config/settingsSchema.json | 10 ++++++++++ lib/common.js | 17 +++++++++++++++++ routes/index.js | 7 ++++--- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/config/settings.json b/config/settings.json index c926075..057025a 100644 --- a/config/settings.json +++ b/config/settings.json @@ -31,6 +31,8 @@ "maxQuantity": 25, "twitterHandle": "", "facebookAppId": "", + "productOrderBy": "date", + "productOrder": "descending", "modules": { "enabled": { "shipping": "shipping-basic", diff --git a/config/settingsSchema.json b/config/settingsSchema.json index 5b6e63d..3b34c96 100644 --- a/config/settingsSchema.json +++ b/config/settingsSchema.json @@ -124,6 +124,16 @@ "facebookAppId": { "type": "string" }, + "productOrderBy": { + "type": "string", + "enum": ["date", "title"], + "default": "date" + }, + "productOrder": { + "type": "string", + "enum": ["descending", "ascending"], + "default": "descending" + }, "modules": { "type": "object", "properties": { diff --git a/lib/common.js b/lib/common.js index 8cf2d1e..e8f4bed 100755 --- a/lib/common.js +++ b/lib/common.js @@ -651,6 +651,22 @@ const paginateData = (frontend, req, page, collection, query, sort) => { }); }; +const getSort = () => { + const config = getConfig(); + let sortOrder = -1; + if(config.productOrder === 'ascending'){ + sortOrder = 1; + } + let sortField = 'productAddedDate'; + if(config.productOrderBy === 'title'){ + sortField = 'productTitle'; + } + + return { + [sortField]: sortOrder + }; +}; + const hooker = (order) => { const config = getConfig(); @@ -708,6 +724,7 @@ module.exports = { getId, newId, paginateData, + getSort, hooker, getCountryList, cleanAmount diff --git a/routes/index.js b/routes/index.js index 897f187..b675b47 100644 --- a/routes/index.js +++ b/routes/index.js @@ -17,6 +17,7 @@ const { emptyCart, updateSubscriptionCheck, paginateData, + getSort, addSitemapProducts, getCountryList } = require('../lib/common'); @@ -731,7 +732,7 @@ router.get('/category/:cat/:pageNum?', (req, res) => { } Promise.all([ - paginateData(true, req, pageNum, 'products', { _id: { $in: lunrIdArray } }), + paginateData(true, req, pageNum, 'products', { _id: { $in: lunrIdArray } }, getSort()), getMenu(db) ]) .then(([results, menu]) => { @@ -813,7 +814,7 @@ router.get('/page/:pageNum', (req, res, next) => { const numberProducts = config.productsPerPage ? config.productsPerPage : 6; Promise.all([ - paginateData(true, req, req.params.pageNum, 'products'), + paginateData(true, req, req.params.pageNum, 'products', {}, getSort()), getMenu(db) ]) .then(([results, menu]) => { @@ -854,7 +855,7 @@ router.get('/:page?', async (req, res, next) => { // if no page is specified, just render page 1 of the cart if(!req.params.page){ Promise.all([ - paginateData(true, req, 1, 'products', {}), + paginateData(true, req, 1, 'products', {}, getSort()), getMenu(db) ]) .then(([results, menu]) => {