()
| 59 | |
| 60 | |
| 61 | export default function AppMenuBar() { |
| 62 | |
| 63 | const forceUpdate = useForceUpdate(); |
| 64 | const pgAdmin = usePgAdmin(); |
| 65 | |
| 66 | useEffect(()=>{ |
| 67 | pgAdmin.Browser.Events.on('pgadmin:enable-disable-menu-items', _.debounce(()=>{ |
| 68 | forceUpdate(); |
| 69 | }, 100)); |
| 70 | pgAdmin.Browser.Events.on('pgadmin:refresh-app-menu', _.debounce(()=>{ |
| 71 | forceUpdate(); |
| 72 | }, 100)); |
| 73 | }, []); |
| 74 | |
| 75 | const getPgMenuItem = (menuItem, i)=>{ |
| 76 | if(menuItem.type == 'separator') { |
| 77 | return <PgMenuDivider key={i}/>; |
| 78 | } |
| 79 | const hasCheck = typeof menuItem.checked == 'boolean'; |
| 80 | |
| 81 | return <PgMenuItem |
| 82 | key={i} |
| 83 | disabled={menuItem.isDisabled} |
| 84 | onClick={()=>{ |
| 85 | menuItem.callback(); |
| 86 | if(hasCheck) { |
| 87 | forceUpdate(); |
| 88 | } |
| 89 | }} |
| 90 | hasCheck={hasCheck} |
| 91 | checked={menuItem.checked} |
| 92 | closeOnCheck={true} |
| 93 | shortcut={menuItem.shortcut} |
| 94 | >{menuItem.label}</PgMenuItem>; |
| 95 | }; |
| 96 | |
| 97 | const userMenuInfo = pgAdmin.Browser.utils.userMenuInfo; |
| 98 | |
| 99 | const getPgMenu = (menu)=>{ |
| 100 | return menu.getMenuItems()?.map((menuItem, i)=>{ |
| 101 | const submenus = menuItem.getMenuItems(); |
| 102 | if(submenus) { |
| 103 | return <PgSubMenu key={menuItem.label} label={menuItem.label}> |
| 104 | {getPgMenu(menuItem)} |
| 105 | </PgSubMenu>; |
| 106 | } |
| 107 | return getPgMenuItem(menuItem, i); |
| 108 | }); |
| 109 | }; |
| 110 | |
| 111 | return ( |
| 112 | <StyledBox data-test="app-menu-bar"> |
| 113 | <div className='AppMenuBar-logo' /> |
| 114 | <div className='AppMenuBar-menus'> |
| 115 | {pgAdmin.Browser.MainMenus?.map((menu)=>{ |
| 116 | return ( |
| 117 | <PgMenu |
| 118 | menuButton={<PrimaryButton key={menu.label} data-label={menu.label}>{menu.label}<KeyboardArrowDownIcon fontSize="small" /></PrimaryButton>} |
nothing calls this directly
no test coverage detected