I think i've been tried all possible possibilities but its not working. I wanna make dynamic menu (i know its not correct database fiction for this but i wrote for learn).
I'll create json for this plan. I can't edit json file coz i wanna try regenerate json data from json.
- Main menu -- Sub Menu -- Sub Menu
I can say it Next.js is forced me a little.
This is my code block:
import {useEffect, useState } from "react";
export default async function MenuCreator() {
const [menu,setMenu] = useState([]);
const [subMenu,setSubMenu] = useState([]);
const [menu_f,setMenu_F] = useState([]);
useEffect(()=>{
fetch("http://localhost:8000/menus").then((res)=>{
if(!res.ok) throw Error("error");
return res.json();
}).then((data)=>{
setMenu_F(data);
});
},[])
menu_f.forEach((main)=>{
if(main.main_menu === null)
{
menu_f.forEach((sub)=>{
if(sub.main_menu === main.id)
setSubMenu([...subMenu,{id:sub.id,menu_name:sub.menu_name,main_menu:sub.main_menu,menu_link:sub.menu_link}]);
})
setMenu([...menu,{
id:main.id,
menu_name:main.menu_name,
menu_icon:main.menu_icon,
menu_link:main.menu_link,
subMenus:subMenu
}]);
setSubMenu([]);
}
})
return {menu};
}
and json file
{
"quick_links":[
{
"id":1,
"menu_id":1
},
{
"id":2,
"menu_id":2
}
],
"menus":[
{
"id":1,
"menu_name":"dashboard",
"menu_icon":"fa-gauge",
"main_menu":null,
"menu_link":"/"
},
{
"id":2,
"menu_name":"receipt",
"menu_icon":"fa-file-lines",
"main_menu":null,
"menu_link":"/dashboard"
},
{
"id":3,
"menu_name":"buy",
"menu_icon":"fa-cart-plus",
"main_menu":null,
"menu_link":"/buy"
},
{
"id":4,
"menu_name":"users",
"menu_icon":"fa-user",
"main_menu":null,
"menu_link":"/users"
},
{
"id":5,
"menu_name":"user list",
"menu_icon":null,
"main_menu":4,
"menu_link":"/user-list"
},
{
"id":6,
"menu_name":"add user",
"menu_icon":null,
"main_menu":4,
"menu_link":"/add-user"
}
]
}