@digitaldefiance/express-suite-react-components 2.8.5 → 2.9.2

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 (258) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -0
  3. package/package.json +11 -7
  4. package/src/auth/Private.tsx +17 -0
  5. package/src/auth/PrivateRoute.tsx +28 -0
  6. package/src/auth/UnAuth.tsx +16 -0
  7. package/src/auth/UnAuthRoute.tsx +30 -0
  8. package/src/auth/{index.d.ts → index.ts} +1 -2
  9. package/src/components/ApiAccess.tsx +134 -0
  10. package/src/components/BackupCodeLoginForm.tsx +314 -0
  11. package/src/components/BackupCodesForm.tsx +198 -0
  12. package/src/components/ChangePasswordForm.tsx +182 -0
  13. package/src/components/ConfirmationDialog.tsx +48 -0
  14. package/src/components/CurrencyCodeSelector.tsx +60 -0
  15. package/src/components/CurrencyInput.tsx +80 -0
  16. package/src/components/DashboardPage.tsx +24 -0
  17. package/src/components/DropdownMenu.tsx +92 -0
  18. package/src/components/ExpirationSecondsSelector.tsx +65 -0
  19. package/src/components/Flag.tsx +53 -0
  20. package/src/components/ForgotPasswordForm.tsx +120 -0
  21. package/src/components/LoginForm.tsx +307 -0
  22. package/src/components/LogoutPage.tsx +21 -0
  23. package/src/components/RegisterForm.tsx +354 -0
  24. package/src/components/ResetPasswordForm.tsx +164 -0
  25. package/src/components/SideMenu.tsx +46 -0
  26. package/src/components/SideMenuListItem.tsx +74 -0
  27. package/src/components/TopMenu.tsx +134 -0
  28. package/src/components/TranslatedTitle.tsx +22 -0
  29. package/src/components/UserLanguageSelector.tsx +45 -0
  30. package/src/components/UserMenu.tsx +15 -0
  31. package/src/components/UserSettingsForm.tsx +328 -0
  32. package/src/components/VerifyEmailPage.tsx +133 -0
  33. package/src/components/{index.d.ts → index.ts} +1 -1
  34. package/src/contexts/AuthProvider.spec.tsx +1060 -0
  35. package/src/contexts/AuthProvider.tsx +741 -0
  36. package/src/contexts/I18nProvider.tsx +85 -0
  37. package/src/contexts/MenuContext.tsx +310 -0
  38. package/src/contexts/SuiteConfigProvider.tsx +93 -0
  39. package/src/contexts/ThemeProvider.tsx +67 -0
  40. package/src/contexts/{index.d.ts → index.ts} +0 -1
  41. package/src/hooks/{index.d.ts → index.ts} +0 -1
  42. package/src/hooks/useBackupCodes.ts +85 -0
  43. package/src/hooks/useEmailVerification.ts +39 -0
  44. package/src/hooks/useExpiringValue.ts +78 -0
  45. package/src/hooks/useLocalStorage.ts +18 -0
  46. package/src/hooks/useUserSettings.ts +216 -0
  47. package/src/{index.d.ts → index.ts} +1 -1
  48. package/src/interfaces/IAppConfig.ts +5 -0
  49. package/src/interfaces/IMenuConfig.ts +11 -0
  50. package/src/interfaces/IMenuOption.ts +55 -0
  51. package/src/interfaces/index.ts +3 -0
  52. package/src/services/__mocks__/authService.ts +14 -0
  53. package/src/services/api.ts +13 -0
  54. package/src/services/authService.ts +422 -0
  55. package/src/services/authenticatedApi.ts +17 -0
  56. package/src/services/index.ts +3 -0
  57. package/src/types/MenuType.ts +15 -0
  58. package/src/types/expirationSeconds.ts +18 -0
  59. package/src/types/index.ts +1 -0
  60. package/src/types/translation.ts +20 -0
  61. package/src/wrappers/BackupCodeLoginWrapper.tsx +35 -0
  62. package/src/wrappers/BackupCodesWrapper.tsx +28 -0
  63. package/src/wrappers/ChangePasswordFormWrapper.tsx +31 -0
  64. package/src/wrappers/LoginFormWrapper.tsx +59 -0
  65. package/src/wrappers/LogoutPageWrapper.tsx +30 -0
  66. package/src/wrappers/RegisterFormWrapper.tsx +48 -0
  67. package/src/wrappers/UserSettingsFormWrapper.tsx +39 -0
  68. package/src/wrappers/VerifyEmailPageWrapper.tsx +27 -0
  69. package/src/wrappers/{index.d.ts → index.tsx} +8 -1
  70. package/src/auth/Private.d.ts +0 -6
  71. package/src/auth/Private.d.ts.map +0 -1
  72. package/src/auth/Private.js +0 -14
  73. package/src/auth/PrivateRoute.d.ts +0 -8
  74. package/src/auth/PrivateRoute.d.ts.map +0 -1
  75. package/src/auth/PrivateRoute.js +0 -23
  76. package/src/auth/UnAuth.d.ts +0 -6
  77. package/src/auth/UnAuth.d.ts.map +0 -1
  78. package/src/auth/UnAuth.js +0 -14
  79. package/src/auth/UnAuthRoute.d.ts +0 -8
  80. package/src/auth/UnAuthRoute.d.ts.map +0 -1
  81. package/src/auth/UnAuthRoute.js +0 -22
  82. package/src/auth/index.d.ts.map +0 -1
  83. package/src/auth/index.js +0 -10
  84. package/src/components/ApiAccess.d.ts +0 -16
  85. package/src/components/ApiAccess.d.ts.map +0 -1
  86. package/src/components/ApiAccess.js +0 -70
  87. package/src/components/BackupCodeLoginForm.d.ts +0 -43
  88. package/src/components/BackupCodeLoginForm.d.ts.map +0 -1
  89. package/src/components/BackupCodeLoginForm.js +0 -106
  90. package/src/components/BackupCodesForm.d.ts +0 -26
  91. package/src/components/BackupCodesForm.d.ts.map +0 -1
  92. package/src/components/BackupCodesForm.js +0 -108
  93. package/src/components/ChangePasswordForm.d.ts +0 -26
  94. package/src/components/ChangePasswordForm.d.ts.map +0 -1
  95. package/src/components/ChangePasswordForm.js +0 -66
  96. package/src/components/ConfirmationDialog.d.ts +0 -13
  97. package/src/components/ConfirmationDialog.d.ts.map +0 -1
  98. package/src/components/ConfirmationDialog.js +0 -10
  99. package/src/components/CurrencyCodeSelector.d.ts +0 -9
  100. package/src/components/CurrencyCodeSelector.d.ts.map +0 -1
  101. package/src/components/CurrencyCodeSelector.js +0 -31
  102. package/src/components/CurrencyInput.d.ts +0 -13
  103. package/src/components/CurrencyInput.d.ts.map +0 -1
  104. package/src/components/CurrencyInput.js +0 -22
  105. package/src/components/DashboardPage.d.ts +0 -8
  106. package/src/components/DashboardPage.d.ts.map +0 -1
  107. package/src/components/DashboardPage.js +0 -10
  108. package/src/components/DropdownMenu.d.ts +0 -9
  109. package/src/components/DropdownMenu.d.ts.map +0 -1
  110. package/src/components/DropdownMenu.js +0 -56
  111. package/src/components/ExpirationSecondsSelector.d.ts +0 -13
  112. package/src/components/ExpirationSecondsSelector.d.ts.map +0 -1
  113. package/src/components/ExpirationSecondsSelector.js +0 -32
  114. package/src/components/Flag.d.ts +0 -20
  115. package/src/components/Flag.d.ts.map +0 -1
  116. package/src/components/Flag.js +0 -43
  117. package/src/components/ForgotPasswordForm.d.ts +0 -18
  118. package/src/components/ForgotPasswordForm.d.ts.map +0 -1
  119. package/src/components/ForgotPasswordForm.js +0 -54
  120. package/src/components/LoginForm.d.ts +0 -44
  121. package/src/components/LoginForm.d.ts.map +0 -1
  122. package/src/components/LoginForm.js +0 -99
  123. package/src/components/LogoutPage.d.ts +0 -8
  124. package/src/components/LogoutPage.d.ts.map +0 -1
  125. package/src/components/LogoutPage.js +0 -16
  126. package/src/components/RegisterForm.d.ts +0 -54
  127. package/src/components/RegisterForm.d.ts.map +0 -1
  128. package/src/components/RegisterForm.js +0 -105
  129. package/src/components/ResetPasswordForm.d.ts +0 -23
  130. package/src/components/ResetPasswordForm.d.ts.map +0 -1
  131. package/src/components/ResetPasswordForm.js +0 -68
  132. package/src/components/SideMenu.d.ts +0 -8
  133. package/src/components/SideMenu.d.ts.map +0 -1
  134. package/src/components/SideMenu.js +0 -25
  135. package/src/components/SideMenuListItem.d.ts +0 -13
  136. package/src/components/SideMenuListItem.d.ts.map +0 -1
  137. package/src/components/SideMenuListItem.js +0 -44
  138. package/src/components/TopMenu.d.ts +0 -24
  139. package/src/components/TopMenu.d.ts.map +0 -1
  140. package/src/components/TopMenu.js +0 -36
  141. package/src/components/TranslatedTitle.d.ts +0 -7
  142. package/src/components/TranslatedTitle.d.ts.map +0 -1
  143. package/src/components/TranslatedTitle.js +0 -15
  144. package/src/components/UserLanguageSelector.d.ts +0 -4
  145. package/src/components/UserLanguageSelector.d.ts.map +0 -1
  146. package/src/components/UserLanguageSelector.js +0 -31
  147. package/src/components/UserMenu.d.ts +0 -4
  148. package/src/components/UserMenu.d.ts.map +0 -1
  149. package/src/components/UserMenu.js +0 -12
  150. package/src/components/UserSettingsForm.d.ts +0 -56
  151. package/src/components/UserSettingsForm.d.ts.map +0 -1
  152. package/src/components/UserSettingsForm.js +0 -93
  153. package/src/components/VerifyEmailPage.d.ts +0 -23
  154. package/src/components/VerifyEmailPage.d.ts.map +0 -1
  155. package/src/components/VerifyEmailPage.js +0 -61
  156. package/src/components/index.d.ts.map +0 -1
  157. package/src/components/index.js +0 -28
  158. package/src/contexts/AuthProvider.d.ts +0 -152
  159. package/src/contexts/AuthProvider.d.ts.map +0 -1
  160. package/src/contexts/AuthProvider.js +0 -446
  161. package/src/contexts/I18nProvider.d.ts +0 -16
  162. package/src/contexts/I18nProvider.d.ts.map +0 -1
  163. package/src/contexts/I18nProvider.js +0 -46
  164. package/src/contexts/MenuContext.d.ts +0 -20
  165. package/src/contexts/MenuContext.d.ts.map +0 -1
  166. package/src/contexts/MenuContext.js +0 -244
  167. package/src/contexts/SuiteConfigProvider.d.ts +0 -44
  168. package/src/contexts/SuiteConfigProvider.d.ts.map +0 -1
  169. package/src/contexts/SuiteConfigProvider.js +0 -43
  170. package/src/contexts/ThemeProvider.d.ts +0 -15
  171. package/src/contexts/ThemeProvider.d.ts.map +0 -1
  172. package/src/contexts/ThemeProvider.js +0 -36
  173. package/src/contexts/index.d.ts.map +0 -1
  174. package/src/contexts/index.js +0 -8
  175. package/src/hooks/index.d.ts.map +0 -1
  176. package/src/hooks/index.js +0 -8
  177. package/src/hooks/useBackupCodes.d.ts +0 -15
  178. package/src/hooks/useBackupCodes.d.ts.map +0 -1
  179. package/src/hooks/useBackupCodes.js +0 -70
  180. package/src/hooks/useEmailVerification.d.ts +0 -10
  181. package/src/hooks/useEmailVerification.d.ts.map +0 -1
  182. package/src/hooks/useEmailVerification.js +0 -36
  183. package/src/hooks/useExpiringValue.d.ts +0 -14
  184. package/src/hooks/useExpiringValue.d.ts.map +0 -1
  185. package/src/hooks/useExpiringValue.js +0 -53
  186. package/src/hooks/useLocalStorage.d.ts +0 -2
  187. package/src/hooks/useLocalStorage.d.ts.map +0 -1
  188. package/src/hooks/useLocalStorage.js +0 -15
  189. package/src/hooks/useUserSettings.d.ts +0 -46
  190. package/src/hooks/useUserSettings.d.ts.map +0 -1
  191. package/src/hooks/useUserSettings.js +0 -152
  192. package/src/index.d.ts.map +0 -1
  193. package/src/index.js +0 -12
  194. package/src/interfaces/IAppConfig.d.ts +0 -6
  195. package/src/interfaces/IAppConfig.d.ts.map +0 -1
  196. package/src/interfaces/IAppConfig.js +0 -2
  197. package/src/interfaces/IMenuConfig.d.ts +0 -11
  198. package/src/interfaces/IMenuConfig.d.ts.map +0 -1
  199. package/src/interfaces/IMenuConfig.js +0 -2
  200. package/src/interfaces/IMenuOption.d.ts +0 -58
  201. package/src/interfaces/IMenuOption.d.ts.map +0 -1
  202. package/src/interfaces/IMenuOption.js +0 -2
  203. package/src/interfaces/index.d.ts +0 -4
  204. package/src/interfaces/index.d.ts.map +0 -1
  205. package/src/interfaces/index.js +0 -6
  206. package/src/services/__mocks__/authService.d.ts +0 -21
  207. package/src/services/__mocks__/authService.d.ts.map +0 -1
  208. package/src/services/__mocks__/authService.js +0 -15
  209. package/src/services/api.d.ts +0 -3
  210. package/src/services/api.d.ts.map +0 -1
  211. package/src/services/api.js +0 -14
  212. package/src/services/authService.d.ts +0 -72
  213. package/src/services/authService.d.ts.map +0 -1
  214. package/src/services/authService.js +0 -347
  215. package/src/services/authenticatedApi.d.ts +0 -3
  216. package/src/services/authenticatedApi.d.ts.map +0 -1
  217. package/src/services/authenticatedApi.js +0 -18
  218. package/src/services/index.d.ts +0 -4
  219. package/src/services/index.d.ts.map +0 -1
  220. package/src/services/index.js +0 -6
  221. package/src/types/MenuType.d.ts +0 -11
  222. package/src/types/MenuType.d.ts.map +0 -1
  223. package/src/types/MenuType.js +0 -12
  224. package/src/types/expirationSeconds.d.ts +0 -3
  225. package/src/types/expirationSeconds.d.ts.map +0 -1
  226. package/src/types/expirationSeconds.js +0 -17
  227. package/src/types/index.d.ts +0 -2
  228. package/src/types/index.d.ts.map +0 -1
  229. package/src/types/index.js +0 -4
  230. package/src/types/translation.d.ts +0 -10
  231. package/src/types/translation.d.ts.map +0 -1
  232. package/src/types/translation.js +0 -9
  233. package/src/wrappers/BackupCodeLoginWrapper.d.ts +0 -8
  234. package/src/wrappers/BackupCodeLoginWrapper.d.ts.map +0 -1
  235. package/src/wrappers/BackupCodeLoginWrapper.js +0 -21
  236. package/src/wrappers/BackupCodesWrapper.d.ts +0 -7
  237. package/src/wrappers/BackupCodesWrapper.d.ts.map +0 -1
  238. package/src/wrappers/BackupCodesWrapper.js +0 -17
  239. package/src/wrappers/ChangePasswordFormWrapper.d.ts +0 -8
  240. package/src/wrappers/ChangePasswordFormWrapper.d.ts.map +0 -1
  241. package/src/wrappers/ChangePasswordFormWrapper.js +0 -21
  242. package/src/wrappers/LoginFormWrapper.d.ts +0 -9
  243. package/src/wrappers/LoginFormWrapper.d.ts.map +0 -1
  244. package/src/wrappers/LoginFormWrapper.js +0 -43
  245. package/src/wrappers/LogoutPageWrapper.d.ts +0 -9
  246. package/src/wrappers/LogoutPageWrapper.d.ts.map +0 -1
  247. package/src/wrappers/LogoutPageWrapper.js +0 -21
  248. package/src/wrappers/RegisterFormWrapper.d.ts +0 -9
  249. package/src/wrappers/RegisterFormWrapper.d.ts.map +0 -1
  250. package/src/wrappers/RegisterFormWrapper.js +0 -26
  251. package/src/wrappers/UserSettingsFormWrapper.d.ts +0 -8
  252. package/src/wrappers/UserSettingsFormWrapper.d.ts.map +0 -1
  253. package/src/wrappers/UserSettingsFormWrapper.js +0 -24
  254. package/src/wrappers/VerifyEmailPageWrapper.d.ts +0 -8
  255. package/src/wrappers/VerifyEmailPageWrapper.d.ts.map +0 -1
  256. package/src/wrappers/VerifyEmailPageWrapper.js +0 -20
  257. package/src/wrappers/index.d.ts.map +0 -1
  258. package/src/wrappers/index.js +0 -20
