@digitaldefiance/express-suite-react-components 2.1.36 → 2.1.37

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 (47) hide show
  1. package/README.md +4 -0
  2. package/package.json +1 -1
  3. package/src/auth/Private.js +11 -0
  4. package/src/auth/PrivateRoute.js +16 -0
  5. package/src/auth/UnAuthRoute.js +16 -0
  6. package/src/auth/index.js +6 -0
  7. package/src/components/ApiAccess.js +67 -0
  8. package/src/components/BackupCodeLoginForm.js +101 -0
  9. package/src/components/BackupCodesForm.js +107 -0
  10. package/src/components/ChangePasswordForm.js +65 -0
  11. package/src/components/ConfirmationDialog.js +9 -0
  12. package/src/components/CurrencyCodeSelector.js +30 -0
  13. package/src/components/CurrencyInput.js +28 -0
  14. package/src/components/DashboardPage.js +9 -0
  15. package/src/components/DropdownMenu.js +43 -0
  16. package/src/components/ExpirationSecondsSelector.js +31 -0
  17. package/src/components/Flag.js +29 -0
  18. package/src/components/ForgotPasswordForm.js +53 -0
  19. package/src/components/LoginForm.js +81 -0
  20. package/src/components/LogoutPage.js +15 -0
  21. package/src/components/RegisterForm.js +103 -0
  22. package/src/components/ResetPasswordForm.js +67 -0
  23. package/src/components/SideMenu.js +10 -0
  24. package/src/components/SideMenuListItem.js +38 -0
  25. package/src/components/TopMenu.js +14 -0
  26. package/src/components/TranslatedTitle.js +11 -0
  27. package/src/components/UserLanguageSelector.js +22 -0
  28. package/src/components/VerifyEmailPage.js +60 -0
  29. package/src/components/index.js +26 -0
  30. package/src/contexts/I18nProvider.js +46 -0
  31. package/src/contexts/ThemeProvider.js +33 -0
  32. package/src/contexts/index.js +5 -0
  33. package/src/enumerations/IncludeOnMenu.js +9 -0
  34. package/src/enumerations/index.js +4 -0
  35. package/src/hooks/index.js +5 -0
  36. package/src/hooks/useExpiringValue.js +53 -0
  37. package/src/hooks/useLocalStorage.js +15 -0
  38. package/src/index.js +12 -0
  39. package/src/interfaces/AppConfig.js +2 -0
  40. package/src/interfaces/IMenuOption.js +2 -0
  41. package/src/interfaces/index.js +5 -0
  42. package/src/services/api.js +14 -0
  43. package/src/services/authenticatedApi.js +18 -0
  44. package/src/services/index.js +5 -0
  45. package/src/types/expirationSeconds.js +17 -0
  46. package/src/types/index.js +5 -0
  47. package/src/types/translation.js +9 -0
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IncludeOnMenu = void 0;
4
+ var IncludeOnMenu;
5
+ (function (IncludeOnMenu) {
6
+ IncludeOnMenu[IncludeOnMenu["SideMenu"] = 0] = "SideMenu";
7
+ IncludeOnMenu[IncludeOnMenu["TopMenu"] = 1] = "TopMenu";
8
+ IncludeOnMenu[IncludeOnMenu["UserMenu"] = 2] = "UserMenu";
9
+ })(IncludeOnMenu || (exports.IncludeOnMenu = IncludeOnMenu = {}));
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./IncludeOnMenu"), exports);
@@ -0,0 +1,5 @@
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);
@@ -0,0 +1,53 @@
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
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLocalStorage = useLocalStorage;
4
+ const react_1 = require("react");
5
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
6
+ function useLocalStorage(key, defaultValue) {
7
+ const [storedValue, setStoredValue] = (0, react_1.useState)(() => {
8
+ return suite_core_lib_1.LocalStorageManager.getValue(key, defaultValue);
9
+ });
10
+ const setValue = (0, react_1.useCallback)((value) => {
11
+ setStoredValue(value);
12
+ suite_core_lib_1.LocalStorageManager.setValue(key, value);
13
+ }, [key]);
14
+ return [storedValue, setValue];
15
+ }
package/src/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ // Export all components
5
+ tslib_1.__exportStar(require("./auth"), exports);
6
+ tslib_1.__exportStar(require("./components"), exports);
7
+ tslib_1.__exportStar(require("./contexts"), exports);
8
+ tslib_1.__exportStar(require("./enumerations"), exports);
9
+ tslib_1.__exportStar(require("./hooks"), exports);
10
+ tslib_1.__exportStar(require("./interfaces"), exports);
11
+ tslib_1.__exportStar(require("./services"), exports);
12
+ tslib_1.__exportStar(require("./types"), exports);
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./AppConfig"), exports);
5
+ tslib_1.__exportStar(require("./IMenuOption"), exports);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createApiClient = createApiClient;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ function createApiClient(baseURL) {
7
+ const api = axios_1.default.create({ baseURL });
8
+ api.interceptors.request.use((config) => {
9
+ const languageCode = localStorage.getItem('languageCode') ?? 'en-US';
10
+ config.headers['Accept-Language'] = languageCode;
11
+ return config;
12
+ });
13
+ return api;
14
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthenticatedApiClient = createAuthenticatedApiClient;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ function createAuthenticatedApiClient(baseURL, tokenKey = 'authToken') {
7
+ const api = axios_1.default.create({ baseURL });
8
+ api.interceptors.request.use((config) => {
9
+ const token = localStorage.getItem(tokenKey);
10
+ if (token) {
11
+ config.headers['Authorization'] = `Bearer ${token}`;
12
+ }
13
+ const languageCode = localStorage.getItem('languageCode') ?? 'en-US';
14
+ config.headers['Accept-Language'] = languageCode;
15
+ return config;
16
+ });
17
+ return api;
18
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./api"), exports);
5
+ tslib_1.__exportStar(require("./authenticatedApi"), exports);
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpirationSecondsOptionValues = void 0;
4
+ exports.createExpirationSecondsOptionNames = createExpirationSecondsOptionNames;
5
+ exports.ExpirationSecondsOptionValues = [0, 10, 30, 45, 60, 120, 300, 600];
6
+ function createExpirationSecondsOptionNames(secondsLabel, minuteLabel, minutesLabel) {
7
+ return [
8
+ `0 ${secondsLabel}`,
9
+ `10 ${secondsLabel}`,
10
+ `30 ${secondsLabel}`,
11
+ `45 ${secondsLabel}`,
12
+ `1 ${minuteLabel}`,
13
+ `2 ${minutesLabel}`,
14
+ `5 ${minutesLabel}`,
15
+ `10 ${minutesLabel}`,
16
+ ];
17
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./expirationSeconds"), exports);
5
+ tslib_1.__exportStar(require("./translation"), exports);
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTranslatedText = getTranslatedText;
4
+ /**
5
+ * Helper to get translated text or fallback to provided string
6
+ */
7
+ function getTranslatedText(t, key, fallback, variables) {
8
+ return t ? t(key, variables) : fallback;
9
+ }