@digitaldefiance/express-suite-react-components 2.4.4 → 2.5.1

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 (52) hide show
  1. package/README.md +131 -0
  2. package/package.json +6 -6
  3. package/src/contexts/AuthProvider.d.ts.map +1 -1
  4. package/src/contexts/AuthProvider.js +19 -5
  5. package/src/contexts/SuiteConfigProvider.d.ts +44 -0
  6. package/src/contexts/SuiteConfigProvider.d.ts.map +1 -0
  7. package/src/contexts/SuiteConfigProvider.js +43 -0
  8. package/src/contexts/ThemeProvider.d.ts +1 -0
  9. package/src/contexts/ThemeProvider.d.ts.map +1 -1
  10. package/src/contexts/ThemeProvider.js +3 -0
  11. package/src/contexts/index.d.ts +1 -0
  12. package/src/contexts/index.d.ts.map +1 -1
  13. package/src/contexts/index.js +1 -0
  14. package/src/hooks/index.d.ts +3 -0
  15. package/src/hooks/index.d.ts.map +1 -1
  16. package/src/hooks/index.js +3 -0
  17. package/src/hooks/useBackupCodes.d.ts +15 -0
  18. package/src/hooks/useBackupCodes.d.ts.map +1 -0
  19. package/src/hooks/useBackupCodes.js +70 -0
  20. package/src/hooks/useEmailVerification.d.ts +10 -0
  21. package/src/hooks/useEmailVerification.d.ts.map +1 -0
  22. package/src/hooks/useEmailVerification.js +36 -0
  23. package/src/hooks/useUserSettings.d.ts +29 -0
  24. package/src/hooks/useUserSettings.d.ts.map +1 -0
  25. package/src/hooks/useUserSettings.js +103 -0
  26. package/src/wrappers/BackupCodeLoginWrapper.d.ts +8 -0
  27. package/src/wrappers/BackupCodeLoginWrapper.d.ts.map +1 -0
  28. package/src/wrappers/BackupCodeLoginWrapper.js +21 -0
  29. package/src/wrappers/BackupCodesWrapper.d.ts +7 -0
  30. package/src/wrappers/BackupCodesWrapper.d.ts.map +1 -0
  31. package/src/wrappers/BackupCodesWrapper.js +17 -0
  32. package/src/wrappers/ChangePasswordFormWrapper.d.ts +8 -0
  33. package/src/wrappers/ChangePasswordFormWrapper.d.ts.map +1 -0
  34. package/src/wrappers/ChangePasswordFormWrapper.js +21 -0
  35. package/src/wrappers/LoginFormWrapper.d.ts +9 -0
  36. package/src/wrappers/LoginFormWrapper.d.ts.map +1 -0
  37. package/src/wrappers/LoginFormWrapper.js +43 -0
  38. package/src/wrappers/LogoutPageWrapper.d.ts +9 -0
  39. package/src/wrappers/LogoutPageWrapper.d.ts.map +1 -0
  40. package/src/wrappers/LogoutPageWrapper.js +21 -0
  41. package/src/wrappers/RegisterFormWrapper.d.ts +9 -0
  42. package/src/wrappers/RegisterFormWrapper.d.ts.map +1 -0
  43. package/src/wrappers/RegisterFormWrapper.js +26 -0
  44. package/src/wrappers/UserSettingsFormWrapper.d.ts +8 -0
  45. package/src/wrappers/UserSettingsFormWrapper.d.ts.map +1 -0
  46. package/src/wrappers/UserSettingsFormWrapper.js +23 -0
  47. package/src/wrappers/VerifyEmailPageWrapper.d.ts +8 -0
  48. package/src/wrappers/VerifyEmailPageWrapper.d.ts.map +1 -0
  49. package/src/wrappers/VerifyEmailPageWrapper.js +20 -0
  50. package/src/wrappers/index.d.ts +16 -22
  51. package/src/wrappers/index.d.ts.map +1 -1
  52. package/src/wrappers/index.js +17 -158
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEmailVerification = void 0;
4
+ const react_1 = require("react");
5
+ const services_1 = require("../services");
6
+ const contexts_1 = require("../contexts");
7
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
8
+ const useEmailVerification = () => {
9
+ const { baseUrl } = (0, contexts_1.useSuiteConfig)();
10
+ const api = (0, react_1.useMemo)(() => (0, services_1.createAuthenticatedApiClient)(baseUrl), [baseUrl]);
11
+ const [isVerifying, setIsVerifying] = (0, react_1.useState)(false);
12
+ const [error, setError] = (0, react_1.useState)(null);
13
+ const verifyEmail = async (verificationToken) => {
14
+ setIsVerifying(true);
15
+ setError(null);
16
+ try {
17
+ const result = await api.post('/verify-email', { token: verificationToken });
18
+ return { success: true, message: result.data.message };
19
+ }
20
+ catch (err) {
21
+ const errorMessage = err.response?.data?.message || (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_VerificationFailed);
22
+ const error = new Error(errorMessage);
23
+ setError(error);
24
+ return { success: false, message: errorMessage };
25
+ }
26
+ finally {
27
+ setIsVerifying(false);
28
+ }
29
+ };
30
+ return {
31
+ isVerifying,
32
+ error,
33
+ verifyEmail,
34
+ };
35
+ };
36
+ exports.useEmailVerification = useEmailVerification;
@@ -0,0 +1,29 @@
1
+ export interface UserSettingsValues {
2
+ email: string;
3
+ timezone: string;
4
+ siteLanguage: string;
5
+ currency: string;
6
+ darkMode: boolean;
7
+ directChallenge: boolean;
8
+ [key: string]: any;
9
+ }
10
+ export interface UseUserSettingsResult {
11
+ settings: UserSettingsValues | null;
12
+ isLoading: boolean;
13
+ error: Error | null;
14
+ updateSettings: (values: UserSettingsValues) => Promise<{
15
+ success: boolean;
16
+ message: string;
17
+ } | {
18
+ error: string;
19
+ errorType?: string;
20
+ field?: string;
21
+ errors?: Array<{
22
+ path: string;
23
+ msg: string;
24
+ }>;
25
+ }>;
26
+ refreshSettings: () => Promise<void>;
27
+ }
28
+ export declare const useUserSettings: () => UseUserSettingsResult;
29
+ //# sourceMappingURL=useUserSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUserSettings.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/hooks/useUserSettings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC;QACtD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG;QACF,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC/C,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,eAAe,QAAO,qBA+FlC,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useUserSettings = void 0;
4
+ const react_1 = require("react");
5
+ const services_1 = require("../services");
6
+ const contexts_1 = require("../contexts");
7
+ const contexts_2 = require("../contexts");
8
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
9
+ const useUserSettings = () => {
10
+ const { baseUrl } = (0, contexts_1.useSuiteConfig)();
11
+ const { userData, setCurrencyCode, setLanguage } = (0, contexts_2.useAuth)();
12
+ const { setColorMode } = (0, contexts_2.useTheme)();
13
+ const api = (0, react_1.useMemo)(() => (0, services_1.createAuthenticatedApiClient)(baseUrl), [baseUrl]);
14
+ const [settings, setSettings] = (0, react_1.useState)(null);
15
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
16
+ const [error, setError] = (0, react_1.useState)(null);
17
+ const refreshSettings = (0, react_1.useCallback)(async () => {
18
+ setIsLoading(true);
19
+ setError(null);
20
+ try {
21
+ const result = await api.get('/user/settings');
22
+ if (result?.data?.settings) {
23
+ setSettings(result.data.settings);
24
+ }
25
+ else {
26
+ // Fallback to userData - use current value without dependency
27
+ const fallback = {
28
+ email: userData?.email || '',
29
+ timezone: userData?.timezone || 'UTC',
30
+ siteLanguage: userData?.siteLanguage || 'en-US',
31
+ currency: userData?.currency || 'USD',
32
+ darkMode: userData?.darkMode || false,
33
+ directChallenge: userData?.directChallenge || false,
34
+ };
35
+ setSettings(fallback);
36
+ }
37
+ }
38
+ catch (err) {
39
+ setError(err instanceof Error ? err : new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Settings_RetrieveFailure));
40
+ // Use fallback from userData
41
+ const fallback = {
42
+ email: userData?.email || '',
43
+ timezone: userData?.timezone || 'UTC',
44
+ siteLanguage: userData?.siteLanguage || 'en-US',
45
+ currency: userData?.currency || 'USD',
46
+ darkMode: userData?.darkMode || false,
47
+ directChallenge: userData?.directChallenge || false,
48
+ };
49
+ setSettings(fallback);
50
+ }
51
+ finally {
52
+ setIsLoading(false);
53
+ }
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ }, [api]); // userData intentionally omitted to prevent infinite loops
56
+ (0, react_1.useEffect)(() => {
57
+ refreshSettings();
58
+ }, [refreshSettings]);
59
+ const updateSettings = async (values) => {
60
+ setIsLoading(true);
61
+ setError(null);
62
+ try {
63
+ const result = await api.post('/user/settings', values);
64
+ // Update context values
65
+ if (values.currency) {
66
+ await setCurrencyCode(values.currency);
67
+ }
68
+ if (values.siteLanguage) {
69
+ await setLanguage(values.siteLanguage);
70
+ }
71
+ if (values.darkMode !== userData?.darkMode) {
72
+ setColorMode(values.darkMode ? 'dark' : 'light');
73
+ }
74
+ // Update local state
75
+ setSettings(values);
76
+ return {
77
+ success: true,
78
+ message: result.data.message || (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Settings_SaveSuccess)
79
+ };
80
+ }
81
+ catch (err) {
82
+ const errorMessage = err.response?.data?.message || (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Settings_UpdateFailed);
83
+ setError(err instanceof Error ? err : new Error(errorMessage));
84
+ return {
85
+ error: errorMessage,
86
+ errorType: err.response?.data?.errorType,
87
+ field: err.response?.data?.field,
88
+ errors: err.response?.data?.errors,
89
+ };
90
+ }
91
+ finally {
92
+ setIsLoading(false);
93
+ }
94
+ };
95
+ return {
96
+ settings,
97
+ isLoading,
98
+ error,
99
+ updateSettings,
100
+ refreshSettings,
101
+ };
102
+ };
103
+ exports.useUserSettings = useUserSettings;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { BackupCodeLoginForm } from '../components/BackupCodeLoginForm';
3
+ export interface BackupCodeLoginWrapperProps {
4
+ onSuccess?: () => void;
5
+ componentProps?: Partial<React.ComponentProps<typeof BackupCodeLoginForm>>;
6
+ }
7
+ export declare const BackupCodeLoginWrapper: FC<BackupCodeLoginWrapperProps>;
8
+ //# sourceMappingURL=BackupCodeLoginWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupCodeLoginWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/BackupCodeLoginWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC;CAC5E;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAwBlE,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackupCodeLoginWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const BackupCodeLoginForm_1 = require("../components/BackupCodeLoginForm");
7
+ const contexts_1 = require("../contexts");
8
+ const BackupCodeLoginWrapper = ({ onSuccess, componentProps = {}, }) => {
9
+ const { backupCodeLogin, isAuthenticated } = (0, contexts_1.useAuth)();
10
+ const navigate = (0, react_router_dom_1.useNavigate)();
11
+ const { routes } = (0, contexts_1.useSuiteConfig)();
12
+ const handleSubmit = async (...args) => {
13
+ const result = await backupCodeLogin(...args);
14
+ if ('token' in result && onSuccess) {
15
+ onSuccess();
16
+ }
17
+ return result;
18
+ };
19
+ return ((0, jsx_runtime_1.jsx)(BackupCodeLoginForm_1.BackupCodeLoginForm, { onSubmit: handleSubmit, onNavigate: navigate, isAuthenticated: isAuthenticated, ...componentProps }));
20
+ };
21
+ exports.BackupCodeLoginWrapper = BackupCodeLoginWrapper;
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ import { BackupCodesForm } from '../components/BackupCodesForm';
3
+ export interface BackupCodesWrapperProps {
4
+ componentProps?: Partial<React.ComponentProps<typeof BackupCodesForm>>;
5
+ }
6
+ export declare const BackupCodesWrapper: FC<BackupCodesWrapperProps>;
7
+ //# sourceMappingURL=BackupCodesWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupCodesWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/BackupCodesWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;CACxE;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAkB1D,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackupCodesWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const BackupCodesForm_1 = require("../components/BackupCodesForm");
7
+ const hooks_1 = require("../hooks");
8
+ const BackupCodesWrapper = ({ componentProps = {}, }) => {
9
+ const location = (0, react_router_dom_1.useLocation)();
10
+ const initialCodeCount = location.state?.codeCount ?? null;
11
+ const { backupCodesRemaining, generateBackupCodes } = (0, hooks_1.useBackupCodes)({ initialCodeCount });
12
+ const handleSubmit = async (values) => {
13
+ return await generateBackupCodes(values.password, values.mnemonic);
14
+ };
15
+ return ((0, jsx_runtime_1.jsx)(BackupCodesForm_1.BackupCodesForm, { onSubmit: handleSubmit, backupCodesRemaining: backupCodesRemaining, ...componentProps }));
16
+ };
17
+ exports.BackupCodesWrapper = BackupCodesWrapper;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { ChangePasswordForm } from '../components/ChangePasswordForm';
3
+ export interface ChangePasswordFormWrapperProps {
4
+ onSuccess?: () => void;
5
+ componentProps?: Partial<React.ComponentProps<typeof ChangePasswordForm>>;
6
+ }
7
+ export declare const ChangePasswordFormWrapper: FC<ChangePasswordFormWrapperProps>;
8
+ //# sourceMappingURL=ChangePasswordFormWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangePasswordFormWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/ChangePasswordFormWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,MAAM,WAAW,8BAA8B;IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC3E;AAED,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,8BAA8B,CAqBxE,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangePasswordFormWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ChangePasswordForm_1 = require("../components/ChangePasswordForm");
6
+ const contexts_1 = require("../contexts");
7
+ const ChangePasswordFormWrapper = ({ onSuccess, componentProps = {}, }) => {
8
+ const { changePassword } = (0, contexts_1.useAuth)();
9
+ const handleSubmit = async (values) => {
10
+ const result = await changePassword(values.currentPassword, values.newPassword);
11
+ if ('error' in result) {
12
+ throw new Error(result.error);
13
+ }
14
+ if (onSuccess) {
15
+ onSuccess();
16
+ }
17
+ return result;
18
+ };
19
+ return (0, jsx_runtime_1.jsx)(ChangePasswordForm_1.ChangePasswordForm, { onSubmit: handleSubmit, ...componentProps });
20
+ };
21
+ exports.ChangePasswordFormWrapper = ChangePasswordFormWrapper;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { LoginFormProps } from '../components/LoginForm';
3
+ export interface LoginFormWrapperProps {
4
+ onSuccess?: () => void;
5
+ redirectTo?: string;
6
+ componentProps?: Partial<Omit<LoginFormProps, 'onSubmit'>>;
7
+ }
8
+ export declare const LoginFormWrapper: FC<LoginFormWrapperProps>;
9
+ //# sourceMappingURL=LoginFormWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginFormWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/LoginFormWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,OAAO,EAA8B,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIrF,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;CAC5D;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6CtD,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoginFormWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
7
+ const LoginForm_1 = require("../components/LoginForm");
8
+ const contexts_1 = require("../contexts");
9
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
10
+ const LoginFormWrapper = ({ onSuccess, redirectTo, componentProps = {}, }) => {
11
+ const { directLogin, passwordLogin } = (0, contexts_1.useAuth)();
12
+ const navigate = (0, react_router_dom_1.useNavigate)();
13
+ const { routes } = (0, contexts_1.useSuiteConfig)();
14
+ const handleSubmit = async (values) => {
15
+ const email = values.email && values.email.trim().length > 0 ? new ecies_lib_1.EmailString(values.email) : undefined;
16
+ const username = values.username && values.username.trim() ? values.username : undefined;
17
+ if (values.password) {
18
+ const result = await passwordLogin(new ecies_lib_1.SecureString(values.password), username, email);
19
+ if ('error' in result) {
20
+ throw new Error(result.error);
21
+ }
22
+ if (onSuccess) {
23
+ onSuccess();
24
+ }
25
+ navigate(redirectTo || routes.dashboard || '/dashboard');
26
+ }
27
+ else if (values.mnemonic) {
28
+ const result = await directLogin(new ecies_lib_1.SecureString(values.mnemonic), username, email);
29
+ if ('error' in result) {
30
+ throw new Error(result.error);
31
+ }
32
+ if (onSuccess) {
33
+ onSuccess();
34
+ }
35
+ navigate(redirectTo || routes.dashboard || '/dashboard');
36
+ }
37
+ else {
38
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_NoPasswordOrMnemonicProvided);
39
+ }
40
+ };
41
+ return (0, jsx_runtime_1.jsx)(LoginForm_1.LoginForm, { onSubmit: handleSubmit, ...componentProps });
42
+ };
43
+ exports.LoginFormWrapper = LoginFormWrapper;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { LogoutPage } from '../components/LogoutPage';
3
+ export interface LogoutPageWrapperProps {
4
+ onSuccess?: () => void;
5
+ redirectTo?: string;
6
+ componentProps?: Partial<React.ComponentProps<typeof LogoutPage>>;
7
+ }
8
+ export declare const LogoutPageWrapper: FC<LogoutPageWrapperProps>;
9
+ //# sourceMappingURL=LogoutPageWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogoutPageWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/LogoutPageWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC;CACnE;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAkBxD,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogoutPageWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const LogoutPage_1 = require("../components/LogoutPage");
7
+ const contexts_1 = require("../contexts");
8
+ const LogoutPageWrapper = ({ onSuccess, redirectTo, componentProps = {}, }) => {
9
+ const { logout } = (0, contexts_1.useAuth)();
10
+ const navigate = (0, react_router_dom_1.useNavigate)();
11
+ const { routes } = (0, contexts_1.useSuiteConfig)();
12
+ const handleLogout = async () => {
13
+ await logout();
14
+ if (onSuccess) {
15
+ onSuccess();
16
+ }
17
+ navigate(redirectTo || routes.login || '/login');
18
+ };
19
+ return (0, jsx_runtime_1.jsx)(LogoutPage_1.LogoutPage, { onLogout: handleLogout, onNavigate: navigate, ...componentProps });
20
+ };
21
+ exports.LogoutPageWrapper = LogoutPageWrapper;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { RegisterFormProps } from '../components/RegisterForm';
3
+ export interface RegisterFormWrapperProps {
4
+ onSuccess?: () => void;
5
+ redirectTo?: string;
6
+ componentProps?: Partial<Omit<RegisterFormProps, 'onSubmit' | 'timezones' | 'getInitialTimezone'>>;
7
+ }
8
+ export declare const RegisterFormWrapper: FC<RegisterFormWrapperProps>;
9
+ //# sourceMappingURL=RegisterFormWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegisterFormWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/RegisterFormWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAoC,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGjG,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC;CACpG;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAoC5D,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegisterFormWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const RegisterForm_1 = require("../components/RegisterForm");
7
+ const contexts_1 = require("../contexts");
8
+ const RegisterFormWrapper = ({ onSuccess, redirectTo, componentProps = {}, }) => {
9
+ const { register } = (0, contexts_1.useAuth)();
10
+ const navigate = (0, react_router_dom_1.useNavigate)();
11
+ const { routes, timezones } = (0, contexts_1.useSuiteConfig)();
12
+ const handleSubmit = async (values, usePassword) => {
13
+ const result = await register(values.username, values.email, values.timezone || 'UTC', values.password);
14
+ if ('error' in result) {
15
+ throw new Error(result.error);
16
+ }
17
+ if (onSuccess) {
18
+ onSuccess();
19
+ }
20
+ navigate(redirectTo || routes.verifyEmail || '/verify-email');
21
+ return result;
22
+ };
23
+ const defaultTimezones = timezones || ['UTC', 'America/New_York', 'America/Los_Angeles', 'Europe/London'];
24
+ return ((0, jsx_runtime_1.jsx)(RegisterForm_1.RegisterForm, { onSubmit: handleSubmit, timezones: defaultTimezones, getInitialTimezone: () => Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC', ...componentProps }));
25
+ };
26
+ exports.RegisterFormWrapper = RegisterFormWrapper;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { UserSettingsFormProps } from '../components/UserSettingsForm';
3
+ export interface UserSettingsFormWrapperProps {
4
+ onSuccess?: () => void;
5
+ componentProps?: Partial<Omit<UserSettingsFormProps, 'initialValues' | 'onSubmit' | 'languages'>>;
6
+ }
7
+ export declare const UserSettingsFormWrapper: FC<UserSettingsFormWrapperProps>;
8
+ //# sourceMappingURL=UserSettingsFormWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserSettingsFormWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/UserSettingsFormWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAA4C,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAIjH,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,eAAe,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;CACnG;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CA2BpE,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserSettingsFormWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const UserSettingsForm_1 = require("../components/UserSettingsForm");
6
+ const contexts_1 = require("../contexts");
7
+ const hooks_1 = require("../hooks");
8
+ const UserSettingsFormWrapper = ({ onSuccess, componentProps = {}, }) => {
9
+ const { settings, isLoading, updateSettings } = (0, hooks_1.useUserSettings)();
10
+ const { languages } = (0, contexts_1.useSuiteConfig)();
11
+ const handleSubmit = async (values) => {
12
+ const result = await updateSettings(values);
13
+ if ('success' in result && result.success && onSuccess) {
14
+ onSuccess();
15
+ }
16
+ return result;
17
+ };
18
+ if (isLoading || !settings) {
19
+ return (0, jsx_runtime_1.jsx)("div", { children: "Loading..." });
20
+ }
21
+ return ((0, jsx_runtime_1.jsx)(UserSettingsForm_1.UserSettingsForm, { initialValues: settings, onSubmit: handleSubmit, languages: languages, ...componentProps }));
22
+ };
23
+ exports.UserSettingsFormWrapper = UserSettingsFormWrapper;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { VerifyEmailPage } from '../components/VerifyEmailPage';
3
+ export interface VerifyEmailPageWrapperProps {
4
+ onSuccess?: () => void;
5
+ componentProps?: Partial<React.ComponentProps<typeof VerifyEmailPage>>;
6
+ }
7
+ export declare const VerifyEmailPageWrapper: FC<VerifyEmailPageWrapperProps>;
8
+ //# sourceMappingURL=VerifyEmailPageWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerifyEmailPageWrapper.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/VerifyEmailPageWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;CACxE;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAiBlE,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VerifyEmailPageWrapper = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const VerifyEmailPage_1 = require("../components/VerifyEmailPage");
6
+ const hooks_1 = require("../hooks");
7
+ const VerifyEmailPageWrapper = ({ onSuccess, componentProps = {}, }) => {
8
+ const searchParams = new URLSearchParams(window.location.search);
9
+ const token = searchParams.get('token');
10
+ const { verifyEmail } = (0, hooks_1.useEmailVerification)();
11
+ const handleVerify = async (verificationToken) => {
12
+ const result = await verifyEmail(verificationToken);
13
+ if (result.success && onSuccess) {
14
+ onSuccess();
15
+ }
16
+ return result;
17
+ };
18
+ return (0, jsx_runtime_1.jsx)(VerifyEmailPage_1.VerifyEmailPage, { token: token, onVerify: handleVerify, ...componentProps });
19
+ };
20
+ exports.VerifyEmailPageWrapper = VerifyEmailPageWrapper;
@@ -1,23 +1,17 @@
1
- import { FC } from 'react';
2
- export declare const BackupCodeLoginWrapper: FC;
3
- export interface BackupCodesWrapperProps {
4
- baseUrl: string;
5
- }
6
- export declare const BackupCodesWrapper: FC<BackupCodesWrapperProps>;
7
- export declare const ChangePasswordFormWrapper: FC;
8
- export declare const LoginFormWrapper: FC;
9
- export declare const RegisterFormWrapper: FC;
10
- export declare const LogoutPageWrapper: FC;
11
- export interface VerifyEmailPageWrapperProps {
12
- baseUrl: string;
13
- }
14
- export declare const VerifyEmailPageWrapper: FC<VerifyEmailPageWrapperProps>;
15
- export interface UserSettingsFormWrapperProps {
16
- baseUrl: string;
17
- languages: Array<{
18
- code: string;
19
- label: string;
20
- }>;
21
- }
22
- export declare const UserSettingsFormWrapper: FC<UserSettingsFormWrapperProps>;
1
+ export { BackupCodeLoginWrapper } from './BackupCodeLoginWrapper';
2
+ export type { BackupCodeLoginWrapperProps } from './BackupCodeLoginWrapper';
3
+ export { BackupCodesWrapper } from './BackupCodesWrapper';
4
+ export type { BackupCodesWrapperProps } from './BackupCodesWrapper';
5
+ export { ChangePasswordFormWrapper } from './ChangePasswordFormWrapper';
6
+ export type { ChangePasswordFormWrapperProps } from './ChangePasswordFormWrapper';
7
+ export { LoginFormWrapper } from './LoginFormWrapper';
8
+ export type { LoginFormWrapperProps } from './LoginFormWrapper';
9
+ export { RegisterFormWrapper } from './RegisterFormWrapper';
10
+ export type { RegisterFormWrapperProps } from './RegisterFormWrapper';
11
+ export { LogoutPageWrapper } from './LogoutPageWrapper';
12
+ export type { LogoutPageWrapperProps } from './LogoutPageWrapper';
13
+ export { VerifyEmailPageWrapper } from './VerifyEmailPageWrapper';
14
+ export type { VerifyEmailPageWrapperProps } from './VerifyEmailPageWrapper';
15
+ export { UserSettingsFormWrapper } from './UserSettingsFormWrapper';
16
+ export type { UserSettingsFormWrapperProps } from './UserSettingsFormWrapper';
23
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AAexD,eAAO,MAAM,sBAAsB,EAAE,EAWpC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAoC1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,EAevC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,EAkC9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAyBjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,EAK/B,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAelE,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CAwCpE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/wrappers/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC"}