Skip to content

Commit 574f182

Browse files
authored
Merge pull request Expensify#68269 from thelullabyy/fix/67103-part-1
Remove call to getReportNameValuePairs() in method canUserPerformWriteAction from ReportUtils.ts part 1
2 parents b33f5a1 + 85d7a92 commit 574f182

19 files changed

Lines changed: 113 additions & 43 deletions

src/components/LHNOptionsList/LHNOptionsList.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
191191
const itemTransaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
192192
const hasDraftComment = isValidDraftComment(draftComments?.[`${ONYXKEYS.COLLECTION.REPORT_DRAFT_COMMENT}${reportID}`]);
193193

194-
const canUserPerformWrite = canUserPerformWriteAction(item);
194+
const isReportArchived = !!itemReportNameValuePairs?.private_isArchived;
195+
const canUserPerformWrite = canUserPerformWriteAction(item, isReportArchived);
195196
const sortedReportActions = getSortedReportActionsForDisplay(itemReportActions, canUserPerformWrite);
196197
const lastReportAction = sortedReportActions.at(0);
197198

@@ -247,6 +248,7 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
247248
isReportsSplitNavigatorLast={isReportsSplitNavigatorLast}
248249
isScreenFocused={isScreenFocused}
249250
localeCompare={localeCompare}
251+
isReportArchived={isReportArchived}
250252
/>
251253
);
252254
},

src/components/LHNOptionsList/OptionRowLHNData.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ function OptionRowLHNData({
3535
transactionViolations,
3636
lastMessageTextFromReport,
3737
localeCompare,
38+
isReportArchived = false,
3839
...propsToForward
3940
}: OptionRowLHNDataProps) {
4041
const reportID = propsToForward.reportID;
@@ -48,15 +49,15 @@ function OptionRowLHNData({
4849
return undefined;
4950
}
5051

51-
const canUserPerformWriteAction = canUserPerformWriteActionUtil(fullReport);
52+
const canUserPerformWriteAction = canUserPerformWriteActionUtil(fullReport, isReportArchived);
5253
const actionsArray = getSortedReportActions(Object.values(reportActions));
5354

5455
const reportActionsForDisplay = actionsArray.filter(
5556
(reportAction) => shouldReportActionBeVisibleAsLastAction(reportAction, canUserPerformWriteAction) && reportAction.actionName !== CONST.REPORT.ACTIONS.TYPE.CREATED,
5657
);
5758

5859
return reportActionsForDisplay.at(-1);
59-
}, [reportActions, fullReport]);
60+
}, [reportActions, fullReport, isReportArchived]);
6061

