Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/components/MoneyRequestHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,8 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
if (!transaction || !parentReportAction || !parentReport) {
return [];
}
return getSecondaryTransactionThreadActions(currentUserLogin ?? '', parentReport, transaction, parentReportAction, originalTransaction, policy, report);
}, [parentReport, transaction, parentReportAction, currentUserLogin, policy, report, originalTransaction]);
return getSecondaryTransactionThreadActions(currentUserLogin ?? '', accountID, parentReport, transaction, parentReportAction, originalTransaction, policy, report);
}, [parentReport, transaction, parentReportAction, currentUserLogin, policy, report, originalTransaction, accountID]);

const dismissModalAndUpdateUseHold = () => {
setIsHoldEducationalModalVisible(false);
Expand Down
5 changes: 4 additions & 1 deletion src/components/ReportActionItem/MoneyRequestView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,10 @@ function MoneyRequestView({
const [originalTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transaction?.comment?.originalTransactionID)}`, {canBeMissing: true});
const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(transaction, originalTransaction);
const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`, {canBeMissing: true});
const isSplitAvailable = moneyRequestReport && transaction && isSplitAction(moneyRequestReport, [transaction], originalTransaction, currentUserPersonalDetails.login ?? '', policy);
const isSplitAvailable =
moneyRequestReport &&
transaction &&
isSplitAction(moneyRequestReport, [transaction], originalTransaction, currentUserPersonalDetails.login ?? '', currentUserPersonalDetails.accountID, policy);

const canEditTaxFields = canEdit && !isDistanceRequest;
const canEditAmount =
Expand Down
21 changes: 12 additions & 9 deletions src/components/Search/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ function mapTransactionItemToSelectedEntry(
itemTransaction: OnyxEntry<Transaction>,
originalItemTransaction: OnyxEntry<Transaction>,
currentUserLogin: string,
currentUserAccountID: number,
outstandingReportsByPolicyID?: OutstandingReportsByPolicyIDDerivedValue,
): [string, SelectedTransactionInfo] {
const {canHoldRequest, canUnholdRequest} = canHoldUnholdReportAction(item.report, item.reportAction, item.holdReportAction, item, item.policy);
Expand All @@ -108,7 +109,7 @@ function mapTransactionItemToSelectedEntry(
canHold: canHoldRequest,
isHeld: isOnHold(item),
canUnhold: canUnholdRequest,
canSplit: isSplitAction(item.report, [itemTransaction], originalItemTransaction, currentUserLogin, item.policy),
canSplit: isSplitAction(item.report, [itemTransaction], originalItemTransaction, currentUserLogin, currentUserAccountID, item.policy),
hasBeenSplit: getOriginalTransactionWithSplitInfo(itemTransaction, originalItemTransaction).isExpenseSplit,
canChangeReport: canEditFieldOfMoneyRequest(
item.reportAction,
Expand Down Expand Up @@ -141,6 +142,7 @@ function prepareTransactionsList(
originalItemTransaction: OnyxEntry<Transaction>,
selectedTransactions: SelectedTransactions,
currentUserLogin: string,
currentUserAccountID: number,
outstandingReportsByPolicyID?: OutstandingReportsByPolicyIDDerivedValue,
) {
if (selectedTransactions[item.keyForList]?.isSelected) {
Expand All @@ -160,7 +162,7 @@ function prepareTransactionsList(
canHold: canHoldRequest,
isHeld: isOnHold(item),
canUnhold: canUnholdRequest,
canSplit: isSplitAction(item.report, [itemTransaction], originalItemTransaction, currentUserLogin, item.policy),
canSplit: isSplitAction(item.report, [itemTransaction], originalItemTransaction, currentUserLogin, currentUserAccountID, item.policy),
hasBeenSplit: getOriginalTransactionWithSplitInfo(itemTransaction, originalItemTransaction).isExpenseSplit,
canChangeReport: canEditFieldOfMoneyRequest(
item.reportAction,
Expand Down Expand Up @@ -541,7 +543,7 @@ function Search({
canHold: canHoldRequest,
isHeld: isOnHold(transactionItem),
canUnhold: canUnholdRequest,
canSplit: isSplitAction(transactionItem.report, [itemTransaction], originalItemTransaction, login ?? '', transactionItem.policy),
canSplit: isSplitAction(transactionItem.report, [itemTransaction], originalItemTransaction, login ?? '', accountID, transactionItem.policy),
hasBeenSplit: getOriginalTransactionWithSplitInfo(itemTransaction, originalItemTransaction).isExpenseSplit,
canChangeReport: canEditFieldOfMoneyRequest(
transactionItem.reportAction,
Expand Down Expand Up @@ -595,7 +597,7 @@ function Search({
canHold: canHoldRequest,
isHeld: isOnHold(transactionItem),
canUnhold: canUnholdRequest,
canSplit: isSplitAction(transactionItem.report, [itemTransaction], originalItemTransaction, login ?? '', transactionItem.policy),
canSplit: isSplitAction(transactionItem.report, [itemTransaction], originalItemTransaction, login ?? '', accountID, transactionItem.policy),
hasBeenSplit: getOriginalTransactionWithSplitInfo(itemTransaction, originalItemTransaction).isExpenseSplit,
canChangeReport: canEditFieldOfMoneyRequest(
transactionItem.reportAction,
Expand Down Expand Up @@ -694,7 +696,7 @@ function Search({
const itemTransaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${item.transactionID}`] as OnyxEntry<Transaction>;
const originalItemTransaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${itemTransaction?.comment?.originalTransactionID}`];
setSelectedTransactions(
prepareTransactionsList(item, itemTransaction, originalItemTransaction, selectedTransactions, email ?? '', outstandingReportsByPolicyID),
prepareTransactionsList(item, itemTransaction, originalItemTransaction, selectedTransactions, email ?? '', accountID, outstandingReportsByPolicyID),
filteredData,
);
return;
Expand All @@ -721,14 +723,14 @@ function Search({
.map((transactionItem) => {
const itemTransaction = searchResults?.data?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionItem.transactionID}`] as OnyxEntry<Transaction>;
const originalItemTransaction = searchResults?.data?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${itemTransaction?.comment?.originalTransactionID}`];
return mapTransactionItemToSelectedEntry(transactionItem, itemTransaction, originalItemTransaction, email ?? '', outstandingReportsByPolicyID);
return mapTransactionItemToSelectedEntry(transactionItem, itemTransaction, originalItemTransaction, email ?? '', accountID, outstandingReportsByPolicyID);
}),
),
},
filteredData,
);
},
[setSelectedTransactions, selectedTransactions, filteredData, transactions, outstandingReportsByPolicyID, searchResults?.data, email],
[setSelectedTransactions, selectedTransactions, filteredData, transactions, outstandingReportsByPolicyID, searchResults?.data, email, accountID],
);

const onSelectRow = useCallback(
Expand Down Expand Up @@ -960,7 +962,7 @@ function Search({
.map((transactionItem) => {
const itemTransaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionItem.transactionID}`] as OnyxEntry<Transaction>;
const originalItemTransaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${itemTransaction?.comment?.originalTransactionID}`];
return mapTransactionItemToSelectedEntry(transactionItem, itemTransaction, originalItemTransaction, email ?? '', outstandingReportsByPolicyID);
return mapTransactionItemToSelectedEntry(transactionItem, itemTransaction, originalItemTransaction, email ?? '', accountID, outstandingReportsByPolicyID);
}),
),
),
Expand All @@ -977,7 +979,7 @@ function Search({
.map((transactionItem) => {
const itemTransaction = searchResults?.data?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionItem.transactionID}`] as OnyxEntry<Transaction>;
const originalItemTransaction = searchResults?.data?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${itemTransaction?.comment?.originalTransactionID}`];
return mapTransactionItemToSelectedEntry(transactionItem, itemTransaction, originalItemTransaction, email ?? '', outstandingReportsByPolicyID);
return mapTransactionItemToSelectedEntry(transactionItem, itemTransaction, originalItemTransaction, email ?? '', accountID, outstandingReportsByPolicyID);
}),
),
filteredData,
Expand All @@ -993,6 +995,7 @@ function Search({
outstandingReportsByPolicyID,
searchResults?.data,
email,
accountID,
]);

const onLayout = useCallback(() => {
Expand Down
5 changes: 3 additions & 2 deletions src/hooks/useSelectedTransactionsActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ function useSelectedTransactionsActions({
const {duplicateTransactions, duplicateTransactionViolations} = useDuplicateTransactionsAndViolations(selectedTransactionIDs);
const isReportArchived = useReportIsArchived(report?.reportID);
const {deleteTransactions} = useDeleteTransactions({report, reportActions, policy});
const {login} = useCurrentUserPersonalDetails();
const {login, accountID: currentUserAccountID} = useCurrentUserPersonalDetails();
const selectedTransactionsList = selectedTransactionIDs.reduce((acc, transactionID) => {
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if (transaction) {
Expand Down Expand Up @@ -317,7 +317,8 @@ function useSelectedTransactionsActions({
const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${firstTransaction?.comment?.originalTransactionID}`];

const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(firstTransaction, originalTransaction);
const canSplitTransaction = selectedTransactionsList.length === 1 && report && !isExpenseSplit && isSplitAction(report, [firstTransaction], originalTransaction, login ?? '', policy);
const canSplitTransaction =
selectedTransactionsList.length === 1 && report && !isExpenseSplit && isSplitAction(report, [firstTransaction], originalTransaction, login ?? '', currentUserAccountID, policy);

if (canSplitTransaction) {
options.push({
Expand Down
10 changes: 5 additions & 5 deletions src/libs/ReportSecondaryActionUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {BankAccountList, ExportTemplate, Policy, Report, ReportAction, ReportMetadata, ReportNameValuePairs, Transaction, TransactionViolation} from '@src/types/onyx';
import {isApprover as isApproverUtils} from './actions/Policy/Member';
import {getCurrentUserAccountID} from './actions/Report';
import {areTransactionsEligibleForMerge} from './MergeTransactionUtils';
import {getLoginByAccountID} from './PersonalDetailsUtils';
import {
Expand Down Expand Up @@ -95,6 +94,7 @@ function isSplitAction(
reportTransactions: Array<OnyxEntry<Transaction>>,
originalTransaction: OnyxEntry<Transaction>,
currentUserLogin: string,
currentUserAccountID: number,
policy?: OnyxEntry<Policy>,
): boolean {
if (Number(reportTransactions?.length) !== 1 || !report) {
Expand Down Expand Up @@ -132,8 +132,7 @@ function isSplitAction(

const isSubmitter = isCurrentUserSubmitter(report);
const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN;
// eslint-disable-next-line @typescript-eslint/no-deprecated -- Temporarily disabling the rule for deprecated functions; it will be removed soon in https://github.com/Expensify/App/issues/73648.
const isManager = (report.managerID ?? CONST.DEFAULT_NUMBER_ID) === getCurrentUserAccountID();
const isManager = (report.managerID ?? CONST.DEFAULT_NUMBER_ID) === currentUserAccountID;
const isOpenReport = isOpenReportUtils(report);
const isPolicyExpenseChat = !!policy?.isPolicyExpenseChatEnabled;
const userIsPolicyMember = isPolicyMember(policy, currentUserLogin);
Expand Down Expand Up @@ -892,7 +891,7 @@ function getSecondaryReportActions({
options.push(CONST.REPORT.SECONDARY_ACTIONS.REJECT);
}

if (isSplitAction(report, reportTransactions, originalTransaction, currentUserLogin, policy)) {
if (isSplitAction(report, reportTransactions, originalTransaction, currentUserLogin, currentUserAccountID, policy)) {
options.push(CONST.REPORT.SECONDARY_ACTIONS.SPLIT);
}

Expand Down Expand Up @@ -959,6 +958,7 @@ function getSecondaryExportReportActions(

function getSecondaryTransactionThreadActions(
currentUserLogin: string,
currentUserAccountID: number,
parentReport: Report,
reportTransaction: Transaction,
reportAction: ReportAction | undefined,
Expand All @@ -980,7 +980,7 @@ function getSecondaryTransactionThreadActions(
options.push(CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT);
}

if (isSplitAction(parentReport, [reportTransaction], originalTransaction, currentUserLogin, policy)) {
if (isSplitAction(parentReport, [reportTransaction], originalTransaction, currentUserLogin, currentUserAccountID, policy)) {
options.push(CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.SPLIT);
}

Expand Down
4 changes: 2 additions & 2 deletions src/pages/iou/SplitExpenseCreateDateRagePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,14 @@ function SplitExpenseCreateDateRagePage({route}: SplitExpenseCreateDateRagePageP
const currentPolicy = Object.keys(policy?.employeeList ?? {}).length
? policy
: currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.POLICY}${getNonEmptyStringOnyxID(currentReport?.policyID)}`];
const {login} = useCurrentUserPersonalDetails();
const {login, accountID: currentUserAccountID} = useCurrentUserPersonalDetails();

const updateDate = (value: FormOnyxValues<typeof ONYXKEYS.FORMS.SPLIT_EXPENSE_EDIT_DATES>) => {
resetSplitExpensesByDateRange(transaction, value[INPUT_IDS.START_DATE], value[INPUT_IDS.END_DATE]);
Navigation.goBack(backTo);
};

const isSplitAvailable = report && transaction && isSplitAction(currentReport, [transaction], originalTransaction, login ?? '', currentPolicy);
const isSplitAvailable = report && transaction && isSplitAction(currentReport, [transaction], originalTransaction, login ?? '', currentUserAccountID, currentPolicy);

const validate = (values: FormOnyxValues<typeof ONYXKEYS.FORMS.SPLIT_EXPENSE_EDIT_DATES>) => {
const errors: FormInputErrors<typeof ONYXKEYS.FORMS.SPLIT_EXPENSE_EDIT_DATES> = {};
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/SplitExpenseEditPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) {
const transactionTag = getTag(splitExpenseDraftTransaction);
const policyTagLists = useMemo(() => getTagLists(policyTags), [policyTags]);

const isSplitAvailable = report && transaction && isSplitAction(currentReport, [transaction], originalTransaction, login ?? '', currentPolicy);
const isSplitAvailable = report && transaction && isSplitAction(currentReport, [transaction], originalTransaction, login ?? '', currentUserAccountID, currentPolicy);

const isCategoryRequired = !!currentPolicy?.requiresCategory;
const reportName = computeReportName(currentReport, undefined, undefined, undefined, undefined, undefined, undefined, currentUserAccountID);
Expand Down
5 changes: 4 additions & 1 deletion src/pages/iou/SplitExpensePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,15 @@
? policy
: searchContext?.currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.POLICY}${getNonEmptyStringOnyxID(currentReport?.policyID)}`];

const isSplitAvailable = report && transaction && isSplitAction(currentReport, [transaction], originalTransaction, currentUserPersonalDetails.login ?? '', currentPolicy);
const isSplitAvailable =
report &&
transaction &&
isSplitAction(currentReport, [transaction], originalTransaction, currentUserPersonalDetails.login ?? '', currentUserPersonalDetails.accountID, currentPolicy);

const transactionDetails: Partial<TransactionDetails> = getTransactionDetails(transaction) ?? {};
const transactionDetailsAmount = transactionDetails?.amount ?? 0;
const sumOfSplitExpenses = (draftTransaction?.comment?.splitExpenses ?? []).reduce((acc, item) => acc + (item.amount ?? 0), 0);
const splitExpenses = draftTransaction?.comment?.splitExpenses ?? [];

Check warning on line 109 in src/pages/iou/SplitExpensePage.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

The 'splitExpenses' logical expression could make the dependencies of useEffect Hook (at line 141) change on every render. To fix this, wrap the initialization of 'splitExpenses' in its own useMemo() Hook

const currencySymbol = currencyList?.[transactionDetails.currency ?? '']?.symbol ?? transactionDetails.currency ?? CONST.CURRENCY.USD;

Expand Down
Loading
Loading