@umituz/react-native-settings 4.5.0 → 4.6.0
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
CHANGED
|
@@ -16,35 +16,35 @@ export interface UserProfileHeaderProps {
|
|
|
16
16
|
displayName?: string;
|
|
17
17
|
/** User ID */
|
|
18
18
|
userId?: string;
|
|
19
|
-
/** Whether user is
|
|
20
|
-
|
|
19
|
+
/** Whether user is anonymous (device-based ID) */
|
|
20
|
+
isAnonymous?: boolean;
|
|
21
21
|
/** Avatar URL (optional) */
|
|
22
22
|
avatarUrl?: string;
|
|
23
23
|
/** Navigation route for account settings */
|
|
24
24
|
accountSettingsRoute?: string;
|
|
25
25
|
/** Custom onPress handler */
|
|
26
26
|
onPress?: () => void;
|
|
27
|
-
/** Custom
|
|
28
|
-
|
|
27
|
+
/** Custom anonymous user display name */
|
|
28
|
+
anonymousDisplayName?: string;
|
|
29
29
|
/** Custom avatar service URL */
|
|
30
30
|
avatarServiceUrl?: string;
|
|
31
31
|
/** Default user display name when no displayName provided */
|
|
32
32
|
defaultUserDisplayName?: string;
|
|
33
|
-
/** Default
|
|
34
|
-
|
|
33
|
+
/** Default anonymous display name */
|
|
34
|
+
defaultAnonymousDisplayName?: string;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export const UserProfileHeader: React.FC<UserProfileHeaderProps> = ({
|
|
38
38
|
displayName,
|
|
39
39
|
userId,
|
|
40
|
-
|
|
40
|
+
isAnonymous = false,
|
|
41
41
|
avatarUrl,
|
|
42
42
|
accountSettingsRoute,
|
|
43
43
|
onPress,
|
|
44
|
-
|
|
44
|
+
anonymousDisplayName,
|
|
45
45
|
avatarServiceUrl,
|
|
46
46
|
defaultUserDisplayName,
|
|
47
|
-
|
|
47
|
+
defaultAnonymousDisplayName,
|
|
48
48
|
}) => {
|
|
49
49
|
const tokens = useAppDesignTokens();
|
|
50
50
|
const navigation = useNavigation();
|
|
@@ -52,8 +52,8 @@ export const UserProfileHeader: React.FC<UserProfileHeaderProps> = ({
|
|
|
52
52
|
const spacing = tokens.spacing;
|
|
53
53
|
const [imageError, setImageError] = useState(false);
|
|
54
54
|
|
|
55
|
-
const finalDisplayName = displayName || (
|
|
56
|
-
const avatarName =
|
|
55
|
+
const finalDisplayName = displayName || (isAnonymous ? anonymousDisplayName || defaultAnonymousDisplayName || "Anonymous" : defaultUserDisplayName || "User");
|
|
56
|
+
const avatarName = isAnonymous ? anonymousDisplayName || defaultAnonymousDisplayName || "Anonymous" : finalDisplayName;
|
|
57
57
|
|
|
58
58
|
const defaultAvatarService = avatarServiceUrl || "https://ui-avatars.com/api";
|
|
59
59
|
const finalAvatarUrl =
|
|
@@ -30,6 +30,25 @@ export interface SettingsStackNavigatorProps {
|
|
|
30
30
|
*/
|
|
31
31
|
appVersion?: string;
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Show user profile header
|
|
35
|
+
*/
|
|
36
|
+
showUserProfile?: boolean;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* User profile props for anonymous/authenticated users
|
|
40
|
+
*/
|
|
41
|
+
userProfile?: {
|
|
42
|
+
displayName?: string;
|
|
43
|
+
userId?: string;
|
|
44
|
+
isAnonymous?: boolean;
|
|
45
|
+
avatarUrl?: string;
|
|
46
|
+
accountSettingsRoute?: string;
|
|
47
|
+
onPress?: () => void;
|
|
48
|
+
anonymousDisplayName?: string;
|
|
49
|
+
avatarServiceUrl?: string;
|
|
50
|
+
};
|
|
51
|
+
|
|
33
52
|
/**
|
|
34
53
|
* Additional screens to register
|
|
35
54
|
* Apps can add their own screens here
|
|
@@ -46,6 +65,8 @@ const Stack = createStackNavigator<SettingsStackParamList>();
|
|
|
46
65
|
export const SettingsStackNavigator: React.FC<SettingsStackNavigatorProps> = ({
|
|
47
66
|
config = {},
|
|
48
67
|
appVersion,
|
|
68
|
+
showUserProfile = false,
|
|
69
|
+
userProfile,
|
|
49
70
|
additionalScreens = [],
|
|
50
71
|
}) => {
|
|
51
72
|
const tokens = useAppDesignTokens();
|
|
@@ -66,10 +87,17 @@ export const SettingsStackNavigator: React.FC<SettingsStackNavigatorProps> = ({
|
|
|
66
87
|
|
|
67
88
|
// Memoize SettingsScreen wrapper to prevent remounting on every render
|
|
68
89
|
const SettingsScreenWrapper = React.useMemo(() => {
|
|
69
|
-
const Wrapper = () =>
|
|
90
|
+
const Wrapper = () => (
|
|
91
|
+
<SettingsScreen
|
|
92
|
+
config={config}
|
|
93
|
+
appVersion={appVersion}
|
|
94
|
+
showUserProfile={showUserProfile}
|
|
95
|
+
userProfile={userProfile}
|
|
96
|
+
/>
|
|
97
|
+
);
|
|
70
98
|
Wrapper.displayName = "SettingsScreenWrapper";
|
|
71
99
|
return Wrapper;
|
|
72
|
-
}, [config, appVersion]);
|
|
100
|
+
}, [config, appVersion, showUserProfile, userProfile]);
|
|
73
101
|
|
|
74
102
|
return (
|
|
75
103
|
<Stack.Navigator screenOptions={screenOptions}>
|
|
@@ -25,11 +25,11 @@ export interface SettingsScreenProps {
|
|
|
25
25
|
userProfile?: {
|
|
26
26
|
displayName?: string;
|
|
27
27
|
userId?: string;
|
|
28
|
-
|
|
28
|
+
isAnonymous?: boolean;
|
|
29
29
|
avatarUrl?: string;
|
|
30
30
|
accountSettingsRoute?: string;
|
|
31
31
|
onPress?: () => void;
|
|
32
|
-
|
|
32
|
+
anonymousDisplayName?: string;
|
|
33
33
|
avatarServiceUrl?: string;
|
|
34
34
|
};
|
|
35
35
|
/** Show footer with version */
|
|
@@ -35,11 +35,11 @@ interface SettingsContentProps {
|
|
|
35
35
|
userProfile?: {
|
|
36
36
|
displayName?: string;
|
|
37
37
|
userId?: string;
|
|
38
|
-
|
|
38
|
+
isAnonymous?: boolean;
|
|
39
39
|
avatarUrl?: string;
|
|
40
40
|
accountSettingsRoute?: string;
|
|
41
41
|
onPress?: () => void;
|
|
42
|
-
|
|
42
|
+
anonymousDisplayName?: string;
|
|
43
43
|
avatarServiceUrl?: string;
|
|
44
44
|
};
|
|
45
45
|
showFooter?: boolean;
|
|
@@ -99,10 +99,12 @@ export const SettingsContent: React.FC<SettingsContentProps> = ({
|
|
|
99
99
|
<UserProfileHeader
|
|
100
100
|
displayName={userProfile?.displayName}
|
|
101
101
|
userId={userProfile?.userId}
|
|
102
|
-
|
|
102
|
+
isAnonymous={userProfile?.isAnonymous}
|
|
103
103
|
avatarUrl={userProfile?.avatarUrl}
|
|
104
104
|
accountSettingsRoute={userProfile?.accountSettingsRoute}
|
|
105
105
|
onPress={userProfile?.onPress}
|
|
106
|
+
anonymousDisplayName={userProfile?.anonymousDisplayName}
|
|
107
|
+
avatarServiceUrl={userProfile?.avatarServiceUrl}
|
|
106
108
|
/>
|
|
107
109
|
</View>
|
|
108
110
|
)}
|