@digitaldefiance/express-suite-react-components 2.2.1 → 2.3.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 +72 -1
- package/package.json +2 -2
- package/src/components/DropdownMenu.d.ts +2 -2
- package/src/components/DropdownMenu.d.ts.map +1 -1
- package/src/components/SideMenu.js +2 -2
- package/src/components/TopMenu.d.ts +8 -1
- package/src/components/TopMenu.d.ts.map +1 -1
- package/src/components/TopMenu.js +9 -2
- package/src/components/UserMenu.js +2 -2
- package/src/contexts/MenuContext.d.ts +2 -2
- package/src/contexts/MenuContext.d.ts.map +1 -1
- package/src/contexts/MenuContext.js +15 -15
- package/src/index.d.ts +0 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +0 -1
- package/src/interfaces/IMenuOption.d.ts +2 -2
- package/src/interfaces/IMenuOption.d.ts.map +1 -1
- package/src/types/MenuType.d.ts +11 -0
- package/src/types/MenuType.d.ts.map +1 -0
- package/src/types/MenuType.js +12 -0
- package/src/types/index.d.ts +1 -2
- package/src/types/index.d.ts.map +1 -1
- package/src/types/index.js +1 -2
- package/src/enumerations/IncludeOnMenu.d.ts +0 -6
- package/src/enumerations/IncludeOnMenu.d.ts.map +0 -1
- package/src/enumerations/IncludeOnMenu.js +0 -9
- package/src/enumerations/index.d.ts +0 -2
- package/src/enumerations/index.d.ts.map +0 -1
- package/src/enumerations/index.js +0 -4
package/README.md
CHANGED
|
@@ -66,10 +66,46 @@ yarn add @digitaldefiance/express-suite-react-components
|
|
|
66
66
|
### Types & Interfaces
|
|
67
67
|
|
|
68
68
|
- **IMenuOption** - Menu option interface
|
|
69
|
-
- **
|
|
69
|
+
- **MenuType** - Extensible menu type system (see [Menu Type Extensibility Guide](docs/MENU_TYPE_EXTENSIBILITY.md))
|
|
70
70
|
|
|
71
71
|
## Usage
|
|
72
72
|
|
|
73
|
+
### Menu System
|
|
74
|
+
|
|
75
|
+
The menu system supports extensible menu types. See the [Menu Type Extensibility Guide](docs/MENU_TYPE_EXTENSIBILITY.md) for details on creating custom menus.
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
import { TopMenu, MenuTypes, createMenuType } from '@digitaldefiance/express-suite-react-components';
|
|
79
|
+
|
|
80
|
+
// Use built-in menu types
|
|
81
|
+
const menuOptions = [
|
|
82
|
+
{
|
|
83
|
+
id: 'dashboard',
|
|
84
|
+
label: 'Dashboard',
|
|
85
|
+
link: '/dashboard',
|
|
86
|
+
includeOnMenus: [MenuTypes.SideMenu, MenuTypes.TopMenu],
|
|
87
|
+
index: 0,
|
|
88
|
+
requiresAuth: true,
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
// Create custom menu types
|
|
93
|
+
const AdminMenu = createMenuType('AdminMenu');
|
|
94
|
+
|
|
95
|
+
function App() {
|
|
96
|
+
return (
|
|
97
|
+
<TopMenu
|
|
98
|
+
Logo={<MyLogo />}
|
|
99
|
+
additionalMenus={[{
|
|
100
|
+
menuType: AdminMenu,
|
|
101
|
+
menuIcon: <AdminIcon />,
|
|
102
|
+
priority: 10,
|
|
103
|
+
}]}
|
|
104
|
+
/>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
73
109
|
### Authentication
|
|
74
110
|
|
|
75
111
|
```tsx
|
|
@@ -261,6 +297,41 @@ MIT © Digital Defiance
|
|
|
261
297
|
|
|
262
298
|
## ChangeLog
|
|
263
299
|
|
|
300
|
+
### v2.3.0
|
|
301
|
+
|
|
302
|
+
#### Breaking Changes
|
|
303
|
+
- **Removed `IncludeOnMenu` enum** - Replaced with extensible `MenuType` system using branded string types
|
|
304
|
+
- Menu system now requires `MenuTypes` constant instead of enum values
|
|
305
|
+
|
|
306
|
+
#### Added
|
|
307
|
+
- **Extensible Menu Type System** - New `MenuType` branded string type with `createMenuType()` factory function
|
|
308
|
+
- **`MenuTypes` constant** - Built-in menu types (SideMenu, TopMenu, UserMenu) replacing enum
|
|
309
|
+
- **`createMenuType()` function** - Factory for creating custom menu types with type safety
|
|
310
|
+
- **`AdditionalDropdownMenu` interface** - Support for custom dropdown menus in TopMenu component
|
|
311
|
+
- **`additionalMenus` prop** on TopMenu - Allows adding custom menu dropdowns with priority ordering
|
|
312
|
+
- **Menu Type Extensibility Guide** - Comprehensive documentation at `docs/MENU_TYPE_EXTENSIBILITY.md`
|
|
313
|
+
|
|
314
|
+
#### Changed
|
|
315
|
+
- **IMenuOption.includeOnMenus** - Now uses `MenuType[]` instead of `IncludeOnMenu[]`
|
|
316
|
+
- **DropdownMenu.menuType** - Now accepts `MenuType` instead of `IncludeOnMenu`
|
|
317
|
+
- **MenuContext.getMenuOptions** - Now accepts `MenuType` parameter instead of `IncludeOnMenu`
|
|
318
|
+
- All menu components updated to use `MenuTypes` constant
|
|
319
|
+
- Updated README with menu system usage examples and extensibility guide link
|
|
320
|
+
|
|
321
|
+
#### Migration Guide
|
|
322
|
+
```typescript
|
|
323
|
+
// Old (v2.2.x)
|
|
324
|
+
import { IncludeOnMenu } from '@digitaldefiance/express-suite-react-components';
|
|
325
|
+
includeOnMenus: [IncludeOnMenu.SideMenu, IncludeOnMenu.UserMenu]
|
|
326
|
+
|
|
327
|
+
// New (v2.3.0)
|
|
328
|
+
import { MenuTypes } from '@digitaldefiance/express-suite-react-components';
|
|
329
|
+
includeOnMenus: [MenuTypes.SideMenu, MenuTypes.UserMenu]
|
|
330
|
+
|
|
331
|
+
// Create custom menu types
|
|
332
|
+
import { createMenuType } from '@digitaldefiance/express-suite-react-components';
|
|
333
|
+
const AdminMenu = createMenuType('AdminMenu');
|
|
334
|
+
|
|
264
335
|
### v2.2.1
|
|
265
336
|
|
|
266
337
|
- Update BackupCodeLoginForm
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitaldefiance/express-suite-react-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "React MUI components for Digital Defiance Express Suite",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"types": "src/index.d.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@digitaldefiance/i18n-lib": "3.6.0",
|
|
29
|
-
"@digitaldefiance/suite-core-lib": "2.2.
|
|
29
|
+
"@digitaldefiance/suite-core-lib": "2.2.4",
|
|
30
30
|
"@emotion/react": "^11.14.0",
|
|
31
31
|
"@emotion/styled": "^11.14.0",
|
|
32
32
|
"@mui/icons-material": "^7.0.2",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FC, ReactElement } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { MenuType } from '../types/MenuType';
|
|
3
3
|
interface DropdownMenuProps {
|
|
4
|
-
menuType:
|
|
4
|
+
menuType: MenuType;
|
|
5
5
|
menuIcon: ReactElement;
|
|
6
6
|
}
|
|
7
7
|
export declare const DropdownMenu: FC<DropdownMenuProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/DropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAc,YAAY,EAAyB,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/DropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAc,YAAY,EAAyB,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,UAAU,iBAAiB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA6E9C,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -4,13 +4,13 @@ exports.SideMenu = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const material_1 = require("@mui/material");
|
|
6
6
|
const react_router_dom_1 = require("react-router-dom");
|
|
7
|
-
const
|
|
7
|
+
const MenuType_1 = require("../types/MenuType");
|
|
8
8
|
const MenuContext_1 = require("../contexts/MenuContext");
|
|
9
9
|
const SideMenuListItem_1 = require("./SideMenuListItem");
|
|
10
10
|
const SideMenu = ({ isOpen, onClose }) => {
|
|
11
11
|
const { getMenuOptions } = (0, MenuContext_1.useMenu)();
|
|
12
12
|
const navigate = (0, react_router_dom_1.useNavigate)();
|
|
13
|
-
const menuOptions = getMenuOptions(
|
|
13
|
+
const menuOptions = getMenuOptions(MenuType_1.MenuTypes.SideMenu, true);
|
|
14
14
|
const handleNavigate = (link) => {
|
|
15
15
|
if (typeof link === 'string') {
|
|
16
16
|
navigate(link);
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import React, { FC } from 'react';
|
|
1
|
+
import React, { FC, ReactElement } from 'react';
|
|
2
|
+
import { MenuType } from '../types/MenuType';
|
|
3
|
+
export interface AdditionalDropdownMenu {
|
|
4
|
+
menuType: MenuType;
|
|
5
|
+
menuIcon: ReactElement;
|
|
6
|
+
priority?: number;
|
|
7
|
+
}
|
|
2
8
|
export interface TopMenuProps {
|
|
3
9
|
Logo: React.ReactNode;
|
|
10
|
+
additionalMenus?: Array<AdditionalDropdownMenu>;
|
|
4
11
|
}
|
|
5
12
|
export declare const TopMenu: FC<TopMenuProps>;
|
|
6
13
|
export default TopMenu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/TopMenu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TopMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/TopMenu.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,EAAwB,MAAM,OAAO,CAAC;AAStE,OAAO,EAAE,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAuEpC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -4,6 +4,7 @@ exports.TopMenu = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const Menu_1 = tslib_1.__importDefault(require("@mui/icons-material/Menu"));
|
|
7
|
+
const DropdownMenu_1 = require("./DropdownMenu");
|
|
7
8
|
const material_1 = require("@mui/material");
|
|
8
9
|
const react_1 = require("react");
|
|
9
10
|
const react_router_dom_1 = require("react-router-dom");
|
|
@@ -13,7 +14,8 @@ const SideMenu_1 = require("./SideMenu");
|
|
|
13
14
|
const UserLanguageSelector_1 = require("./UserLanguageSelector");
|
|
14
15
|
const UserMenu_1 = require("./UserMenu");
|
|
15
16
|
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
16
|
-
const
|
|
17
|
+
const MenuType_1 = require("../types/MenuType");
|
|
18
|
+
const TopMenu = ({ Logo, additionalMenus }) => {
|
|
17
19
|
const { isAuthenticated } = (0, react_1.useContext)(AuthProvider_1.AuthContext);
|
|
18
20
|
const [isSideMenuOpen, setIsSideMenuOpen] = (0, react_1.useState)(false);
|
|
19
21
|
const handleOpenSideMenu = () => setIsSideMenuOpen(true);
|
|
@@ -29,7 +31,12 @@ const TopMenu = ({ Logo }) => {
|
|
|
29
31
|
marginRight: 2,
|
|
30
32
|
display: 'flex',
|
|
31
33
|
alignItems: 'center',
|
|
32
|
-
}, children: Logo }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h6", component: "div", sx: { flexGrow: 1 }, children: siteTitle }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: 'flex', alignItems: 'center' }, children: [isAuthenticated ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/dashboard", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Dashboard)) }),
|
|
34
|
+
}, children: Logo }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h6", component: "div", sx: { flexGrow: 1 }, children: siteTitle }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: 'flex', alignItems: 'center' }, children: [isAuthenticated ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/dashboard", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Dashboard)) }), [
|
|
35
|
+
...additionalMenus?.map((menu, index) => ({ ...menu, key: `custom-${index}`, isUserMenu: false })) ?? [],
|
|
36
|
+
{ menuType: MenuType_1.MenuTypes.UserMenu, menuIcon: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), priority: 0, key: 'user-menu', isUserMenu: true }
|
|
37
|
+
]
|
|
38
|
+
.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))
|
|
39
|
+
.map(menu => menu.isUserMenu ? (0, jsx_runtime_1.jsx)(UserMenu_1.UserMenu, {}, menu.key) : (0, jsx_runtime_1.jsx)(DropdownMenu_1.DropdownMenu, { menuType: menu.menuType, menuIcon: menu.menuIcon }, menu.key))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/login", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Login_LoginButton)) }), (0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/register", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.RegisterButton)) })] })), (0, jsx_runtime_1.jsx)(UserLanguageSelector_1.UserLanguageSelector, {})] })] }), (0, jsx_runtime_1.jsx)(SideMenu_1.SideMenu, { isOpen: isSideMenuOpen, onClose: handleCloseSideMenu })] }));
|
|
33
40
|
};
|
|
34
41
|
exports.TopMenu = TopMenu;
|
|
35
42
|
exports.default = exports.TopMenu;
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.UserMenu = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const icons_material_1 = require("@mui/icons-material");
|
|
6
|
-
const
|
|
6
|
+
const MenuType_1 = require("../types/MenuType");
|
|
7
7
|
const DropdownMenu_1 = require("./DropdownMenu");
|
|
8
8
|
const UserMenu = () => {
|
|
9
|
-
return ((0, jsx_runtime_1.jsx)(DropdownMenu_1.DropdownMenu, { menuType:
|
|
9
|
+
return ((0, jsx_runtime_1.jsx)(DropdownMenu_1.DropdownMenu, { menuType: MenuType_1.MenuTypes.UserMenu, menuIcon: (0, jsx_runtime_1.jsx)(icons_material_1.AccountCircle, {}) }));
|
|
10
10
|
};
|
|
11
11
|
exports.UserMenu = UserMenu;
|
|
12
12
|
exports.default = exports.UserMenu;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { FC, ReactNode } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { MenuType } from '../types/MenuType';
|
|
3
3
|
import { IMenuOption } from '../interfaces/IMenuOption';
|
|
4
4
|
interface MenuProviderProps {
|
|
5
5
|
children: ReactNode;
|
|
6
6
|
}
|
|
7
7
|
interface MenuContextType {
|
|
8
8
|
menuOptions: IMenuOption[];
|
|
9
|
-
getMenuOptions: (menuType:
|
|
9
|
+
getMenuOptions: (menuType: MenuType, includeDividers: boolean) => IMenuOption[];
|
|
10
10
|
registerMenuOption: (option: IMenuOption) => () => void;
|
|
11
11
|
registerMenuOptions: (options: IMenuOption[]) => () => void;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/MenuContext.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,EAAE,EACF,SAAS,EAOV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/MenuContext.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,EAAE,EACF,SAAS,EAOV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,cAAc,EAAE,CACd,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,OAAO,KACrB,WAAW,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC;IACxD,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC;CAC7D;AAID,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAwN9C,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,eAM1B,CAAC"}
|
|
@@ -8,7 +8,7 @@ const suite_core_lib_2 = require("@digitaldefiance/suite-core-lib");
|
|
|
8
8
|
const icons_material_1 = require("@mui/icons-material");
|
|
9
9
|
const react_1 = require("react");
|
|
10
10
|
const AuthProvider_1 = require("./AuthProvider");
|
|
11
|
-
const
|
|
11
|
+
const MenuType_1 = require("../types/MenuType");
|
|
12
12
|
const I18nProvider_1 = require("./I18nProvider");
|
|
13
13
|
const ThemeProvider_1 = require("./ThemeProvider");
|
|
14
14
|
const MenuContext = (0, react_1.createContext)(undefined);
|
|
@@ -51,14 +51,14 @@ const MenuProvider = ({ children }) => {
|
|
|
51
51
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.Dashboard, {}),
|
|
52
52
|
link: '/dashboard',
|
|
53
53
|
requiresAuth: true,
|
|
54
|
-
includeOnMenus: [
|
|
54
|
+
includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
|
|
55
55
|
index: index++,
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
id: 'user-divider',
|
|
59
59
|
label: '',
|
|
60
60
|
divider: true,
|
|
61
|
-
includeOnMenus: [
|
|
61
|
+
includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
|
|
62
62
|
index: index++,
|
|
63
63
|
requiresAuth: false,
|
|
64
64
|
},
|
|
@@ -68,7 +68,7 @@ const MenuProvider = ({ children }) => {
|
|
|
68
68
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.ExitToApp, {}),
|
|
69
69
|
link: '/logout',
|
|
70
70
|
requiresAuth: true,
|
|
71
|
-
includeOnMenus: [
|
|
71
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
72
72
|
index: index++,
|
|
73
73
|
},
|
|
74
74
|
{
|
|
@@ -77,7 +77,7 @@ const MenuProvider = ({ children }) => {
|
|
|
77
77
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.Login, {}),
|
|
78
78
|
link: '/login',
|
|
79
79
|
requiresAuth: false,
|
|
80
|
-
includeOnMenus: [
|
|
80
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
81
81
|
index: index++,
|
|
82
82
|
},
|
|
83
83
|
{
|
|
@@ -86,7 +86,7 @@ const MenuProvider = ({ children }) => {
|
|
|
86
86
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.PersonAdd, {}),
|
|
87
87
|
link: '/register',
|
|
88
88
|
requiresAuth: false,
|
|
89
|
-
includeOnMenus: [
|
|
89
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
90
90
|
index: index++,
|
|
91
91
|
},
|
|
92
92
|
{
|
|
@@ -95,7 +95,7 @@ const MenuProvider = ({ children }) => {
|
|
|
95
95
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.LockOpen, {}),
|
|
96
96
|
link: '/forgot-password',
|
|
97
97
|
requiresAuth: false,
|
|
98
|
-
includeOnMenus: [
|
|
98
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
99
99
|
index: index++,
|
|
100
100
|
},
|
|
101
101
|
{
|
|
@@ -104,7 +104,7 @@ const MenuProvider = ({ children }) => {
|
|
|
104
104
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.LockReset, {}),
|
|
105
105
|
link: '/change-password',
|
|
106
106
|
requiresAuth: true,
|
|
107
|
-
includeOnMenus: [
|
|
107
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
108
108
|
index: index++,
|
|
109
109
|
},
|
|
110
110
|
{
|
|
@@ -113,7 +113,7 @@ const MenuProvider = ({ children }) => {
|
|
|
113
113
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
|
|
114
114
|
link: '/backup-code',
|
|
115
115
|
requiresAuth: false,
|
|
116
|
-
includeOnMenus: [
|
|
116
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
117
117
|
index: index++,
|
|
118
118
|
},
|
|
119
119
|
{
|
|
@@ -122,14 +122,14 @@ const MenuProvider = ({ children }) => {
|
|
|
122
122
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.Autorenew, {}),
|
|
123
123
|
link: '/backup-codes',
|
|
124
124
|
requiresAuth: true,
|
|
125
|
-
includeOnMenus: [
|
|
125
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
126
126
|
index: index++,
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
id: 'divider',
|
|
130
130
|
label: '',
|
|
131
131
|
divider: true,
|
|
132
|
-
includeOnMenus: [
|
|
132
|
+
includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
|
|
133
133
|
index: index++,
|
|
134
134
|
requiresAuth: false,
|
|
135
135
|
},
|
|
@@ -139,7 +139,7 @@ const MenuProvider = ({ children }) => {
|
|
|
139
139
|
action: clearMnemonic,
|
|
140
140
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
|
|
141
141
|
requiresAuth: true,
|
|
142
|
-
includeOnMenus: [
|
|
142
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
143
143
|
index: index++,
|
|
144
144
|
filter: () => !!mnemonic,
|
|
145
145
|
},
|
|
@@ -149,7 +149,7 @@ const MenuProvider = ({ children }) => {
|
|
|
149
149
|
action: clearWallet,
|
|
150
150
|
icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
|
|
151
151
|
requiresAuth: true,
|
|
152
|
-
includeOnMenus: [
|
|
152
|
+
includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
|
|
153
153
|
index: index++,
|
|
154
154
|
filter: () => !!wallet,
|
|
155
155
|
},
|
|
@@ -158,7 +158,7 @@ const MenuProvider = ({ children }) => {
|
|
|
158
158
|
id: 'color-divider',
|
|
159
159
|
label: '',
|
|
160
160
|
divider: true,
|
|
161
|
-
includeOnMenus: [
|
|
161
|
+
includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
|
|
162
162
|
index: index++,
|
|
163
163
|
requiresAuth: undefined,
|
|
164
164
|
},
|
|
@@ -168,7 +168,7 @@ const MenuProvider = ({ children }) => {
|
|
|
168
168
|
? t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ThemeToggle_Light))
|
|
169
169
|
: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ThemeToggle_Dark)),
|
|
170
170
|
icon: mode === 'dark' ? (0, jsx_runtime_1.jsx)(icons_material_1.Brightness7, {}) : (0, jsx_runtime_1.jsx)(icons_material_1.Brightness4, {}),
|
|
171
|
-
includeOnMenus: [
|
|
171
|
+
includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
|
|
172
172
|
index: index++,
|
|
173
173
|
requiresAuth: undefined,
|
|
174
174
|
action: toggleColorMode,
|
package/src/index.d.ts
CHANGED
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-express-suite-react-components/src/index.ts"],"names":[],"mappings":"AACA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-express-suite-react-components/src/index.ts"],"names":[],"mappings":"AACA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
package/src/index.js
CHANGED
|
@@ -5,7 +5,6 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
tslib_1.__exportStar(require("./auth"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./components"), exports);
|
|
7
7
|
tslib_1.__exportStar(require("./contexts"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./enumerations"), exports);
|
|
9
8
|
tslib_1.__exportStar(require("./hooks"), exports);
|
|
10
9
|
tslib_1.__exportStar(require("./interfaces"), exports);
|
|
11
10
|
tslib_1.__exportStar(require("./services"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { MenuType } from '../types/MenuType';
|
|
3
3
|
import { To } from 'react-router-dom';
|
|
4
4
|
export interface IMenuOption {
|
|
5
5
|
/**
|
|
@@ -13,7 +13,7 @@ export interface IMenuOption {
|
|
|
13
13
|
/**
|
|
14
14
|
* Where the menu option should be displayed
|
|
15
15
|
*/
|
|
16
|
-
includeOnMenus:
|
|
16
|
+
includeOnMenus: MenuType[];
|
|
17
17
|
/**
|
|
18
18
|
* Display order for the menu option. Lower numbers are displayed first.
|
|
19
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMenuOption.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/interfaces/IMenuOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"IMenuOption.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/interfaces/IMenuOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC;IAC7C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;CAC3C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type MenuType = string & {
|
|
2
|
+
readonly __brand: 'MenuType';
|
|
3
|
+
};
|
|
4
|
+
export declare const createMenuType: (id: string) => MenuType;
|
|
5
|
+
export declare const MenuTypes: {
|
|
6
|
+
readonly SideMenu: MenuType;
|
|
7
|
+
readonly TopMenu: MenuType;
|
|
8
|
+
readonly UserMenu: MenuType;
|
|
9
|
+
};
|
|
10
|
+
export type BuiltInMenuType = typeof MenuTypes[keyof typeof MenuTypes];
|
|
11
|
+
//# sourceMappingURL=MenuType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuType.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/MenuType.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAGjE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,QAA0B,CAAC;AAGvE,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAGX,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MenuTypes = exports.createMenuType = void 0;
|
|
4
|
+
// Factory function to create menu types
|
|
5
|
+
const createMenuType = (id) => id;
|
|
6
|
+
exports.createMenuType = createMenuType;
|
|
7
|
+
// Built-in menu types
|
|
8
|
+
exports.MenuTypes = {
|
|
9
|
+
SideMenu: (0, exports.createMenuType)('SideMenu'),
|
|
10
|
+
TopMenu: (0, exports.createMenuType)('TopMenu'),
|
|
11
|
+
UserMenu: (0, exports.createMenuType)('UserMenu'),
|
|
12
|
+
};
|
package/src/types/index.d.ts
CHANGED
package/src/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
package/src/types/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./
|
|
5
|
-
tslib_1.__exportStar(require("./translation"), exports);
|
|
4
|
+
tslib_1.__exportStar(require("./MenuType"), exports);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IncludeOnMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/enumerations/IncludeOnMenu.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,QAAQ,IAAA;CACT"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.IncludeOnMenu = void 0;
|
|
4
|
-
var IncludeOnMenu;
|
|
5
|
-
(function (IncludeOnMenu) {
|
|
6
|
-
IncludeOnMenu[IncludeOnMenu["SideMenu"] = 0] = "SideMenu";
|
|
7
|
-
IncludeOnMenu[IncludeOnMenu["TopMenu"] = 1] = "TopMenu";
|
|
8
|
-
IncludeOnMenu[IncludeOnMenu["UserMenu"] = 2] = "UserMenu";
|
|
9
|
-
})(IncludeOnMenu || (exports.IncludeOnMenu = IncludeOnMenu = {}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/enumerations/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|