@dashadmin/dash-app-common 1.3.25 → 1.3.28
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 +35 -0
- package/dist/DashApp.js +176 -1
- package/dist/DashAppLoader.js +348 -3
- package/dist/DashDefaultResources.js +10 -1
- package/dist/components/DashDefaultPrivateApp.js +150 -1
- package/dist/components/DashDefaultPrivateResources.js +10 -1
- package/dist/components/DashDefaultPublicApp.js +20 -1
- package/dist/components/DashResourceLoader.js +245 -1
- package/dist/defaults/extensions/bootstrap/DashDefaultErrorBoundary.js +78 -1
- package/dist/defaults/extensions/bootstrap/dashDefaultInitializeApp.js +59 -1
- package/dist/defaults/extensions/bootstrap/index.js +24 -1
- package/dist/defaults/extensions/components/DashDefaultLoader.js +43 -2
- package/dist/defaults/extensions/components/dashDefaultAutoAdminComponents.js +67 -1
- package/dist/defaults/extensions/components/dashDefaultNotification.js +28 -1
- package/dist/defaults/extensions/components/dashDefaultStaticComponents.js +15 -1
- package/dist/defaults/extensions/components/index.js +13 -1
- package/dist/defaults/extensions/electron/dashDefaultIpcListeners.js +38 -1
- package/dist/defaults/extensions/electron/index.js +5 -1
- package/dist/defaults/extensions/hooks/index.js +12 -1
- package/dist/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.js +17 -1
- package/dist/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.js +51 -1
- package/dist/defaults/extensions/hooks/useDashDefaultLazyResources.js +19 -1
- package/dist/defaults/extensions/hooks/useDashDefaultMountTracker.js +22 -1
- package/dist/defaults/extensions/hooks/useDashDefaultRoutePath.js +17 -1
- package/dist/defaults/extensions/i18n/dashDefaultI18nProvider.js +44 -1
- package/dist/defaults/extensions/i18n/dashDefaultTranslations.js +87 -1
- package/dist/defaults/extensions/i18n/index.js +24 -1
- package/dist/defaults/extensions/index.js +190 -1
- package/dist/defaults/extensions/layout/dashDefaultDomainAppLayout.js +58 -1
- package/dist/defaults/extensions/layout/index.js +12 -1
- package/dist/defaults/extensions/managers/DashDefaultWSMessagesManager.js +84 -1
- package/dist/defaults/extensions/managers/index.js +5 -1
- package/dist/defaults/extensions/providers/dashDefaultAuthProvider.js +220 -1
- package/dist/defaults/extensions/providers/dashDefaultDataProvider.js +395 -1
- package/dist/defaults/extensions/providers/index.js +24 -1
- package/dist/defaults/extensions/router/DashDefaultLanding.js +46 -1
- package/dist/defaults/extensions/router/dashDefaultPrivateRoutes.js +38 -1
- package/dist/defaults/extensions/router/dashDefaultPublicRoutes.js +65 -1
- package/dist/defaults/extensions/router/dashDefaultRouter.js +39 -1
- package/dist/defaults/extensions/router/dashDefaultSharedRoutes.js +40 -1
- package/dist/defaults/extensions/router/index.js +12 -1
- package/dist/defaults/extensions/state/dashDefaultAppCommon.js +57 -1
- package/dist/defaults/extensions/state/dashDefaultAppSettings.js +38 -1
- package/dist/defaults/extensions/state/dashDefaultInitialAppState.js +31 -1
- package/dist/defaults/extensions/state/dashDefaultLayoutSettings.js +48 -1
- package/dist/defaults/extensions/state/dashDefaultQueryClient.js +58 -1
- package/dist/defaults/extensions/state/dashDefaultResourcesIcons.js +24 -1
- package/dist/defaults/extensions/state/index.js +29 -1
- package/dist/defaults/extensions/styles/index.js +2 -1
- package/dist/defaults/extensions/theme/dashDefaultThemeOptions.js +74 -1
- package/dist/defaults/extensions/theme/index.js +6 -1
- package/dist/defaults/extensions/utils/IPCMessageBrokerContext.js +12 -1
- package/dist/defaults/extensions/utils/dashDefaultAuthProviderUtils.js +29 -1
- package/dist/defaults/extensions/utils/dashDefaultDataProviderUtils.js +37 -1
- package/dist/defaults/extensions/utils/dashDefaultNotificationsProcessor.js +149 -1
- package/dist/defaults/extensions/utils/index.js +44 -1
- package/dist/defaults/filters/demo/dashDefaultDemoFilters.js +36 -1
- package/dist/defaults/filters/demo/index.js +4 -1
- package/dist/defaults/filters/index.js +5 -1
- package/dist/defaults/index.js +14 -1
- package/dist/defaults/pages/Account/DashDefaultRegister.js +282 -1
- package/dist/defaults/pages/Account/DashDefaultSignUp.js +420 -1
- package/dist/defaults/pages/Account/DashDefaultSignUpSuccess.js +101 -1
- package/dist/defaults/pages/Account/index.js +8 -1
- package/dist/defaults/pages/DashDefaultLogin.js +218 -1
- package/dist/defaults/pages/Misc/DashDefaultNotFound.js +74 -1
- package/dist/defaults/pages/Misc/DashDefaultServerError.js +79 -1
- package/dist/defaults/pages/Misc/DashDefaultUnauthorized.js +90 -1
- package/dist/defaults/pages/Misc/index.js +8 -1
- package/dist/defaults/pages/Static/DashDefaultPrivacyPage.js +48 -1
- package/dist/defaults/pages/Static/DashDefaultStaticPage.js +55 -1
- package/dist/defaults/pages/Static/DashDefaultTermsPage.js +52 -1
- package/dist/defaults/pages/Static/index.js +8 -1
- package/dist/defaults/pages/index.js +25 -1
- package/dist/defaults/schemas/dashDefaultSchema.js +14 -1
- package/dist/defaults/schemas/demo/dashDefaultTodoSchema.js +24 -1
- package/dist/defaults/schemas/demo/index.js +4 -1
- package/dist/defaults/schemas/index.js +7 -1
- package/dist/filters/demo/todoFilters.js +36 -1
- package/dist/index.js +56 -5975
- package/dist/resources/demo/todoResource.js +58 -1
- package/dist/schemas/defaultSchema.js +14 -1
- package/dist/schemas/demo/todoSchema.js +24 -1
- package/package.json +132 -77
- package/src/DashApp.tsx +294 -0
- package/src/DashAppLoader.tsx +717 -0
- package/src/DashDefaultResources.tsx +10 -0
- package/src/components/DashDefaultPrivateApp.tsx +358 -0
- package/src/components/DashDefaultPrivateResources.tsx +10 -0
- package/src/components/DashDefaultPublicApp.tsx +40 -0
- package/src/components/DashResourceLoader.tsx +564 -0
- package/src/defaults/extensions/bootstrap/DashDefaultErrorBoundary.tsx +113 -0
- package/src/defaults/extensions/bootstrap/dashDefaultInitializeApp.ts +81 -0
- package/src/defaults/extensions/bootstrap/index.ts +32 -0
- package/src/defaults/extensions/components/DashDefaultLoader.tsx +59 -0
- package/src/defaults/extensions/components/dashDefaultAutoAdminComponents.tsx +49 -0
- package/src/defaults/extensions/components/dashDefaultNotification.tsx +37 -0
- package/src/defaults/extensions/components/dashDefaultStaticComponents.tsx +34 -0
- package/src/defaults/extensions/components/index.ts +17 -0
- package/src/defaults/extensions/electron/dashDefaultIpcListeners.ts +62 -0
- package/src/defaults/extensions/electron/index.ts +7 -0
- package/src/defaults/extensions/hooks/index.ts +11 -0
- package/src/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.ts +25 -0
- package/src/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.ts +38 -0
- package/src/defaults/extensions/hooks/useDashDefaultLazyResources.ts +29 -0
- package/src/defaults/extensions/hooks/useDashDefaultMountTracker.ts +28 -0
- package/src/defaults/extensions/hooks/useDashDefaultRoutePath.ts +27 -0
- package/src/defaults/extensions/i18n/dashDefaultI18nProvider.ts +66 -0
- package/src/defaults/extensions/i18n/dashDefaultTranslations.ts +82 -0
- package/src/defaults/extensions/i18n/index.ts +22 -0
- package/src/defaults/extensions/index.ts +177 -0
- package/src/defaults/extensions/layout/dashDefaultDomainAppLayout.tsx +126 -0
- package/src/defaults/extensions/layout/index.ts +12 -0
- package/src/defaults/extensions/managers/DashDefaultWSMessagesManager.tsx +99 -0
- package/src/defaults/extensions/managers/index.ts +7 -0
- package/src/defaults/extensions/providers/dashDefaultAuthProvider.ts +256 -0
- package/src/defaults/extensions/providers/dashDefaultDataProvider.ts +513 -0
- package/src/defaults/extensions/providers/index.ts +25 -0
- package/src/defaults/extensions/router/DashDefaultLanding.tsx +51 -0
- package/src/defaults/extensions/router/dashDefaultPrivateRoutes.tsx +50 -0
- package/src/defaults/extensions/router/dashDefaultPublicRoutes.tsx +86 -0
- package/src/defaults/extensions/router/dashDefaultRouter.tsx +54 -0
- package/src/defaults/extensions/router/dashDefaultSharedRoutes.tsx +56 -0
- package/src/defaults/extensions/router/index.ts +13 -0
- package/src/defaults/extensions/state/dashDefaultAppCommon.ts +54 -0
- package/src/defaults/extensions/state/dashDefaultAppSettings.ts +29 -0
- package/src/defaults/extensions/state/dashDefaultInitialAppState.ts +75 -0
- package/src/defaults/extensions/state/dashDefaultLayoutSettings.ts +59 -0
- package/src/defaults/extensions/state/dashDefaultQueryClient.ts +59 -0
- package/src/defaults/extensions/state/dashDefaultResourcesIcons.tsx +23 -0
- package/src/defaults/extensions/state/index.ts +29 -0
- package/src/defaults/extensions/styles/index.ts +17 -0
- package/src/defaults/extensions/theme/dashDefaultThemeOptions.ts +89 -0
- package/src/defaults/extensions/theme/index.ts +7 -0
- package/src/defaults/extensions/utils/IPCMessageBrokerContext.tsx +22 -0
- package/src/defaults/extensions/utils/dashDefaultAuthProviderUtils.ts +36 -0
- package/src/defaults/extensions/utils/dashDefaultDataProviderUtils.ts +46 -0
- package/src/defaults/extensions/utils/dashDefaultNotificationsProcessor.tsx +208 -0
- package/src/defaults/extensions/utils/index.ts +42 -0
- package/src/defaults/filters/demo/dashDefaultDemoFilters.tsx +50 -0
- package/src/defaults/filters/demo/index.ts +6 -0
- package/src/defaults/filters/index.ts +11 -0
- package/src/defaults/index.ts +27 -0
- package/src/defaults/pages/Account/DashDefaultRegister.tsx +281 -0
- package/src/defaults/pages/Account/DashDefaultSignUp.tsx +492 -0
- package/src/defaults/pages/Account/DashDefaultSignUpSuccess.tsx +113 -0
- package/src/defaults/pages/Account/index.ts +8 -0
- package/src/defaults/pages/DashDefaultLogin.tsx +224 -0
- package/src/defaults/pages/Misc/DashDefaultNotFound.tsx +96 -0
- package/src/defaults/pages/Misc/DashDefaultServerError.tsx +102 -0
- package/src/defaults/pages/Misc/DashDefaultUnauthorized.tsx +116 -0
- package/src/defaults/pages/Misc/index.ts +8 -0
- package/src/defaults/pages/Static/DashDefaultPrivacyPage.tsx +85 -0
- package/src/defaults/pages/Static/DashDefaultStaticPage.tsx +75 -0
- package/src/defaults/pages/Static/DashDefaultTermsPage.tsx +69 -0
- package/src/defaults/pages/Static/index.ts +8 -0
- package/src/defaults/pages/index.ts +28 -0
- package/src/defaults/schemas/dashDefaultSchema.tsx +25 -0
- package/src/defaults/schemas/demo/dashDefaultTodoSchema.tsx +39 -0
- package/src/defaults/schemas/demo/index.ts +6 -0
- package/src/defaults/schemas/index.ts +14 -0
- package/src/filters/demo/todoFilters.tsx +39 -0
- package/src/index.ts +131 -0
- package/src/resources/demo/todoResource.tsx +68 -0
- package/src/schemas/defaultSchema.tsx +14 -0
- package/src/schemas/demo/todoSchema.tsx +27 -0
|
@@ -1 +1,58 @@
|
|
|
1
|
-
import{jsx
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import ResourceTemplate from "dash-admin/src/templates/ResourceTemplate";
|
|
3
|
+
import Dot from "@mui/icons-material/FiberManualRecord";
|
|
4
|
+
import { DASHAppConstants } from "dash-constants";
|
|
5
|
+
import todoSchema from "../../schemas/demo/todoSchema";
|
|
6
|
+
import todoFilters from "../../filters/demo/todoFilters";
|
|
7
|
+
const Icon = Dot;
|
|
8
|
+
const enableTrash = true;
|
|
9
|
+
const TodoResource = {
|
|
10
|
+
roles: [DASHAppConstants.system.SYSTEM_ROLE],
|
|
11
|
+
component: ResourceTemplate,
|
|
12
|
+
//trash: true,
|
|
13
|
+
model: "example/todo",
|
|
14
|
+
label: "Todo",
|
|
15
|
+
schema: todoSchema,
|
|
16
|
+
icon: /* @__PURE__ */ jsx(Icon, {}),
|
|
17
|
+
group: "Example",
|
|
18
|
+
trash: enableTrash,
|
|
19
|
+
menu: [
|
|
20
|
+
{
|
|
21
|
+
title: "List",
|
|
22
|
+
redirect: "/example/todo"
|
|
23
|
+
},
|
|
24
|
+
...enableTrash ? [{
|
|
25
|
+
title: "Trash",
|
|
26
|
+
redirect: "/example/todo/trash"
|
|
27
|
+
}] : []
|
|
28
|
+
],
|
|
29
|
+
referenceFilters: todoFilters,
|
|
30
|
+
mainAction: {
|
|
31
|
+
title: "Crear Todo",
|
|
32
|
+
mode: "create",
|
|
33
|
+
fn: "virtualhash",
|
|
34
|
+
redirect: "inline/create"
|
|
35
|
+
},
|
|
36
|
+
view: true,
|
|
37
|
+
create: true,
|
|
38
|
+
edit: true,
|
|
39
|
+
drawer: true,
|
|
40
|
+
drawerOptions: {
|
|
41
|
+
create: true,
|
|
42
|
+
edit: true,
|
|
43
|
+
view: true
|
|
44
|
+
},
|
|
45
|
+
isFormData: true,
|
|
46
|
+
formGroupMode: "tabs",
|
|
47
|
+
postFormatter: (params) => {
|
|
48
|
+
return params;
|
|
49
|
+
},
|
|
50
|
+
mutationMode: "pessimistic",
|
|
51
|
+
saveButtonAlwaysEnabled: true,
|
|
52
|
+
listProps: { storeKey: false },
|
|
53
|
+
resetSelectedIdsOnLoad: true
|
|
54
|
+
};
|
|
55
|
+
var todoResource_default = TodoResource;
|
|
56
|
+
export {
|
|
57
|
+
todoResource_default as default
|
|
58
|
+
};
|
|
@@ -1 +1,14 @@
|
|
|
1
|
-
const
|
|
1
|
+
const defaultSchema = [
|
|
2
|
+
{
|
|
3
|
+
attribute: "id",
|
|
4
|
+
label: "Id",
|
|
5
|
+
type: String,
|
|
6
|
+
sortable: true,
|
|
7
|
+
inEdit: false,
|
|
8
|
+
inCreate: false
|
|
9
|
+
}
|
|
10
|
+
];
|
|
11
|
+
var defaultSchema_default = defaultSchema;
|
|
12
|
+
export {
|
|
13
|
+
defaultSchema_default as default
|
|
14
|
+
};
|
|
@@ -1 +1,24 @@
|
|
|
1
|
-
const
|
|
1
|
+
const todoSchema = [
|
|
2
|
+
{
|
|
3
|
+
tab: "Todo",
|
|
4
|
+
attribute: "name",
|
|
5
|
+
label: "Nombre",
|
|
6
|
+
type: String
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
tab: "Todo",
|
|
10
|
+
attribute: "description",
|
|
11
|
+
label: "Description",
|
|
12
|
+
type: "textarea"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
tab: "Todo",
|
|
16
|
+
attribute: "completed",
|
|
17
|
+
label: "Completed",
|
|
18
|
+
type: Boolean
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
var todoSchema_default = todoSchema;
|
|
22
|
+
export {
|
|
23
|
+
todoSchema_default as default
|
|
24
|
+
};
|
package/package.json
CHANGED
|
@@ -1,78 +1,133 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
2
|
+
"name": "@dashadmin/dash-app-common",
|
|
3
|
+
"version": "1.3.28",
|
|
4
|
+
"description": "Common defaults and utilities for Dash applications - provides pre-configured components, extensions, pages, filters, and schemas",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"lint": "eslint --ext .ts,.tsx .",
|
|
9
|
+
"format": "pnpm prettier --write . && pnpm format-check && pnpm lint",
|
|
10
|
+
"lint:check": "pnpm prettier --check .",
|
|
11
|
+
"lint:fix": "pnpm prettier --write .",
|
|
12
|
+
"check-updates": "pnpm npm-check-updates",
|
|
13
|
+
"updates-packages": "pnpm npm-check-updates -u",
|
|
14
|
+
"build": "tsup"
|
|
15
|
+
},
|
|
16
|
+
"browserslist": {
|
|
17
|
+
"production": [
|
|
18
|
+
">0.2%",
|
|
19
|
+
"not dead",
|
|
20
|
+
"not op_mini all"
|
|
21
|
+
],
|
|
22
|
+
"development": [
|
|
23
|
+
"last 1 chrome version",
|
|
24
|
+
"last 1 firefox version",
|
|
25
|
+
"last 1 safari version"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"react": "latest",
|
|
30
|
+
"react-dom": "latest",
|
|
31
|
+
"react-redux": "latest",
|
|
32
|
+
"react-router-dom": "^7.9.6",
|
|
33
|
+
"@dashadmin/dash-utils": "workspace:*",
|
|
34
|
+
"@dashadmin/dash-admin": "workspace:*",
|
|
35
|
+
"@dashadmin/dash-admin-state": "workspace:*",
|
|
36
|
+
"@dashadmin/dash-components": "workspace:*",
|
|
37
|
+
"@dashadmin/dash-constants": "workspace:*",
|
|
38
|
+
"@dashadmin/dash-auth": "workspace:*",
|
|
39
|
+
"@dashadmin/dash-axios-hook": "workspace:*",
|
|
40
|
+
"@dashadmin/dash-dialog": "workspace:*",
|
|
41
|
+
"@dashadmin/dash-auto-admin": "workspace:*"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "latest",
|
|
45
|
+
"@types/react": "latest",
|
|
46
|
+
"@types/react-dom": "latest",
|
|
47
|
+
"@dashadmin/dash-tsconfig": "workspace:*",
|
|
48
|
+
"@dashadmin/dash-eslint": "workspace:*",
|
|
49
|
+
"@dashadmin/dash-prettier": "workspace:*",
|
|
50
|
+
"eslint": "latest",
|
|
51
|
+
"typescript": "latest"
|
|
52
|
+
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"react": "latest",
|
|
55
|
+
"react-dom": "latest"
|
|
56
|
+
},
|
|
57
|
+
"eslintConfig": {
|
|
58
|
+
"extends": "react-app"
|
|
59
|
+
},
|
|
60
|
+
"module": "dist/index.js",
|
|
61
|
+
"types": "./src/index.ts",
|
|
62
|
+
"exports": {
|
|
63
|
+
".": "./dist/index.js",
|
|
64
|
+
"./defaults": "./dist/defaults/index.js",
|
|
65
|
+
"./src/defaults": "./dist/defaults/index.js",
|
|
66
|
+
"./defaults/extensions": "./dist/defaults/extensions/index.js",
|
|
67
|
+
"./src/defaults/extensions": "./dist/defaults/extensions/index.js",
|
|
68
|
+
"./defaults/extensions/bootstrap": "./dist/defaults/extensions/bootstrap/index.js",
|
|
69
|
+
"./src/defaults/extensions/bootstrap": "./dist/defaults/extensions/bootstrap/index.js",
|
|
70
|
+
"./defaults/extensions/components": "./dist/defaults/extensions/components/index.js",
|
|
71
|
+
"./src/defaults/extensions/components": "./dist/defaults/extensions/components/index.js",
|
|
72
|
+
"./defaults/extensions/electron": "./dist/defaults/extensions/electron/index.js",
|
|
73
|
+
"./src/defaults/extensions/electron": "./dist/defaults/extensions/electron/index.js",
|
|
74
|
+
"./defaults/extensions/hooks": "./dist/defaults/extensions/hooks/index.js",
|
|
75
|
+
"./src/defaults/extensions/hooks": "./dist/defaults/extensions/hooks/index.js",
|
|
76
|
+
"./defaults/extensions/i18n": "./dist/defaults/extensions/i18n/index.js",
|
|
77
|
+
"./src/defaults/extensions/i18n": "./dist/defaults/extensions/i18n/index.js",
|
|
78
|
+
"./defaults/extensions/layout": "./dist/defaults/extensions/layout/index.js",
|
|
79
|
+
"./src/defaults/extensions/layout": "./dist/defaults/extensions/layout/index.js",
|
|
80
|
+
"./defaults/extensions/managers": "./dist/defaults/extensions/managers/index.js",
|
|
81
|
+
"./src/defaults/extensions/managers": "./dist/defaults/extensions/managers/index.js",
|
|
82
|
+
"./defaults/extensions/providers": "./dist/defaults/extensions/providers/index.js",
|
|
83
|
+
"./src/defaults/extensions/providers": "./dist/defaults/extensions/providers/index.js",
|
|
84
|
+
"./defaults/extensions/router": "./dist/defaults/extensions/router/index.js",
|
|
85
|
+
"./src/defaults/extensions/router": "./dist/defaults/extensions/router/index.js",
|
|
86
|
+
"./defaults/extensions/state": "./dist/defaults/extensions/state/index.js",
|
|
87
|
+
"./src/defaults/extensions/state": "./dist/defaults/extensions/state/index.js",
|
|
88
|
+
"./defaults/extensions/styles": "./dist/defaults/extensions/styles/index.js",
|
|
89
|
+
"./src/defaults/extensions/styles": "./dist/defaults/extensions/styles/index.js",
|
|
90
|
+
"./defaults/extensions/theme": "./dist/defaults/extensions/theme/index.js",
|
|
91
|
+
"./src/defaults/extensions/theme": "./dist/defaults/extensions/theme/index.js",
|
|
92
|
+
"./defaults/extensions/utils": "./dist/defaults/extensions/utils/index.js",
|
|
93
|
+
"./src/defaults/extensions/utils": "./dist/defaults/extensions/utils/index.js",
|
|
94
|
+
"./defaults/filters": "./dist/defaults/filters/index.js",
|
|
95
|
+
"./src/defaults/filters": "./dist/defaults/filters/index.js",
|
|
96
|
+
"./defaults/filters/demo": "./dist/defaults/filters/demo/index.js",
|
|
97
|
+
"./src/defaults/filters/demo": "./dist/defaults/filters/demo/index.js",
|
|
98
|
+
"./defaults/pages": "./dist/defaults/pages/index.js",
|
|
99
|
+
"./src/defaults/pages": "./dist/defaults/pages/index.js",
|
|
100
|
+
"./defaults/pages/Account": "./dist/defaults/pages/Account/index.js",
|
|
101
|
+
"./src/defaults/pages/Account": "./dist/defaults/pages/Account/index.js",
|
|
102
|
+
"./defaults/pages/Misc": "./dist/defaults/pages/Misc/index.js",
|
|
103
|
+
"./src/defaults/pages/Misc": "./dist/defaults/pages/Misc/index.js",
|
|
104
|
+
"./defaults/pages/Static": "./dist/defaults/pages/Static/index.js",
|
|
105
|
+
"./src/defaults/pages/Static": "./dist/defaults/pages/Static/index.js",
|
|
106
|
+
"./defaults/schemas": "./dist/defaults/schemas/index.js",
|
|
107
|
+
"./src/defaults/schemas": "./dist/defaults/schemas/index.js",
|
|
108
|
+
"./defaults/schemas/demo": "./dist/defaults/schemas/demo/index.js",
|
|
109
|
+
"./src/defaults/schemas/demo": "./dist/defaults/schemas/demo/index.js",
|
|
110
|
+
"./*": "./dist/*.js",
|
|
111
|
+
"./src/*": "./dist/*.js"
|
|
112
|
+
},
|
|
113
|
+
"publishConfig": {
|
|
114
|
+
"access": "public",
|
|
115
|
+
"registry": "https://registry.npmjs.org"
|
|
116
|
+
},
|
|
117
|
+
"files": [
|
|
118
|
+
"dist",
|
|
119
|
+
"src"
|
|
120
|
+
],
|
|
121
|
+
"typesVersions": {
|
|
122
|
+
"*": {
|
|
123
|
+
"src/*": [
|
|
124
|
+
"src/*",
|
|
125
|
+
"src/*/index"
|
|
126
|
+
],
|
|
127
|
+
"*": [
|
|
128
|
+
"src/*",
|
|
129
|
+
"src/*/index"
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
package/src/DashApp.tsx
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashApp - Simplified Application Shell
|
|
3
|
+
*
|
|
4
|
+
* A simple, easy-to-understand component that:
|
|
5
|
+
* 1. Sets up the Router context FIRST (solving useNavigate issues)
|
|
6
|
+
* 2. Checks authentication state
|
|
7
|
+
* 3. Renders either Public or Private app based on auth
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { DashApp } from 'dash-app-common';
|
|
12
|
+
*
|
|
13
|
+
* // Zero-config (uses default public/private apps)
|
|
14
|
+
* <DashApp />
|
|
15
|
+
*
|
|
16
|
+
* // With custom apps
|
|
17
|
+
* <DashApp
|
|
18
|
+
* PublicApp={MyPublicApp}
|
|
19
|
+
* PrivateApp={MyPrivateApp}
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import React, { useEffect, useState } from 'react';
|
|
24
|
+
import { useSelector, useDispatch } from 'react-redux';
|
|
25
|
+
import { BrowserRouter, HashRouter, Routes, Route } from 'react-router-dom';
|
|
26
|
+
import { getEnv } from 'dash-utils';
|
|
27
|
+
import { AuthPersistenceService, syncLocalStorageToDeviceStore } from 'dash-auth';
|
|
28
|
+
import { dashStorage } from 'dash-utils';
|
|
29
|
+
|
|
30
|
+
// Framework imports
|
|
31
|
+
import DASHAuthenticationService from 'dash-admin/src/contexts/auth/DASHAuthenticationService';
|
|
32
|
+
import { DASH_REDUX_ACTIONS } from 'dash-admin-state';
|
|
33
|
+
import { ACTION_UPDATE_AUTH } from 'dash-admin-state/src/redux/reducers/Auth';
|
|
34
|
+
import AppLoadingFallback from 'dash-components/src/components/theme/AppLoadingFallback';
|
|
35
|
+
|
|
36
|
+
// Default apps and routes
|
|
37
|
+
import { dashDefaultPublicRoutes } from './defaults/extensions/router/dashDefaultPublicRoutes';
|
|
38
|
+
import { dashDefaultPrivateRoutes } from './defaults/extensions/router/dashDefaultPrivateRoutes';
|
|
39
|
+
|
|
40
|
+
// Lazy load default private app
|
|
41
|
+
const DashDefaultPrivateApp = React.lazy(
|
|
42
|
+
() => import('./components/DashDefaultPrivateApp')
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// TYPES
|
|
47
|
+
// ============================================================================
|
|
48
|
+
|
|
49
|
+
interface DashAppProps {
|
|
50
|
+
/**
|
|
51
|
+
* Custom public routes function. If not provided, uses default login/register routes.
|
|
52
|
+
*/
|
|
53
|
+
publicRoutes?: () => React.ReactNode[];
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Custom private routes function. If not provided, uses default admin routes.
|
|
57
|
+
*/
|
|
58
|
+
privateRoutes?: () => React.ReactNode[];
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Custom component to render for authenticated users instead of routes.
|
|
62
|
+
* Use this when you have a full custom admin app (like DashLazyAdminApp).
|
|
63
|
+
*/
|
|
64
|
+
PrivateApp?: React.ComponentType<any>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Props to pass to the PrivateApp component.
|
|
68
|
+
*/
|
|
69
|
+
privateAppProps?: Record<string, any>;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Loading component shown during initialization.
|
|
73
|
+
*/
|
|
74
|
+
LoadingComponent?: React.ComponentType<{ message?: string }>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Force hash router (for Electron apps).
|
|
78
|
+
*/
|
|
79
|
+
useHashRouter?: boolean;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Base path for the router.
|
|
83
|
+
*/
|
|
84
|
+
basename?: string;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Enable debug logging.
|
|
88
|
+
*/
|
|
89
|
+
debug?: boolean;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// HELPER: Determine router type
|
|
94
|
+
// ============================================================================
|
|
95
|
+
|
|
96
|
+
const shouldUseHashRouter = (): boolean => {
|
|
97
|
+
const platformType = getEnv('PLATFORM_TYPE');
|
|
98
|
+
const platform = getEnv('PLATFORM');
|
|
99
|
+
return platformType === 'desktop' || platform === 'electron';
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// ============================================================================
|
|
103
|
+
// INNER COMPONENT: Routes Content (rendered inside Router)
|
|
104
|
+
// This component is responsible for rendering routes AFTER Router is mounted
|
|
105
|
+
// ============================================================================
|
|
106
|
+
|
|
107
|
+
interface RoutesContentProps {
|
|
108
|
+
publicRoutes: () => React.ReactNode[];
|
|
109
|
+
privateRoutes?: () => React.ReactNode[];
|
|
110
|
+
isAuthenticated: boolean;
|
|
111
|
+
LoadingComponent: React.ComponentType<{ message?: string }>;
|
|
112
|
+
privateAppProps?: Record<string, any>;
|
|
113
|
+
PrivateApp?: React.ComponentType<any>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const RoutesContent: React.FC<RoutesContentProps> = ({
|
|
117
|
+
publicRoutes,
|
|
118
|
+
privateRoutes,
|
|
119
|
+
isAuthenticated,
|
|
120
|
+
LoadingComponent,
|
|
121
|
+
privateAppProps = {},
|
|
122
|
+
PrivateApp,
|
|
123
|
+
}) => {
|
|
124
|
+
// Render authenticated app
|
|
125
|
+
if (isAuthenticated) {
|
|
126
|
+
// If a custom PrivateApp is provided, render it directly
|
|
127
|
+
if (PrivateApp) {
|
|
128
|
+
return <PrivateApp {...privateAppProps} />;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// If custom private routes provided, render them
|
|
132
|
+
if (privateRoutes) {
|
|
133
|
+
return (
|
|
134
|
+
<Routes>
|
|
135
|
+
{privateRoutes()}
|
|
136
|
+
</Routes>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Default: Use DashDefaultPrivateApp (with useOwnRouter=false since we already have Router)
|
|
141
|
+
return (
|
|
142
|
+
<React.Suspense fallback={<LoadingComponent message="Loading admin..." />}>
|
|
143
|
+
<DashDefaultPrivateApp useOwnRouter={false} {...privateAppProps} />
|
|
144
|
+
</React.Suspense>
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Render public routes (login, register, etc.)
|
|
149
|
+
// Routes are called here, INSIDE the Router context
|
|
150
|
+
return (
|
|
151
|
+
<Routes>
|
|
152
|
+
{publicRoutes()}
|
|
153
|
+
</Routes>
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// ============================================================================
|
|
158
|
+
// INNER COMPONENT: App Content (rendered inside Router)
|
|
159
|
+
// ============================================================================
|
|
160
|
+
|
|
161
|
+
interface AppContentProps {
|
|
162
|
+
publicRoutes: () => React.ReactNode[];
|
|
163
|
+
privateRoutes?: () => React.ReactNode[];
|
|
164
|
+
PrivateApp?: React.ComponentType<any>;
|
|
165
|
+
privateAppProps?: Record<string, any>;
|
|
166
|
+
LoadingComponent: React.ComponentType<{ message?: string }>;
|
|
167
|
+
debug?: boolean;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const AppContent: React.FC<AppContentProps> = ({
|
|
171
|
+
publicRoutes,
|
|
172
|
+
privateRoutes,
|
|
173
|
+
PrivateApp,
|
|
174
|
+
privateAppProps = {},
|
|
175
|
+
LoadingComponent,
|
|
176
|
+
debug = false,
|
|
177
|
+
}) => {
|
|
178
|
+
const [isInitializing, setIsInitializing] = useState(true);
|
|
179
|
+
const dispatch = useDispatch();
|
|
180
|
+
|
|
181
|
+
// Get auth state from Redux
|
|
182
|
+
const auth = useSelector((state: any) => state.auth);
|
|
183
|
+
const isAuthenticated = auth?.authenticated ?? false;
|
|
184
|
+
|
|
185
|
+
const log = (...args: any[]) => {
|
|
186
|
+
if (debug) console.log('🔷 DashApp:', ...args);
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// Initialize auth on mount
|
|
190
|
+
useEffect(() => {
|
|
191
|
+
const initializeAuth = async () => {
|
|
192
|
+
log('Initializing authentication...');
|
|
193
|
+
|
|
194
|
+
try {
|
|
195
|
+
// Check for persisted auth data
|
|
196
|
+
const storedToken = AuthPersistenceService.getToken();
|
|
197
|
+
const storedUser = AuthPersistenceService.getUser();
|
|
198
|
+
const isAuthenticatedStored = JSON.parse(dashStorage.getItem('authenticated') || 'false');
|
|
199
|
+
|
|
200
|
+
log('Persisted data:', { hasToken: !!storedToken, hasUser: !!storedUser, isAuthenticated: isAuthenticatedStored });
|
|
201
|
+
|
|
202
|
+
if (storedToken && isAuthenticatedStored) {
|
|
203
|
+
// Try to restore session
|
|
204
|
+
const result = await DASHAuthenticationService.initializeFromToken();
|
|
205
|
+
|
|
206
|
+
if (result.success) {
|
|
207
|
+
log('Session restored successfully');
|
|
208
|
+
dispatch(DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, {
|
|
209
|
+
user: result.user,
|
|
210
|
+
authenticated: true,
|
|
211
|
+
auth: result.auth || null,
|
|
212
|
+
}));
|
|
213
|
+
await syncLocalStorageToDeviceStore();
|
|
214
|
+
} else {
|
|
215
|
+
log('Session restore failed, clearing auth');
|
|
216
|
+
AuthPersistenceService.clearAuth();
|
|
217
|
+
}
|
|
218
|
+
} else {
|
|
219
|
+
log('No valid session found');
|
|
220
|
+
}
|
|
221
|
+
} catch (error) {
|
|
222
|
+
console.error('DashApp: Auth initialization error:', error);
|
|
223
|
+
AuthPersistenceService.clearAuth();
|
|
224
|
+
} finally {
|
|
225
|
+
setIsInitializing(false);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
initializeAuth();
|
|
230
|
+
}, [dispatch, debug]);
|
|
231
|
+
|
|
232
|
+
// Show loading during initialization
|
|
233
|
+
if (isInitializing) {
|
|
234
|
+
return <LoadingComponent message="Initializing..." />;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
log('Rendering:', isAuthenticated ? 'Private App' : 'Public Routes');
|
|
238
|
+
|
|
239
|
+
// Use RoutesContent to defer route evaluation until we're sure we're inside Router
|
|
240
|
+
return (
|
|
241
|
+
<RoutesContent
|
|
242
|
+
publicRoutes={publicRoutes}
|
|
243
|
+
privateRoutes={privateRoutes}
|
|
244
|
+
isAuthenticated={isAuthenticated}
|
|
245
|
+
LoadingComponent={LoadingComponent}
|
|
246
|
+
privateAppProps={privateAppProps}
|
|
247
|
+
PrivateApp={PrivateApp}
|
|
248
|
+
/>
|
|
249
|
+
);
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
// ============================================================================
|
|
253
|
+
// MAIN COMPONENT
|
|
254
|
+
// ============================================================================
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* DashApp - The main application shell
|
|
258
|
+
*
|
|
259
|
+
* Sets up Router context first, then handles auth and conditional rendering.
|
|
260
|
+
* This ensures useNavigate() and other Router hooks work everywhere.
|
|
261
|
+
*/
|
|
262
|
+
export const DashApp: React.FC<DashAppProps> = ({
|
|
263
|
+
publicRoutes = dashDefaultPublicRoutes,
|
|
264
|
+
privateRoutes,
|
|
265
|
+
PrivateApp,
|
|
266
|
+
privateAppProps,
|
|
267
|
+
LoadingComponent = AppLoadingFallback,
|
|
268
|
+
useHashRouter: forceHashRouter,
|
|
269
|
+
basename,
|
|
270
|
+
debug = false,
|
|
271
|
+
}) => {
|
|
272
|
+
// Determine router type
|
|
273
|
+
const useHash = forceHashRouter ?? shouldUseHashRouter();
|
|
274
|
+
const effectiveBasename = basename ?? getEnv('BASE_PATH') ?? '/';
|
|
275
|
+
|
|
276
|
+
// Router wrapper
|
|
277
|
+
const Router = useHash ? HashRouter : BrowserRouter;
|
|
278
|
+
const routerProps = useHash ? { basename: '' } : { basename: effectiveBasename };
|
|
279
|
+
|
|
280
|
+
return (
|
|
281
|
+
<Router {...routerProps}>
|
|
282
|
+
<AppContent
|
|
283
|
+
publicRoutes={publicRoutes}
|
|
284
|
+
privateRoutes={privateRoutes}
|
|
285
|
+
PrivateApp={PrivateApp}
|
|
286
|
+
privateAppProps={privateAppProps}
|
|
287
|
+
LoadingComponent={LoadingComponent}
|
|
288
|
+
debug={debug}
|
|
289
|
+
/>
|
|
290
|
+
</Router>
|
|
291
|
+
);
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
export default DashApp;
|