From 04ae44b3c91d9452b8835e5b8ec192e9e53d1c3f Mon Sep 17 00:00:00 2001 From: MohammadHMazarei Date: Sun, 29 Dec 2024 20:29:07 +0330 Subject: [PATCH] ADD: get category tree logic function --- components/category/categoryService.js | 54 ++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/components/category/categoryService.js b/components/category/categoryService.js index ab548ce..f22ed30 100644 --- a/components/category/categoryService.js +++ b/components/category/categoryService.js @@ -1,6 +1,60 @@ const Category = require('./categoryModel') const AppError = require('../../globalErrorHandler/AppError') +module.exports.getCategoryTree = async () => { + const nodes = await Category.find({}) + let tree = [] + for (let i = 0; i < nodes.length; i++) { + if (!nodes[i].parentId) { + const label = nodes[i].nativeName + const children = [] + const key = nodes[i]._id.toString() + const href = '/categories/admin/update/' + nodes[i]._id + const a_attr = { href } + const root = { label, children, key, a_attr } + tree.push(root) + } + } + + tree = recursiveFunction(tree, nodes) + return tree +} + +const recursiveFunction = (tree, categories) => { + if (tree.length > 0) { + for (let i = 0; i < tree.length; i++) { + let subTree = [] + for (let j = 0; j < categories.length; j++) { + if (tree[i].key === categories[j].parentId?.toString()) { + const label = categories[j].nativeName.toString() + const children = [] + const key = categories[j]._id.toString() + const href = '/categories/admin/update/' + categories[j]._id + const a_attr = { href } + subTree.push({ label, children, key, a_attr }) + } + let index = findCategoryIndex(tree, tree[i].label) + tree[index].children = subTree + } + } + for (let i = 0; i < tree.length; i++) { + let index = findCategoryIndex(tree, tree[i].label) + recursiveFunction(tree[index].children, categories) + } + } + return tree +} + +function findCategoryIndex(array, label) { + let index + for (let i = 0; i < array.length; i++) { + if (array[i].label === label) { + index = i + return index + } + } +} + module.exports.getAllCategories = async () => { return Category.find().populate('parentId') }