@umituz/react-native-settings 4.23.111 → 4.23.115
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.
- package/package.json +1 -1
- package/src/domains/feedback/presentation/components/FeedbackForm.tsx +1 -15
- package/src/domains/feedback/presentation/components/FeedbackFormProps.ts +26 -0
- package/src/domains/feedback/presentation/components/FeedbackModal.tsx +1 -1
- package/src/domains/gamification/components/AchievementCard.tsx +1 -2
- package/src/domains/gamification/components/AchievementItem.tsx +6 -92
- package/src/domains/gamification/components/GamificationScreen/AchievementsList.tsx +1 -1
- package/src/domains/gamification/components/GamificationScreen/types.ts +1 -1
- package/src/domains/gamification/components/index.ts +2 -1
- package/src/domains/gamification/components/styles/achievementItemStyles.ts +74 -0
- package/src/domains/gamification/components/types/AchievementItemProps.ts +25 -0
- package/src/infrastructure/utils/styleUtils.ts +3 -186
- package/src/infrastructure/utils/styles/componentStyles.ts +90 -0
- package/src/infrastructure/utils/styles/index.ts +9 -0
- package/src/infrastructure/utils/styles/layoutStyles.ts +56 -0
- package/src/infrastructure/utils/styles/spacingStyles.ts +33 -0
- package/src/infrastructure/utils/styles/styleHelpers.ts +22 -0
- package/src/presentation/hooks/useSettingsScreenConfig.ts +3 -3
- package/src/presentation/navigation/utils/navigationTranslations.ts +1 -1
- package/src/presentation/screens/components/SettingsContent.tsx +6 -74
- package/src/presentation/screens/components/types/SettingsContentProps.ts +51 -0
- package/src/presentation/screens/components/utils/featureChecker.ts +32 -0
- package/src/presentation/screens/types/SettingsConfig.ts +1 -136
- package/src/presentation/screens/types/SettingsTranslations.ts +152 -0
- package/src/presentation/screens/types/index.ts +2 -1
- package/src/presentation/utils/accountConfigUtils.ts +27 -10
- package/src/presentation/utils/useAuthHandlers.ts +1 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spacing Style Utilities
|
|
3
|
+
* Margin and padding helpers
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ViewStyle } from 'react-native';
|
|
7
|
+
import type { DesignTokens } from '@umituz/react-native-design-system';
|
|
8
|
+
|
|
9
|
+
type SpacingSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates a margin utility style
|
|
13
|
+
*/
|
|
14
|
+
export const createMarginStyle = (
|
|
15
|
+
spacing: SpacingSize,
|
|
16
|
+
tokens: DesignTokens,
|
|
17
|
+
overrides: ViewStyle = {}
|
|
18
|
+
): ViewStyle => ({
|
|
19
|
+
margin: tokens.spacing[spacing],
|
|
20
|
+
...overrides,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Creates a padding utility style
|
|
25
|
+
*/
|
|
26
|
+
export const createPaddingStyle = (
|
|
27
|
+
spacing: SpacingSize,
|
|
28
|
+
tokens: DesignTokens,
|
|
29
|
+
overrides: ViewStyle = {}
|
|
30
|
+
): ViewStyle => ({
|
|
31
|
+
padding: tokens.spacing[spacing],
|
|
32
|
+
...overrides,
|
|
33
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style Helper Utilities
|
|
3
|
+
* Generic style manipulation functions
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { StyleSheet, ViewStyle, TextStyle, ImageStyle } from 'react-native';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Combines multiple styles into one
|
|
10
|
+
*/
|
|
11
|
+
export const combineStyles = (
|
|
12
|
+
...styles: (ViewStyle | TextStyle | ImageStyle | undefined | false | null)[]
|
|
13
|
+
): ViewStyle | TextStyle | ImageStyle => {
|
|
14
|
+
return StyleSheet.flatten(styles.filter(Boolean));
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Type guard for ViewStyle
|
|
19
|
+
*/
|
|
20
|
+
export const isViewStyle = (style: unknown): style is ViewStyle => {
|
|
21
|
+
return typeof style === 'object' && style !== null;
|
|
22
|
+
};
|
|
@@ -13,11 +13,10 @@ import { createAccountConfig } from "../utils/accountConfigUtils";
|
|
|
13
13
|
import { useAuthHandlers } from "../utils/useAuthHandlers";
|
|
14
14
|
import { translateFAQData } from "../utils/faqTranslator";
|
|
15
15
|
import { useSettingsConfigFactory } from "../utils/settingsConfigFactory";
|
|
16
|
-
import type { SettingsConfig } from "../screens/types";
|
|
16
|
+
import type { SettingsConfig, SettingsTranslations } from "../screens/types";
|
|
17
17
|
import type { FeedbackFormData } from "../utils/config-creators";
|
|
18
18
|
import type { AppInfo, FAQData, UserProfileDisplay, AdditionalScreen } from "../navigation/types";
|
|
19
19
|
import type { AccountScreenConfig } from "@umituz/react-native-auth";
|
|
20
|
-
import type { SettingsTranslations } from "../screens/types/SettingsConfig";
|
|
21
20
|
|
|
22
21
|
export interface SettingsFeatures {
|
|
23
22
|
notifications?: boolean;
|
|
@@ -163,7 +162,8 @@ export const useSettingsScreenConfig = (
|
|
|
163
162
|
onSignIn: handleSignIn,
|
|
164
163
|
onLogout: handleSignOut,
|
|
165
164
|
onDeleteAccount: handleDeleteAccount,
|
|
166
|
-
|
|
165
|
+
translations: translations?.account,
|
|
166
|
+
}), [user, userProfileData, handleSignIn, handleSignOut, handleDeleteAccount, translations]);
|
|
167
167
|
|
|
168
168
|
// Use centralized FAQ translation
|
|
169
169
|
const translatedFaqData = useMemo(() =>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SettingsTranslations } from "../../screens/types
|
|
1
|
+
import type { SettingsTranslations } from "../../screens/types";
|
|
2
2
|
|
|
3
3
|
export const createNotificationTranslations = (translations?: SettingsTranslations["features"]) => ({
|
|
4
4
|
screenTitle: translations?.notifications?.title || "",
|
|
@@ -2,15 +2,15 @@ import React, { useMemo } from "react";
|
|
|
2
2
|
import { View, StyleSheet } from "react-native";
|
|
3
3
|
import { SettingsFooter } from "../../components/SettingsFooter";
|
|
4
4
|
import { SettingsSection } from "../../components/SettingsSection";
|
|
5
|
-
import { DevSettingsSection
|
|
5
|
+
import { DevSettingsSection } from "../../../domains/dev";
|
|
6
6
|
import { DisclaimerSetting } from "../../../domains/disclaimer";
|
|
7
7
|
import { ProfileSectionLoader } from "./sections/ProfileSectionLoader";
|
|
8
8
|
import { FeatureSettingsSection } from "./sections/FeatureSettingsSection";
|
|
9
9
|
import { IdentitySettingsSection } from "./sections/IdentitySettingsSection";
|
|
10
10
|
import { SupportSettingsSection } from "./sections/SupportSettingsSection";
|
|
11
11
|
import { CustomSettingsList } from "./sections/CustomSettingsList";
|
|
12
|
-
import
|
|
13
|
-
import type {
|
|
12
|
+
import { hasAnyFeaturesEnabled } from "./utils/featureChecker";
|
|
13
|
+
import type { SettingsContentProps } from "./types/SettingsContentProps";
|
|
14
14
|
|
|
15
15
|
// Extracted Item Components
|
|
16
16
|
import { SubscriptionSettingsItem } from "./SubscriptionSettingsItem";
|
|
@@ -18,44 +18,6 @@ import { WalletSettingsItem } from "./WalletSettingsItem";
|
|
|
18
18
|
import { GamificationSettingsItem } from "./GamificationSettingsItem";
|
|
19
19
|
import { VideoTutorialSettingsItem } from "./VideoTutorialSettingsItem";
|
|
20
20
|
|
|
21
|
-
interface SettingsContentProps {
|
|
22
|
-
normalizedConfig: NormalizedConfig;
|
|
23
|
-
features: {
|
|
24
|
-
appearance: boolean;
|
|
25
|
-
language: boolean;
|
|
26
|
-
notifications: boolean;
|
|
27
|
-
about: boolean;
|
|
28
|
-
legal: boolean;
|
|
29
|
-
disclaimer: boolean;
|
|
30
|
-
userProfile: boolean;
|
|
31
|
-
feedback: boolean;
|
|
32
|
-
rating: boolean;
|
|
33
|
-
faqs: boolean;
|
|
34
|
-
subscription: boolean;
|
|
35
|
-
wallet: boolean;
|
|
36
|
-
gamification: boolean;
|
|
37
|
-
videoTutorial: boolean;
|
|
38
|
-
};
|
|
39
|
-
showUserProfile?: boolean;
|
|
40
|
-
userProfile?: {
|
|
41
|
-
displayName?: string;
|
|
42
|
-
userId?: string;
|
|
43
|
-
isAnonymous?: boolean;
|
|
44
|
-
avatarUrl?: string;
|
|
45
|
-
accountSettingsRoute?: string;
|
|
46
|
-
onPress?: () => void;
|
|
47
|
-
anonymousDisplayName?: string;
|
|
48
|
-
avatarServiceUrl?: string;
|
|
49
|
-
};
|
|
50
|
-
showFooter?: boolean;
|
|
51
|
-
footerText?: string;
|
|
52
|
-
appVersion?: string;
|
|
53
|
-
customSections?: CustomSettingsSection[];
|
|
54
|
-
emptyStateText?: string;
|
|
55
|
-
devSettings?: DevSettingsProps;
|
|
56
|
-
gamificationConfig?: import("../../../domains/gamification").GamificationSettingsConfig;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
21
|
export const SettingsContent: React.FC<SettingsContentProps> = ({
|
|
60
22
|
normalizedConfig,
|
|
61
23
|
features,
|
|
@@ -70,39 +32,9 @@ export const SettingsContent: React.FC<SettingsContentProps> = ({
|
|
|
70
32
|
gamificationConfig,
|
|
71
33
|
}) => {
|
|
72
34
|
const translations = normalizedConfig.translations;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
features.appearance ||
|
|
77
|
-
features.language ||
|
|
78
|
-
features.notifications ||
|
|
79
|
-
features.about ||
|
|
80
|
-
features.legal ||
|
|
81
|
-
features.disclaimer ||
|
|
82
|
-
features.feedback ||
|
|
83
|
-
features.rating ||
|
|
84
|
-
features.faqs ||
|
|
85
|
-
features.subscription ||
|
|
86
|
-
features.wallet ||
|
|
87
|
-
features.gamification ||
|
|
88
|
-
features.videoTutorial ||
|
|
89
|
-
customSections.length > 0,
|
|
90
|
-
[
|
|
91
|
-
features.appearance,
|
|
92
|
-
features.language,
|
|
93
|
-
features.notifications,
|
|
94
|
-
features.about,
|
|
95
|
-
features.legal,
|
|
96
|
-
features.disclaimer,
|
|
97
|
-
features.feedback,
|
|
98
|
-
features.rating,
|
|
99
|
-
features.faqs,
|
|
100
|
-
features.subscription,
|
|
101
|
-
features.wallet,
|
|
102
|
-
features.gamification,
|
|
103
|
-
features.videoTutorial,
|
|
104
|
-
customSections.length,
|
|
105
|
-
]
|
|
35
|
+
const hasAnyFeatures = useMemo(
|
|
36
|
+
() => hasAnyFeaturesEnabled(features, customSections),
|
|
37
|
+
[features, customSections]
|
|
106
38
|
);
|
|
107
39
|
|
|
108
40
|
return (
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings Content Component Props
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { NormalizedConfig } from "../../utils/normalizeConfig";
|
|
6
|
+
import type { CustomSettingsSection } from "../../types";
|
|
7
|
+
import type { DevSettingsProps } from "../../../../domains/dev";
|
|
8
|
+
import type { GamificationSettingsConfig } from "../../../../domains/gamification";
|
|
9
|
+
|
|
10
|
+
export interface SettingsContentFeatures {
|
|
11
|
+
[key: string]: boolean;
|
|
12
|
+
appearance: boolean;
|
|
13
|
+
language: boolean;
|
|
14
|
+
notifications: boolean;
|
|
15
|
+
about: boolean;
|
|
16
|
+
legal: boolean;
|
|
17
|
+
disclaimer: boolean;
|
|
18
|
+
userProfile: boolean;
|
|
19
|
+
feedback: boolean;
|
|
20
|
+
rating: boolean;
|
|
21
|
+
faqs: boolean;
|
|
22
|
+
subscription: boolean;
|
|
23
|
+
wallet: boolean;
|
|
24
|
+
gamification: boolean;
|
|
25
|
+
videoTutorial: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface SettingsContentUserProfile {
|
|
29
|
+
displayName?: string;
|
|
30
|
+
userId?: string;
|
|
31
|
+
isAnonymous?: boolean;
|
|
32
|
+
avatarUrl?: string;
|
|
33
|
+
accountSettingsRoute?: string;
|
|
34
|
+
onPress?: () => void;
|
|
35
|
+
anonymousDisplayName?: string;
|
|
36
|
+
avatarServiceUrl?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface SettingsContentProps {
|
|
40
|
+
normalizedConfig: NormalizedConfig;
|
|
41
|
+
features: SettingsContentFeatures;
|
|
42
|
+
showUserProfile?: boolean;
|
|
43
|
+
userProfile?: SettingsContentUserProfile;
|
|
44
|
+
showFooter?: boolean;
|
|
45
|
+
footerText?: string;
|
|
46
|
+
appVersion?: string;
|
|
47
|
+
customSections?: CustomSettingsSection[];
|
|
48
|
+
emptyStateText?: string;
|
|
49
|
+
devSettings?: DevSettingsProps;
|
|
50
|
+
gamificationConfig?: GamificationSettingsConfig;
|
|
51
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Checker Utilities
|
|
3
|
+
* Centralized logic for checking if features are enabled
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { SettingsContentFeatures } from "../types/SettingsContentProps";
|
|
7
|
+
import type { CustomSettingsSection } from "../../types";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Check if any settings features are enabled
|
|
11
|
+
*/
|
|
12
|
+
export function hasAnyFeaturesEnabled(
|
|
13
|
+
features: SettingsContentFeatures,
|
|
14
|
+
customSections: CustomSettingsSection[]
|
|
15
|
+
): boolean {
|
|
16
|
+
return (
|
|
17
|
+
features.appearance ||
|
|
18
|
+
features.language ||
|
|
19
|
+
features.notifications ||
|
|
20
|
+
features.about ||
|
|
21
|
+
features.legal ||
|
|
22
|
+
features.disclaimer ||
|
|
23
|
+
features.feedback ||
|
|
24
|
+
features.rating ||
|
|
25
|
+
features.faqs ||
|
|
26
|
+
features.subscription ||
|
|
27
|
+
features.wallet ||
|
|
28
|
+
features.gamification ||
|
|
29
|
+
features.videoTutorial ||
|
|
30
|
+
customSections.length > 0
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
GamificationItemConfig,
|
|
24
24
|
VideoTutorialConfig,
|
|
25
25
|
} from "./UserFeatureConfig";
|
|
26
|
+
import type { SettingsTranslations } from "./SettingsTranslations";
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Main Settings Configuration
|
|
@@ -55,142 +56,6 @@ import type {
|
|
|
55
56
|
* },
|
|
56
57
|
* };
|
|
57
58
|
*/
|
|
58
|
-
/**
|
|
59
|
-
* Global Settings Translations
|
|
60
|
-
*/
|
|
61
|
-
export interface SettingsTranslations {
|
|
62
|
-
title?: string;
|
|
63
|
-
profile?: {
|
|
64
|
-
guest?: string;
|
|
65
|
-
anonymousName?: string;
|
|
66
|
-
signIn?: string;
|
|
67
|
-
signInDescription?: string;
|
|
68
|
-
anonymousBenefits?: {
|
|
69
|
-
title?: string;
|
|
70
|
-
items?: string[];
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
sections?: {
|
|
74
|
-
app?: string;
|
|
75
|
-
progress?: string;
|
|
76
|
-
about?: string;
|
|
77
|
-
support?: string;
|
|
78
|
-
subscription?: string;
|
|
79
|
-
};
|
|
80
|
-
features?: {
|
|
81
|
-
appearance?: {
|
|
82
|
-
title?: string;
|
|
83
|
-
description?: string;
|
|
84
|
-
themeModes?: {
|
|
85
|
-
light?: string;
|
|
86
|
-
dark?: string;
|
|
87
|
-
auto?: string;
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
language?: {
|
|
91
|
-
title?: string;
|
|
92
|
-
description?: string;
|
|
93
|
-
searchPlaceholder?: string;
|
|
94
|
-
};
|
|
95
|
-
notifications?: {
|
|
96
|
-
title?: string;
|
|
97
|
-
description?: string;
|
|
98
|
-
masterToggleTitle?: string;
|
|
99
|
-
masterToggleDescription?: string;
|
|
100
|
-
soundTitle?: string;
|
|
101
|
-
soundDescription?: string;
|
|
102
|
-
vibrationTitle?: string;
|
|
103
|
-
vibrationDescription?: string;
|
|
104
|
-
remindersTitle?: string;
|
|
105
|
-
remindersDescription?: string;
|
|
106
|
-
quietHoursTitle?: string;
|
|
107
|
-
quietHoursDescription?: string;
|
|
108
|
-
quietHours?: {
|
|
109
|
-
title?: string;
|
|
110
|
-
description?: string;
|
|
111
|
-
startTimeLabel?: string;
|
|
112
|
-
endTimeLabel?: string;
|
|
113
|
-
enabledLabel?: string;
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
about?: {
|
|
117
|
-
title?: string;
|
|
118
|
-
description?: string;
|
|
119
|
-
contact?: string;
|
|
120
|
-
more?: string;
|
|
121
|
-
developer?: string;
|
|
122
|
-
email?: string;
|
|
123
|
-
website?: string;
|
|
124
|
-
moreApps?: string;
|
|
125
|
-
versionPrefix?: string;
|
|
126
|
-
};
|
|
127
|
-
legal?: {
|
|
128
|
-
title?: string;
|
|
129
|
-
description?: string;
|
|
130
|
-
documentsHeader?: string;
|
|
131
|
-
privacyTitle?: string;
|
|
132
|
-
privacyDescription?: string;
|
|
133
|
-
termsTitle?: string;
|
|
134
|
-
termsDescription?: string;
|
|
135
|
-
eulaTitle?: string;
|
|
136
|
-
eulaDescription?: string;
|
|
137
|
-
};
|
|
138
|
-
feedback?: { title?: string; description?: string };
|
|
139
|
-
rating?: { title?: string; description?: string };
|
|
140
|
-
faqs?: {
|
|
141
|
-
title?: string;
|
|
142
|
-
description?: string;
|
|
143
|
-
searchPlaceholder?: string;
|
|
144
|
-
emptySearchTitle?: string;
|
|
145
|
-
emptySearchMessage?: string;
|
|
146
|
-
headerTitle?: string;
|
|
147
|
-
};
|
|
148
|
-
languageSelection?: {
|
|
149
|
-
searchPlaceholder?: string;
|
|
150
|
-
};
|
|
151
|
-
subscription?: {
|
|
152
|
-
title?: string;
|
|
153
|
-
description?: string;
|
|
154
|
-
};
|
|
155
|
-
videoTutorial?: {
|
|
156
|
-
title?: string;
|
|
157
|
-
description?: string;
|
|
158
|
-
};
|
|
159
|
-
gamification?: {
|
|
160
|
-
title?: string;
|
|
161
|
-
description?: string;
|
|
162
|
-
};
|
|
163
|
-
};
|
|
164
|
-
feedbackModal?: {
|
|
165
|
-
title?: string;
|
|
166
|
-
ratingLabel?: string;
|
|
167
|
-
descriptionPlaceholder?: string;
|
|
168
|
-
submitButton?: string;
|
|
169
|
-
submittingButton?: string;
|
|
170
|
-
types?: {
|
|
171
|
-
general?: string;
|
|
172
|
-
bugReport?: string;
|
|
173
|
-
featureRequest?: string;
|
|
174
|
-
improvement?: string;
|
|
175
|
-
other?: string;
|
|
176
|
-
};
|
|
177
|
-
};
|
|
178
|
-
noOptionsAvailable?: string;
|
|
179
|
-
footer?: {
|
|
180
|
-
version?: string;
|
|
181
|
-
};
|
|
182
|
-
errors?: {
|
|
183
|
-
common?: string;
|
|
184
|
-
unknown?: string;
|
|
185
|
-
unknownError?: string;
|
|
186
|
-
appStoreUrlMissing?: string;
|
|
187
|
-
appStoreUrlNotConfigured?: string;
|
|
188
|
-
unableToOpenAppStore?: string;
|
|
189
|
-
failedToOpenAppStore?: string;
|
|
190
|
-
deleteAccountError?: string;
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
|
|
194
59
|
export interface SettingsConfig {
|
|
195
60
|
/**
|
|
196
61
|
* Application-wide translations
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings Translations Type
|
|
3
|
+
* Defines all translation keys for the settings package
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Global Settings Translations
|
|
8
|
+
*/
|
|
9
|
+
export interface SettingsTranslations {
|
|
10
|
+
title?: string;
|
|
11
|
+
profile?: {
|
|
12
|
+
guest?: string;
|
|
13
|
+
anonymousName?: string;
|
|
14
|
+
signIn?: string;
|
|
15
|
+
signInDescription?: string;
|
|
16
|
+
anonymousBenefits?: {
|
|
17
|
+
title?: string;
|
|
18
|
+
items?: string[];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
account?: {
|
|
22
|
+
editProfile?: string;
|
|
23
|
+
logout?: string;
|
|
24
|
+
deleteAccount?: string;
|
|
25
|
+
logoutConfirmTitle?: string;
|
|
26
|
+
logoutConfirmMessage?: string;
|
|
27
|
+
deleteConfirmTitle?: string;
|
|
28
|
+
deleteConfirmMessage?: string;
|
|
29
|
+
deleteErrorTitle?: string;
|
|
30
|
+
deleteErrorMessage?: string;
|
|
31
|
+
cancel?: string;
|
|
32
|
+
};
|
|
33
|
+
sections?: {
|
|
34
|
+
app?: string;
|
|
35
|
+
progress?: string;
|
|
36
|
+
about?: string;
|
|
37
|
+
support?: string;
|
|
38
|
+
subscription?: string;
|
|
39
|
+
};
|
|
40
|
+
features?: {
|
|
41
|
+
appearance?: {
|
|
42
|
+
title?: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
themeModes?: {
|
|
45
|
+
light?: string;
|
|
46
|
+
dark?: string;
|
|
47
|
+
auto?: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
language?: {
|
|
51
|
+
title?: string;
|
|
52
|
+
description?: string;
|
|
53
|
+
searchPlaceholder?: string;
|
|
54
|
+
};
|
|
55
|
+
notifications?: {
|
|
56
|
+
title?: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
masterToggleTitle?: string;
|
|
59
|
+
masterToggleDescription?: string;
|
|
60
|
+
soundTitle?: string;
|
|
61
|
+
soundDescription?: string;
|
|
62
|
+
vibrationTitle?: string;
|
|
63
|
+
vibrationDescription?: string;
|
|
64
|
+
remindersTitle?: string;
|
|
65
|
+
remindersDescription?: string;
|
|
66
|
+
quietHoursTitle?: string;
|
|
67
|
+
quietHoursDescription?: string;
|
|
68
|
+
quietHours?: {
|
|
69
|
+
title?: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
startTimeLabel?: string;
|
|
72
|
+
endTimeLabel?: string;
|
|
73
|
+
enabledLabel?: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
about?: {
|
|
77
|
+
title?: string;
|
|
78
|
+
description?: string;
|
|
79
|
+
contact?: string;
|
|
80
|
+
more?: string;
|
|
81
|
+
developer?: string;
|
|
82
|
+
email?: string;
|
|
83
|
+
website?: string;
|
|
84
|
+
moreApps?: string;
|
|
85
|
+
versionPrefix?: string;
|
|
86
|
+
};
|
|
87
|
+
legal?: {
|
|
88
|
+
title?: string;
|
|
89
|
+
description?: string;
|
|
90
|
+
documentsHeader?: string;
|
|
91
|
+
privacyTitle?: string;
|
|
92
|
+
privacyDescription?: string;
|
|
93
|
+
termsTitle?: string;
|
|
94
|
+
termsDescription?: string;
|
|
95
|
+
eulaTitle?: string;
|
|
96
|
+
eulaDescription?: string;
|
|
97
|
+
};
|
|
98
|
+
feedback?: { title?: string; description?: string };
|
|
99
|
+
rating?: { title?: string; description?: string };
|
|
100
|
+
faqs?: {
|
|
101
|
+
title?: string;
|
|
102
|
+
description?: string;
|
|
103
|
+
searchPlaceholder?: string;
|
|
104
|
+
emptySearchTitle?: string;
|
|
105
|
+
emptySearchMessage?: string;
|
|
106
|
+
headerTitle?: string;
|
|
107
|
+
};
|
|
108
|
+
languageSelection?: {
|
|
109
|
+
searchPlaceholder?: string;
|
|
110
|
+
};
|
|
111
|
+
subscription?: {
|
|
112
|
+
title?: string;
|
|
113
|
+
description?: string;
|
|
114
|
+
};
|
|
115
|
+
videoTutorial?: {
|
|
116
|
+
title?: string;
|
|
117
|
+
description?: string;
|
|
118
|
+
};
|
|
119
|
+
gamification?: {
|
|
120
|
+
title?: string;
|
|
121
|
+
description?: string;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
feedbackModal?: {
|
|
125
|
+
title?: string;
|
|
126
|
+
ratingLabel?: string;
|
|
127
|
+
descriptionPlaceholder?: string;
|
|
128
|
+
submitButton?: string;
|
|
129
|
+
submittingButton?: string;
|
|
130
|
+
types?: {
|
|
131
|
+
general?: string;
|
|
132
|
+
bugReport?: string;
|
|
133
|
+
featureRequest?: string;
|
|
134
|
+
improvement?: string;
|
|
135
|
+
other?: string;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
noOptionsAvailable?: string;
|
|
139
|
+
footer?: {
|
|
140
|
+
version?: string;
|
|
141
|
+
};
|
|
142
|
+
errors?: {
|
|
143
|
+
common?: string;
|
|
144
|
+
unknown?: string;
|
|
145
|
+
unknownError?: string;
|
|
146
|
+
appStoreUrlMissing?: string;
|
|
147
|
+
appStoreUrlNotConfigured?: string;
|
|
148
|
+
unableToOpenAppStore?: string;
|
|
149
|
+
failedToOpenAppStore?: string;
|
|
150
|
+
deleteAccountError?: string;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
@@ -24,5 +24,6 @@ export type {
|
|
|
24
24
|
VideoTutorialConfig,
|
|
25
25
|
} from "./UserFeatureConfig";
|
|
26
26
|
export type { GamificationSettingsConfig as GamificationConfig } from "../../../domains/gamification";
|
|
27
|
-
export type { SettingsConfig
|
|
27
|
+
export type { SettingsConfig } from "./SettingsConfig";
|
|
28
|
+
export type { SettingsTranslations } from "./SettingsTranslations";
|
|
28
29
|
export type { CustomSettingsSection } from "./CustomSection";
|
|
@@ -6,6 +6,19 @@
|
|
|
6
6
|
|
|
7
7
|
import type { AccountScreenConfig } from "@umituz/react-native-auth";
|
|
8
8
|
|
|
9
|
+
export interface AccountTranslations {
|
|
10
|
+
editProfile?: string;
|
|
11
|
+
logout: string;
|
|
12
|
+
deleteAccount: string;
|
|
13
|
+
logoutConfirmTitle: string;
|
|
14
|
+
logoutConfirmMessage: string;
|
|
15
|
+
deleteConfirmTitle: string;
|
|
16
|
+
deleteConfirmMessage: string;
|
|
17
|
+
deleteErrorTitle?: string;
|
|
18
|
+
deleteErrorMessage?: string;
|
|
19
|
+
cancel: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
9
22
|
export interface CreateAccountConfigParams {
|
|
10
23
|
displayName?: string;
|
|
11
24
|
userId?: string;
|
|
@@ -15,6 +28,7 @@ export interface CreateAccountConfigParams {
|
|
|
15
28
|
onSignIn: () => void;
|
|
16
29
|
onLogout: () => Promise<void>;
|
|
17
30
|
onDeleteAccount: () => Promise<void>;
|
|
31
|
+
translations?: AccountTranslations;
|
|
18
32
|
}
|
|
19
33
|
|
|
20
34
|
/**
|
|
@@ -30,6 +44,7 @@ export function createAccountConfig(params: CreateAccountConfigParams): AccountS
|
|
|
30
44
|
onSignIn,
|
|
31
45
|
onLogout,
|
|
32
46
|
onDeleteAccount,
|
|
47
|
+
translations,
|
|
33
48
|
} = params;
|
|
34
49
|
|
|
35
50
|
const anonymous = isAnonymous ?? true;
|
|
@@ -42,18 +57,20 @@ export function createAccountConfig(params: CreateAccountConfigParams): AccountS
|
|
|
42
57
|
avatarUrl: avatarUrl ?? photoURL ?? undefined,
|
|
43
58
|
},
|
|
44
59
|
isAnonymous: anonymous,
|
|
45
|
-
editProfileText: "",
|
|
60
|
+
editProfileText: translations?.editProfile || "",
|
|
46
61
|
onSignIn,
|
|
47
|
-
accountActions: {
|
|
62
|
+
accountActions: translations ? {
|
|
48
63
|
onLogout,
|
|
49
64
|
onDeleteAccount,
|
|
50
|
-
logoutText:
|
|
51
|
-
logoutConfirmTitle:
|
|
52
|
-
logoutConfirmMessage:
|
|
53
|
-
cancelText:
|
|
54
|
-
deleteAccountText:
|
|
55
|
-
deleteConfirmTitle:
|
|
56
|
-
deleteConfirmMessage:
|
|
57
|
-
|
|
65
|
+
logoutText: translations.logout,
|
|
66
|
+
logoutConfirmTitle: translations.logoutConfirmTitle,
|
|
67
|
+
logoutConfirmMessage: translations.logoutConfirmMessage,
|
|
68
|
+
cancelText: translations.cancel,
|
|
69
|
+
deleteAccountText: translations.deleteAccount,
|
|
70
|
+
deleteConfirmTitle: translations.deleteConfirmTitle,
|
|
71
|
+
deleteConfirmMessage: translations.deleteConfirmMessage,
|
|
72
|
+
deleteErrorTitle: translations.deleteErrorTitle,
|
|
73
|
+
deleteErrorMessage: translations.deleteErrorMessage,
|
|
74
|
+
} : undefined,
|
|
58
75
|
};
|
|
59
76
|
}
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "@umituz/react-native-auth";
|
|
14
14
|
import { AlertService } from "@umituz/react-native-design-system";
|
|
15
15
|
import type { AppInfo } from "../navigation/types";
|
|
16
|
-
import type { SettingsTranslations } from "../screens/types
|
|
16
|
+
import type { SettingsTranslations } from "../screens/types";
|
|
17
17
|
|
|
18
18
|
declare const __DEV__: boolean;
|
|
19
19
|
|