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
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {View} from 'react-native';
import PrevNextButtons from '@components/PrevNextButtons';
import Text from '@components/Text';
import useArchivedReportsIdSet from '@hooks/useArchivedReportsIdSet';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useThemeStyles from '@hooks/useThemeStyles';
Expand All @@ -22,8 +23,7 @@ type MoneyRequestReportNavigationProps = {
function MoneyRequestReportNavigation({reportID, shouldDisplayNarrowVersion}: MoneyRequestReportNavigationProps) {
const [lastSearchQuery] = useOnyx(ONYXKEYS.REPORT_NAVIGATION_LAST_SEARCH_QUERY, {canBeMissing: true});
const [currentSearchResults] = useOnyx(`${ONYXKEYS.COLLECTION.SNAPSHOT}${lastSearchQuery?.queryJSON?.hash}`, {canBeMissing: true});
const [accountID] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false, selector: (s) => s?.accountID});

const currentUserDetails = useCurrentUserPersonalDetails();
const {localeCompare, formatPhoneNumber} = useLocalize();

const [exportReportActions] = useOnyx(ONYXKEYS.COLLECTION.REPORT_ACTIONS, {
Expand All @@ -37,7 +37,17 @@ function MoneyRequestReportNavigation({reportID, shouldDisplayNarrowVersion}: Mo
const {type, status, sortBy, sortOrder, groupBy} = lastSearchQuery?.queryJSON ?? {};
let results: Array<string | undefined> = [];
if (!!type && !!groupBy && !!currentSearchResults?.data && !!currentSearchResults?.search) {
const searchData = getSections(type, currentSearchResults.data, accountID, formatPhoneNumber, groupBy, exportReportActions, lastSearchQuery?.searchKey, archivedReportsIdSet);
const searchData = getSections(
type,
currentSearchResults.data,
currentUserDetails.accountID,
currentUserDetails.email ?? '',
formatPhoneNumber,
groupBy,
exportReportActions,
lastSearchQuery?.searchKey,
archivedReportsIdSet,
);
results = getSortedSections(type, status ?? '', searchData, localeCompare, sortBy, sortOrder, groupBy).map((value) => value.reportID);
}
const allReports = results;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import Modal from '@components/Modal';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider';
import {usePersonalDetails} from '@components/OnyxListItemProvider';
import {useSearchContext} from '@components/Search/SearchContext';
import type {SearchColumnType, SortOrder} from '@components/Search/types';
import Text from '@components/Text';
import {WideRHPContext} from '@components/WideRHPContextProvider';
import useCopySelectionHelper from '@hooks/useCopySelectionHelper';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
import useMobileSelectionMode from '@hooks/useMobileSelectionMode';
import useReportIsArchived from '@hooks/useReportIsArchived';
Expand Down Expand Up @@ -152,7 +153,7 @@ function MoneyRequestReportTransactionList({
const formattedCompanySpendAmount = convertToDisplayString(nonReimbursableSpend, report?.currency);
const shouldShowBreakdown = !!nonReimbursableSpend && !!reimbursableSpend;
const transactionsWithoutPendingDelete = useMemo(() => transactions.filter((t) => !isTransactionPendingDelete(t)), [transactions]);
const session = useSession();
const currentUserDetails = useCurrentUserPersonalDetails();
const isReportArchived = useReportIsArchived(report?.reportID);
const shouldShowAddExpenseButton = canAddTransaction(report, isReportArchived) && isCurrentUserSubmitter(report);
const addExpenseDropdownOptions = useMemo(() => getAddExpenseDropdownOptions(report?.reportID, policy), [report?.reportID, policy]);
Expand All @@ -176,7 +177,7 @@ function MoneyRequestReportTransactionList({
for (const transaction of transactions) {
const transactionViolations = violations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`];
if (transactionViolations) {
const filteredTransactionViolations = transactionViolations.filter((violation) => shouldShowViolation(report, policy, violation.name));
const filteredTransactionViolations = transactionViolations.filter((violation) => shouldShowViolation(report, policy, violation.name, currentUserDetails.email ?? ''));

if (filteredTransactionViolations.length > 0) {
filtered[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`] = filteredTransactionViolations;
Expand All @@ -185,7 +186,7 @@ function MoneyRequestReportTransactionList({
}

return filtered;
}, [violations, report, policy, transactions]);
}, [violations, report, policy, transactions, currentUserDetails.email]);

const toggleTransaction = useCallback(
(transactionID: string) => {
Expand Down Expand Up @@ -230,9 +231,9 @@ function MoneyRequestReportTransactionList({
}, [newTransactions, sortBy, sortOrder, transactions, localeCompare, report]);

const columnsToShow = useMemo(() => {
const columns = getColumnsToShow(session?.accountID, transactions, true);
const columns = getColumnsToShow(currentUserDetails?.accountID, transactions, true);
return (Object.keys(columns) as SearchColumnType[]).filter((column) => columns[column]);
}, [transactions, session?.accountID]);
}, [transactions, currentUserDetails?.accountID]);

/**
* Navigate to the transaction thread for a transaction, creating one optimistically if it doesn't yet exist.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ function MoneyRequestReportPreviewContent({
return getReportPreviewAction(
violations,
isIouReportArchived || isChatReportArchived,
currentUserDetails.email ?? '',
iouReport,
policy,
transactions,
Expand All @@ -492,6 +493,7 @@ function MoneyRequestReportPreviewContent({
isIouReportArchived,
invoiceReceiverPolicy,
isChatReportArchived,
currentUserDetails.email,
]);

const addExpenseDropdownOptions = useMemo(
Expand Down
11 changes: 5 additions & 6 deletions src/components/Search/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {findFocusedRoute, useFocusEffect, useIsFocused, useNavigation} from '@react-navigation/native';
import {accountIDSelector} from '@selectors/Session';
import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';
import type {NativeScrollEvent, NativeSyntheticEvent, StyleProp, ViewStyle} from 'react-native';
import {View} from 'react-native';
Expand Down Expand Up @@ -244,6 +243,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
const [reportActions] = useOnyx(ONYXKEYS.COLLECTION.REPORT_ACTIONS, {canBeMissing: true});
const [outstandingReportsByPolicyID] = useOnyx(ONYXKEYS.DERIVED.OUTSTANDING_REPORTS_BY_POLICY_ID, {canBeMissing: true});
const [violations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true});
const {accountID, email} = useCurrentUserPersonalDetails();

const [activePaidPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {
selector: activePaidPoliciesSelector,
Expand Down Expand Up @@ -276,7 +276,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
const transactionViolations = violations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`];
if (transactionViolations) {
const filteredTransactionViolations = transactionViolations.filter((violation) =>
shouldShowViolation(report as OnyxEntry<Report>, policy as OnyxEntry<Policy>, violation.name),
shouldShowViolation(report as OnyxEntry<Report>, policy as OnyxEntry<Policy>, violation.name, email ?? ''),
Comment thread
DylanDylann marked this conversation as resolved.
);

if (filteredTransactionViolations.length > 0) {
Expand All @@ -287,7 +287,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
}

return filtered;
}, [violations, searchResults]);
}, [violations, searchResults, email]);

const archivedReportsIdSet = useArchivedReportsIdSet();

Expand All @@ -298,7 +298,6 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
});

const {defaultCardFeed} = useCardFeedsForDisplay();
const [accountID] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false, selector: accountIDSelector});
const suggestedSearches = useMemo(() => getSuggestedSearches(accountID, defaultCardFeed?.id), [defaultCardFeed?.id, accountID]);

const searchKey = useMemo(() => Object.values(suggestedSearches).find((search) => search.similarSearchHash === similarSearchHash)?.key, [suggestedSearches, similarSearchHash]);
Expand Down Expand Up @@ -403,9 +402,9 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
return [[], 0];
}

const data1 = getSections(type, searchResults.data, accountID, formatPhoneNumber, groupBy, exportReportActions, searchKey, archivedReportsIdSet, queryJSON);
const data1 = getSections(type, searchResults.data, accountID, email ?? '', formatPhoneNumber, groupBy, exportReportActions, searchKey, archivedReportsIdSet, queryJSON);
return [data1, data1.length];
Comment thread
DylanDylann marked this conversation as resolved.
}, [searchKey, exportReportActions, groupBy, isDataLoaded, searchResults, type, archivedReportsIdSet, formatPhoneNumber, accountID, queryJSON]);
}, [searchKey, exportReportActions, groupBy, isDataLoaded, searchResults, type, archivedReportsIdSet, formatPhoneNumber, accountID, queryJSON, email]);

useEffect(() => {
/** We only want to display the skeleton for the status filters the first time we load them for a specific data type */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type {ListItem, TransactionGroupListExpandedProps, TransactionListItemTyp
import Text from '@components/Text';
import TransactionItemRow from '@components/TransactionItemRow';
import {WideRHPContext} from '@components/WideRHPContextProvider';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useTheme from '@hooks/useTheme';
Expand Down Expand Up @@ -46,6 +47,7 @@ function TransactionGroupListExpanded<TItem extends ListItem>({
}: TransactionGroupListExpandedProps<TItem>) {
const theme = useTheme();
const styles = useThemeStyles();
const currentUserDetails = useCurrentUserPersonalDetails();
const {translate} = useLocalize();
const {currentSearchHash} = useSearchContext();
const transactionsSnapshotMetadata = useMemo(() => {
Expand Down Expand Up @@ -181,7 +183,7 @@ function TransactionGroupListExpanded<TItem extends ListItem>({
<TransactionItemRow
report={transaction.report}
transactionItem={transaction}
violations={getTransactionViolations(transaction, violations)}
violations={getTransactionViolations(transaction, violations, currentUserDetails.email ?? '')}
isSelected={!!transaction.isSelected}
dateColumnSize={dateColumnSize}
amountColumnSize={amountColumnSize}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import type {
TransactionWithdrawalIDGroupListItemType,
} from '@components/SelectionListWithSections/types';
import useAnimatedHighlightStyle from '@hooks/useAnimatedHighlightStyle';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useStyleUtils from '@hooks/useStyleUtils';
Expand Down Expand Up @@ -64,6 +65,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
const styles = useThemeStyles();
const {formatPhoneNumber} = useLocalize();
const {selectedTransactions} = useSearchContext();
const currentUserDetails = useCurrentUserPersonalDetails();

const oneTransactionItem = groupItem.isOneTransactionReport ? groupItem.transactions.at(0) : undefined;
const [parentReport] = originalUseOnyx(`${ONYXKEYS.COLLECTION.REPORT}${oneTransactionItem?.reportID}`, {canBeMissing: true});
Expand Down Expand Up @@ -96,12 +98,18 @@ function TransactionGroupListItem<TItem extends ListItem>({
if (!transactionsSnapshot?.data) {
return [];
}
const sectionData = getSections(CONST.SEARCH.DATA_TYPES.EXPENSE, transactionsSnapshot?.data, accountID, formatPhoneNumber) as TransactionListItemType[];
const sectionData = getSections(
CONST.SEARCH.DATA_TYPES.EXPENSE,
transactionsSnapshot?.data,
accountID,
currentUserDetails.email ?? '',
formatPhoneNumber,
) as TransactionListItemType[];
return sectionData.map((transactionItem) => ({
...transactionItem,
isSelected: selectedTransactionIDsSet.has(transactionItem.transactionID),
}));
}, [isGroupByReports, transactionsSnapshot?.data, accountID, formatPhoneNumber, groupItem.transactions, selectedTransactionIDsSet]);
}, [isGroupByReports, transactionsSnapshot?.data, accountID, formatPhoneNumber, groupItem.transactions, selectedTransactionIDsSet, currentUserDetails.email]);

const selectedItemsLength = useMemo(() => {
return transactions.reduce((acc, transaction) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {useSearchContext} from '@components/Search/SearchContext';
import type {ListItem, TransactionListItemProps, TransactionListItemType} from '@components/SelectionListWithSections/types';
import TransactionItemRow from '@components/TransactionItemRow';
import useAnimatedHighlightStyle from '@hooks/useAnimatedHighlightStyle';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useOnyx from '@hooks/useOnyx';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useStyleUtils from '@hooks/useStyleUtils';
Expand Down Expand Up @@ -70,6 +71,7 @@ function TransactionListItem<TItem extends ListItem>({
const [parentReportAction] = originalUseOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionItem.reportID}`, {selector: parentReportActionSelector, canBeMissing: true}, [
transactionItem,
]);
const currentUserDetails = useCurrentUserPersonalDetails();
const transactionPreviewData: TransactionPreviewData = useMemo(
() => ({hasParentReport: !!parentReport, hasTransaction: !!transaction, hasParentReportAction: !!parentReportAction, hasTransactionThreadReport: !!transactionThreadReport}),
[parentReport, transaction, parentReportAction, transactionThreadReport],
Expand Down Expand Up @@ -99,9 +101,11 @@ function TransactionListItem<TItem extends ListItem>({

const transactionViolations = useMemo(() => {
return (violations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionItem.transactionID}`] ?? []).filter(
(violation: TransactionViolation) => !isViolationDismissed(transactionItem, violation) && shouldShowViolation(snapshotReport, snapshotPolicy as Policy, violation.name, false),
(violation: TransactionViolation) =>
!isViolationDismissed(transactionItem, violation, currentUserDetails.email ?? '') &&
shouldShowViolation(snapshotReport, snapshotPolicy as Policy, violation.name, currentUserDetails.email ?? '', false),
);
}, [snapshotPolicy, snapshotReport, transactionItem, violations]);
}, [snapshotPolicy, snapshotReport, transactionItem, violations, currentUserDetails.email]);

const handleActionButtonPress = useCallback(() => {
handleActionButtonPressUtil(
Expand Down
8 changes: 6 additions & 2 deletions src/hooks/useTransactionViolations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {isViolationDismissed, shouldShowViolation} from '@libs/TransactionUtils'
import ONYXKEYS from '@src/ONYXKEYS';
import type {TransactionViolation, TransactionViolations} from '@src/types/onyx';
import getEmptyArray from '@src/types/utils/getEmptyArray';
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
import useOnyx from './useOnyx';

function useTransactionViolations(transactionID?: string, shouldShowRterForSettledReport = true): TransactionViolations {
Expand All @@ -19,13 +20,16 @@ function useTransactionViolations(transactionID?: string, shouldShowRterForSettl
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${iouReport?.policyID}`, {
canBeMissing: true,
});
const currentUserDetails = useCurrentUserPersonalDetails();

return useMemo(
() =>
transactionViolations.filter(
(violation: TransactionViolation) => !isViolationDismissed(transaction, violation) && shouldShowViolation(iouReport, policy, violation.name, shouldShowRterForSettledReport),
(violation: TransactionViolation) =>
!isViolationDismissed(transaction, violation, currentUserDetails.email ?? '') &&
shouldShowViolation(iouReport, policy, violation.name, currentUserDetails.email ?? '', shouldShowRterForSettledReport),
),
[transaction, transactionViolations, iouReport, policy, shouldShowRterForSettledReport],
[transaction, transactionViolations, iouReport, policy, shouldShowRterForSettledReport, currentUserDetails.email],
);
}

Expand Down
6 changes: 4 additions & 2 deletions src/hooks/useTransactionsAndViolationsForReport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import {getTransactionViolations} from '@libs/TransactionUtils';
import ONYXKEYS from '@src/ONYXKEYS';
import type {TransactionViolations} from '@src/types/onyx';
import type {ReportTransactionsAndViolations} from '@src/types/onyx/DerivedValues';
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';

const DEFAULT_RETURN_VALUE: ReportTransactionsAndViolations = {transactions: {}, violations: {}};

function useTransactionsAndViolationsForReport(reportID?: string) {
const allReportsTransactionsAndViolations = useAllReportsTransactionsAndViolations();
const currentUserDetails = useCurrentUserPersonalDetails();

const {transactions, violations} = reportID ? (allReportsTransactionsAndViolations?.[reportID] ?? DEFAULT_RETURN_VALUE) : DEFAULT_RETURN_VALUE;

Expand All @@ -20,14 +22,14 @@ function useTransactionsAndViolationsForReport(reportID?: string) {

// This is our accumulator, it's okay to reassign
// eslint-disable-next-line no-param-reassign
filteredTransactionViolations[transactionViolationKey] = getTransactionViolations(transaction, violations) ?? [];
filteredTransactionViolations[transactionViolationKey] = getTransactionViolations(transaction, violations, currentUserDetails.email ?? '') ?? [];
return filteredTransactionViolations;
},
{} as Record<string, TransactionViolations>,
);

return {transactions, violations: filteredViolations};
}, [transactions, violations]);
}, [transactions, violations, currentUserDetails?.email]);

return transactionsAndViolations;
}
Expand Down
Loading
Loading