@ducor/react
Version:
admin template ui interface
30 lines (29 loc) • 1.17 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { createContext, useContext, useState } from "react";
// Create the context with a default empty value
const MenuContext = createContext(undefined);
// Provider component
export const MenuProvider = ({ children, }) => {
const [menu, setMenu] = useState([]);
// Function to add a new menu item
const addMenuItem = (item, parentId) => {
if (parentId) {
// Find the parent and add the item as a child
setMenu((prevMenu) => prevMenu.map((menuItem) => menuItem.id === parentId
? Object.assign(Object.assign({}, menuItem), { children: [...(menuItem.children || []), item] }) : menuItem));
}
else {
// Add to the root menu
setMenu((prevMenu) => [...prevMenu, item]);
}
};
return (_jsx(MenuContext.Provider, { value: { menu, addMenuItem }, children: children }));
};
// Custom hook to use the MenuContext
export const useMenu = () => {
const context = useContext(MenuContext);
if (!context) {
throw new Error("useMenu must be used within a MenuProvider");
}
return context;
};