Skip to content

Commit 4b6b2c2

Browse files
author
k.golikov
committed
Hide gray items in the menu
1 parent 5d1e993 commit 4b6b2c2

File tree

6 files changed

+33
-8
lines changed

6 files changed

+33
-8
lines changed

src/constants/router/menuItems.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ const menuItems: MenuItem[] = [
6262
route: routes.notificationsTest
6363
},
6464
{
65-
route: routes.imageCompressor
65+
route: routes.imageCompressor,
66+
isGray: true
6667
},
6768
{
6869
route: routes.dateUtils,

src/hooks/useAppSettings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import { useEffect, useMemo } from 'react';
66

77
const initialState: AppSettings = {
88
theme: SpecialAppTheme.AUTO,
9-
isErudaEnabled: false
9+
isErudaEnabled: false,
10+
doShowHiddenMenuItems: false
1011
};
1112

1213
export const useAppSettingsState = () => {

src/layouts/appLayout/components/appMenu/AppMenu.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
1-
import React, { FunctionComponent } from 'react';
1+
import React, { FunctionComponent, useMemo } from 'react';
22
import { Menu } from 'antd';
33
import styles from './AppMenu.module.scss';
44
import { renderMenuItems } from '../../utils/routeMenuItems';
55
import menuItems from '../../../../constants/router/menuItems';
66
import { useLocation } from 'react-router-dom';
7-
8-
const renderedMenuItems = renderMenuItems(menuItems);
7+
import useAppSettings from '../../../../hooks/useAppSettings';
8+
import { ItemType } from 'antd/lib/menu/hooks/useItems';
99

1010
interface Props {
1111
onItemSelect?: () => void;
1212
}
1313

1414
const AppMenu: FunctionComponent<Props> = ({ onItemSelect }) => {
1515
const { pathname } = useLocation();
16+
const appSettings = useAppSettings();
17+
18+
const renderedMenuItems = useMemo<ItemType[]>(() => {
19+
return renderMenuItems(menuItems, appSettings);
20+
}, [appSettings]);
1621

1722
return (
1823
<Menu

src/layouts/appLayout/utils/routeMenuItems.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Link } from 'react-router-dom';
55
import { isArray } from 'lodash';
66
import classNames from 'classnames';
77
import { ItemType } from 'antd/lib/menu/hooks/useItems';
8+
import AppSettings from '../../../types/AppSettings';
89

910
export const renderRoute = ({ route, title, icon, isGray }: MenuRouteItem): ItemType => {
1011
const { path } = route;
@@ -49,14 +50,22 @@ export const isSubMenuItem = (menuItem: MenuItem): menuItem is SubMenuItem => {
4950
return 'routes' in menuItem && isArray(menuItem.routes);
5051
};
5152

52-
export const renderMenuItem = (menuItem: MenuItem, index: number): ItemType => {
53+
export const renderMenuItem = (menuItem: MenuItem, index: number, settings: AppSettings): ItemType => {
5354
if (isSubMenuItem(menuItem)) {
5455
return {
5556
key: index,
5657
icon: renderComponent(menuItem.icon),
5758
label: menuItem.title,
5859
children: menuItem.routes.length
59-
? menuItem.routes.map(renderMenuItem)
60+
? menuItem.routes
61+
.filter((item) => {
62+
if (settings.doShowHiddenMenuItems) {
63+
return true;
64+
}
65+
66+
return !('route' in item) || !item.isGray;
67+
})
68+
.map((item, index) => renderMenuItem(item, index, settings))
6069
: [
6170
{
6271
key: 'nothing',
@@ -70,4 +79,5 @@ export const renderMenuItem = (menuItem: MenuItem, index: number): ItemType => {
7079
return renderRoute(menuItem);
7180
};
7281

73-
export const renderMenuItems = (menuItems: MenuItem[]) => menuItems.map(renderMenuItem);
82+
export const renderMenuItems = (menuItems: MenuItem[], settings: AppSettings) =>
83+
menuItems.map((item, index) => renderMenuItem(item, index, settings));

src/pages/settingsPage/SettingsPage.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ const SettingsPage: FunctionComponent = () => {
4646
Enable <ExternalLink href="https://github.com/liriliri/eruda">Eruda</ExternalLink>
4747
</span>
4848
</label>
49+
<label>
50+
<Switch
51+
checked={appSettings.doShowHiddenMenuItems}
52+
onChange={handleAppSettingChange('doShowHiddenMenuItems')}
53+
/>
54+
<span className="ms-3">Show hidden menu items</span>
55+
</label>
4956
</Col>
5057
</PageContainer>
5158
);

src/types/AppSettings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { SelectableAppTheme } from './AppTheme';
33
interface AppSettings {
44
theme: SelectableAppTheme;
55
isErudaEnabled: boolean;
6+
doShowHiddenMenuItems: boolean;
67
}
78

89
export default AppSettings;

0 commit comments

Comments
 (0)