11import { useFocusEffect , useIsFocused } from '@react-navigation/native' ;
22import { accountIDSelector } from '@selectors/Session' ;
33import React , { useCallback , useContext , useEffect , useRef , useState } from 'react' ;
4- import { View } from 'react-native' ;
4+ import type { ImageStyle , StyleProp } from 'react-native' ;
5+ import { Image , StyleSheet , View } from 'react-native' ;
56import type { ValueOf } from 'type-fest' ;
67import Avatar from '@components/Avatar' ;
78import AvatarWithImagePicker from '@components/AvatarWithImagePicker' ;
8- import Button from '@components/Button' ;
99import ButtonWithDropdownMenu from '@components/ButtonWithDropdownMenu' ;
1010import type { DropdownOption } from '@components/ButtonWithDropdownMenu/types' ;
1111import ConfirmModal from '@components/ConfirmModal' ;
@@ -25,6 +25,7 @@ import usePayAndDowngrade from '@hooks/usePayAndDowngrade';
2525import usePermissions from '@hooks/usePermissions' ;
2626import usePrevious from '@hooks/usePrevious' ;
2727import useResponsiveLayout from '@hooks/useResponsiveLayout' ;
28+ import useThemeIllustrations from '@hooks/useThemeIllustrations' ;
2829import useThemeStyles from '@hooks/useThemeStyles' ;
2930import useTransactionViolationOfWorkspace from '@hooks/useTransactionViolationOfWorkspace' ;
3031import { close } from '@libs/actions/Modal' ;
@@ -70,6 +71,7 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
7071 const { translate} = useLocalize ( ) ;
7172 const { shouldUseNarrowLayout} = useResponsiveLayout ( ) ;
7273 const currentUserPersonalDetails = useCurrentUserPersonalDetails ( ) ;
74+ const illustrations = useThemeIllustrations ( ) ;
7375 const illustrationIcons = useMemoizedLazyIllustrations ( [ 'Building' ] as const ) ;
7476 const expensifyIcons = useMemoizedLazyExpensifyIcons ( [ 'Exit' , 'FallbackWorkspaceAvatar' , 'ImageCropSquareMask' , 'QrCode' , 'Transfer' , 'Trashcan' , 'UserPlus' ] as const ) ;
7577
@@ -157,6 +159,7 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
157159 const readOnly = ! isPolicyAdminPolicyUtils ( policy ) ;
158160 const currencyReadOnly = readOnly || isBankAccountVerified ;
159161 const isOwner = isPolicyOwner ( policy , currentUserAccountID ) ;
162+ const imageStyle : StyleProp < ImageStyle > = shouldUseNarrowLayout ? [ styles . mhv12 , styles . mhn5 , styles . mbn5 ] : [ styles . mhv8 , styles . mhn8 , styles . mbn5 ] ;
160163 const shouldShowAddress = ! readOnly || ! ! formattedAddress ;
161164 const { isAccountLocked, showLockedAccountModal} = useContext ( LockedAccountContext ) ;
162165 const [ lastPaymentMethod ] = useOnyx ( ONYXKEYS . NVP_LAST_PAYMENT_METHOD , { canBeMissing : true } ) ;
@@ -377,27 +380,20 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
377380 } ;
378381
379382 const renderDropdownMenu = ( options : Array < DropdownOption < string > > ) => (
380- < ButtonWithDropdownMenu
381- ref = { dropdownMenuRef }
382- success = { false }
383- onPress = { ( ) => { } }
384- shouldAlwaysShowDropdownMenu
385- customText = { translate ( 'common.more' ) }
386- options = { options }
387- isSplitButton = { false }
388- wrapperStyle = { isPolicyAdmin ? styles . flexGrow0 : styles . flexGrow1 }
389- />
383+ < View style = { [ ! shouldUseNarrowLayout && styles . flexRow , ! shouldUseNarrowLayout && styles . gap2 ] } >
384+ < ButtonWithDropdownMenu
385+ ref = { dropdownMenuRef }
386+ success = { false }
387+ onPress = { ( ) => { } }
388+ shouldAlwaysShowDropdownMenu
389+ customText = { translate ( 'common.more' ) }
390+ options = { options }
391+ isSplitButton = { false }
392+ wrapperStyle = { styles . flexGrow1 }
393+ />
394+ </ View >
390395 ) ;
391396
392- const handleInvitePress = useCallback ( ( ) => {
393- if ( isAccountLocked ) {
394- showLockedAccountModal ( ) ;
395- return ;
396- }
397- clearInviteDraft ( route . params . policyID ) ;
398- Navigation . navigate ( ROUTES . WORKSPACE_INVITE . getRoute ( route . params . policyID , Navigation . getActiveRouteWithoutParams ( ) ) ) ;
399- } , [ isAccountLocked , showLockedAccountModal , route . params . policyID ] ) ;
400-
401397 const getHeaderButtons = ( ) => {
402398 const secondaryActions : Array < DropdownOption < string > > = [ ] ;
403399 const canLeave = ! isOwner ;
@@ -415,6 +411,21 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
415411 return null ;
416412 }
417413
414+ if ( isPolicyAdmin ) {
415+ secondaryActions . push ( {
416+ value : 'invite' ,
417+ text : translate ( 'common.invite' ) ,
418+ icon : expensifyIcons . UserPlus ,
419+ onSelected : ( ) => {
420+ if ( isAccountLocked ) {
421+ showLockedAccountModal ( ) ;
422+ return ;
423+ }
424+ clearInviteDraft ( route . params . policyID ) ;
425+ Navigation . navigate ( ROUTES . WORKSPACE_INVITE . getRoute ( route . params . policyID , Navigation . getActiveRouteWithoutParams ( ) ) ) ;
426+ } ,
427+ } ) ;
428+ }
418429 secondaryActions . push ( {
419430 value : 'share' ,
420431 text : translate ( 'common.share' ) ,
@@ -451,22 +462,7 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
451462 } ) ;
452463 }
453464
454- return (
455- < View style = { [ styles . flexRow , styles . gap2 ] } >
456- { isPolicyAdmin && (
457- < Button
458- success
459- text = { translate ( 'common.invite' ) }
460- icon = { expensifyIcons . UserPlus }
461- onPress = { handleInvitePress }
462- medium
463- innerStyles = { [ shouldUseNarrowLayout && styles . alignItemsCenter ] }
464- style = { [ shouldUseNarrowLayout && styles . flexGrow1 , shouldUseNarrowLayout && styles . mb3 ] }
465- />
466- ) }
467- { renderDropdownMenu ( secondaryActions ) }
468- </ View >
469- ) ;
465+ return renderDropdownMenu ( secondaryActions ) ;
470466 } ;
471467
472468 return (
@@ -495,6 +491,11 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
495491 isCentralPane
496492 title = ""
497493 >
494+ < Image
495+ style = { StyleSheet . flatten ( [ styles . wAuto , styles . h68 , imageStyle ] ) }
496+ source = { illustrations . WorkspaceProfile }
497+ resizeMode = "cover"
498+ />
498499 < AvatarWithImagePicker
499500 onViewPhotoPress = { ( ) => {
500501 if ( ! policy ?. id ) {
@@ -511,7 +512,12 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa
511512 DefaultAvatar = { DefaultAvatar }
512513 type = { CONST . ICON_TYPE_WORKSPACE }
513514 fallbackIcon = { expensifyIcons . FallbackWorkspaceAvatar }
514- style = { [ ( policy ?. errorFields ?. avatarURL ?? shouldUseNarrowLayout ) ? styles . mb1 : styles . mb3 , styles . alignItemsStart , styles . sectionMenuItemTopDescription ] }
515+ style = { [
516+ ( policy ?. errorFields ?. avatarURL ?? shouldUseNarrowLayout ) ? styles . mb1 : styles . mb3 ,
517+ shouldUseNarrowLayout ? styles . mtn17 : styles . mtn20 ,
518+ styles . alignItemsStart ,
519+ styles . sectionMenuItemTopDescription ,
520+ ] }
515521 editIconStyle = { styles . smallEditIconWorkspace }
516522 isUsingDefaultAvatar = { ! policy ?. avatarURL }
517523 onImageSelected = { ( file ) => {
0 commit comments