Skip to content
Closed
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
12 changes: 4 additions & 8 deletions src/hooks/usePolicyForMovingExpenses.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {activePolicySelector} from '@selectors/Policy';
import type {OnyxEntry} from 'react-native-onyx';
import {useSession} from '@components/OnyxListItemProvider';
import {canSubmitPerDiemExpenseFromWorkspace, isPaidGroupPolicy, isPolicyMemberWithoutPendingDelete} from '@libs/PolicyUtils';
import {isPaidGroupPolicy, isPolicyMemberWithoutPendingDelete} from '@libs/PolicyUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Policy} from '@src/types/onyx';
Expand All @@ -20,7 +20,7 @@ function isPolicyMemberByRole(policy: OnyxEntry<Policy>) {
return !!policy?.role && Object.values(CONST.POLICY.ROLE).includes(policy.role);
}

function usePolicyForMovingExpenses(isPerDiemRequest?: boolean) {
function usePolicyForMovingExpenses() {
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID, {canBeMissing: true});
const [activePolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${activePolicyID}`, {
Expand All @@ -32,15 +32,11 @@ function usePolicyForMovingExpenses(isPerDiemRequest?: boolean) {
const login = session?.email ?? '';
const userPolicies = Object.values(allPolicies ?? {}).filter(
(policy) =>
checkForUserPendingDelete(login, policy) &&
isPolicyMemberByRole(policy) &&
isPaidGroupPolicy(policy) &&
policy?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE &&
(!isPerDiemRequest || canSubmitPerDiemExpenseFromWorkspace(policy)),
checkForUserPendingDelete(login, policy) && isPolicyMemberByRole(policy) && isPaidGroupPolicy(policy) && policy?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE,
);
const isMemberOfMoreThanOnePolicy = userPolicies.length > 1;

if (activePolicy && (!isPerDiemRequest || canSubmitPerDiemExpenseFromWorkspace(activePolicy))) {
if (activePolicy) {
return {policyForMovingExpensesID: activePolicyID, policyForMovingExpenses: activePolicy, shouldSelectPolicy: false};
}

Expand Down
25 changes: 3 additions & 22 deletions src/pages/NewReportWorkspaceSelectionPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ import Navigation from '@libs/Navigation/Navigation';
import type {NewReportWorkspaceSelectionNavigatorParamList} from '@libs/Navigation/types';
import {getHeaderMessageForNonUserList} from '@libs/OptionsListUtils';
import Permissions from '@libs/Permissions';
import {canSubmitPerDiemExpenseFromWorkspace, isPolicyAdmin, shouldShowPolicy} from '@libs/PolicyUtils';
import {isPolicyAdmin, shouldShowPolicy} from '@libs/PolicyUtils';
import {getDefaultWorkspaceAvatar, hasViolations as hasViolationsReportUtils} from '@libs/ReportUtils';
import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils';
import {isPerDiemRequest} from '@libs/TransactionUtils';
import isRHPOnSearchMoneyRequestReportPage from '@navigation/helpers/isRHPOnSearchMoneyRequestReportPage';
import type {PlatformStackScreenProps} from '@navigation/PlatformStackNavigation/types';
import {changeTransactionsReport} from '@userActions/Transaction';
Expand Down Expand Up @@ -60,7 +59,6 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID, {canBeMissing: true});

const [policies, fetchStatus] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {canBeMissing: true});
const currentUserPersonalDetails = useCurrentUserPersonalDetails();

const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP, {canBeMissing: true});
Expand Down Expand Up @@ -135,30 +133,13 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
],
);

const hasPerDiemTransactions = useMemo(() => {
if (selectedTransactionIDs && selectedTransactionIDs.length > 0 && allTransactions) {
return selectedTransactionIDs.some((transactionID) => {
const transaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
return transaction && isPerDiemRequest(transaction);
});
}

return false;
}, [selectedTransactionIDs, allTransactions]);

const usersWorkspaces = useMemo<WorkspaceListItem[]>(() => {
if (!policies || isEmptyObject(policies)) {
return [];
}

return Object.values(policies)
.filter(
(policy) =>
shouldShowPolicy(policy, !!isOffline, currentUserPersonalDetails?.login) &&
!policy?.isJoinRequestPending &&
policy?.isPolicyExpenseChatEnabled &&
(!hasPerDiemTransactions || canSubmitPerDiemExpenseFromWorkspace(policy)),
)
.filter((policy) => shouldShowPolicy(policy, !!isOffline, currentUserPersonalDetails?.login) && !policy?.isJoinRequestPending && policy?.isPolicyExpenseChatEnabled)
.map((policy) => ({
text: policy?.name ?? '',
policyID: policy?.id,
Expand All @@ -176,7 +157,7 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
shouldSyncFocus: true,
}))
.sort((a, b) => localeCompare(a.text, b.text));
}, [policies, isOffline, currentUserPersonalDetails?.login, localeCompare, hasPerDiemTransactions]);
}, [policies, isOffline, currentUserPersonalDetails?.login, localeCompare]);

const filteredAndSortedUserWorkspaces = useMemo<WorkspaceListItem[]>(
() => usersWorkspaces.filter((policy) => policy.text?.toLowerCase().includes(debouncedSearchTerm?.toLowerCase() ?? '')),
Expand Down
15 changes: 2 additions & 13 deletions src/pages/iou/request/step/IOURequestEditReport.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, {useMemo} from 'react';
import React from 'react';
import {useSession} from '@components/OnyxListItemProvider';
import {useSearchContext} from '@components/Search/SearchContext';
import type {ListItem} from '@components/SelectionListWithSections/types';
Expand All @@ -11,7 +11,6 @@ import Navigation from '@libs/Navigation/Navigation';
import Permissions from '@libs/Permissions';
import {hasViolations as hasViolationsReportUtils} from '@libs/ReportUtils';
import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils';
import {isPerDiemRequest} from '@libs/TransactionUtils';
import {createNewReport} from '@userActions/Report';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
Expand Down Expand Up @@ -40,17 +39,8 @@ function IOURequestEditReport({route}: IOURequestEditReportProps) {
const session = useSession();
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
const [allPolicyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}`, {canBeMissing: true});
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {canBeMissing: true});
const currentUserPersonalDetails = useCurrentUserPersonalDetails();