6162
const card = useGetExpensifyCardFromReportAction({reportAction: lastAction, policyID: fullReport?.policyID});
6263
const optionItem = useMemo(() => {

src/components/LHNOptionsList/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ type OptionRowLHNDataProps = {
128128

129129
/** Function to compare locale strings */
130130
localeCompare: LocaleContextProps['localeCompare'];
131+
132+
/** Whether the report is archived */
133+
isReportArchived: boolean;
131134
};
132135

133136
type OptionRowLHNProps = {

src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import useMobileSelectionMode from '@hooks/useMobileSelectionMode';
2222
import useNetworkWithOfflineStatus from '@hooks/useNetworkWithOfflineStatus';
2323
import useOnyx from '@hooks/useOnyx';
2424
import usePrevious from '@hooks/usePrevious';
25+
import useReportIsArchived from '@hooks/useReportIsArchived';
2526
import useReportScrollManager from '@hooks/useReportScrollManager';
2627
import useResponsiveLayout from '@hooks/useResponsiveLayout';
2728
import useSelectedTransactionsActions from '@hooks/useSelectedTransactionsActions';
@@ -156,7 +157,8 @@ function MoneyRequestReportActionsList({
156157
const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionThreadReportID}`, {canBeMissing: true});
157158
const [currentUserAccountID] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false, selector: (session) => session?.accountID});
158159

159-
const canPerformWriteAction = canUserPerformWriteAction(report);
160+
const isReportArchived = useReportIsArchived(reportID);
161+
const canPerformWriteAction = canUserPerformWriteAction(report, isReportArchived);
160162

161163
const {shouldUseNarrowLayout} = useResponsiveLayout();
162164

@@ -539,6 +541,7 @@ function MoneyRequestReportActionsList({
539541
personalDetails={personalDetails}
540542
userBillingFundID={userBillingFundID}
541543
emojiReactions={actionEmojiReactions}
544+
isReportArchived={isReportArchived}
542545
draftMessage={matchingDraftMessageString}
543546
/>
544547
);

src/components/ParentNavigationSubtitle.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type {StyleProp, TextStyle} from 'react-native';
44
import useHover from '@hooks/useHover';
55
import useLocalize from '@hooks/useLocalize';
66
import useOnyx from '@hooks/useOnyx';
7+
import useReportIsArchived from '@hooks/useReportIsArchived';
78
import useRootNavigationState from '@hooks/useRootNavigationState';
89
import useStyleUtils from '@hooks/useStyleUtils';
910
import useTheme from '@hooks/useTheme';
@@ -57,7 +58,8 @@ function ParentNavigationSubtitle({
5758
const {workspaceName, reportName} = parentNavigationSubtitleData;
5859
const {translate} = useLocalize();
5960
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${parentReportID}`, {canBeMissing: false});
60-
const canUserPerformWriteAction = canUserPerformWriteActionReportUtils(report);
61+
const isReportArchived = useReportIsArchived(report?.reportID);
62+
const canUserPerformWriteAction = canUserPerformWriteActionReportUtils(report, isReportArchived);
6163
const isReportInRHP = currentRoute.name === SCREENS.SEARCH.REPORT_RHP;
6264
const currentFullScreenRoute = useRootNavigationState((state) => state?.routes?.findLast((route) => isFullScreenName(route.name)));
6365

src/components/ReportActionItem/MoneyRequestView.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -235,19 +235,20 @@ function MoneyRequestView({
235235

236236
// Flags for allowing or disallowing editing an expense
237237
// Used for non-restricted fields such as: description, category, tag, billable, etc...
238-
const canUserPerformWriteAction = !!canUserPerformWriteActionReportUtils(report) && !readonly;
239-
const canEdit = isMoneyRequestAction(parentReportAction) && canEditMoneyRequest(parentReportAction, transaction, isChatReportArchived) && canUserPerformWriteAction;
238+
const isReportArchived = useReportIsArchived(report?.reportID);
239+
const isEditable = !!canUserPerformWriteActionReportUtils(report, isReportArchived) && !readonly;
240+
const canEdit = isMoneyRequestAction(parentReportAction) && canEditMoneyRequest(parentReportAction, transaction, isChatReportArchived) && isEditable;
240241

241242
const canEditTaxFields = canEdit && !isDistanceRequest;
242-
const canEditAmount = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.AMOUNT, undefined, isChatReportArchived);
243-
const canEditMerchant = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.MERCHANT, undefined, isChatReportArchived);
244-
const canEditDate = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.DATE, undefined, isChatReportArchived);
245-
const canEditReceipt = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.RECEIPT, undefined, isChatReportArchived);
246-
const canEditDistance = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.DISTANCE, undefined, isChatReportArchived);
247-
const canEditDistanceRate = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.DISTANCE_RATE, undefined, isChatReportArchived);
243+
const canEditAmount = isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.AMOUNT, undefined, isChatReportArchived);
244+
const canEditMerchant = isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.MERCHANT, undefined, isChatReportArchived);
245+
const canEditDate = isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.DATE, undefined, isChatReportArchived);
246+
const canEditReceipt = isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.RECEIPT, undefined, isChatReportArchived);
247+
const canEditDistance = isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.DISTANCE, undefined, isChatReportArchived);
248+
const canEditDistanceRate = isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.DISTANCE_RATE, undefined, isChatReportArchived);
248249
const canEditReport = useMemo(
249-
() => canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.REPORT, undefined, isChatReportArchived, outstandingReportsByPolicyID),
250-
[canUserPerformWriteAction, parentReportAction, isChatReportArchived, outstandingReportsByPolicyID],
250+
() => isEditable && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.REPORT, undefined, isChatReportArchived, outstandingReportsByPolicyID),
251+
[isEditable, parentReportAction, isChatReportArchived, outstandingReportsByPolicyID],
251252
);
252253

