@digitaldefiance/express-suite-react-components 5.0.2 → 5.0.4

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 (314) hide show
  1. package/package.json +5 -4
  2. package/src/auth/AdminRoute.d.ts +8 -0
  3. package/src/auth/AdminRoute.d.ts.map +1 -0
  4. package/src/auth/AdminRoute.js +28 -0
  5. package/src/auth/Private.d.ts +6 -0
  6. package/src/auth/Private.d.ts.map +1 -0
  7. package/src/auth/Private.js +14 -0
  8. package/src/auth/PrivateRoute.d.ts +8 -0
  9. package/src/auth/PrivateRoute.d.ts.map +1 -0
  10. package/src/auth/PrivateRoute.js +23 -0
  11. package/src/auth/UnAuth.d.ts +6 -0
  12. package/src/auth/UnAuth.d.ts.map +1 -0
  13. package/src/auth/UnAuth.js +14 -0
  14. package/src/auth/UnAuthRoute.d.ts +8 -0
  15. package/src/auth/UnAuthRoute.d.ts.map +1 -0
  16. package/src/auth/UnAuthRoute.js +22 -0
  17. package/src/auth/{index.ts → index.d.ts} +3 -2
  18. package/src/auth/index.d.ts.map +1 -0
  19. package/src/auth/index.js +12 -0
  20. package/src/components/ApiAccess.d.ts +16 -0
  21. package/src/components/ApiAccess.d.ts.map +1 -0
  22. package/src/components/ApiAccess.js +77 -0
  23. package/src/components/BackupCodeLoginForm.d.ts +43 -0
  24. package/src/components/BackupCodeLoginForm.d.ts.map +1 -0
  25. package/src/components/BackupCodeLoginForm.js +139 -0
  26. package/src/components/BackupCodesForm.d.ts +26 -0
  27. package/src/components/BackupCodesForm.d.ts.map +1 -0
  28. package/src/components/BackupCodesForm.js +120 -0
  29. package/src/components/CategoryMenu.d.ts +17 -0
  30. package/src/components/CategoryMenu.d.ts.map +1 -0
  31. package/src/components/CategoryMenu.js +65 -0
  32. package/src/components/ChangePasswordForm.d.ts +26 -0
  33. package/src/components/ChangePasswordForm.d.ts.map +1 -0
  34. package/src/components/ChangePasswordForm.js +78 -0
  35. package/src/components/ConfirmationDialog.d.ts +13 -0
  36. package/src/components/ConfirmationDialog.d.ts.map +1 -0
  37. package/src/components/ConfirmationDialog.js +10 -0
  38. package/src/components/CurrencyCodeSelector.d.ts +9 -0
  39. package/src/components/CurrencyCodeSelector.d.ts.map +1 -0
  40. package/src/components/CurrencyCodeSelector.js +31 -0
  41. package/src/components/CurrencyInput.d.ts +13 -0
  42. package/src/components/CurrencyInput.d.ts.map +1 -0
  43. package/src/components/CurrencyInput.js +22 -0
  44. package/src/components/DashboardPage.d.ts +8 -0
  45. package/src/components/DashboardPage.d.ts.map +1 -0
  46. package/src/components/DashboardPage.js +10 -0
  47. package/src/components/DropdownMenu.d.ts +13 -0
  48. package/src/components/DropdownMenu.d.ts.map +1 -0
  49. package/src/components/DropdownMenu.js +63 -0
  50. package/src/components/ExpirationSecondsSelector.d.ts +13 -0
  51. package/src/components/ExpirationSecondsSelector.d.ts.map +1 -0
  52. package/src/components/ExpirationSecondsSelector.js +32 -0
  53. package/src/components/FakeEmailAdminPanel.d.ts +23 -0
  54. package/src/components/FakeEmailAdminPanel.d.ts.map +1 -0
  55. package/src/components/FakeEmailAdminPanel.js +147 -0
  56. package/src/components/Flag.d.ts +20 -0
  57. package/src/components/Flag.d.ts.map +1 -0
  58. package/src/components/Flag.js +43 -0
  59. package/src/components/ForgotPasswordForm.d.ts +18 -0
  60. package/src/components/ForgotPasswordForm.d.ts.map +1 -0
  61. package/src/components/ForgotPasswordForm.js +61 -0
  62. package/src/components/LoginForm.d.ts +44 -0
  63. package/src/components/LoginForm.d.ts.map +1 -0
  64. package/src/components/LoginForm.js +123 -0
  65. package/src/components/LogoutPage.d.ts +8 -0
  66. package/src/components/LogoutPage.d.ts.map +1 -0
  67. package/src/components/LogoutPage.js +16 -0
  68. package/src/components/RegisterForm.d.ts +100 -0
  69. package/src/components/RegisterForm.d.ts.map +1 -0
  70. package/src/components/RegisterForm.js +306 -0
  71. package/src/components/ResetPasswordForm.d.ts +23 -0
  72. package/src/components/ResetPasswordForm.d.ts.map +1 -0
  73. package/src/components/ResetPasswordForm.js +78 -0
  74. package/src/components/SideMenu.d.ts +8 -0
  75. package/src/components/SideMenu.d.ts.map +1 -0
  76. package/src/components/SideMenu.js +25 -0
  77. package/src/components/SideMenuListItem.d.ts +13 -0
  78. package/src/components/SideMenuListItem.d.ts.map +1 -0
  79. package/src/components/SideMenuListItem.js +44 -0
  80. package/src/components/T.d.ts +7 -0
  81. package/src/components/T.d.ts.map +1 -0
  82. package/src/components/T.js +13 -0
  83. package/src/components/TDiv.d.ts +9 -0
  84. package/src/components/TDiv.d.ts.map +1 -0
  85. package/src/components/TDiv.js +14 -0
  86. package/src/components/TImgAlt.d.ts +10 -0
  87. package/src/components/TImgAlt.d.ts.map +1 -0
  88. package/src/components/TImgAlt.js +14 -0
  89. package/src/components/TopMenu.d.ts +50 -0
  90. package/src/components/TopMenu.d.ts.map +1 -0
  91. package/src/components/TopMenu.js +79 -0
  92. package/src/components/TotpSetupForm.d.ts +24 -0
  93. package/src/components/TotpSetupForm.d.ts.map +1 -0
  94. package/src/components/TotpSetupForm.js +82 -0
  95. package/src/components/TotpVerificationForm.d.ts +23 -0
  96. package/src/components/TotpVerificationForm.d.ts.map +1 -0
  97. package/src/components/TotpVerificationForm.js +66 -0
  98. package/src/components/TranslatedTitle.d.ts +8 -0
  99. package/src/components/TranslatedTitle.d.ts.map +1 -0
  100. package/src/components/TranslatedTitle.js +15 -0
  101. package/src/components/UserLanguageSelector.d.ts +4 -0
  102. package/src/components/UserLanguageSelector.d.ts.map +1 -0
  103. package/src/components/UserLanguageSelector.js +31 -0
  104. package/src/components/UserMenu.d.ts +4 -0
  105. package/src/components/UserMenu.d.ts.map +1 -0
  106. package/src/components/UserMenu.js +12 -0
  107. package/src/components/UserSettingsForm.d.ts +113 -0
  108. package/src/components/UserSettingsForm.d.ts.map +1 -0
  109. package/src/components/UserSettingsForm.js +269 -0
  110. package/src/components/VerifyEmailPage.d.ts +24 -0
  111. package/src/components/VerifyEmailPage.d.ts.map +1 -0
  112. package/src/components/VerifyEmailPage.js +81 -0
  113. package/src/components/{index.ts → index.d.ts} +1 -1
  114. package/src/components/index.d.ts.map +1 -0
  115. package/src/components/index.js +35 -0
  116. package/src/contexts/AuthProvider.d.ts +19 -0
  117. package/src/contexts/AuthProvider.d.ts.map +1 -0
  118. package/src/contexts/AuthProvider.js +514 -0
  119. package/src/contexts/I18nProvider.d.ts +27 -0
  120. package/src/contexts/I18nProvider.d.ts.map +1 -0
  121. package/src/contexts/I18nProvider.js +60 -0
  122. package/src/contexts/MenuContext.d.ts +28 -0
  123. package/src/contexts/MenuContext.d.ts.map +1 -0
  124. package/src/contexts/MenuContext.js +307 -0
  125. package/src/contexts/SuiteConfigProvider.d.ts +44 -0
  126. package/src/contexts/SuiteConfigProvider.d.ts.map +1 -0
  127. package/src/contexts/SuiteConfigProvider.js +43 -0
  128. package/src/contexts/ThemeProvider.d.ts +15 -0
  129. package/src/contexts/ThemeProvider.d.ts.map +1 -0
  130. package/src/contexts/ThemeProvider.js +36 -0
  131. package/src/contexts/auth-context.d.ts +172 -0
  132. package/src/contexts/auth-context.d.ts.map +1 -0
  133. package/src/contexts/auth-context.js +13 -0
  134. package/src/contexts/{index.ts → index.d.ts} +1 -0
  135. package/src/contexts/index.d.ts.map +1 -0
  136. package/src/contexts/index.js +8 -0
  137. package/src/hooks/{index.ts → index.d.ts} +1 -0
  138. package/src/hooks/index.d.ts.map +1 -0
  139. package/src/hooks/index.js +9 -0
  140. package/src/hooks/useAuthenticatedApi.d.ts +34 -0
  141. package/src/hooks/useAuthenticatedApi.d.ts.map +1 -0
  142. package/src/hooks/useAuthenticatedApi.js +46 -0
  143. package/src/hooks/useBackupCodes.d.ts +15 -0
  144. package/src/hooks/useBackupCodes.d.ts.map +1 -0
  145. package/src/hooks/useBackupCodes.js +74 -0
  146. package/src/hooks/useEmailVerification.d.ts +10 -0
  147. package/src/hooks/useEmailVerification.d.ts.map +1 -0
  148. package/src/hooks/useEmailVerification.js +40 -0
  149. package/src/hooks/useExpiringValue.d.ts +14 -0
  150. package/src/hooks/useExpiringValue.d.ts.map +1 -0
  151. package/src/hooks/useExpiringValue.js +53 -0
  152. package/src/hooks/useLocalStorage.d.ts +2 -0
  153. package/src/hooks/useLocalStorage.d.ts.map +1 -0
  154. package/src/hooks/useLocalStorage.js +15 -0
  155. package/src/hooks/useUserSettings.d.ts +48 -0
  156. package/src/hooks/useUserSettings.d.ts.map +1 -0
  157. package/src/hooks/useUserSettings.js +171 -0
  158. package/src/{index.ts → index.d.ts} +1 -1
  159. package/src/index.d.ts.map +1 -0
  160. package/src/index.js +12 -0
  161. package/src/interfaces/IAppConfig.d.ts +8 -0
  162. package/src/interfaces/IAppConfig.d.ts.map +1 -0
  163. package/src/interfaces/IAppConfig.js +2 -0
  164. package/src/interfaces/ICategoryConfig.d.ts +41 -0
  165. package/src/interfaces/ICategoryConfig.d.ts.map +1 -0
  166. package/src/interfaces/ICategoryConfig.js +2 -0
  167. package/src/interfaces/IMenuConfig.d.ts +28 -0
  168. package/src/interfaces/IMenuConfig.d.ts.map +1 -0
  169. package/src/interfaces/IMenuConfig.js +2 -0
  170. package/src/interfaces/IMenuOption.d.ts +82 -0
  171. package/src/interfaces/IMenuOption.d.ts.map +1 -0
  172. package/src/interfaces/IMenuOption.js +2 -0
  173. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  174. package/src/interfaces/index.d.ts.map +1 -0
  175. package/src/interfaces/index.js +7 -0
  176. package/src/services/__mocks__/authService.d.ts +21 -0
  177. package/src/services/__mocks__/authService.d.ts.map +1 -0
  178. package/src/services/__mocks__/authService.js +15 -0
  179. package/src/services/api.d.ts +3 -0
  180. package/src/services/api.d.ts.map +1 -0
  181. package/src/services/api.js +14 -0
  182. package/src/services/authService.d.ts +126 -0
  183. package/src/services/authService.d.ts.map +1 -0
  184. package/src/services/authService.js +471 -0
  185. package/src/services/authenticatedApi.d.ts +3 -0
  186. package/src/services/authenticatedApi.d.ts.map +1 -0
  187. package/src/services/authenticatedApi.js +18 -0
  188. package/src/services/index.d.ts +4 -0
  189. package/src/services/index.d.ts.map +1 -0
  190. package/src/services/index.js +6 -0
  191. package/src/types/MenuType.d.ts +11 -0
  192. package/src/types/MenuType.d.ts.map +1 -0
  193. package/src/types/MenuType.js +12 -0
  194. package/src/types/expirationSeconds.d.ts +3 -0
  195. package/src/types/expirationSeconds.d.ts.map +1 -0
  196. package/src/types/expirationSeconds.js +17 -0
  197. package/src/types/index.d.ts +2 -0
  198. package/src/types/index.d.ts.map +1 -0
  199. package/src/types/index.js +4 -0
  200. package/src/types/translation.d.ts +10 -0
  201. package/src/types/translation.d.ts.map +1 -0
  202. package/src/types/translation.js +9 -0
  203. package/src/wrappers/BackupCodeLoginWrapper.d.ts +8 -0
  204. package/src/wrappers/BackupCodeLoginWrapper.d.ts.map +1 -0
  205. package/src/wrappers/BackupCodeLoginWrapper.js +20 -0
  206. package/src/wrappers/BackupCodesWrapper.d.ts +7 -0
  207. package/src/wrappers/BackupCodesWrapper.d.ts.map +1 -0
  208. package/src/wrappers/BackupCodesWrapper.js +17 -0
  209. package/src/wrappers/ChangePasswordFormWrapper.d.ts +8 -0
  210. package/src/wrappers/ChangePasswordFormWrapper.d.ts.map +1 -0
  211. package/src/wrappers/ChangePasswordFormWrapper.js +21 -0
  212. package/src/wrappers/ForgotPasswordFormWrapper.d.ts +8 -0
  213. package/src/wrappers/ForgotPasswordFormWrapper.d.ts.map +1 -0
  214. package/src/wrappers/ForgotPasswordFormWrapper.js +29 -0
  215. package/src/wrappers/LoginFormWrapper.d.ts +21 -0
  216. package/src/wrappers/LoginFormWrapper.d.ts.map +1 -0
  217. package/src/wrappers/LoginFormWrapper.js +72 -0
  218. package/src/wrappers/LogoutPageWrapper.d.ts +9 -0
  219. package/src/wrappers/LogoutPageWrapper.d.ts.map +1 -0
  220. package/src/wrappers/LogoutPageWrapper.js +21 -0
  221. package/src/wrappers/RegisterFormWrapper.d.ts +20 -0
  222. package/src/wrappers/RegisterFormWrapper.d.ts.map +1 -0
  223. package/src/wrappers/RegisterFormWrapper.js +51 -0
  224. package/src/wrappers/ResetPasswordFormWrapper.d.ts +9 -0
  225. package/src/wrappers/ResetPasswordFormWrapper.d.ts.map +1 -0
  226. package/src/wrappers/ResetPasswordFormWrapper.js +34 -0
  227. package/src/wrappers/UserSettingsFormWrapper.d.ts +29 -0
  228. package/src/wrappers/UserSettingsFormWrapper.d.ts.map +1 -0
  229. package/src/wrappers/UserSettingsFormWrapper.js +95 -0
  230. package/src/wrappers/VerifyEmailPageWrapper.d.ts +8 -0
  231. package/src/wrappers/VerifyEmailPageWrapper.d.ts.map +1 -0
  232. package/src/wrappers/VerifyEmailPageWrapper.js +21 -0
  233. package/src/wrappers/{index.tsx → index.d.ts} +1 -10
  234. package/src/wrappers/index.d.ts.map +1 -0
  235. package/src/wrappers/index.js +24 -0
  236. package/LICENSE +0 -21
  237. package/src/auth/AdminRoute.tsx +0 -54
  238. package/src/auth/Private.tsx +0 -17
  239. package/src/auth/PrivateRoute.tsx +0 -28
  240. package/src/auth/UnAuth.tsx +0 -16
  241. package/src/auth/UnAuthRoute.tsx +0 -30
  242. package/src/components/ApiAccess.tsx +0 -175
  243. package/src/components/BackupCodeLoginForm.tsx +0 -489
  244. package/src/components/BackupCodesForm.tsx +0 -287
  245. package/src/components/CategoryMenu.tsx +0 -155
  246. package/src/components/ChangePasswordForm.tsx +0 -273
  247. package/src/components/ConfirmationDialog.tsx +0 -48
  248. package/src/components/CurrencyCodeSelector.tsx +0 -60
  249. package/src/components/CurrencyInput.tsx +0 -80
  250. package/src/components/DashboardPage.tsx +0 -24
  251. package/src/components/DropdownMenu.tsx +0 -105
  252. package/src/components/ExpirationSecondsSelector.tsx +0 -60
  253. package/src/components/FakeEmailAdminPanel.tsx +0 -374
  254. package/src/components/Flag.tsx +0 -52
  255. package/src/components/ForgotPasswordForm.tsx +0 -174
  256. package/src/components/LoginForm.tsx +0 -468
  257. package/src/components/LogoutPage.tsx +0 -21
  258. package/src/components/RegisterForm.tsx +0 -1169
  259. package/src/components/ResetPasswordForm.tsx +0 -247
  260. package/src/components/SideMenu.tsx +0 -46
  261. package/src/components/SideMenuListItem.tsx +0 -75
  262. package/src/components/T.tsx +0 -24
  263. package/src/components/TDiv.tsx +0 -26
  264. package/src/components/TImgAlt.tsx +0 -28
  265. package/src/components/TopMenu.tsx +0 -252
  266. package/src/components/TotpSetupForm.tsx +0 -188
  267. package/src/components/TotpVerificationForm.tsx +0 -148
  268. package/src/components/TranslatedTitle.tsx +0 -31
  269. package/src/components/UserLanguageSelector.tsx +0 -45
  270. package/src/components/UserMenu.tsx +0 -15
  271. package/src/components/UserSettingsForm.tsx +0 -904
  272. package/src/components/VerifyEmailPage.tsx +0 -222
  273. package/src/components/__tests__/RegisterForm.totp.spec.tsx +0 -377
  274. package/src/components/__tests__/TotpSetupForm.spec.tsx +0 -258
  275. package/src/components/__tests__/TotpVerificationForm.spec.tsx +0 -259
  276. package/src/components/__tests__/UserSettingsForm.totp.spec.tsx +0 -396
  277. package/src/contexts/AuthProvider.spec.tsx +0 -1284
  278. package/src/contexts/AuthProvider.tsx +0 -977
  279. package/src/contexts/I18nProvider.tsx +0 -164
  280. package/src/contexts/MenuContext.tsx +0 -426
  281. package/src/contexts/SuiteConfigProvider.tsx +0 -93
  282. package/src/contexts/ThemeProvider.tsx +0 -67
  283. package/src/hooks/useAuthenticatedApi.tsx +0 -67
  284. package/src/hooks/useBackupCodes.ts +0 -105
  285. package/src/hooks/useEmailVerification.ts +0 -54
  286. package/src/hooks/useExpiringValue.ts +0 -78
  287. package/src/hooks/useLocalStorage.ts +0 -18
  288. package/src/hooks/useUserSettings.ts +0 -271
  289. package/src/interfaces/IAppConfig.ts +0 -7
  290. package/src/interfaces/ICategoryConfig.ts +0 -41
  291. package/src/interfaces/IMenuConfig.ts +0 -28
  292. package/src/interfaces/IMenuOption.ts +0 -79
  293. package/src/services/__mocks__/authService.ts +0 -14
  294. package/src/services/__tests__/authService.totp.property.spec.ts +0 -360
  295. package/src/services/__tests__/authService.totp.spec.ts +0 -439
  296. package/src/services/api.ts +0 -13
  297. package/src/services/authService.ts +0 -692
  298. package/src/services/authenticatedApi.ts +0 -17
  299. package/src/services/index.ts +0 -3
  300. package/src/types/MenuType.ts +0 -15
  301. package/src/types/expirationSeconds.ts +0 -18
  302. package/src/types/index.ts +0 -1
  303. package/src/types/translation.ts +0 -20
  304. package/src/wrappers/BackupCodeLoginWrapper.tsx +0 -34
  305. package/src/wrappers/BackupCodesWrapper.tsx +0 -28
  306. package/src/wrappers/ChangePasswordFormWrapper.tsx +0 -34
  307. package/src/wrappers/ForgotPasswordFormWrapper.tsx +0 -45
  308. package/src/wrappers/LoginFormWrapper.tsx +0 -108
  309. package/src/wrappers/LogoutPageWrapper.tsx +0 -30
  310. package/src/wrappers/RegisterFormWrapper.tsx +0 -109
  311. package/src/wrappers/ResetPasswordFormWrapper.tsx +0 -57
  312. package/src/wrappers/UserSettingsFormWrapper.tsx +0 -140
  313. package/src/wrappers/VerifyEmailPageWrapper.tsx +0 -27
  314. package/src/wrappers/__tests__/LoginFormWrapper.totp.spec.tsx +0 -339