const hasPerDiemTransactions = useMemo(() => {
return selectedTransactionIDs.some((transactionID) => {
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
return transaction && isPerDiemRequest(transaction);
});
}, [selectedTransactionIDs, allTransactions]);

const {policyForMovingExpensesID, shouldSelectPolicy} = usePolicyForMovingExpenses(hasPerDiemTransactions);
const {policyForMovingExpensesID, shouldSelectPolicy} = usePolicyForMovingExpenses();
const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true});
const hasViolations = hasViolationsReportUtils(undefined, transactionViolations);

Expand Down Expand Up @@ -112,7 +102,6 @@ function IOURequestEditReport({route}: IOURequestEditReportProps) {
removeFromReport={removeFromReport}
isEditing={action === CONST.IOU.ACTION.EDIT}
createReport={createReport}
isPerDiemRequest={hasPerDiemTransactions}
/>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ function IOURequestEditReportCommon({
const [selectedReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${selectedReportID}`, {canBeMissing: true});
const reportOwnerAccountID = useMemo(() => selectedReport?.ownerAccountID ?? currentUserPersonalDetails.accountID, [selectedReport, currentUserPersonalDetails.accountID]);
const reportPolicy = usePolicy(selectedReport?.policyID);
const {policyForMovingExpenses} = usePolicyForMovingExpenses(isPerDiemRequest);
const {policyForMovingExpenses} = usePolicyForMovingExpenses();

const [reportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS, {canBeMissing: true});

Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepReport.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ function IOURequestStepReport({route, transaction}: IOURequestStepReportProps) {
const isASAPSubmitBetaEnabled = Permissions.isBetaEnabled(CONST.BETAS.ASAP_SUBMIT, allBetas);
const session = useSession();
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
const {policyForMovingExpensesID, shouldSelectPolicy} = usePolicyForMovingExpenses(isPerDiemRequest(transaction));
const {policyForMovingExpensesID, shouldSelectPolicy} = usePolicyForMovingExpenses();
const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true});
const hasViolations = hasViolationsReportUtils(undefined, transactionViolations);
useRestartOnReceiptFailure(transaction, reportIDFromRoute, iouType, action);
Expand Down
Loading