@cullsin/lnc-menu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
File without changes
@@ -0,0 +1 @@
1
+ export { default as SideMenu } from './src/SideMenu';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export { default as SideMenu } from './src/SideMenu';
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ interface SideMenuProps {
3
+ useDrawer: () => {
4
+ isDrawerOpen: boolean;
5
+ toggleDrawer: () => void;
6
+ };
7
+ SampleMgmtIcon: React.ElementType;
8
+ }
9
+ declare function SideMenu({ useDrawer, SampleMgmtIcon }: SideMenuProps): import("react/jsx-runtime").JSX.Element;
10
+ export default SideMenu;
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import AppBar from "@mui/material/AppBar";
4
+ import Box from "@mui/material/Box";
5
+ import Drawer from "@mui/material/Drawer";
6
+ import List from "@mui/material/List";
7
+ import ListItem from "@mui/material/ListItem";
8
+ import ListItemIcon from "@mui/material/ListItemIcon";
9
+ import ListItemText from "@mui/material/ListItemText";
10
+ import Menu from "@mui/material/Menu";
11
+ import MenuItem from "@mui/material/MenuItem";
12
+ import DashboardOutlinedIcon from "@mui/icons-material/DashboardOutlined";
13
+ import RecentActorsOutlinedIcon from "@mui/icons-material/RecentActorsOutlined";
14
+ import ArticleOutlinedIcon from "@mui/icons-material/ArticleOutlined";
15
+ import { useNavigate } from "react-router-dom";
16
+ import Tooltip from "@mui/material/Tooltip";
17
+ function SideMenu({ useDrawer, SampleMgmtIcon }) {
18
+ const navigate = useNavigate();
19
+ const [selectedMainMenu, setSelectedMainMenu] = React.useState(null); // Track selected main menu
20
+ const { isDrawerOpen, toggleDrawer } = useDrawer();
21
+ const [anchorEl, setAnchorEl] = React.useState(null);
22
+ const handleMenuOpen = (event, index) => {
23
+ setAnchorEl(event.currentTarget);
24
+ };
25
+ const handleMenuClose = () => {
26
+ setAnchorEl(null);
27
+ };
28
+ const handleSubMenuItemClick = (path, parentText) => {
29
+ setSelectedMainMenu(parentText); // Set the main menu selected when a submenu item is clicked
30
+ handleMenuClose();
31
+ if (isDrawerOpen) {
32
+ toggleDrawer();
33
+ }
34
+ navigate(path);
35
+ };
36
+ const menuItems = [
37
+ { text: "Dashboard", icon: _jsx(DashboardOutlinedIcon, {}) },
38
+ {
39
+ text: "Patient Management",
40
+ icon: _jsx(RecentActorsOutlinedIcon, {}),
41
+ subMenu: [
42
+ { text: "Patient", path: "/patient/patient-listing" },
43
+ { text: "Family", path: "/patient/family-listing" },
44
+ ],
45
+ },
46
+ { text: "Sample Management", icon: _jsx(SampleMgmtIcon, {}) },
47
+ { text: "Reports", icon: _jsx(ArticleOutlinedIcon, {}) },
48
+ ];
49
+ return (_jsxs(Box, { sx: { flexGrow: 1 }, children: [_jsx(AppBar, { sx: { position: "fixed", top: 0 } }), _jsx(Drawer, { open: isDrawerOpen, variant: "permanent", className: "parent-container", sx: {
50
+ width: isDrawerOpen ? 230 : 64,
51
+ flexShrink: 0,
52
+ "& .MuiDrawer-paper": {
53
+ width: isDrawerOpen ? 230 : 64,
54
+ transition: "width 0.3s ease",
55
+ top: "64px",
56
+ bottom: "0",
57
+ borderRight: "1px solid #B1BECB",
58
+ },
59
+ }, children: _jsx(List, { children: menuItems.map((item, index) => (_jsxs(React.Fragment, { children: [_jsx(Tooltip, { title: item.text, arrow: true, placement: "bottom", disableHoverListener: isDrawerOpen, children: _jsxs(ListItem, { button: true, selected: selectedMainMenu === item.text, className: selectedMainMenu === item.text ? "selected" : "", onClick: (event) => {
60
+ if (item.subMenu) {
61
+ handleMenuOpen(event, index);
62
+ setSelectedMainMenu(item.text); // Set selected when main menu is clicked
63
+ }
64
+ else if (item.onClick) {
65
+ item.onClick();
66
+ setSelectedMainMenu(item.text); // Set selected when a menu is clicked
67
+ }
68
+ }, children: [_jsx(ListItemIcon, { children: item.icon }), isDrawerOpen && _jsx(ListItemText, { primary: item.text })] }) }), item.subMenu && anchorEl && (_jsxs(Menu, { anchorEl: anchorEl, open: Boolean(anchorEl), onClose: handleMenuClose, anchorOrigin: {
69
+ vertical: "top",
70
+ horizontal: "left",
71
+ }, transformOrigin: {
72
+ vertical: "top",
73
+ horizontal: "left",
74
+ }, PaperProps: {
75
+ style: {
76
+ marginLeft: isDrawerOpen ? 230 : 65,
77
+ },
78
+ }, children: [_jsx("span", { className: "submenu-title", children: !isDrawerOpen ? item.text : "" }), item.subMenu.map((subItem) => (_jsx(MenuItem, { onClick: () => handleSubMenuItemClick(subItem.path, item.text), children: subItem.text }, subItem.text)))] }))] }, index))) }) })] }));
79
+ }
80
+ export default SideMenu;
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@cullsin/lnc-menu",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "module": "dist/index.es.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc"
12
+ },
13
+ "private": false,
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "dependencies": {
18
+ "@mui/icons-material": "^5.0.0",
19
+ "@mui/material": "^5.0.0",
20
+ "react": "^18.0.0",
21
+ "react-dom": "^18.0.0",
22
+ "react-router-dom": "^6.0.0"
23
+ },
24
+ "peerDependencies": {
25
+ "react": "^18.0.0",
26
+ "react-dom": "^18.0.0",
27
+ "react-router-dom": "^6.0.0",
28
+ "sass": "^1.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "typescript": "^5.8.3"
32
+ },
33
+ "license": "MIT"
34
+ }