@@ -1,468 +0,0 @@
1
- import {
2
- Constants,
3
- SuiteCoreComponentId,
4
- SuiteCoreStringKey,
5
- SuiteCoreStringKeyValue,
6
- } from '@digitaldefiance/suite-core-lib';
7
- import { Visibility, VisibilityOff } from '@mui/icons-material';
8
- import {
9
- Alert,
10
- Box,
11
- Button,
12
- Container,
13
- IconButton,
14
- InputAdornment,
15
- Link,
16
- TextField,
17
- Typography,
18
- } from '@mui/material';
19
- import { useFormik } from 'formik';
20
- import { FC, useState } from 'react';
21
- import * as Yup from 'yup';
22
- import { useI18n } from '../contexts';
23
-
24
- export interface LoginFormValues {
25
- email?: string;
26
- username?: string;
27
- password?: string;
28
- mnemonic?: string;
29
- [key: string]: string | boolean | undefined;
30
- }
31
-
32
- export interface LoginFormProps {
33
- onSubmit: (values: LoginFormValues) => Promise<void>;
34
- loginType?: 'email' | 'username';
35
- authType?: 'password' | 'mnemonic';
36
- allowLoginTypeToggle?: boolean;
37
- allowAuthTypeToggle?: boolean;
38
- showForgotPassword?: boolean;
39
- showSignUp?: boolean;
40
- forgotPasswordLink?: string;
41
- signUpLink?: string;
42
- emailLabel?: string;
43
- usernameLabel?: string;
44
- passwordLabel?: string;
45
- mnemonicLabel?: string;
46
- signInButtonText?: string;
47
- forgotPasswordText?: string;
48
- signUpText?: string;
49
- useUsernameText?: string;
50
- useEmailText?: string;
51
- useMnemonicText?: string;
52
- usePasswordText?: string;
53
- toggleVisibilityLabel?: string;
54
- titleText?: string;
55
- emailValidation?: Yup.StringSchema;
56
- usernameValidation?: Yup.StringSchema;
57
- passwordValidation?: Yup.StringSchema;
58
- mnemonicValidation?: Yup.StringSchema;
59
- additionalFields?: (
60
- formik: ReturnType<typeof useFormik<LoginFormValues>>
61
- ) => React.ReactNode;
62
- additionalInitialValues?: Record<string, string | boolean>;
63
- additionalValidation?: Record<string, Yup.Schema>;
64
- }
65
-
66
- export const LoginForm: FC<LoginFormProps> = ({
67
- onSubmit,
68
- loginType: initialLoginType = 'email',
69
- authType: initialAuthType = 'password',
70
- allowLoginTypeToggle = true,
71
- allowAuthTypeToggle = true,
72
- showForgotPassword = true,
73
- showSignUp = true,
74
- forgotPasswordLink = '/forgot-password',
75
- signUpLink = '/register',
76
- emailLabel,
77
- usernameLabel,
78
- passwordLabel,
79
- mnemonicLabel,
80
- signInButtonText,
81
- forgotPasswordText,
82
- signUpText,
83
- useUsernameText,
84
- useEmailText,
85
- useMnemonicText,
86
- usePasswordText,
87
- toggleVisibilityLabel,
88
- titleText,
89
- emailValidation,
90
- usernameValidation,
91
- passwordValidation,
92
- mnemonicValidation,
93
- additionalFields,
94
- additionalInitialValues = {},
95
- additionalValidation = {},
96
- }) => {
97
- const { tComponent } = useI18n();
98
- const [loginType, setLoginType] = useState<'email' | 'username'>(
99
- initialLoginType
100
- );
101
- const [authType, setAuthType] = useState<'password' | 'mnemonic'>(
102
- initialAuthType
103
- );
104
- const [showSecret, setShowSecret] = useState(false);
105
-
106
- // Use translations with fallbacks
107
- const labels = {
108
- title:
109
- titleText ||
110
- tComponent<SuiteCoreStringKeyValue>(
111
- SuiteCoreComponentId,
112
- SuiteCoreStringKey.Login_Title
113
- ),
114
- email:
115
- emailLabel ||
116
- tComponent<SuiteCoreStringKeyValue>(
117
- SuiteCoreComponentId,
118
- SuiteCoreStringKey.Common_Email
119
- ),
120
- username:
121
- usernameLabel ||
122
- tComponent<SuiteCoreStringKeyValue>(
123
- SuiteCoreComponentId,
124
- SuiteCoreStringKey.Common_Username
125
- ),
126
- password:
127
- passwordLabel ||
128
- tComponent<SuiteCoreStringKeyValue>(
129
- SuiteCoreComponentId,
130
- SuiteCoreStringKey.Common_Password
131
- ),
132
- mnemonic:
133
- mnemonicLabel ||
134
- tComponent<SuiteCoreStringKeyValue>(
135
- SuiteCoreComponentId,
136
- SuiteCoreStringKey.Common_Mnemonic
137
- ),
138
- signIn:
139
- signInButtonText ||
140
- tComponent<SuiteCoreStringKeyValue>(
141
- SuiteCoreComponentId,
142
- SuiteCoreStringKey.SignInButton
143
- ),
144
- forgotPassword:
145
- forgotPasswordText ||
146
- tComponent<SuiteCoreStringKeyValue>(
147
- SuiteCoreComponentId,
148
- SuiteCoreStringKey.Login_ForgotPassword
149
- ),
150
- signUp:
151
- signUpText ||
152
- tComponent<SuiteCoreStringKeyValue>(
153
- SuiteCoreComponentId,
154
- SuiteCoreStringKey.Login_SignUp
155
- ),
156
- useUsername:
157
- useUsernameText ||
158
- tComponent<SuiteCoreStringKeyValue>(
159
- SuiteCoreComponentId,
160
- SuiteCoreStringKey.Login_UseUsername
161
- ),
162
- useEmail:
163
- useEmailText ||
164
- tComponent<SuiteCoreStringKeyValue>(
165
- SuiteCoreComponentId,
166
- SuiteCoreStringKey.Login_UseEmailAddress
167
- ),
168
- useMnemonic:
169
- useMnemonicText ||
170
- tComponent<SuiteCoreStringKeyValue>(
171
- SuiteCoreComponentId,
172
- SuiteCoreStringKey.Common_UseMnemonic
173
- ),
174
- usePassword:
175
- usePasswordText ||
176
- tComponent<SuiteCoreStringKeyValue>(
177
- SuiteCoreComponentId,
178
- SuiteCoreStringKey.Common_UsePassword
179
- ),
180
- toggleVisibility:
181
- toggleVisibilityLabel ||
182
- tComponent<SuiteCoreStringKeyValue>(
183
- SuiteCoreComponentId,
184
- SuiteCoreStringKey.TogglePasswordVisibility
185
- ),
186
- passwordAuthInfo: tComponent<SuiteCoreStringKeyValue>(
187
- SuiteCoreComponentId,
188
- SuiteCoreStringKey.Login_PasswordAuthInfo
189
- ),
190
- };
191
-
192
- const validation = {
193
- email:
194
- emailValidation ||
195
- Yup.string()
196
- .email(
197
- tComponent<SuiteCoreStringKeyValue>(
198
- SuiteCoreComponentId,
199
- SuiteCoreStringKey.Validation_InvalidEmail
200
- )
201
- )
202
- .required(
203
- tComponent<SuiteCoreStringKeyValue>(
204
- SuiteCoreComponentId,
205
- SuiteCoreStringKey.Validation_Required
206
- )
207
- ),
208
- username:
209
- usernameValidation ||
210
- Yup.string()
211
- .matches(
212
- Constants.UsernameRegex,
213
- tComponent<SuiteCoreStringKeyValue>(
214
- SuiteCoreComponentId,
215
- SuiteCoreStringKey.Validation_UsernameRegexErrorTemplate
216
- )
217
- )
218
- .required(
219
- tComponent<SuiteCoreStringKeyValue>(
220
- SuiteCoreComponentId,
221
- SuiteCoreStringKey.Validation_Required
222
- )
223
- ),
224
- password:
225
- passwordValidation ||
226
- Yup.string()
227
- .min(
228
- 1,
229
- tComponent<SuiteCoreStringKeyValue>(
230
- SuiteCoreComponentId,
231
- SuiteCoreStringKey.Validation_Required
232
- )
233
- )
234
- .required(
235
- tComponent<SuiteCoreStringKeyValue>(
236
- SuiteCoreComponentId,
237
- SuiteCoreStringKey.Validation_Required
238
- )
239
- ),
240
- mnemonic:
241
- mnemonicValidation ||
242
- Yup.string()
243
- .matches(
244
- Constants.MnemonicRegex,
245
- tComponent<SuiteCoreStringKeyValue>(
246
- SuiteCoreComponentId,
247
- SuiteCoreStringKey.Validation_InvalidMnemonic
248
- )
249
- )
250
- .required(
251
- tComponent<SuiteCoreStringKeyValue>(
252
- SuiteCoreComponentId,
253
- SuiteCoreStringKey.Validation_Required
254
- )
255
- ),
256
- };
257
-
258
- const formik = useFormik<LoginFormValues>({
259
- initialValues: {
260
- email: '',
261
- username: '',
262
- mnemonic: '',
263
- password: '',
264
- ...additionalInitialValues,
265
- },
266
- validationSchema: Yup.object({
267
- [loginType]:
268
- loginType === 'email' ? validation.email : validation.username,
269
- ...(authType === 'mnemonic'
270
- ? { mnemonic: validation.mnemonic }
271
- : { password: validation.password }),
272
- ...additionalValidation,
273
- }),
274
- enableReinitialize: true,
275
- onSubmit: async (values, { setStatus }) => {
276
- try {
277
- setStatus(null);
278
- await onSubmit(values);
279
- } catch (error: unknown) {
280
- const err = error as { message?: string };
281
- setStatus(
282
- err.message ||
283
- tComponent<SuiteCoreStringKeyValue>(
284
- SuiteCoreComponentId,
285
- SuiteCoreStringKey.Common_UnexpectedError
286
- )
287
- );
288
- throw error;
289
- }
290
- },
291
- });
292
-
293
- return (
294
- <Container component="main" maxWidth="xs">
295
- <Box
296
- sx={{
297
- marginTop: 8,
298
- display: 'flex',
299
- flexDirection: 'column',
300
- alignItems: 'center',
301
- }}
302
- >
303
- <Typography component="h1" variant="h5">
304
- {labels.title}
305
- </Typography>
306
- <Box
307
- component="form"
308
- onSubmit={formik.handleSubmit}
309
- sx={{ mt: 1, width: '100%' }}
310
- >
311
- {formik.status && (
312
- <Alert severity="error" sx={{ mb: 2 }}>
313
- {formik.status}
314
- </Alert>
315
- )}
316
- <TextField
317
- margin="normal"
318
- fullWidth
319
- id={loginType}
320
- label={loginType === 'email' ? labels.email : labels.username}
321
- name={loginType}
322
- autoComplete={loginType === 'email' ? 'email' : 'username'}
323
- autoFocus
324
- value={
325
- loginType === 'email'
326
- ? formik.values.email
327
- : formik.values.username
328
- }
329
- onChange={formik.handleChange}
330
- error={
331
- formik.touched[loginType] && Boolean(formik.errors[loginType])
332
- }
333
- helperText={formik.touched[loginType] && formik.errors[loginType]}
334
- />
335
- {authType === 'password' ? (
336
- <>
337
- <TextField
338
- margin="normal"
339
- required
340
- fullWidth
341
- name="password"
342
- label={labels.password}
343
- id="password"
344
- type={showSecret ? 'text' : 'password'}
345
- value={formik.values.password}
346
- onChange={formik.handleChange}
347
- error={
348
- formik.touched.password && Boolean(formik.errors.password)
349
- }
350
- helperText={formik.touched.password && formik.errors.password}
351
- slotProps={{
352
- input: {
353
- endAdornment: (
354
- <InputAdornment position="end">
355
- <IconButton
356
- aria-label={labels.toggleVisibility}
357
- onClick={() => setShowSecret(!showSecret)}
358
- edge="end"
359
- >
360
- {showSecret ? <VisibilityOff /> : <Visibility />}
361
- </IconButton>
362
- </InputAdornment>
363
- ),
364
- },
365
- }}
366
- />
367
- <Alert severity="info" sx={{ mt: 1 }}>
368
- {labels.passwordAuthInfo}
369
- </Alert>
370
- </>
371
- ) : (
372
- <TextField
373
- margin="normal"
374
- required
375
- fullWidth
376
- name="mnemonic"
377
- label={labels.mnemonic}
378
- id="mnemonic"
379
- multiline
380
- rows={3}
381
- autoComplete="section-mnemonic current-password"
382
- value={formik.values.mnemonic}
383
- onChange={formik.handleChange}
384
- error={formik.touched.mnemonic && Boolean(formik.errors.mnemonic)}
385
- helperText={formik.touched.mnemonic && formik.errors.mnemonic}
386
- type={showSecret ? 'text' : 'password'}
387
- slotProps={{
388
- input: {
389
- endAdornment: (
390
- <InputAdornment position="end">
391
- <IconButton
392
- aria-label={labels.toggleVisibility}
393
- onClick={() => setShowSecret(!showSecret)}
394
- edge="end"
395
- >
396
- {showSecret ? <VisibilityOff /> : <Visibility />}
397
- </IconButton>
398
- </InputAdornment>
399
- ),
400
- },
401
- }}
402
- />
403
- )}
404
- {additionalFields && additionalFields(formik)}
405
- <Button
406
- type="submit"
407
- fullWidth
408
- variant="contained"
409
- sx={{ mt: 3, mb: 2 }}
410
- disabled={formik.isSubmitting}
411
- >
412
- {labels.signIn}
413
- </Button>
414
- {(showForgotPassword || showSignUp) && (
415
- <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
416
- {showForgotPassword && (
417
- <Link href={forgotPasswordLink} variant="body2">
418
- {labels.forgotPassword}
419
- </Link>
420
- )}
421
- {showSignUp && (
422
- <Link href={signUpLink} variant="body2">
423
- {labels.signUp}
424
- </Link>
425
- )}
426
- </Box>
427
- )}
428
- {(allowLoginTypeToggle || allowAuthTypeToggle) && (
429
- <Box sx={{ display: 'flex', gap: 1, mt: 2 }}>
430
- {allowLoginTypeToggle && (
431
- <Button
432
- fullWidth
433
- variant="text"
434
- onClick={() => {
435
- const newType =
436
- loginType === 'email' ? 'username' : 'email';
437
- formik.setFieldValue(loginType, '');
438
- setLoginType(newType);
439
- }}
440
- >
441
- {loginType === 'email' ? labels.useUsername : labels.useEmail}
442
- </Button>
443
- )}
444
- {allowAuthTypeToggle && (
445
- <Button
446
- fullWidth
447
- variant="text"
448
- onClick={() => {
449
- const newType =
450
- authType === 'password' ? 'mnemonic' : 'password';
451
- formik.setFieldValue(authType, '');
452
- setAuthType(newType);
453
- }}
454
- >
455
- {authType === 'password'
456
- ? labels.useMnemonic
457
- : labels.usePassword}
458
- </Button>
459
- )}
460
- </Box>
461
- )}
462
- </Box>
463
- </Box>
464
- </Container>
465
- );
466
- };
467
-
468
- export default LoginForm;
@@ -1,21 +0,0 @@
1
- import { useEffect } from 'react';
2
-
3
- export interface LogoutPageProps {
4
- onLogout: () => Promise<void> | void;
5
- onNavigate?: (path: string) => void;
6
- redirectTo?: string;
7
- }
8
-
9
- export const LogoutPage = ({ onLogout, onNavigate, redirectTo = '/login' }: LogoutPageProps) => {
10
- useEffect(() => {
11
- const performLogout = async () => {
12
- await onLogout();
13
- onNavigate?.(redirectTo);
14
- };
15
- performLogout();
16
- }, [onLogout, onNavigate, redirectTo]);
17
-
18
- return null;
19
- };
20
-
21
- export default LogoutPage;