Skip to content

Commit de65509

Browse files
authored
Merge pull request Expensify#72428 from margelo/@chrispader/workspace-avatar-attachment-modal-migration
Migrate WorkspaceAvatar screen to AttachmentModalScreen
2 parents 0fedbcd + 6921ddb commit de65509

5 files changed

Lines changed: 32 additions & 68 deletions

File tree

src/libs/Navigation/AppNavigator/AuthScreens.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ const loadConciergePage = () => require<ReactComponentModule>('../../../pages/Co
8585
const loadTrackExpensePage = () => require<ReactComponentModule>('../../../pages/TrackExpensePage').default;
8686
const loadSubmitExpensePage = () => require<ReactComponentModule>('../../../pages/SubmitExpensePage').default;
8787
const loadProfileAvatar = () => require<ReactComponentModule>('../../../pages/settings/Profile/Avatar/ProfileAvatar').default;
88-
const loadWorkspaceAvatar = () => require<ReactComponentModule>('../../../pages/workspace/WorkspaceAvatar').default;
8988
const loadReportAvatar = () => require<ReactComponentModule>('../../../pages/ReportAvatar').default;
9089
const loadReceiptView = () => require<ReactComponentModule>('../../../pages/TransactionReceiptPage').default;
9190
const loadWorkspaceJoinUser = () => require<ReactComponentModule>('@pages/workspace/WorkspaceJoinUserPage').default;
@@ -582,22 +581,19 @@ function AuthScreens() {
582581
listeners={modalScreenListeners}
583582
/>
584583
<RootStack.Screen
585-
name={SCREENS.PROFILE_AVATAR}
586-
options={{
587-
headerShown: false,
588-
presentation: Presentation.TRANSPARENT_MODAL,
589-
animation: Animations.NONE,
590-
}}
591-
getComponent={loadProfileAvatar}
584+
name={SCREENS.WORKSPACE_AVATAR}
585+
options={attachmentModalScreenOptions}
586+
getComponent={loadAttachmentModalScreen}
592587
listeners={modalScreenListeners}
593588
/>
594589
<RootStack.Screen
595-
name={SCREENS.WORKSPACE_AVATAR}
590+
name={SCREENS.PROFILE_AVATAR}
596591
options={{
597592
headerShown: false,
598593
presentation: Presentation.TRANSPARENT_MODAL,
594+
animation: Animations.NONE,
599595
}}
600-
getComponent={loadWorkspaceAvatar}
596+
getComponent={loadProfileAvatar}
601597
listeners={modalScreenListeners}
602598
/>
603599
<RootStack.Screen

src/pages/media/AttachmentModalScreen/AttachmentModalBaseContent/index.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ function AttachmentModalBaseContent({
8686
const [currentAttachmentLink, setCurrentAttachmentLink] = useState(attachmentLink);
8787

8888
const fallbackFile = useMemo(() => (originalFileName ? {name: originalFileName} : undefined), [originalFileName]);
89-
const [files, setFilesInternal] = useState<FileObject | FileObject[] | undefined>();
89+
const [files, setFilesInternal] = useState<FileObject | FileObject[] | undefined>(() => filesProp ?? fallbackFile);
9090
const [isMultipleFiles, setIsMultipleFiles] = useState<boolean>(() => Array.isArray(files));
9191
const fileToDisplay = useMemo(() => {
9292
if (isMultipleFiles) {
@@ -106,10 +106,6 @@ function AttachmentModalBaseContent({
106106
}, []);
107107

108108
useEffect(() => {
109-
if (!filesProp) {
110-
return;
111-
}
112-
113109
setFile(filesProp ?? fallbackFile);
114110
}, [filesProp, fallbackFile, setFile]);
115111

src/pages/media/AttachmentModalScreen/AttachmentModalContainer/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ function AttachmentModalContainer<Screen extends AttachmentModalScreenType>({
2727

2828
const closeModal = useCallback(() => {
2929
Navigation.dismissModal();
30-
}, []);
30+
resetAttachmentModalAndClose();
31+
}, [resetAttachmentModalAndClose]);
3132

3233
useEffect(() => {
3334
onShow?.();

src/pages/media/AttachmentModalScreen/routes/WorkspaceAvatarModalContent.tsx

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,45 @@
11
import React, {useMemo} from 'react';
22
import useOnyx from '@hooks/useOnyx';
3+
import usePolicy from '@hooks/usePolicy';
34
import {getDefaultWorkspaceAvatar} from '@libs/ReportUtils';
45
import {getFullSizeAvatar} from '@libs/UserUtils';
56
import type {AttachmentModalBaseContentProps} from '@pages/media/AttachmentModalScreen/AttachmentModalBaseContent/types';
67
import AttachmentModalContainer from '@pages/media/AttachmentModalScreen/AttachmentModalContainer';
78
import type {AttachmentModalScreenProps} from '@pages/media/AttachmentModalScreen/types';
89
import ONYXKEYS from '@src/ONYXKEYS';
910
import type SCREENS from '@src/SCREENS';
11+
import useDownloadAttachment from './hooks/useDownloadAttachment';
1012

1113
function WorkspaceAvatarModalContent({navigation, route}: AttachmentModalScreenProps<typeof SCREENS.WORKSPACE_AVATAR>) {
12-
const {policyID} = route.params;
14+
const {policyID, letter: fallbackLetter} = route.params;
1315

14-
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: false});
15-
const [isLoadingApp = true] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true});
16+
const policy = usePolicy(policyID);
17+
const [isLoadingApp = false] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true, initWithStoredValues: false});
1618

17-
const avatarURL = policy?.avatarURL ?? getDefaultWorkspaceAvatar(policy?.name ?? '');
19+
const avatarURL = policy?.avatarURL ?? getDefaultWorkspaceAvatar(policy?.name ?? fallbackLetter);
20+
const source = getFullSizeAvatar(avatarURL, 0);
21+
const policyKeysLength = Object.keys(policy ?? {}).length;
22+
23+
// eslint-disable-next-line rulesdir/no-negated-variables
24+
const shouldShowNotFoundPage = policyKeysLength === 0 && !isLoadingApp && (!policyID || !fallbackLetter);
25+
const isLoading = policyKeysLength === 0 && !!isLoadingApp;
26+
const originalFileName = policy?.originalFileName ?? policy?.id ?? policyID;
27+
const headerTitle = policy?.name ?? '';
28+
29+
const onDownloadAttachment = useDownloadAttachment();
1830

1931
const contentProps = useMemo<AttachmentModalBaseContentProps>(
2032
() => ({
21-
source: getFullSizeAvatar(avatarURL, 0),
22-
headerTitle: policy?.name,
33+
source,
34+
headerTitle,
35+
originalFileName,
36+
shouldShowNotFoundPage,
37+
isLoading,
2338
isWorkspaceAvatar: true,
24-
originalFileName: policy?.originalFileName ?? policy?.id,
25-
shouldShowNotFoundPage: !Object.keys(policy ?? {}).length && !isLoadingApp,
26-
isLoading: !Object.keys(policy ?? {}).length && !!isLoadingApp,
2739
maybeIcon: true,
40+
onDownloadAttachment,
2841
}),
29-
[avatarURL, isLoadingApp, policy],
42+
[headerTitle, isLoading, onDownloadAttachment, originalFileName, shouldShowNotFoundPage, source],
3043
);
3144

3245
return (

src/pages/workspace/WorkspaceAvatar.tsx

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)