From 7af071514675398c30fcebaa0e67bbaa6c3a7837 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 15 Mar 2024 12:00:20 -0400 Subject: [PATCH] fix: circular object ref. getCategoriesFields was returning full pseudo-category object even if fields were specific, now it only returns fields requested. navigating to /category/-1 now redirects to /world --- src/categories/data.js | 6 +++++- src/controllers/category.js | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/categories/data.js b/src/categories/data.js index 22fcc9532a..92ed1e64f5 100644 --- a/src/categories/data.js +++ b/src/categories/data.js @@ -38,7 +38,11 @@ module.exports = function (Categories) { // Handle cid -1 if (cids.includes(-1)) { - categories.splice(cids.indexOf(-1), 1, worldCategory); + const subset = fields.reduce((category, field) => { + category[field] = worldCategory[field] || undefined; + return category; + }, {}); + categories.splice(cids.indexOf(-1), 1, subset); } const result = await plugins.hooks.fire('filter:category.getFields', { diff --git a/src/controllers/category.js b/src/controllers/category.js index 487ea21cce..e969e95265 100644 --- a/src/controllers/category.js +++ b/src/controllers/category.js @@ -26,6 +26,9 @@ const validSorts = [ categoryController.get = async function (req, res, next) { const cid = req.params.category_id; + if (cid === '-1') { + return helpers.redirect(res, `/world?${qs.stringify(req.query)}`); + } let currentPage = parseInt(req.query.page, 10) || 1; let topicIndex = utils.isNumber(req.params.topic_index) ? parseInt(req.params.topic_index, 10) - 1 : 0;