@digitaldefiance/express-suite-react-components 2.9.38 → 2.9.39

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