253254
// A flag for verifying that the current report is a sub-report of a expense chat

src/libs/ReportUtils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9031,7 +9031,7 @@ function navigateToLinkedReportAction(ancestor: Ancestor, isInNarrowPaneModal: b
90319031
}
90329032
}
90339033

9034-
function canUserPerformWriteAction(report: OnyxEntry<Report>) {
9034+
function canUserPerformWriteAction(report: OnyxEntry<Report>, isReportArchived?: boolean) {
90359035
const reportErrors = getCreationReportErrors(report);
90369036

90379037
// If the expense report is marked for deletion, let us prevent any further write action.
@@ -9042,8 +9042,9 @@ function canUserPerformWriteAction(report: OnyxEntry<Report>) {
90429042
// This will get removed as part of https://github.com/Expensify/App/issues/59961
90439043
// eslint-disable-next-line deprecation/deprecation
90449044
const reportNameValuePairs = getReportNameValuePairs(report?.reportID);
9045+
90459046
return (
9046-
!isArchivedNonExpenseReport(report, !!reportNameValuePairs?.private_isArchived) &&
9047+
!isArchivedNonExpenseReport(report, isReportArchived ?? !!reportNameValuePairs?.private_isArchived) &&
90479048
isEmptyObject(reportErrors) &&
90489049
report &&
90499050
isAllowedToComment(report) &&

src/pages/Debug/Report/DebugReportActions.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ function DebugReportActions({reportID}: DebugReportActionsProps) {
2929
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, {canBeMissing: true});
3030
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`, {canBeMissing: true});
3131
const isReportArchived = useReportIsArchived(reportID);
32-
const ifUserCanPerformWriteAction = canUserPerformWriteAction(report);
32+
const ifUserCanPerformWriteAction = canUserPerformWriteAction(report, isReportArchived);
3333
const [sortedAllReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, {
3434
canEvict: false,
3535
selector: (allReportActions) => getSortedReportActionsForDisplay(allReportActions, ifUserCanPerformWriteAction, true),

src/pages/home/HeaderView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ function HeaderView({report, parentReportAction, onNavigationMenuButtonClicked,
162162
account?.guideDetails?.email !== CONST.EMAIL.CONCIERGE &&
163163
!!account?.guideDetails?.calendarLink &&
164164
isAdminRoom(report) &&
165-
!!canUserPerformWriteAction(report) &&
165+
!!canUserPerformWriteAction(report, isReportArchived) &&
166166
!isChatThread &&
167167
introSelected?.companySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO;
168168

src/pages/home/ReportScreen.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import useOnyx from '@hooks/useOnyx';
2626
import usePaginatedReportActions from '@hooks/usePaginatedReportActions';
2727
import usePermissions from '@hooks/usePermissions';
2828
import usePrevious from '@hooks/usePrevious';
29+
import useReportIsArchived from '@hooks/useReportIsArchived';
2930
import useResponsiveLayout from '@hooks/useResponsiveLayout';
3031
import useThemeStyles from '@hooks/useThemeStyles';
3132
import useTransactionsAndViolationsForReport from '@hooks/useTransactionsAndViolationsForReport';
@@ -402,9 +403,10 @@ function ReportScreen({route, navigation}: ReportScreenProps) {
402403

403404
const {isEditingDisabled, isCurrentReportLoadedFromOnyx} = useIsReportReadyToDisplay(report, reportIDFromRoute);
404405

406+
const isReportArchived = useReportIsArchived(report?.reportID);
405407
const isLinkedActionDeleted = useMemo(
406-
() => !!linkedAction && !shouldReportActionBeVisible(linkedAction, linkedAction.reportActionID, canUserPerformWriteAction(report)),
407-
[linkedAction, report],
408+
() => !!linkedAction && !shouldReportActionBeVisible(linkedAction, linkedAction.reportActionID, canUserPerformWriteAction(report, isReportArchived)),
409+
[linkedAction, report, isReportArchived],
408410
);
409411

410412
const prevIsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined);

0 commit comments

Comments
 (0)