Categories refactor (#9257)

* feat: wip categories pagination

* feat: add subCategoriesPerPage setting

* feat: add load more sub categories button to category page

* fix: openapi spec

* feat: show sub categories left on category page

hide button when no more categories left

* breaking: rename categories to allCategories on /search

categories contains the search results

* fix: spec

* refactor: remove cidsPerPage

* fix: tests

* feat: use component for subcategories

* fix: prevent negative subCategoriesLeft

* feat: new category filter/search WIP

* feat: remove categories from /tag

* fix: dont load all categories when showing move modal

* feat: allow adding custom categories to list

* breaking: dont load entire category tree on post queue

removed unused code
add hooks to filter/selector
add options to filter/selector

* feat: make selector modal work again

* feat: replace old search module

* fix: topic move selector

* feat: dont load all categories on create category modal

* fix: fix more categorySelectors

* feat: dont load entire category tree on group details page

* feat: dont load all categories on home page and user settings page

* feat: add pagination to /user/:userslug/categories

* fix: update schemas

* fix: more tests

* fix: test

* feat: flags page, dont return entire category tree

* fix: flag test

* feat: categories manage page

dont load all categories
allow changing root category
clear caches properly

* fix: spec

* feat: admins&mods page

dont load all categories

* fix: spec

* fix: dont load all children when opening dropdown

* fix: on search results dont return all children

* refactor: pass all options, rename options.cids to options.selectedCids

* fix: #9266

* fix: index 0

* fix: spec

* feat: #9265, add setObjectBulk

* refactor: shoter updateOrder

* feat: selectors on categories/category

* fix: tests and search filter

* fix: category update test

* feat: pagination on acp categories page

show order in set order modal

* fix: allow drag&drop on pages > 1 in /admin/manage/categories

* fix: teasers for deep nested categories

fix sub category display on /category page

* fix: spec

* refactor: use eslint-disable-next-line

* refactor: shorter
This commit is contained in:
Barış Soner Uşaklı
2021-02-07 15:09:52 -05:00
committed by GitHub
parent 2cfab3678e
commit 47299ea587
76 changed files with 1088 additions and 1017 deletions

View File

@@ -50,12 +50,12 @@ module.exports = function (Categories) {
return await updateTagWhitelist(cid, value);
} else if (key === 'name') {
return await updateName(cid, value);
} else if (key === 'order') {
return await updateOrder(cid, value);
}
await db.setObjectField('category:' + cid, key, value);
if (key === 'order') {
await updateOrder(cid, value);
} else if (key === 'description') {
if (key === 'description') {
await Categories.parseDescription(cid, value);
}
}
@@ -76,7 +76,12 @@ module.exports = function (Categories) {
db.setObjectField('category:' + cid, 'parentCid', newParent),
]);
cache.del(['cid:' + oldParent + ':children', 'cid:' + newParent + ':children']);
cache.del([
'cid:' + oldParent + ':children',
'cid:' + newParent + ':children',
'cid:' + oldParent + ':children:all',
'cid:' + newParent + ':children:all',
]);
}
async function updateTagWhitelist(cid, tags) {
@@ -90,8 +95,38 @@ module.exports = function (Categories) {
async function updateOrder(cid, order) {
const parentCid = await Categories.getCategoryField(cid, 'parentCid');
await db.sortedSetsAdd(['categories:cid', 'cid:' + parentCid + ':children'], order, cid);
cache.del(['categories:cid', 'cid:' + parentCid + ':children']);
await db.sortedSetsAdd('categories:cid', order, cid);
const childrenCids = await db.getSortedSetRange(
'cid:' + parentCid + ':children', 0, -1
);
const currentIndex = childrenCids.indexOf(String(cid));
if (currentIndex === -1) {
throw new Error('[[error:no-category]]');
}
// moves cid to index order-1 in the array
if (childrenCids.length > 1) {
childrenCids.splice(Math.max(0, order - 1), 0, childrenCids.splice(currentIndex, 1)[0]);
}
// recalculate orders from array indices
await db.sortedSetAdd(
'cid:' + parentCid + ':children',
childrenCids.map((cid, index) => index + 1),
childrenCids
);
await db.setObjectBulk(
childrenCids.map(cid => 'category:' + cid),
childrenCids.map((cid, index) => ({ order: index + 1 }))
);
cache.del([
'categories:cid',
'cid:' + parentCid + ':children',
'cid:' + parentCid + ':children:all',
]);
}
Categories.parseDescription = async function (cid, description) {