@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.
Files changed (66) hide show
  1. package/.babelrc +12 -0
  2. package/.eslintrc.json +18 -0
  3. package/README.md +7 -0
  4. package/jest.config.ts +11 -0
  5. package/package.json +4 -0
  6. package/project.json +43 -0
  7. package/src/index.ts +1 -0
  8. package/src/lib/app.module.css +1 -0
  9. package/src/lib/app.spec.tsx +17 -0
  10. package/src/lib/app.tsx +374 -0
  11. package/src/lib/components/error-page/404.tsx +16 -0
  12. package/src/lib/components/routes/main-routes.tsx +26 -0
  13. package/src/lib/layouts/blank/blank-layout.tsx +10 -0
  14. package/src/lib/layouts/main/app-bar.tsx +192 -0
  15. package/src/lib/layouts/main/app-layout.tsx +52 -0
  16. package/src/lib/layouts/main/content.tsx +10 -0
  17. package/src/lib/layouts/main/footer-bar.tsx +76 -0
  18. package/src/lib/layouts/main/navbar-item.module.css +49 -0
  19. package/src/lib/layouts/main/navbar-item.tsx +129 -0
  20. package/src/lib/layouts/main/navbar.tsx +38 -0
  21. package/src/lib/layouts/main/search-bar.tsx +44 -0
  22. package/src/lib/layouts/main/shell-spotlight.tsx +58 -0
  23. package/src/lib/models/app-jit.ts +6 -0
  24. package/src/lib/pages/general/fluxo-plugin-loader.tsx +22 -0
  25. package/src/lib/pages/login/account-confirmation.tsx +86 -0
  26. package/src/lib/pages/login/change-password.tsx +58 -0
  27. package/src/lib/pages/login/forgot-password.tsx +53 -0
  28. package/src/lib/pages/login/login-page.tsx +70 -0
  29. package/src/lib/pages/login/reset-password.tsx +91 -0
  30. package/src/lib/pages/settings/apps/add-jit-app.tsx +79 -0
  31. package/src/lib/pages/settings/apps/app-item.tsx +157 -0
  32. package/src/lib/pages/settings/apps/app-jit-item.tsx +105 -0
  33. package/src/lib/pages/settings/apps/apps-list.tsx +171 -0
  34. package/src/lib/pages/settings/apps/embedded-module-item.tsx +66 -0
  35. package/src/lib/pages/settings/apps/install-or-upgrade-app.tsx +105 -0
  36. package/src/lib/pages/settings/menu-designer/custom-node.module.css +34 -0
  37. package/src/lib/pages/settings/menu-designer/custom-node.tsx +160 -0
  38. package/src/lib/pages/settings/menu-designer/menu-create-form.tsx +109 -0
  39. package/src/lib/pages/settings/menu-designer/menu-designer.module.css +19 -0
  40. package/src/lib/pages/settings/menu-designer/menu-designer.tsx +463 -0
  41. package/src/lib/pages/settings/menu-designer/menu-item-edit.tsx +115 -0
  42. package/src/lib/pages/settings/menu-designer/placeholder.module.css +8 -0
  43. package/src/lib/pages/settings/menu-designer/placeholder.tsx +13 -0
  44. package/src/lib/pages/settings/security/components/domani-role/domain-role-form.tsx +67 -0
  45. package/src/lib/pages/settings/security/components/domani-role/domain-role-grid.tsx +139 -0
  46. package/src/lib/pages/settings/security/components/permission/create-custom-permission-form.tsx +64 -0
  47. package/src/lib/pages/settings/security/components/permission/create-scope-form.tsx +158 -0
  48. package/src/lib/pages/settings/security/components/permission/permission-grid.tsx +304 -0
  49. package/src/lib/pages/settings/security/components/permission/permission-navigator.tsx +320 -0
  50. package/src/lib/pages/settings/security/components/permission/update-permission.tsx +54 -0
  51. package/src/lib/pages/settings/security/components/route-rule/route-rule-create-form.tsx +59 -0
  52. package/src/lib/pages/settings/security/components/route-rule/route-rule-grid.tsx +229 -0
  53. package/src/lib/pages/settings/security/components/user/user-form.tsx +123 -0
  54. package/src/lib/pages/settings/security/components/user/users-grid.tsx +127 -0
  55. package/src/lib/pages/settings/settings.tsx +298 -0
  56. package/src/lib/pages/settings/token/token-row.tsx +69 -0
  57. package/src/lib/pages/settings/token/tokens.tsx +73 -0
  58. package/src/lib/pages/settings/ui/ui.tsx +149 -0
  59. package/src/lib/services/app-jit-manager.ts +92 -0
  60. package/src/lib/services/app-menu.service.ts +35 -0
  61. package/src/lib/utils/icon-factory.tsx +25 -0
  62. package/src/lib/utils/security/only-not-logged-route.tsx +17 -0
  63. package/src/lib/utils/security/protected-route.tsx +47 -0
  64. package/tsconfig.json +20 -0
  65. package/tsconfig.lib.json +24 -0
  66. 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
+ }