@@ -10,11 +10,11 @@ import useTheme from '@hooks/useTheme';
10
10
import useThemeStyles from '@hooks/useThemeStyles' ;
11
11
import useWindowDimensions from '@hooks/useWindowDimensions' ;
12
12
import { clearDelegatorErrors , connect , disconnect } from '@libs/actions/Delegate' ;
13
- import * as EmojiUtils from '@libs/EmojiUtils' ;
14
- import * as ErrorUtils from '@libs/ErrorUtils' ;
15
- import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils' ;
13
+ import { close } from '@libs/actions/Modal' ;
14
+ import { getProcessedText , splitTextWithEmojis } from '@libs/EmojiUtils' ;
15
+ import { getLatestError } from '@libs/ErrorUtils' ;
16
+ import { getPersonalDetailByEmail } from '@libs/PersonalDetailsUtils' ;
16
17
import variables from '@styles/variables' ;
17
- import * as Modal from '@userActions/Modal' ;
18
18
import CONST from '@src/CONST' ;
19
19
import ONYXKEYS from '@src/ONYXKEYS' ;
20
20
import type { PersonalDetails } from '@src/types/onyx' ;
@@ -27,6 +27,7 @@ import type {PopoverMenuItem} from './PopoverMenu';
27
27
import PopoverMenu from './PopoverMenu' ;
28
28
import { PressableWithFeedback } from './Pressable' ;
29
29
import Text from './Text' ;
30
+ import Tooltip from './Tooltip' ;
30
31
31
32
function AccountSwitcher ( ) {
32
33
const currentUserPersonalDetails = useCurrentUserPersonalDetails ( ) ;
@@ -47,7 +48,7 @@ function AccountSwitcher() {
47
48
48
49
const isActingAsDelegate = ! ! account ?. delegatedAccess ?. delegate ?? false ;
49
50
const canSwitchAccounts = delegators . length > 0 || isActingAsDelegate ;
50
- const processedTextArray = EmojiUtils . splitTextWithEmojis ( currentUserPersonalDetails ?. displayName ) ;
51
+ const processedTextArray = splitTextWithEmojis ( currentUserPersonalDetails ?. displayName ) ;
51
52
52
53
const createBaseMenuItem = (
53
54
personalDetails : PersonalDetails | undefined ,
@@ -58,7 +59,7 @@ function AccountSwitcher() {
58
59
return {
59
60
text : personalDetails ?. displayName ?? personalDetails ?. login ?? '' ,
60
61
description : Str . removeSMSDomain ( personalDetails ?. login ?? '' ) ,
61
- avatarID : personalDetails ?. accountID ?? - 1 ,
62
+ avatarID : personalDetails ?. accountID ?? CONST . DEFAULT_NUMBER_ID ,
62
63
icon : personalDetails ?. avatar ?? '' ,
63
64
iconType : CONST . ICON_TYPE_AVATAR ,
64
65
outerWrapperStyle : shouldUseNarrowLayout ? { } : styles . accountSwitcherPopover ,
@@ -86,14 +87,14 @@ function AccountSwitcher() {
86
87
return [ currentUserMenuItem ] ;
87
88
}
88
89
89
- const delegatePersonalDetails = PersonalDetailsUtils . getPersonalDetailByEmail ( delegateEmail ) ;
90
- const error = ErrorUtils . getLatestError ( account ?. delegatedAccess ?. errorFields ?. disconnect ) ;
90
+ const delegatePersonalDetails = getPersonalDetailByEmail ( delegateEmail ) ;
91
+ const error = getLatestError ( account ?. delegatedAccess ?. errorFields ?. disconnect ) ;
91
92
92
93
return [
93
94
createBaseMenuItem ( delegatePersonalDetails , error , {
94
95
onSelected : ( ) => {
95
96
if ( isOffline ) {
96
- Modal . close ( ( ) => setShouldShowOfflineModal ( true ) ) ;
97
+ close ( ( ) => setShouldShowOfflineModal ( true ) ) ;
97
98
return ;
98
99
}
99
100
disconnect ( ) ;
@@ -107,13 +108,13 @@ function AccountSwitcher() {
107
108
. filter ( ( { email} ) => email !== currentUserPersonalDetails . login )
108
109
. map ( ( { email, role} ) => {
109
110
const errorFields = account ?. delegatedAccess ?. errorFields ?? { } ;
110
- const error = ErrorUtils . getLatestError ( errorFields ?. connect ?. [ email ] ) ;
111
- const personalDetails = PersonalDetailsUtils . getPersonalDetailByEmail ( email ) ;
111
+ const error = getLatestError ( errorFields ?. connect ?. [ email ] ) ;
112
+ const personalDetails = getPersonalDetailByEmail ( email ) ;
112
113
return createBaseMenuItem ( personalDetails , error , {
113
114
badgeText : translate ( 'delegate.role' , { role} ) ,
114
115
onSelected : ( ) => {
115
116
if ( isOffline ) {
116
- Modal . close ( ( ) => setShouldShowOfflineModal ( true ) ) ;
117
+ close ( ( ) => setShouldShowOfflineModal ( true ) ) ;
117
118
return ;
118
119
}
119
120
connect ( email ) ;
@@ -126,63 +127,69 @@ function AccountSwitcher() {
126
127
127
128
return (
128
129
< >
129
- < PressableWithFeedback
130
- accessible
131
- accessibilityLabel = { translate ( 'common.profile' ) }
132
- onPress = { ( ) => {
133
- setShouldShowDelegatorMenu ( ! shouldShowDelegatorMenu ) ;
134
- } }
135
- ref = { buttonRef }
136
- interactive = { canSwitchAccounts }
137
- pressDimmingValue = { canSwitchAccounts ? undefined : 1 }
138
- wrapperStyle = { [ styles . flexGrow1 , styles . flex1 , styles . mnw0 , styles . justifyContentCenter ] }
130
+ < Tooltip
131
+ text = { translate ( 'delegate.copilotAccess' ) }
132
+ shiftVertical = { 8 }
133
+ shiftHorizontal = { 8 }
134
+ anchorAlignment = { { horizontal : CONST . MODAL . ANCHOR_ORIGIN_HORIZONTAL . LEFT , vertical : CONST . MODAL . ANCHOR_ORIGIN_VERTICAL . BOTTOM } }
135
+ shouldRender = { canSwitchAccounts }
139
136
>
140
- < View style = { [ styles . flexRow , styles . gap3 ] } >
141
- < Avatar
142
- type = { CONST . ICON_TYPE_AVATAR }
143
- size = { CONST . AVATAR_SIZE . DEFAULT }
144
- avatarID = { currentUserPersonalDetails ?. accountID }
145
- source = { currentUserPersonalDetails ?. avatar }
146
- fallbackIcon = { currentUserPersonalDetails . fallbackIcon }
147
- />
148
- < View style = { [ styles . flex1 , styles . flexShrink1 , styles . flexBasis0 , styles . justifyContentCenter , styles . gap1 ] } >
149
- < View style = { [ styles . flexRow , styles . gap1 ] } >
137
+ < PressableWithFeedback
138
+ accessible
139
+ accessibilityLabel = { translate ( 'common.profile' ) }
140
+ onPress = { ( ) => {
141
+ setShouldShowDelegatorMenu ( ! shouldShowDelegatorMenu ) ;
142
+ } }
143
+ ref = { buttonRef }
144
+ interactive = { canSwitchAccounts }
145
+ pressDimmingValue = { canSwitchAccounts ? undefined : 1 }
146
+ wrapperStyle = { [ styles . flexGrow1 , styles . flex1 , styles . mnw0 , styles . justifyContentCenter ] }
147
+ >
148
+ < View style = { [ styles . flexRow , styles . gap3 ] } >
149
+ < Avatar
150
+ type = { CONST . ICON_TYPE_AVATAR }
151
+ size = { CONST . AVATAR_SIZE . DEFAULT }
152
+ avatarID = { currentUserPersonalDetails ?. accountID }
153
+ source = { currentUserPersonalDetails ?. avatar }
154
+ fallbackIcon = { currentUserPersonalDetails . fallbackIcon }
155
+ />
156
+ < View style = { [ styles . flex1 , styles . flexShrink1 , styles . flexBasis0 , styles . justifyContentCenter , styles . gap1 ] } >
157
+ < View style = { [ styles . flexRow , styles . gap1 ] } >
158
+ < Text
159
+ numberOfLines = { 1 }
160
+ style = { [ styles . textBold , styles . textLarge , styles . flexShrink1 ] }
161
+ >
162
+ { processedTextArray . length !== 0 ? getProcessedText ( processedTextArray , styles . initialSettingsUsernameEmoji ) : currentUserPersonalDetails ?. displayName }
163
+ </ Text >
164
+ { ! ! canSwitchAccounts && (
165
+ < View style = { styles . justifyContentCenter } >
166
+ < Icon
167
+ fill = { theme . icon }
168
+ src = { Expensicons . CaretUpDown }
169
+ height = { variables . iconSizeSmall }
170
+ width = { variables . iconSizeSmall }
171
+ />
172
+ </ View >
173
+ ) }
174
+ </ View >
150
175
< Text
151
176
numberOfLines = { 1 }
152
- style = { [ styles . textBold , styles . textLarge , styles . flexShrink1 ] }
177
+ style = { [ styles . colorMuted , styles . fontSizeLabel ] }
153
178
>
154
- { processedTextArray . length !== 0
155
- ? EmojiUtils . getProcessedText ( processedTextArray , styles . initialSettingsUsernameEmoji )
156
- : currentUserPersonalDetails ?. displayName }
179
+ { Str . removeSMSDomain ( currentUserPersonalDetails ?. login ?? '' ) }
157
180
</ Text >
158
- { ! ! canSwitchAccounts && (
159
- < View style = { styles . justifyContentCenter } >
160
- < Icon
161
- fill = { theme . icon }
162
- src = { Expensicons . CaretUpDown }
163
- height = { variables . iconSizeSmall }
164
- width = { variables . iconSizeSmall }
165
- />
166
- </ View >
181
+ { ! ! user ?. isDebugModeEnabled && (
182
+ < Text
183
+ style = { [ styles . textLabelSupporting , styles . mt1 , styles . w100 ] }
184
+ numberOfLines = { 1 }
185
+ >
186
+ AccountID: { session ?. accountID }
187
+ </ Text >
167
188
) }
168
189
</ View >
169
- < Text
170
- numberOfLines = { 1 }
171
- style = { [ styles . colorMuted , styles . fontSizeLabel ] }
172
- >
173
- { Str . removeSMSDomain ( currentUserPersonalDetails ?. login ?? '' ) }
174
- </ Text >
175
- { ! ! user ?. isDebugModeEnabled && (
176
- < Text
177
- style = { [ styles . textLabelSupporting , styles . mt1 , styles . w100 ] }
178
- numberOfLines = { 1 }
179
- >
180
- AccountID: { session ?. accountID }
181
- </ Text >
182
- ) }
183
190
</ View >
184
- </ View >
185
- </ PressableWithFeedback >
191
+ </ PressableWithFeedback >
192
+ </ Tooltip >
186
193
{ ! ! canSwitchAccounts && (
187
194
< PopoverMenu
188
195
isVisible = { shouldShowDelegatorMenu }
0 commit comments