@fluxo-dev/shell 0.0.8
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/.babelrc +12 -0
- package/.eslintrc.json +18 -0
- package/README.md +7 -0
- package/jest.config.ts +11 -0
- package/package.json +4 -0
- package/project.json +43 -0
- package/src/index.ts +1 -0
- package/src/lib/app.module.css +1 -0
- package/src/lib/app.spec.tsx +17 -0
- package/src/lib/app.tsx +374 -0
- package/src/lib/components/error-page/404.tsx +16 -0
- package/src/lib/components/routes/main-routes.tsx +26 -0
- package/src/lib/layouts/blank/blank-layout.tsx +10 -0
- package/src/lib/layouts/main/app-bar.tsx +192 -0
- package/src/lib/layouts/main/app-layout.tsx +52 -0
- package/src/lib/layouts/main/content.tsx +10 -0
- package/src/lib/layouts/main/footer-bar.tsx +76 -0
- package/src/lib/layouts/main/navbar-item.module.css +49 -0
- package/src/lib/layouts/main/navbar-item.tsx +129 -0
- package/src/lib/layouts/main/navbar.tsx +38 -0
- package/src/lib/layouts/main/search-bar.tsx +44 -0
- package/src/lib/layouts/main/shell-spotlight.tsx +58 -0
- package/src/lib/models/app-jit.ts +6 -0
- package/src/lib/pages/general/fluxo-plugin-loader.tsx +22 -0
- package/src/lib/pages/login/account-confirmation.tsx +86 -0
- package/src/lib/pages/login/change-password.tsx +58 -0
- package/src/lib/pages/login/forgot-password.tsx +53 -0
- package/src/lib/pages/login/login-page.tsx +70 -0
- package/src/lib/pages/login/reset-password.tsx +91 -0
- package/src/lib/pages/settings/apps/add-jit-app.tsx +79 -0
- package/src/lib/pages/settings/apps/app-item.tsx +157 -0
- package/src/lib/pages/settings/apps/app-jit-item.tsx +105 -0
- package/src/lib/pages/settings/apps/apps-list.tsx +171 -0
- package/src/lib/pages/settings/apps/embedded-module-item.tsx +66 -0
- package/src/lib/pages/settings/apps/install-or-upgrade-app.tsx +105 -0
- package/src/lib/pages/settings/menu-designer/custom-node.module.css +34 -0
- package/src/lib/pages/settings/menu-designer/custom-node.tsx +160 -0
- package/src/lib/pages/settings/menu-designer/menu-create-form.tsx +109 -0
- package/src/lib/pages/settings/menu-designer/menu-designer.module.css +19 -0
- package/src/lib/pages/settings/menu-designer/menu-designer.tsx +463 -0
- package/src/lib/pages/settings/menu-designer/menu-item-edit.tsx +115 -0
- package/src/lib/pages/settings/menu-designer/placeholder.module.css +8 -0
- package/src/lib/pages/settings/menu-designer/placeholder.tsx +13 -0
- package/src/lib/pages/settings/security/components/domani-role/domain-role-form.tsx +67 -0
- package/src/lib/pages/settings/security/components/domani-role/domain-role-grid.tsx +139 -0
- package/src/lib/pages/settings/security/components/permission/create-custom-permission-form.tsx +64 -0
- package/src/lib/pages/settings/security/components/permission/create-scope-form.tsx +158 -0
- package/src/lib/pages/settings/security/components/permission/permission-grid.tsx +304 -0
- package/src/lib/pages/settings/security/components/permission/permission-navigator.tsx +320 -0
- package/src/lib/pages/settings/security/components/permission/update-permission.tsx +54 -0
- package/src/lib/pages/settings/security/components/route-rule/route-rule-create-form.tsx +59 -0
- package/src/lib/pages/settings/security/components/route-rule/route-rule-grid.tsx +229 -0
- package/src/lib/pages/settings/security/components/user/user-form.tsx +123 -0
- package/src/lib/pages/settings/security/components/user/users-grid.tsx +127 -0
- package/src/lib/pages/settings/settings.tsx +298 -0
- package/src/lib/pages/settings/token/token-row.tsx +69 -0
- package/src/lib/pages/settings/token/tokens.tsx +73 -0
- package/src/lib/pages/settings/ui/ui.tsx +149 -0
- package/src/lib/services/app-jit-manager.ts +92 -0
- package/src/lib/services/app-menu.service.ts +35 -0
- package/src/lib/utils/icon-factory.tsx +25 -0
- package/src/lib/utils/security/only-not-logged-route.tsx +17 -0
- package/src/lib/utils/security/protected-route.tsx +47 -0
- package/tsconfig.json +20 -0
- package/tsconfig.lib.json +24 -0
- package/tsconfig.spec.json +20 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {AppMenuItem} from "@fluxo-dev/api-client-base";
|
|
2
|
+
import {SpotlightActionData, SpotlightActionGroupData} from "@mantine/spotlight";
|
|
3
|
+
|
|
4
|
+
export class AppMenuService {
|
|
5
|
+
|
|
6
|
+
async getSpotlightMenu(menu: AppMenuItem[], parentTitle?: string): Promise<(SpotlightActionGroupData)[]> {
|
|
7
|
+
|
|
8
|
+
const result: SpotlightActionGroupData[] = [];
|
|
9
|
+
|
|
10
|
+
const currentGroup: SpotlightActionGroupData = {
|
|
11
|
+
group: parentTitle ?? 'Generale',
|
|
12
|
+
actions: []
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
menu.forEach((m) => {
|
|
16
|
+
if(m.hasIndex) {
|
|
17
|
+
currentGroup.actions.push({
|
|
18
|
+
label: m.label,
|
|
19
|
+
description: parentTitle ? `${parentTitle} -> ${m.label}` : m.label,
|
|
20
|
+
id: '/' + m.routerLink
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if(m.children && m.children.length > 0) {
|
|
25
|
+
this.getSpotlightMenu(m.children, m.label).then((res) => {
|
|
26
|
+
const aaa = res;
|
|
27
|
+
result.push(...aaa);
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
result.push(currentGroup);
|
|
33
|
+
return Promise.resolve(result)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {IconDashboard, IconPlus} from '@tabler/icons-react';
|
|
2
|
+
|
|
3
|
+
export class IconFactory {
|
|
4
|
+
|
|
5
|
+
static icons = [
|
|
6
|
+
{value: 'dashboard', element: <IconDashboard size={18} />},
|
|
7
|
+
{value: 'plus', element: <IconPlus size={18} />},
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
static getIconIdentifiers(): string[] {
|
|
11
|
+
return IconFactory.icons.map((e) => e.value);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static getIcon(iconName: string): JSX.Element {
|
|
15
|
+
|
|
16
|
+
let iconFound = <IconDashboard size={18} />;
|
|
17
|
+
|
|
18
|
+
IconFactory.icons.forEach((icon) => {
|
|
19
|
+
if(icon.value === iconName)
|
|
20
|
+
iconFound = icon.element;
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
return iconFound;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {Navigate} from "react-router-dom";
|
|
3
|
+
import {useSelector} from "react-redux";
|
|
4
|
+
import {IFluxoRootState} from "@fluxo-dev/state";
|
|
5
|
+
|
|
6
|
+
function OnlyNotLoggedRoute({children, ...props}: any) {
|
|
7
|
+
|
|
8
|
+
const { loggedIn } = useSelector((state: IFluxoRootState) => state.user)
|
|
9
|
+
|
|
10
|
+
if (loggedIn) {
|
|
11
|
+
return <Navigate to="/" replace />;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return children;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default OnlyNotLoggedRoute;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {matchPath, Navigate, useLocation} from "react-router-dom";
|
|
3
|
+
import {useSelector} from "react-redux";
|
|
4
|
+
import {IFluxoRootState} from "@fluxo-dev/state";
|
|
5
|
+
import {FluxoClientSys, RouteRuleWithPermissions} from "@fluxo-dev/api-client-base";
|
|
6
|
+
import {AccessDenied} from "@fluxo-dev/ui-components";
|
|
7
|
+
|
|
8
|
+
function ProtectedRoute({children, ...props}: any) {
|
|
9
|
+
const { loggedIn } = useSelector((state: IFluxoRootState) => state.user)
|
|
10
|
+
const { routeRules } = useSelector((state: IFluxoRootState) => state.routeRules);
|
|
11
|
+
|
|
12
|
+
const navigation = useLocation();
|
|
13
|
+
|
|
14
|
+
if (!loggedIn) {
|
|
15
|
+
return <Navigate to="/auth/login" replace />;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let accessDenied = false;
|
|
19
|
+
let requiredPermissions: string[] = [];
|
|
20
|
+
|
|
21
|
+
(routeRules as RouteRuleWithPermissions[]).forEach((routeRule) => {
|
|
22
|
+
const match = matchPath(`${routeRule.route}`, navigation.pathname);
|
|
23
|
+
|
|
24
|
+
if (match) {
|
|
25
|
+
if (routeRule.permissions.length === 0) {
|
|
26
|
+
return;
|
|
27
|
+
} else {
|
|
28
|
+
|
|
29
|
+
const res = FluxoClientSys.Instance.security.user.currentUserHasPermissions(routeRule.permissions);
|
|
30
|
+
|
|
31
|
+
if(!res) {
|
|
32
|
+
accessDenied = true;
|
|
33
|
+
requiredPermissions = routeRule.permissions;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
if(accessDenied)
|
|
42
|
+
return <AccessDenied requiredPermissions={requiredPermissions} />;
|
|
43
|
+
|
|
44
|
+
return children;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export default ProtectedRoute;
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"jsx": "react-jsx",
|
|
4
|
+
"allowJs": false,
|
|
5
|
+
"esModuleInterop": false,
|
|
6
|
+
"allowSyntheticDefaultImports": true,
|
|
7
|
+
"strict": true
|
|
8
|
+
},
|
|
9
|
+
"files": [],
|
|
10
|
+
"include": [],
|
|
11
|
+
"references": [
|
|
12
|
+
{
|
|
13
|
+
"path": "./tsconfig.lib.json"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "./tsconfig.spec.json"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"extends": "../../../tsconfig.base.json"
|
|
20
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "../../../dist/out-tsc",
|
|
5
|
+
"types": [
|
|
6
|
+
"node",
|
|
7
|
+
|
|
8
|
+
"@nx/react/typings/cssmodule.d.ts",
|
|
9
|
+
"@nx/react/typings/image.d.ts"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"exclude": [
|
|
13
|
+
"jest.config.ts",
|
|
14
|
+
"src/**/*.spec.ts",
|
|
15
|
+
"src/**/*.test.ts",
|
|
16
|
+
"src/**/*.spec.tsx",
|
|
17
|
+
"src/**/*.test.tsx",
|
|
18
|
+
"src/**/*.spec.js",
|
|
19
|
+
"src/**/*.test.js",
|
|
20
|
+
"src/**/*.spec.jsx",
|
|
21
|
+
"src/**/*.test.jsx"
|
|
22
|
+
],
|
|
23
|
+
"include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"]
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "../../../dist/out-tsc",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"types": ["jest", "node"]
|
|
7
|
+
},
|
|
8
|
+
"include": [
|
|
9
|
+
"jest.config.ts",
|
|
10
|
+
"src/**/*.test.ts",
|
|
11
|
+
"src/**/*.spec.ts",
|
|
12
|
+
"src/**/*.test.tsx",
|
|
13
|
+
"src/**/*.spec.tsx",
|
|
14
|
+
"src/**/*.test.js",
|
|
15
|
+
"src/**/*.spec.js",
|
|
16
|
+
"src/**/*.test.jsx",
|
|
17
|
+
"src/**/*.spec.jsx",
|
|
18
|
+
"src/**/*.d.ts"
|
|
19
|
+
]
|
|
20
|
+
}
|