@@ -5,7 +5,7 @@ import { View } from 'react-native';
5
5
6
6
import Emoji from '../emoji/Emoji' ;
7
7
import { emojiTypeFromReactionType } from '../emoji/data' ;
8
- import type { UserOrBot } from '../types' ;
8
+ import type { LocalizableText , UserOrBot } from '../types' ;
9
9
import styles , { createStyleSheet } from '../styles' ;
10
10
import { useSelector } from '../react-redux' ;
11
11
import UserAvatar from '../common/UserAvatar' ;
@@ -14,6 +14,10 @@ import ZulipText from '../common/ZulipText';
14
14
import { getUserStatus } from '../user-statuses/userStatusesModel' ;
15
15
import PresenceStatusIndicator from '../common/PresenceStatusIndicator' ;
16
16
import { getDisplayEmailForUser } from '../selectors' ;
17
+ import { Role } from '../api/permissionsTypes' ;
18
+ import ZulipTextIntl from '../common/ZulipTextIntl' ;
19
+ import { getOwnUserId } from '../users/userSelectors' ;
20
+ import { getOwnUserRole } from '../permissionSelectors' ;
17
21
18
22
const componentStyles = createStyleSheet ( {
19
23
componentListItem : {
@@ -42,6 +46,21 @@ type Props = $ReadOnly<{|
42
46
showEmail : boolean ,
43
47
| } > ;
44
48
49
+ const getRoleText = ( role : Role ) : LocalizableText => {
50
+ switch ( role ) {
51
+ case Role . Owner :
52
+ return 'Owner' ;
53
+ case Role . Admin :
54
+ return 'Admin' ;
55
+ case Role . Moderator :
56
+ return 'Moderator' ;
57
+ case Role . Member :
58
+ return 'Member' ;
59
+ case Role . Guest :
60
+ return 'Guest' ;
61
+ }
62
+ } ;
63
+
45
64
export default function AccountDetails ( props : Props ) : Node {
46
65
const { user, showEmail } = props ;
47
66
@@ -51,6 +70,16 @@ export default function AccountDetails(props: Props): Node {
51
70
) ;
52
71
const realm = useSelector ( state => state . realm ) ;
53
72
const displayEmail = getDisplayEmailForUser ( realm , user ) ;
73
+ const ownUserId = useSelector ( getOwnUserId ) ;
74
+ const ownUserRole = useSelector ( getOwnUserRole ) ;
75
+
76
+ // user.role will be missing when the server has feature level <59. For
77
+ // those old servers, we can use getOwnUserRole for the "own" (or "self")
78
+ // user's role, but nothing will give us the role of a non-"own" user, so
79
+ // we just won't show any role in that case.
80
+ // TODO(server-4.0): user.role will never be missing; use that for "own"
81
+ // and non-"own" users.
82
+ const role = user . user_id === ownUserId ? ownUserRole : user . role ;
54
83
55
84
return (
56
85
< ComponentList outerSpacing itemStyle = { componentStyles . componentListItem } >
@@ -79,6 +108,14 @@ export default function AccountDetails(props: Props): Node {
79
108
/>
80
109
</ View >
81
110
) }
111
+ {
112
+ // TODO(server-4.0): Remove conditional; we'll always know the role.
113
+ role != null && (
114
+ < View >
115
+ < ZulipTextIntl selectable style = { styles . largerText } text = { getRoleText ( role ) } />
116
+ </ View >
117
+ )
118
+ }
82
119
< View style = { componentStyles . statusWrapper } >
83
120
{ userStatusEmoji && (
84
121
< Emoji
0 commit comments