@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
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# @dashadmin/dash-app-common
|
|
2
|
+
|
|
3
|
+
> Common defaults and building blocks for Dash applications.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Pre-configured components, extensions, pages, filters and schemas shared across Dash applications so individual apps can start from sensible defaults instead of boilerplate.
|
|
8
|
+
|
|
9
|
+
## Key exports & features
|
|
10
|
+
|
|
11
|
+
- Default pages & filters
|
|
12
|
+
- Reusable extensions
|
|
13
|
+
- Shared schema definitions
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# From the public npm registry
|
|
19
|
+
npm install @dashadmin/dash-app-common
|
|
20
|
+
|
|
21
|
+
# Or the local Verdaccio registry (unscoped)
|
|
22
|
+
npm install dash-app-common --registry http://localhost:4873
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Internal Dash dependencies
|
|
26
|
+
|
|
27
|
+
`@dashadmin/dash-utils`, `@dashadmin/dash-admin`, `@dashadmin/dash-admin-state`, `@dashadmin/dash-components`, `@dashadmin/dash-constants`, `@dashadmin/dash-auth`, `@dashadmin/dash-axios-hook`, `@dashadmin/dash-dialog`, `@dashadmin/dash-auto-admin`
|
|
28
|
+
|
|
29
|
+
## Development & publishing
|
|
30
|
+
|
|
31
|
+
This package is part of the **dash-frontend-core** monorepo. See [`DEVELOPMENT.md`](../../DEVELOPMENT.md) for the source-modification workflow, local Verdaccio publishing, npm publishing and version-bump policy.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
_Part of the [Dash Framework](https://www.npmjs.com/org/dashadmin) · `@dashadmin` scope._
|
package/dist/DashApp.js
CHANGED
|
@@ -1 +1,176 @@
|
|
|
1
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
import { jsx } from "react/jsx-runtime";
|
|
41
|
+
import React, { useEffect, useState } from "react";
|
|
42
|
+
import { useSelector, useDispatch } from "react-redux";
|
|
43
|
+
import { BrowserRouter, HashRouter, Routes } from "react-router-dom";
|
|
44
|
+
import { getEnv } from "dash-utils";
|
|
45
|
+
import { AuthPersistenceService, syncLocalStorageToDeviceStore } from "dash-auth";
|
|
46
|
+
import { dashStorage } from "dash-utils";
|
|
47
|
+
import DASHAuthenticationService from "dash-admin/src/contexts/auth/DASHAuthenticationService";
|
|
48
|
+
import { DASH_REDUX_ACTIONS } from "dash-admin-state";
|
|
49
|
+
import { ACTION_UPDATE_AUTH } from "dash-admin-state/src/redux/reducers/Auth";
|
|
50
|
+
import AppLoadingFallback from "dash-components/src/components/theme/AppLoadingFallback";
|
|
51
|
+
import { dashDefaultPublicRoutes } from "./defaults/extensions/router/dashDefaultPublicRoutes";
|
|
52
|
+
const DashDefaultPrivateApp = React.lazy(
|
|
53
|
+
() => import("./components/DashDefaultPrivateApp")
|
|
54
|
+
);
|
|
55
|
+
const shouldUseHashRouter = () => {
|
|
56
|
+
const platformType = getEnv("PLATFORM_TYPE");
|
|
57
|
+
const platform = getEnv("PLATFORM");
|
|
58
|
+
return platformType === "desktop" || platform === "electron";
|
|
59
|
+
};
|
|
60
|
+
const RoutesContent = ({
|
|
61
|
+
publicRoutes,
|
|
62
|
+
privateRoutes,
|
|
63
|
+
isAuthenticated,
|
|
64
|
+
LoadingComponent,
|
|
65
|
+
privateAppProps = {},
|
|
66
|
+
PrivateApp
|
|
67
|
+
}) => {
|
|
68
|
+
if (isAuthenticated) {
|
|
69
|
+
if (PrivateApp) {
|
|
70
|
+
return /* @__PURE__ */ jsx(PrivateApp, __spreadValues({}, privateAppProps));
|
|
71
|
+
}
|
|
72
|
+
if (privateRoutes) {
|
|
73
|
+
return /* @__PURE__ */ jsx(Routes, { children: privateRoutes() });
|
|
74
|
+
}
|
|
75
|
+
return /* @__PURE__ */ jsx(React.Suspense, { fallback: /* @__PURE__ */ jsx(LoadingComponent, { message: "Loading admin..." }), children: /* @__PURE__ */ jsx(DashDefaultPrivateApp, __spreadValues({ useOwnRouter: false }, privateAppProps)) });
|
|
76
|
+
}
|
|
77
|
+
return /* @__PURE__ */ jsx(Routes, { children: publicRoutes() });
|
|
78
|
+
};
|
|
79
|
+
const AppContent = ({
|
|
80
|
+
publicRoutes,
|
|
81
|
+
privateRoutes,
|
|
82
|
+
PrivateApp,
|
|
83
|
+
privateAppProps = {},
|
|
84
|
+
LoadingComponent,
|
|
85
|
+
debug = false
|
|
86
|
+
}) => {
|
|
87
|
+
var _a;
|
|
88
|
+
const [isInitializing, setIsInitializing] = useState(true);
|
|
89
|
+
const dispatch = useDispatch();
|
|
90
|
+
const auth = useSelector((state) => state.auth);
|
|
91
|
+
const isAuthenticated = (_a = auth == null ? void 0 : auth.authenticated) != null ? _a : false;
|
|
92
|
+
const log = (...args) => {
|
|
93
|
+
if (debug) console.log("\u{1F537} DashApp:", ...args);
|
|
94
|
+
};
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
const initializeAuth = () => __async(null, null, function* () {
|
|
97
|
+
log("Initializing authentication...");
|
|
98
|
+
try {
|
|
99
|
+
const storedToken = AuthPersistenceService.getToken();
|
|
100
|
+
const storedUser = AuthPersistenceService.getUser();
|
|
101
|
+
const isAuthenticatedStored = JSON.parse(dashStorage.getItem("authenticated") || "false");
|
|
102
|
+
log("Persisted data:", { hasToken: !!storedToken, hasUser: !!storedUser, isAuthenticated: isAuthenticatedStored });
|
|
103
|
+
if (storedToken && isAuthenticatedStored) {
|
|
104
|
+
const result = yield DASHAuthenticationService.initializeFromToken();
|
|
105
|
+
if (result.success) {
|
|
106
|
+
log("Session restored successfully");
|
|
107
|
+
dispatch(DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, {
|
|
108
|
+
user: result.user,
|
|
109
|
+
authenticated: true,
|
|
110
|
+
auth: result.auth || null
|
|
111
|
+
}));
|
|
112
|
+
yield syncLocalStorageToDeviceStore();
|
|
113
|
+
} else {
|
|
114
|
+
log("Session restore failed, clearing auth");
|
|
115
|
+
AuthPersistenceService.clearAuth();
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
log("No valid session found");
|
|
119
|
+
}
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error("DashApp: Auth initialization error:", error);
|
|
122
|
+
AuthPersistenceService.clearAuth();
|
|
123
|
+
} finally {
|
|
124
|
+
setIsInitializing(false);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
initializeAuth();
|
|
128
|
+
}, [dispatch, debug]);
|
|
129
|
+
if (isInitializing) {
|
|
130
|
+
return /* @__PURE__ */ jsx(LoadingComponent, { message: "Initializing..." });
|
|
131
|
+
}
|
|
132
|
+
log("Rendering:", isAuthenticated ? "Private App" : "Public Routes");
|
|
133
|
+
return /* @__PURE__ */ jsx(
|
|
134
|
+
RoutesContent,
|
|
135
|
+
{
|
|
136
|
+
publicRoutes,
|
|
137
|
+
privateRoutes,
|
|
138
|
+
isAuthenticated,
|
|
139
|
+
LoadingComponent,
|
|
140
|
+
privateAppProps,
|
|
141
|
+
PrivateApp
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
};
|
|
145
|
+
const DashApp = ({
|
|
146
|
+
publicRoutes = dashDefaultPublicRoutes,
|
|
147
|
+
privateRoutes,
|
|
148
|
+
PrivateApp,
|
|
149
|
+
privateAppProps,
|
|
150
|
+
LoadingComponent = AppLoadingFallback,
|
|
151
|
+
useHashRouter: forceHashRouter,
|
|
152
|
+
basename,
|
|
153
|
+
debug = false
|
|
154
|
+
}) => {
|
|
155
|
+
var _a;
|
|
156
|
+
const useHash = forceHashRouter != null ? forceHashRouter : shouldUseHashRouter();
|
|
157
|
+
const effectiveBasename = (_a = basename != null ? basename : getEnv("BASE_PATH")) != null ? _a : "/";
|
|
158
|
+
const Router = useHash ? HashRouter : BrowserRouter;
|
|
159
|
+
const routerProps = useHash ? { basename: "" } : { basename: effectiveBasename };
|
|
160
|
+
return /* @__PURE__ */ jsx(Router, __spreadProps(__spreadValues({}, routerProps), { children: /* @__PURE__ */ jsx(
|
|
161
|
+
AppContent,
|
|
162
|
+
{
|
|
163
|
+
publicRoutes,
|
|
164
|
+
privateRoutes,
|
|
165
|
+
PrivateApp,
|
|
166
|
+
privateAppProps,
|
|
167
|
+
LoadingComponent,
|
|
168
|
+
debug
|
|
169
|
+
}
|
|
170
|
+
) }));
|
|
171
|
+
};
|
|
172
|
+
var DashApp_default = DashApp;
|
|
173
|
+
export {
|
|
174
|
+
DashApp,
|
|
175
|
+
DashApp_default as default
|
|
176
|
+
};
|
package/dist/DashAppLoader.js
CHANGED
|
@@ -1,11 +1,356 @@
|
|
|
1
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
var __async = (__this, __arguments, generator) => {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
var fulfilled = (value) => {
|
|
20
|
+
try {
|
|
21
|
+
step(generator.next(value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var rejected = (value) => {
|
|
27
|
+
try {
|
|
28
|
+
step(generator.throw(value));
|
|
29
|
+
} catch (e) {
|
|
30
|
+
reject(e);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
34
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
38
|
+
import { Suspense, useEffect, useState, useCallback, lazy, useMemo } from "react";
|
|
39
|
+
import { useSelector, useDispatch } from "react-redux";
|
|
40
|
+
import { useDeviceStorageSync } from "dash-utils";
|
|
41
|
+
import DASHAuthenticationService from "dash-admin/src/contexts/auth/DASHAuthenticationService";
|
|
42
|
+
import { DASH_REDUX_ACTIONS } from "dash-admin-state";
|
|
43
|
+
import { ACTION_UPDATE_AUTH } from "dash-admin-state/src/redux/reducers/Auth";
|
|
44
|
+
import AppLoadingFallback from "dash-components/src/components/theme/AppLoadingFallback";
|
|
45
|
+
import DashDefaultPublicApp from "./components/DashDefaultPublicApp";
|
|
46
|
+
import DashDefaultPrivateApp from "./components/DashDefaultPrivateApp";
|
|
47
|
+
const log = (debug, ...args) => {
|
|
48
|
+
if (debug) {
|
|
49
|
+
console.log(...args);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const DefaultLoadingFallback = ({ message }) => /* @__PURE__ */ jsxs("div", { style: {
|
|
53
|
+
display: "flex",
|
|
54
|
+
flexDirection: "column",
|
|
55
|
+
justifyContent: "center",
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
height: "100vh",
|
|
58
|
+
width: "100%",
|
|
59
|
+
backgroundColor: "var(--dash-background, #121212)",
|
|
60
|
+
color: "var(--dash-text, #ffffff)"
|
|
61
|
+
}, children: [
|
|
62
|
+
/* @__PURE__ */ jsx("div", { style: {
|
|
63
|
+
width: "40px",
|
|
64
|
+
height: "40px",
|
|
65
|
+
border: "3px solid rgba(255,255,255,0.3)",
|
|
66
|
+
borderTop: "3px solid var(--dash-primary, #90caf9)",
|
|
67
|
+
borderRadius: "50%",
|
|
68
|
+
animation: "spin 1s linear infinite",
|
|
69
|
+
marginBottom: "16px"
|
|
70
|
+
} }),
|
|
71
|
+
/* @__PURE__ */ jsx("p", { style: { margin: 0, fontSize: "14px", opacity: 0.8 }, children: message || "Loading application..." }),
|
|
72
|
+
/* @__PURE__ */ jsx("style", { children: `
|
|
2
73
|
@keyframes spin {
|
|
3
74
|
0% { transform: rotate(0deg); }
|
|
4
75
|
100% { transform: rotate(360deg); }
|
|
5
76
|
}
|
|
6
|
-
`
|
|
77
|
+
` })
|
|
78
|
+
] });
|
|
79
|
+
const DefaultErrorFallback = ({
|
|
80
|
+
error,
|
|
81
|
+
onRetry
|
|
82
|
+
}) => /* @__PURE__ */ jsxs("div", { style: {
|
|
83
|
+
display: "flex",
|
|
84
|
+
flexDirection: "column",
|
|
85
|
+
justifyContent: "center",
|
|
86
|
+
alignItems: "center",
|
|
87
|
+
height: "100vh",
|
|
88
|
+
width: "100%",
|
|
89
|
+
backgroundColor: "var(--dash-background, #121212)",
|
|
90
|
+
color: "var(--dash-text, #ffffff)",
|
|
91
|
+
padding: "20px"
|
|
92
|
+
}, children: [
|
|
93
|
+
/* @__PURE__ */ jsx("h2", { style: { color: "#f44336", marginBottom: "16px" }, children: "Application Error" }),
|
|
94
|
+
/* @__PURE__ */ jsx("p", { style: {
|
|
95
|
+
maxWidth: "500px",
|
|
96
|
+
textAlign: "center",
|
|
97
|
+
marginBottom: "24px",
|
|
98
|
+
opacity: 0.8
|
|
99
|
+
}, children: error }),
|
|
100
|
+
/* @__PURE__ */ jsx(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
onClick: onRetry,
|
|
104
|
+
style: {
|
|
105
|
+
backgroundColor: "var(--dash-primary, #90caf9)",
|
|
106
|
+
color: "#000",
|
|
107
|
+
border: "none",
|
|
108
|
+
padding: "12px 24px",
|
|
109
|
+
borderRadius: "4px",
|
|
110
|
+
cursor: "pointer",
|
|
111
|
+
fontSize: "14px",
|
|
112
|
+
fontWeight: 500
|
|
113
|
+
},
|
|
114
|
+
children: "Retry"
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
] });
|
|
118
|
+
const ConfigurationError = ({ missingProps }) => /* @__PURE__ */ jsxs("div", { style: {
|
|
119
|
+
display: "flex",
|
|
120
|
+
flexDirection: "column",
|
|
121
|
+
justifyContent: "center",
|
|
122
|
+
alignItems: "center",
|
|
123
|
+
height: "100vh",
|
|
124
|
+
width: "100%",
|
|
125
|
+
backgroundColor: "#1a1a1a",
|
|
126
|
+
color: "#ffffff",
|
|
127
|
+
padding: "40px",
|
|
128
|
+
boxSizing: "border-box"
|
|
129
|
+
}, children: [
|
|
130
|
+
/* @__PURE__ */ jsx("h2", { style: { color: "#f44336", marginBottom: "16px" }, children: "DashAppLoader Configuration Error" }),
|
|
131
|
+
/* @__PURE__ */ jsx("p", { style: { marginBottom: "16px" }, children: "The following required props are missing:" }),
|
|
132
|
+
/* @__PURE__ */ jsx("ul", { style: { textAlign: "left", marginBottom: "24px" }, children: missingProps.map((prop) => /* @__PURE__ */ jsx("li", { style: { color: "#ff9800" }, children: prop }, prop)) }),
|
|
133
|
+
/* @__PURE__ */ jsxs("div", { style: {
|
|
134
|
+
backgroundColor: "#2d2d2d",
|
|
135
|
+
padding: "16px",
|
|
136
|
+
borderRadius: "8px",
|
|
137
|
+
maxWidth: "600px",
|
|
138
|
+
width: "100%"
|
|
139
|
+
}, children: [
|
|
140
|
+
/* @__PURE__ */ jsx("p", { style: { marginBottom: "8px", color: "#90caf9" }, children: "Example usage:" }),
|
|
141
|
+
/* @__PURE__ */ jsx("pre", { style: {
|
|
142
|
+
backgroundColor: "#1e1e1e",
|
|
143
|
+
padding: "12px",
|
|
144
|
+
borderRadius: "4px",
|
|
145
|
+
overflow: "auto",
|
|
146
|
+
fontSize: "12px"
|
|
147
|
+
}, children: `import { DashAppLoader } from 'dash-app-common';
|
|
7
148
|
|
|
8
149
|
<DashAppLoader
|
|
9
150
|
publicAppImport={() => import('./DASHPublicApp')}
|
|
10
151
|
privateAppImport={() => import('./DASHLazyAdminApp')}
|
|
11
|
-
/>`
|
|
152
|
+
/>` })
|
|
153
|
+
] })
|
|
154
|
+
] });
|
|
155
|
+
const dashDefaultPublicAppImport = () => Promise.resolve({ default: DashDefaultPublicApp });
|
|
156
|
+
const dashDefaultPrivateAppImport = () => Promise.resolve({ default: DashDefaultPrivateApp });
|
|
157
|
+
const DashAppLoaderInner = ({
|
|
158
|
+
publicAppImport,
|
|
159
|
+
privateAppImport,
|
|
160
|
+
authService,
|
|
161
|
+
reduxActions,
|
|
162
|
+
updateAuthActionType,
|
|
163
|
+
AdminHookComponent,
|
|
164
|
+
LoadingFallback,
|
|
165
|
+
ErrorFallback,
|
|
166
|
+
privateAppProps,
|
|
167
|
+
publicAppProps,
|
|
168
|
+
debug
|
|
169
|
+
}) => {
|
|
170
|
+
const dispatch = useDispatch();
|
|
171
|
+
const auth = useSelector((state) => state.auth);
|
|
172
|
+
const [isInitializing, setIsInitializing] = useState(true);
|
|
173
|
+
const [initError, setInitError] = useState(null);
|
|
174
|
+
const [hasRestoredFromStorage, setHasRestoredFromStorage] = useState(false);
|
|
175
|
+
useDeviceStorageSync();
|
|
176
|
+
log(debug, "\u{1F50D} DashAppLoader: Redux auth state:", {
|
|
177
|
+
isLogged: auth == null ? void 0 : auth.isLogged,
|
|
178
|
+
hasUser: !!(auth == null ? void 0 : auth.user),
|
|
179
|
+
hasToken: !!(auth == null ? void 0 : auth.token)
|
|
180
|
+
});
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
if (!hasRestoredFromStorage && !(auth == null ? void 0 : auth.isLogged)) {
|
|
183
|
+
log(debug, "\u{1F50D} DashAppLoader: Checking for persisted auth data...");
|
|
184
|
+
const storedToken = localStorage.getItem("token");
|
|
185
|
+
const storedUserRaw = localStorage.getItem("user");
|
|
186
|
+
const storedTenantRaw = localStorage.getItem("tenant");
|
|
187
|
+
log(debug, "\u{1F50D} DashAppLoader: Persisted data check:", {
|
|
188
|
+
hasToken: !!storedToken,
|
|
189
|
+
hasUser: !!storedUserRaw,
|
|
190
|
+
hasTenant: !!storedTenantRaw
|
|
191
|
+
});
|
|
192
|
+
if (storedToken && storedUserRaw && !(auth == null ? void 0 : auth.isLogged)) {
|
|
193
|
+
log(debug, "\u{1F504} DashAppLoader: Restoring auth session to Redux from localStorage");
|
|
194
|
+
let parsedUser = null;
|
|
195
|
+
try {
|
|
196
|
+
parsedUser = JSON.parse(storedUserRaw);
|
|
197
|
+
if (typeof parsedUser === "string") {
|
|
198
|
+
log(debug, "\u{1F504} DashAppLoader: User was double-stringified, parsing again...");
|
|
199
|
+
parsedUser = JSON.parse(parsedUser);
|
|
200
|
+
}
|
|
201
|
+
} catch (e) {
|
|
202
|
+
console.error("\u274C DashAppLoader: Cannot parse user from localStorage, clearing auth data");
|
|
203
|
+
localStorage.removeItem("token");
|
|
204
|
+
localStorage.removeItem("user");
|
|
205
|
+
localStorage.removeItem("tenant");
|
|
206
|
+
localStorage.removeItem("authenticated");
|
|
207
|
+
setHasRestoredFromStorage(true);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
let parsedTenant = null;
|
|
211
|
+
if (storedTenantRaw) {
|
|
212
|
+
try {
|
|
213
|
+
parsedTenant = JSON.parse(storedTenantRaw);
|
|
214
|
+
if (typeof parsedTenant === "string") {
|
|
215
|
+
parsedTenant = JSON.parse(parsedTenant);
|
|
216
|
+
}
|
|
217
|
+
} catch (e) {
|
|
218
|
+
log(debug, "\u26A0\uFE0F DashAppLoader: Could not parse tenant, continuing without it");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
dispatch({
|
|
222
|
+
type: updateAuthActionType,
|
|
223
|
+
payload: {
|
|
224
|
+
isLogged: true,
|
|
225
|
+
token: storedToken,
|
|
226
|
+
user: parsedUser,
|
|
227
|
+
tenant: parsedTenant
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
log(debug, "\u2705 DashAppLoader: Redux state restored from persisted data");
|
|
231
|
+
}
|
|
232
|
+
setHasRestoredFromStorage(true);
|
|
233
|
+
}
|
|
234
|
+
}, [auth == null ? void 0 : auth.isLogged, hasRestoredFromStorage, dispatch, updateAuthActionType, debug]);
|
|
235
|
+
useEffect(() => {
|
|
236
|
+
let mounted = true;
|
|
237
|
+
const initializeAuth = () => __async(null, null, function* () {
|
|
238
|
+
if (!hasRestoredFromStorage) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
log(debug, "\u{1F680} DashAppLoader: Starting app initialization...");
|
|
243
|
+
let initResult;
|
|
244
|
+
if (authService.initializeApp) {
|
|
245
|
+
initResult = yield authService.initializeApp();
|
|
246
|
+
} else if (authService.init) {
|
|
247
|
+
initResult = yield authService.init();
|
|
248
|
+
} else {
|
|
249
|
+
log(debug, "\u26A0\uFE0F DashAppLoader: No init method on authService, skipping initialization");
|
|
250
|
+
setIsInitializing(false);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (!mounted) return;
|
|
254
|
+
log(debug, "\u{1F50D} DashAppLoader: Initialization result:", initResult);
|
|
255
|
+
if (initResult.success && initResult.user) {
|
|
256
|
+
log(debug, "\u2705 DashAppLoader: Auto-login successful");
|
|
257
|
+
}
|
|
258
|
+
setIsInitializing(false);
|
|
259
|
+
} catch (error) {
|
|
260
|
+
if (!mounted) return;
|
|
261
|
+
console.error("\u274C DashAppLoader initialization error:", error);
|
|
262
|
+
setInitError(error instanceof Error ? error.message : "Unknown error during initialization");
|
|
263
|
+
setIsInitializing(false);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
initializeAuth();
|
|
267
|
+
return () => {
|
|
268
|
+
mounted = false;
|
|
269
|
+
};
|
|
270
|
+
}, [authService, hasRestoredFromStorage, debug]);
|
|
271
|
+
const PublicApp = useMemo(() => lazy(publicAppImport), [publicAppImport]);
|
|
272
|
+
const PrivateApp = useMemo(() => lazy(privateAppImport), [privateAppImport]);
|
|
273
|
+
const handleRetry = useCallback(() => {
|
|
274
|
+
setInitError(null);
|
|
275
|
+
setIsInitializing(true);
|
|
276
|
+
setHasRestoredFromStorage(false);
|
|
277
|
+
}, []);
|
|
278
|
+
if (initError) {
|
|
279
|
+
return /* @__PURE__ */ jsx(ErrorFallback, { error: initError, onRetry: handleRetry });
|
|
280
|
+
}
|
|
281
|
+
if (isInitializing || !hasRestoredFromStorage) {
|
|
282
|
+
return /* @__PURE__ */ jsx(LoadingFallback, { message: "Initializing application..." });
|
|
283
|
+
}
|
|
284
|
+
const isAuthenticated = (auth == null ? void 0 : auth.isLogged) === true;
|
|
285
|
+
log(debug, "\u{1F3AF} DashAppLoader: Rendering app:", {
|
|
286
|
+
isAuthenticated,
|
|
287
|
+
appType: isAuthenticated ? "Private" : "Public"
|
|
288
|
+
});
|
|
289
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(LoadingFallback, { message: isAuthenticated ? "Loading admin..." : "Loading..." }), children: isAuthenticated ? /* @__PURE__ */ jsx(
|
|
290
|
+
PrivateApp,
|
|
291
|
+
__spreadValues({
|
|
292
|
+
AdminHookComponent
|
|
293
|
+
}, privateAppProps)
|
|
294
|
+
) : /* @__PURE__ */ jsx(PublicApp, __spreadValues({}, publicAppProps)) });
|
|
295
|
+
};
|
|
296
|
+
const DashAppLoader = ({
|
|
297
|
+
publicAppImport,
|
|
298
|
+
privateAppImport,
|
|
299
|
+
AdminHookComponent,
|
|
300
|
+
LoadingFallback = AppLoadingFallback,
|
|
301
|
+
ErrorFallback = DefaultErrorFallback,
|
|
302
|
+
privateAppProps = {},
|
|
303
|
+
publicAppProps = {},
|
|
304
|
+
debug = false,
|
|
305
|
+
// Allow overrides but provide defaults
|
|
306
|
+
authService = DASHAuthenticationService,
|
|
307
|
+
reduxActions = DASH_REDUX_ACTIONS,
|
|
308
|
+
updateAuthActionType = ACTION_UPDATE_AUTH
|
|
309
|
+
}) => {
|
|
310
|
+
const resolvedPublicAppImport = publicAppImport || dashDefaultPublicAppImport;
|
|
311
|
+
const resolvedPrivateAppImport = privateAppImport || dashDefaultPrivateAppImport;
|
|
312
|
+
const missingProps = [];
|
|
313
|
+
if (!authService) missingProps.push("authService");
|
|
314
|
+
if (!reduxActions) missingProps.push("reduxActions");
|
|
315
|
+
if (!updateAuthActionType) missingProps.push("updateAuthActionType");
|
|
316
|
+
if (missingProps.length > 0) {
|
|
317
|
+
return /* @__PURE__ */ jsx(ConfigurationError, { missingProps });
|
|
318
|
+
}
|
|
319
|
+
return /* @__PURE__ */ jsx(
|
|
320
|
+
DashAppLoaderInner,
|
|
321
|
+
{
|
|
322
|
+
publicAppImport: resolvedPublicAppImport,
|
|
323
|
+
privateAppImport: resolvedPrivateAppImport,
|
|
324
|
+
authService,
|
|
325
|
+
reduxActions,
|
|
326
|
+
updateAuthActionType,
|
|
327
|
+
AdminHookComponent,
|
|
328
|
+
LoadingFallback,
|
|
329
|
+
ErrorFallback,
|
|
330
|
+
privateAppProps,
|
|
331
|
+
publicAppProps,
|
|
332
|
+
debug
|
|
333
|
+
}
|
|
334
|
+
);
|
|
335
|
+
};
|
|
336
|
+
const createDashAppLoader = (config = {}) => {
|
|
337
|
+
return () => /* @__PURE__ */ jsx(DashAppLoader, __spreadValues({}, config));
|
|
338
|
+
};
|
|
339
|
+
import { dashDefaultPublicRoutes } from "./defaults/extensions/router/dashDefaultPublicRoutes";
|
|
340
|
+
import { dashDefaultPrivateRoutes } from "./defaults/extensions/router/dashDefaultPrivateRoutes";
|
|
341
|
+
var DashAppLoader_default = DashAppLoader;
|
|
342
|
+
export {
|
|
343
|
+
ACTION_UPDATE_AUTH,
|
|
344
|
+
AppLoadingFallback,
|
|
345
|
+
DASHAuthenticationService,
|
|
346
|
+
DASH_REDUX_ACTIONS,
|
|
347
|
+
DashAppLoader,
|
|
348
|
+
DashDefaultPrivateApp,
|
|
349
|
+
DashDefaultPublicApp,
|
|
350
|
+
DefaultErrorFallback,
|
|
351
|
+
DefaultLoadingFallback,
|
|
352
|
+
createDashAppLoader,
|
|
353
|
+
dashDefaultPrivateRoutes,
|
|
354
|
+
dashDefaultPublicRoutes,
|
|
355
|
+
DashAppLoader_default as default
|
|
356
|
+
};
|
|
@@ -1 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import todoResource from "./resources/demo/todoResource";
|
|
2
|
+
import systemResources from "dash-admin/src/systemResources";
|
|
3
|
+
const DASHDefaultResources = [
|
|
4
|
+
...systemResources,
|
|
5
|
+
todoResource
|
|
6
|
+
];
|
|
7
|
+
var DashDefaultResources_default = DASHDefaultResources;
|
|
8
|
+
export {
|
|
9
|
+
DashDefaultResources_default as default
|
|
10
|
+
};
|