@@ -1,244 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useMenu = exports.MenuProvider = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- // src/app/menuContext.tsx
6
- const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
7
- const suite_core_lib_2 = require("@digitaldefiance/suite-core-lib");
8
- const icons_material_1 = require("@mui/icons-material");
9
- const react_1 = require("react");
10
- const AuthProvider_1 = require("./AuthProvider");
11
- const ThemeProvider_1 = require("./ThemeProvider");
12
- const MenuType_1 = require("../types/MenuType");
13
- const I18nProvider_1 = require("./I18nProvider");
14
- const hooks_1 = require("../hooks");
15
- const SuiteConfigProvider_1 = require("./SuiteConfigProvider");
16
- const services_1 = require("../services");
17
- const MenuContext = (0, react_1.createContext)(undefined);
18
- const MenuProvider = ({ children, menuConfigs = [], enableBackupCodes = true }) => {
19
- const { userData: user, isAuthenticated, mnemonic, clearMnemonic, wallet, clearWallet } = (0, AuthProvider_1.useAuth)();
20
- const { mode: colorMode } = (0, ThemeProvider_1.useTheme)();
21
- const registeredMenuOptions = (0, react_1.useRef)(new Set());
22
- const [registeredOptions, setRegisteredOptions] = (0, react_1.useState)(new Map());
23
- const { tComponent } = (0, I18nProvider_1.useI18n)();
24
- const { baseUrl } = (0, SuiteConfigProvider_1.useSuiteConfig)();
25
- const authenticatedApi = (0, react_1.useMemo)(() => (0, services_1.createAuthenticatedApiClient)(baseUrl), [baseUrl]);
26
- const { toggleColorMode } = (0, hooks_1.useUserSettings)({ authenticatedApi, isAuthenticated });
27
- const registerMenuOption = (0, react_1.useCallback)((option) => {
28
- const unregister = () => {
29
- setRegisteredOptions((prev) => {
30
- const newMap = new Map(prev);
31
- newMap.delete(option.id);
32
- return newMap;
33
- });
34
- registeredMenuOptions.current.delete(unregister);
35
- };
36
- setRegisteredOptions((prev) => {
37
- const newMap = new Map(prev);
38
- newMap.set(option.id, option);
39
- return newMap;
40
- });
41
- registeredMenuOptions.current.add(unregister);
42
- return unregister;
43
- }, []);
44
- const registerMenuOptions = (0, react_1.useCallback)((options) => {
45
- const unregisterFunctions = options.map(registerMenuOption);
46
- return () => unregisterFunctions.forEach((f) => f());
47
- }, [registerMenuOption]);
48
- const menuOptions = (0, react_1.useMemo)(() => {
49
- const isUserRestricted = () => {
50
- return user?.roles?.some((role) => role.child) ?? false;
51
- };
52
- let index = 0;
53
- const baseOptions = [
54
- {
55
- id: 'dashboard',
56
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_Dashboard),
57
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Dashboard, {}),
58
- link: '/dashboard',
59
- requiresAuth: true,
60
- includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
61
- index: index++,
62
- },
63
- {
64
- id: 'user-divider',
65
- label: '',
66
- divider: true,
67
- includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
68
- index: index++,
69
- requiresAuth: false,
70
- },
71
- {
72
- id: 'logout',
73
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.LogoutButton),
74
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.ExitToApp, {}),
75
- link: '/logout',
76
- requiresAuth: true,
77
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
78
- index: index++,
79
- },
80
- {
81
- id: 'login',
82
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Login_LoginButton),
83
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Login, {}),
84
- link: '/login',
85
- requiresAuth: false,
86
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
87
- index: index++,
88
- },
89
- {
90
- id: 'register',
91
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.RegisterButton),
92
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.PersonAdd, {}),
93
- link: '/register',
94
- requiresAuth: false,
95
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
96
- index: index++,
97
- },
98
- {
99
- id: 'forgot-password',
100
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.ForgotPassword_Title),
101
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.LockOpen, {}),
102
- link: '/forgot-password',
103
- requiresAuth: false,
104
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
105
- index: index++,
106
- },
107
- {
108
- id: 'change-password',
109
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ChangePassword),
110
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.LockReset, {}),
111
- link: '/change-password',
112
- requiresAuth: true,
113
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
114
- index: index++,
115
- },
116
- ...(enableBackupCodes ? [{
117
- id: 'backup-code',
118
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.BackupCodeRecovery_Title),
119
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
120
- link: '/backup-code',
121
- requiresAuth: false,
122
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
123
- index: index++,
124
- },
125
- {
126
- id: 'backup-codes',
127
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.BackupCodeRecovery_GenerateNewCodes),
128
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Autorenew, {}),
129
- link: '/backup-codes',
130
- requiresAuth: true,
131
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
132
- index: index++,
133
- }] : []),
134
- {
135
- id: 'divider',
136
- label: '',
137
- divider: true,
138
- includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
139
- index: index++,
140
- requiresAuth: false,
141
- },
142
- {
143
- id: 'clear-mnemonic',
144
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ClearMnemonic),
145
- action: clearMnemonic,
146
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
147
- requiresAuth: true,
148
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
149
- index: index++,
150
- filter: () => !!mnemonic,
151
- },
152
- {
153
- id: 'clear-wallet',
154
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ClearWallet),
155
- action: clearWallet,
156
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
157
- requiresAuth: true,
158
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
159
- index: index++,
160
- filter: () => !!wallet,
161
- },
162
- ...(isUserRestricted() ? [] : []),
163
- {
164
- id: 'color-divider',
165
- label: '',
166
- divider: true,
167
- includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
168
- index: index++,
169
- requiresAuth: undefined,
170
- },
171
- {
172
- id: 'theme-toggle',
173
- label: colorMode === 'dark'
174
- ? tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ThemeToggle_Light)
175
- : tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ThemeToggle_Dark),
176
- icon: colorMode === 'dark' ? (0, jsx_runtime_1.jsx)(icons_material_1.Brightness7, {}) : (0, jsx_runtime_1.jsx)(icons_material_1.Brightness4, {}),
177
- includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
178
- index: index++,
179
- requiresAuth: undefined,
180
- action: toggleColorMode,
181
- },
182
- {
183
- id: 'user-settings',
184
- label: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Settings_Title),
185
- icon: (0, jsx_runtime_1.jsx)(icons_material_1.Settings, {}),
186
- link: '/user-settings',
187
- requiresAuth: true,
188
- includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
189
- index: index++,
190
- }
191
- ];
192
- const allOptions = [...baseOptions, ...registeredOptions.values()];
193
- return allOptions.sort((a, b) => a.index - b.index);
194
- }, [tComponent, registeredOptions, user?.roles, colorMode, toggleColorMode, clearMnemonic, clearWallet, mnemonic, wallet]);
195
- const getMenuOptions = (0, react_1.useCallback)((menuType, includeDividers) => {
196
- const MenuFilter = (o) => {
197
- // Apply the custom filter first
198
- let customFilterPasses = true;
199
- if (o.filter !== undefined) {
200
- customFilterPasses = o.filter(o);
201
- }
202
- if (!customFilterPasses)
203
- return false;
204
- if (o.divider === true && !includeDividers)
205
- return false;
206
- return (o.includeOnMenus.includes(menuType) &&
207
- (o.requiresAuth === undefined || o.requiresAuth === isAuthenticated));
208
- };
209
- return menuOptions.filter(MenuFilter);
210
- }, [isAuthenticated, menuOptions]);
211
- (0, react_1.useEffect)(() => {
212
- if (menuConfigs.length > 0) {
213
- return registerMenuOptions(menuConfigs.flatMap(config => config.options));
214
- }
215
- return undefined;
216
- }, [menuConfigs, registerMenuOptions]);
217
- const getTopMenus = (0, react_1.useCallback)(() => {
218
- const menus = [
219
- ...menuConfigs.map(config => ({ ...config, isUserMenu: false })),
220
- { menuType: MenuType_1.MenuTypes.UserMenu, menuIcon: (0, jsx_runtime_1.jsx)(icons_material_1.AccountCircle, {}), priority: 0, options: [], isUserMenu: true }
221
- ];
222
- return menus.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
223
- }, [menuConfigs]);
224
- const contextValue = (0, react_1.useMemo)(() => {
225
- return {
226
- menuOptions: menuOptions,
227
- getMenuOptions: getMenuOptions,
228
- registerMenuOption: registerMenuOption,
229
- registerMenuOptions: registerMenuOptions,
230
- getTopMenus: getTopMenus,
231
- };
232
- }, [menuOptions, getMenuOptions, registerMenuOption, registerMenuOptions, getTopMenus]);
233
- const memoizedChildren = (0, react_1.useMemo)(() => children, [children]);
234
- return ((0, jsx_runtime_1.jsx)(MenuContext.Provider, { value: contextValue, children: memoizedChildren }));
235
- };
236
- exports.MenuProvider = MenuProvider;
237
- const useMenu = () => {
238
- const context = (0, react_1.useContext)(MenuContext);
239
- if (context === undefined) {
240
- throw new Error('useMenu must be used within a MenuProvider');
241
- }
242
- return context;
243
- };
244
- exports.useMenu = useMenu;
@@ -1,44 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export interface SuiteConfigRoutes {
3
- dashboard?: string;
4
- login?: string;
5
- register?: string;
6
- verifyEmail?: string;
7
- forgotPassword?: string;
8
- resetPassword?: string;
9
- settings?: string;
10
- }
11
- export interface SuiteConfigContextData {
12
- /**
13
- * Base URL for API calls
14
- */
15
- baseUrl: string;
16
- /**
17
- * Application routes for navigation
18
- */
19
- routes: SuiteConfigRoutes;
20
- /**
21
- * Available languages for the application
22
- */
23
- languages: Array<{
24
- code: string;
25
- label: string;
26
- }>;
27
- /**
28
- * Available timezones
29
- */
30
- timezones?: string[];
31
- }
32
- export interface SuiteConfigProviderProps {
33
- children: ReactNode;
34
- baseUrl: string;
35
- routes?: Partial<SuiteConfigRoutes>;
36
- languages?: Array<{
37
- code: string;
38
- label: string;
39
- }>;
40
- timezones?: string[];
41
- }
42
- export declare const SuiteConfigProvider: ({ children, baseUrl, routes, languages, timezones, }: SuiteConfigProviderProps) => import("react/jsx-runtime").JSX.Element;
43
- export declare const useSuiteConfig: () => SuiteConfigContextData;
44
- //# sourceMappingURL=SuiteConfigProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SuiteConfigProvider.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/SuiteConfigProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAc,MAAM,OAAO,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAyBD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,mBAAmB,GAAI,sDAMjC,wBAAwB,4CAa1B,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,sBAMjC,CAAC"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSuiteConfig = exports.SuiteConfigProvider = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const defaultRoutes = {
7
- dashboard: '/dashboard',
8
- login: '/login',
9
- register: '/register',
10
- verifyEmail: '/verify-email',
11
- forgotPassword: '/forgot-password',
12
- resetPassword: '/reset-password',
13
- settings: '/settings',
14
- };
15
- const defaultLanguages = [
16
- { code: 'en-US', label: 'English (US)' },
17
- { code: 'en-GB', label: 'English (UK)' },
18
- { code: 'es-ES', label: 'Español' },
19
- { code: 'fr-FR', label: 'Français' },
20
- { code: 'de-DE', label: 'Deutsch' },
21
- { code: 'ja', label: '日本語' },
22
- { code: 'zh-CN', label: '中文 (简体)' },
23
- { code: 'uk', label: 'Українська' },
24
- ];
25
- const SuiteConfigContext = (0, react_1.createContext)(undefined);
26
- const SuiteConfigProvider = ({ children, baseUrl, routes = {}, languages = defaultLanguages, timezones, }) => {
27
- const value = {
28
- baseUrl,
29
- routes: { ...defaultRoutes, ...routes },
30
- languages,
31
- timezones,
32
- };
33
- return ((0, jsx_runtime_1.jsx)(SuiteConfigContext.Provider, { value: value, children: children }));
34
- };
35
- exports.SuiteConfigProvider = SuiteConfigProvider;
36
- const useSuiteConfig = () => {
37
- const context = (0, react_1.useContext)(SuiteConfigContext);
38
- if (!context) {
39
- throw new Error('useSuiteConfig must be used within a SuiteConfigProvider');
40
- }
41
- return context;
42
- };
43
- exports.useSuiteConfig = useSuiteConfig;
@@ -1,15 +0,0 @@
1
- import { PaletteMode, Theme } from '@mui/material';
2
- import { FC, ReactNode } from 'react';
3
- export interface ThemeContextType {
4
- toggleColorMode: () => void;
5
- setColorMode: (mode: PaletteMode) => void;
6
- mode: PaletteMode;
7
- }
8
- export declare const useTheme: () => ThemeContextType;
9
- export interface AppThemeProviderProps {
10
- children: ReactNode;
11
- customTheme?: (mode: PaletteMode) => Theme;
12
- }
13
- export declare const AppThemeProvider: FC<AppThemeProviderProps>;
14
- export declare const ThemeToggleButton: FC;
15
- //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/ThemeProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,WAAW,EAEX,KAAK,EACN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,EAAE,EAAE,SAAS,EAAgD,MAAM,OAAO,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,IAAI,EAAE,WAAW,CAAC;CACnB;AAID,eAAO,MAAM,QAAQ,wBAMpB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,KAAK,CAAC;CAC5C;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA0BtD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,EAO/B,CAAC"}
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ThemeToggleButton = exports.AppThemeProvider = exports.useTheme = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const icons_material_1 = require("@mui/icons-material");
6
- const material_1 = require("@mui/material");
7
- const react_1 = require("react");
8
- const ThemeContext = (0, react_1.createContext)(undefined);
9
- const useTheme = () => {
10
- const context = (0, react_1.useContext)(ThemeContext);
11
- if (!context) {
12
- throw new Error('useTheme must be used within an AppThemeProvider');
13
- }
14
- return context;
15
- };
16
- exports.useTheme = useTheme;
17
- const AppThemeProvider = ({ children, customTheme }) => {
18
- const [mode, setMode] = (0, react_1.useState)('light');
19
- const colorMode = (0, react_1.useMemo)(() => ({
20
- toggleColorMode: () => {
21
- setMode((prevMode) => (prevMode === 'light' ? 'dark' : 'light'));
22
- },
23
- setColorMode: (newMode) => {
24
- setMode(newMode);
25
- },
26
- mode,
27
- }), [mode]);
28
- const theme = (0, react_1.useMemo)(() => (customTheme ? customTheme(mode) : (0, material_1.createTheme)({ palette: { mode } })), [mode, customTheme]);
29
- return ((0, jsx_runtime_1.jsx)(ThemeContext.Provider, { value: colorMode, children: (0, jsx_runtime_1.jsx)(material_1.ThemeProvider, { theme: theme, children: children }) }));
30
- };
31
- exports.AppThemeProvider = AppThemeProvider;
32
- const ThemeToggleButton = () => {
33
- const { mode, toggleColorMode } = (0, exports.useTheme)();
34
- return ((0, jsx_runtime_1.jsx)(material_1.IconButton, { onClick: toggleColorMode, color: "inherit", children: mode === 'dark' ? (0, jsx_runtime_1.jsx)(icons_material_1.Brightness7, {}) : (0, jsx_runtime_1.jsx)(icons_material_1.Brightness4, {}) }));
35
- };
36
- exports.ThemeToggleButton = ThemeToggleButton;
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./AuthProvider"), exports);
5
- tslib_1.__exportStar(require("./MenuContext"), exports);
6
- tslib_1.__exportStar(require("./I18nProvider"), exports);
7
- tslib_1.__exportStar(require("./ThemeProvider"), exports);
8
- tslib_1.__exportStar(require("./SuiteConfigProvider"), exports);
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./useExpiringValue"), exports);
5
- tslib_1.__exportStar(require("./useLocalStorage"), exports);
6
- tslib_1.__exportStar(require("./useBackupCodes"), exports);
7
- tslib_1.__exportStar(require("./useUserSettings"), exports);
8
- tslib_1.__exportStar(require("./useEmailVerification"), exports);
@@ -1,15 +0,0 @@
1
- export interface UseBackupCodesOptions {
2
- initialCodeCount?: number | null;
3
- }
4
- export interface UseBackupCodesResult {
5
- backupCodesRemaining: number | null;
6
- isLoading: boolean;
7
- error: Error | null;
8
- generateBackupCodes: (password?: string, mnemonic?: string) => Promise<{
9
- message: string;
10
- backupCodes: string[];
11
- }>;
12
- refreshCodeCount: () => Promise<void>;
13
- }
14
- export declare const useBackupCodes: (options?: UseBackupCodesOptions) => UseBackupCodesResult;
15
- //# sourceMappingURL=useBackupCodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBackupCodes.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/hooks/useBackupCodes.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,mBAAmB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QACrE,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,cAAc,GACzB,UAAS,qBAA0B,KAClC,oBA8DF,CAAC"}
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useBackupCodes = 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 useBackupCodes = (options = {}) => {
9
- const { baseUrl } = (0, contexts_1.useSuiteConfig)();
10
- const [backupCodesRemaining, setBackupCodesRemaining] = (0, react_1.useState)(options.initialCodeCount ?? null);
11
- const [isLoading, setIsLoading] = (0, react_1.useState)(false);
12
- const [error, setError] = (0, react_1.useState)(null);
13
- const requestedOnMountRef = (0, react_1.useRef)(false);
14
- const api = (0, react_1.useMemo)(() => (0, services_1.createAuthenticatedApiClient)(baseUrl), [baseUrl]);
15
- const refreshCodeCount = (0, react_1.useCallback)(async () => {
16
- setIsLoading(true);
17
- setError(null);
18
- try {
19
- const result = await api.get('/user/backup-codes');
20
- if (result?.data?.codeCount !== undefined) {
21
- setBackupCodesRemaining(result.data.codeCount);
22
- }
23
- }
24
- catch (err) {
25
- setError(err instanceof Error ? err : new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.BackupCodes_FailedToFetch));
26
- setBackupCodesRemaining(0);
27
- }
28
- finally {
29
- setIsLoading(false);
30
- }
31
- }, [api]);
32
- (0, react_1.useEffect)(() => {
33
- if (requestedOnMountRef.current)
34
- return;
35
- if (backupCodesRemaining !== null)
36
- return;
37
- requestedOnMountRef.current = true;
38
- refreshCodeCount();
39
- }, [backupCodesRemaining, refreshCodeCount]);
40
- const generateBackupCodes = async (password, mnemonic) => {
41
- setIsLoading(true);
42
- setError(null);
43
- try {
44
- const result = await api.post('/user/backup-codes', {
45
- ...(password ? { password } : {}),
46
- ...(mnemonic ? { mnemonic } : {}),
47
- });
48
- return {
49
- message: result.data.message,
50
- backupCodes: result.data.backupCodes,
51
- };
52
- }
53
- catch (err) {
54
- const error = err instanceof Error ? err : new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.BackupCodes_FailedToGenerate);
55
- setError(error);
56
- throw error;
57
- }
58
- finally {
59
- setIsLoading(false);
60
- }
61
- };
62
- return {
63
- backupCodesRemaining,
64
- isLoading,
65
- error,
66
- generateBackupCodes,
67
- refreshCodeCount,
68
- };
69
- };
70
- exports.useBackupCodes = useBackupCodes;
@@ -1,10 +0,0 @@
1
- export interface UseEmailVerificationResult {
2
- isVerifying: boolean;
3
- error: Error | null;
4
- verifyEmail: (token: string) => Promise<{
5
- success: boolean;
6
- message?: string;
7
- }>;
8
- }
9
- export declare const useEmailVerification: () => UseEmailVerificationResult;
10
- //# sourceMappingURL=useEmailVerification.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useEmailVerification.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/hooks/useEmailVerification.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,eAAO,MAAM,oBAAoB,QAAO,0BA2BvC,CAAC"}
@@ -1,36 +0,0 @@
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;
@@ -1,14 +0,0 @@
1
- export interface TimerInfo {
2
- timeout: NodeJS.Timeout;
3
- startTime: number;
4
- durationMs: number;
5
- }
6
- export interface ExpiringValueReturn<T> {
7
- value: T | undefined;
8
- setValue: (newValue: T, durationSeconds?: number, saveToStorage?: boolean) => () => void;
9
- clearValue: () => void;
10
- getRemainingTime: () => number;
11
- isActive: boolean;
12
- }
13
- export declare function useExpiringValue<T>(defaultDurationSeconds: number, localStorageKey?: string): ExpiringValueReturn<T>;
14
- //# sourceMappingURL=useExpiringValue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useExpiringValue.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/hooks/useExpiringValue.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;IACzF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,sBAAsB,EAAE,MAAM,EAC9B,eAAe,CAAC,EAAE,MAAM,GACvB,mBAAmB,CAAC,CAAC,CAAC,CA0DxB"}
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useExpiringValue = useExpiringValue;
4
- const react_1 = require("react");
5
- function useExpiringValue(defaultDurationSeconds, localStorageKey) {
6
- const [value, _setValue] = (0, react_1.useState)(undefined);
7
- const [timer, setTimer] = (0, react_1.useState)(undefined);
8
- const [durationSeconds, _setDurationSeconds] = (0, react_1.useState)(() => {
9
- if (localStorageKey) {
10
- const stored = localStorage.getItem(localStorageKey);
11
- return stored ? parseInt(stored, 10) : defaultDurationSeconds;
12
- }
13
- return defaultDurationSeconds;
14
- });
15
- const getRemainingTime = (0, react_1.useCallback)(() => {
16
- if (!timer)
17
- return 0;
18
- const elapsed = Date.now() - timer.startTime;
19
- const remaining = Math.max(0, timer.durationMs - elapsed);
20
- return Math.ceil(remaining / 1000);
21
- }, [timer]);
22
- const setValue = (0, react_1.useCallback)((newValue, customDurationSeconds, saveToStorage) => {
23
- const finalDurationSeconds = customDurationSeconds ?? durationSeconds;
24
- if (saveToStorage && customDurationSeconds !== undefined && localStorageKey) {
25
- _setDurationSeconds(customDurationSeconds);
26
- localStorage.setItem(localStorageKey, customDurationSeconds.toString());
27
- }
28
- _setValue(newValue);
29
- if (timer) {
30
- clearTimeout(timer.timeout);
31
- }
32
- const startTime = Date.now();
33
- const durationMs = finalDurationSeconds * 1000;
34
- const timeout = setTimeout(() => {
35
- _setValue(undefined);
36
- setTimer(undefined);
37
- }, durationMs);
38
- setTimer({ timeout, startTime, durationMs });
39
- return () => {
40
- clearTimeout(timeout);
41
- setTimer(undefined);
42
- };
43
- }, [durationSeconds, timer, localStorageKey]);
44
- const clearValue = (0, react_1.useCallback)(() => {
45
- if (timer) {
46
- clearTimeout(timer.timeout);
47
- setTimer(undefined);
48
- }
49
- _setValue(undefined);
50
- }, [timer]);
51
- const isActive = Boolean(timer && value !== undefined);
52
- return { value, setValue, clearValue, getRemainingTime, isActive };
53
- }
@@ -1,2 +0,0 @@
1
- export declare function useLocalStorage<T>(key: string, defaultValue: T): [T, (value: T) => void];
2
- //# sourceMappingURL=useLocalStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLocalStorage.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/hooks/useLocalStorage.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAWzB"}