Skip to content

Add unreportedExpense to report page #60352

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
e365f44
cherry-pick all changes
sumo-slonik Apr 16, 2025
2cd8507
working solution
sumo-slonik Apr 18, 2025
2276cf0
fix navigation
sumo-slonik Apr 18, 2025
bdb86ef
working in progress
sumo-slonik Apr 22, 2025
fd6c7de
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik Apr 22, 2025
5f1a6b4
fixing optimistic data
sumo-slonik Apr 22, 2025
c521fd9
cleanup code
sumo-slonik Apr 22, 2025
72104dd
remove unnecessary button and add translations
sumo-slonik Apr 23, 2025
6d299e1
fix eslint's errors
sumo-slonik Apr 23, 2025
f77f2a8
tes canBeMissing removal
sumo-slonik Apr 23, 2025
989b2fc
fix css
sumo-slonik Apr 23, 2025
a667682
fix transaction type
sumo-slonik Apr 24, 2025
c73a641
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik Apr 24, 2025
011ad8f
fix canBeMissing for new report flow
sumo-slonik Apr 24, 2025
b948ef2
fix types after main marge
sumo-slonik Apr 24, 2025
9290800
fix error types after merge
sumo-slonik Apr 24, 2025
c033b39
fix position of circle and total amount
sumo-slonik Apr 28, 2025
1a71992
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik Apr 28, 2025
0d34323
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik Apr 29, 2025
46076bc
change unreported select icon
sumo-slonik Apr 29, 2025
10a37ae
fix checks
sumo-slonik Apr 29, 2025
075dcdc
changes after review
sumo-slonik Apr 30, 2025
bf64947
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik Apr 30, 2025
067a2aa
changes after review
sumo-slonik May 5, 2025
e758197
change names of styles
sumo-slonik May 5, 2025
4539fee
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 5, 2025
bafbf31
fix view style
sumo-slonik May 5, 2025
3b7099c
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 6, 2025
a0af98f
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 6, 2025
4a2f3d5
resolve conflicts
sumo-slonik May 6, 2025
4a4c882
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 6, 2025
c3404bd
fix prettier
sumo-slonik May 6, 2025
48a8abb
fix padding in unreported expense
sumo-slonik May 6, 2025
b622118
fixes after review
sumo-slonik May 7, 2025
d55b108
add error for unselected unreported expense
sumo-slonik May 7, 2025
86331e3
fix eslint
sumo-slonik May 7, 2025
adf631c
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 8, 2025
ed2ead3
resolve conflicts
sumo-slonik May 8, 2025
82b05b8
fix translation od error in unreported expense page
sumo-slonik May 8, 2025
ed77507
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 8, 2025
8ed14bf
Merge branch 'main' into feature/kuba-nowakowski/unreported_expense_p…
sumo-slonik May 8, 2025
0eb256c
fix export
sumo-slonik May 8, 2025
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: 4 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2401,6 +2401,10 @@ const ROUTES = {
route: 'settings/workspaces/:policyID/accounting/sage-intacct/advanced/payment-account',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/advanced/payment-account` as const,
},
ADD_UNREPORTED_EXPENSE: {
route: 'search/r/:reportID/add-unreported-expense',
getRoute: (reportID: string | undefined) => `search/r/${reportID}/add-unreported-expense` as const,
},
DEBUG_REPORT: {
route: 'debug/report/:reportID',
getRoute: (reportID: string | undefined) => `debug/report/${reportID}` as const,
Expand Down
2 changes: 2 additions & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ const SCREENS = {
REPORT_EXPORT: 'Report_Export',
MISSING_PERSONAL_DETAILS: 'MissingPersonalDetails',
DEBUG: 'Debug',
ADD_UNREPORTED_EXPENSE: 'AddUnreportedExpense',
SCHEDULE_CALL: 'ScheduleCall',
},
PUBLIC_CONSOLE_DEBUG: 'Console_Debug',
Expand Down Expand Up @@ -708,6 +709,7 @@ const SCREENS = {
FEATURE_TRAINING_ROOT: 'FeatureTraining_Root',
RESTRICTED_ACTION_ROOT: 'RestrictedAction_Root',
MISSING_PERSONAL_DETAILS_ROOT: 'MissingPersonalDetails_Root',
ADD_UNREPORTED_EXPENSES_ROOT: 'AddUnreportedExpenses_Root',
DEBUG: {
REPORT: 'Debug_Report',
REPORT_ACTION: 'Debug_Report_Action',
Expand Down
6 changes: 3 additions & 3 deletions src/components/EmptyStateComponent/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,16 @@ function EmptyStateComponent({
<Text style={[styles.textAlignCenter, styles.textSupporting, styles.textNormal]}>{subtitle}</Text>
{children}
{!isEmpty(buttons) && (
<View style={[styles.gap2, styles.mt5, !shouldUseNarrowLayout ? styles.flexRow : undefined]}>
{buttons?.map(({buttonText, buttonAction, success, icon, isDisabled}) => (
<View style={[styles.gap2, styles.mt5, !shouldUseNarrowLayout ? styles.flexRow : styles.mhAuto]}>
{buttons?.map(({buttonText, buttonAction, success, icon, isDisabled, style}) => (
<Button
success={success}
onPress={buttonAction}
text={buttonText}
icon={icon}
large
isDisabled={isDisabled}
style={styles.flex1}
style={[styles.flex1, style]}
/>
))}
</View>
Expand Down
2 changes: 1 addition & 1 deletion src/components/EmptyStateComponent/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import type IconAsset from '@src/types/utils/IconAsset';

type ValidSkeletons = typeof SearchRowSkeleton | typeof TableRowSkeleton;
type MediaTypes = ValueOf<typeof CONST.EMPTY_STATE_MEDIA>;
type Button = {buttonText?: string; buttonAction?: () => void; success?: boolean; icon?: IconAsset; isDisabled?: boolean};
type Button = {buttonText?: string; buttonAction?: () => void; success?: boolean; icon?: IconAsset; isDisabled?: boolean; style?: StyleProp<ViewStyle>};

type SharedProps<T> = {
SkeletonComponent?: ValidSkeletons;
Expand Down
7 changes: 7 additions & 0 deletions src/components/SelectionList/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import type {AnimatedStyle} from 'react-native-reanimated';
import type {SearchRouterItem} from '@components/Search/SearchAutocompleteList';
import type {SearchColumnType} from '@components/Search/types';
import type {BrickRoad} from '@libs/WorkspacesSettingsUtils';
import type UnreportedExpenseListItem from '@pages/UnreportedExpenseListItem';
import type SpendCategorySelectorListItem from '@pages/workspace/categories/SpendCategorySelectorListItem';
// eslint-disable-next-line no-restricted-imports
import type CursorStyles from '@styles/utils/cursor/types';
Expand All @@ -26,6 +27,7 @@ import type {Attendee} from '@src/types/onyx/IOU';
import type {Errors, Icon, PendingAction} from '@src/types/onyx/OnyxCommon';
import type {SearchPersonalDetails, SearchReport, SearchReportAction, SearchTask, SearchTransaction} from '@src/types/onyx/SearchResults';
import type {ReceiptErrors} from '@src/types/onyx/Transaction';
import type Transaction from '@src/types/onyx/Transaction';
import type ChildrenProps from '@src/types/utils/ChildrenProps';
import type IconAsset from '@src/types/utils/IconAsset';
import type ChatListItem from './ChatListItem';
Expand Down Expand Up @@ -383,6 +385,8 @@ type UserListItemProps<TItem extends ListItem> = ListItemProps<TItem> & {
FooterComponent?: ReactElement;
};

type TransactionSelectionListItem<TItem extends ListItem> = ListItemProps<TItem> & Transaction;

type InviteMemberListItemProps<TItem extends ListItem> = UserListItemProps<TItem>;

type RadioListItemProps<TItem extends ListItem> = ListItemProps<TItem>;
Expand Down Expand Up @@ -422,6 +426,7 @@ type ValidListItem =
| typeof SearchQueryListItem
| typeof SearchRouterItem
| typeof TravelDomainListItem
| typeof UnreportedExpenseListItem
| typeof SpendCategorySelectorListItem;

type Section<TItem extends ListItem> = {
Expand Down Expand Up @@ -776,6 +781,7 @@ export type {
FlattenedSectionsReturn,
InviteMemberListItemProps,
ListItem,
ListItemProps,
ListItemFocusEventHandler,
RadioListItemProps,
ReportListItemProps,
Expand All @@ -789,6 +795,7 @@ export type {
TaskListItemProps,
TransactionListItemProps,
TransactionListItemType,
TransactionSelectionListItem,
UserListItemProps,
ReportActionListItemType,
ChatListItemProps,
Expand Down
46 changes: 30 additions & 16 deletions src/components/TransactionItemRow/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import useHover from '@hooks/useHover';
import useStyleUtils from '@hooks/useStyleUtils';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {getCreated as getTransactionCreated} from '@libs/TransactionUtils';
import {getMerchant, getCreated as getTransactionCreated, isPartialMerchant} from '@libs/TransactionUtils';
import variables from '@styles/variables';
import CONST from '@src/CONST';
import CategoryCell from './DataCells/CategoryCell';
Expand All @@ -26,21 +26,21 @@ import TransactionItemRowRBR from './TransactionItemRowRBR';
function TransactionItemRow({
transactionItem,
shouldUseNarrowLayout,
shouldShowCheckbox,
isSelected,
shouldShowTooltip,
dateColumnSize,
shouldShowChatBubbleComponent = false,
onCheckboxPress,
shouldShowCheckbox = false,
}: {
transactionItem: TransactionWithOptionalHighlight;
shouldUseNarrowLayout: boolean;
shouldShowCheckbox: boolean;
isSelected: boolean;
shouldShowTooltip: boolean;
dateColumnSize: TableColumnSize;
shouldShowChatBubbleComponent?: boolean;
onCheckboxPress: (transactionID: string) => void;
shouldShowCheckbox: boolean;
}) {
const styles = useThemeStyles();
const StyleUtils = useStyleUtils();
Expand Down Expand Up @@ -69,6 +69,9 @@ function TransactionItemRow({
}
}, [hovered, isSelected, styles.activeComponentBG, styles.hoveredComponentBG]);

const merchantName = getMerchant(transactionItem);
const isMerchantEmpty = isPartialMerchant(merchantName);

return (
<View
style={[styles.flex1]}
Expand All @@ -80,7 +83,7 @@ function TransactionItemRow({
<View style={[styles.expenseWidgetRadius, styles.justifyContentEvenly, styles.gap3, bgActiveStyles]}>
<View style={[styles.flexRow, styles.mt3, styles.mr3, styles.ml3]}>
{shouldShowCheckbox && (
<View style={[styles.mr2, styles.justifyContentCenter]}>
<View style={[styles.mr3, styles.justifyContentCenter]}>
<Checkbox
onPress={() => {
onCheckboxPress(transactionItem.transactionID);
Expand Down Expand Up @@ -109,19 +112,30 @@ function TransactionItemRow({
shouldShowTooltip={shouldShowTooltip}
shouldUseNarrowLayout={shouldUseNarrowLayout}
/>
{isMerchantEmpty && (
<View style={[styles.mlAuto]}>
<TotalCell
transactionItem={transactionItem}
shouldShowTooltip={shouldShowTooltip}
shouldUseNarrowLayout={shouldUseNarrowLayout}
/>
</View>
)}
</View>
<View style={[styles.flexRow, styles.alignItemsCenter, styles.justifyContentBetween, styles.gap2]}>
<MerchantCell
transactionItem={transactionItem}
shouldShowTooltip={shouldShowTooltip}
shouldUseNarrowLayout={shouldUseNarrowLayout}
/>
<TotalCell
transactionItem={transactionItem}
shouldShowTooltip={shouldShowTooltip}
shouldUseNarrowLayout={shouldUseNarrowLayout}
/>
</View>
{!isMerchantEmpty && (
<View style={[styles.flexRow, styles.alignItemsCenter, styles.justifyContentBetween, styles.gap2]}>
<MerchantCell
transactionItem={transactionItem}
shouldShowTooltip={shouldShowTooltip}
shouldUseNarrowLayout={shouldUseNarrowLayout}
/>
<TotalCell
transactionItem={transactionItem}
shouldShowTooltip={shouldShowTooltip}
shouldUseNarrowLayout={shouldUseNarrowLayout}
/>
</View>
)}
</View>
</View>
<View style={[styles.flexRow, styles.justifyContentBetween, styles.mh3, styles.mb3]}>
Expand Down
6 changes: 6 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,12 @@ const translations = {
unholdExpense: 'Unhold expense',
heldExpense: 'held this expense',
unheldExpense: 'unheld this expense',
moveUnreportedExpense: 'Move unreported expense',
addUnreportedExpense: 'Add unreported expense',
selectUnreportedExpense: 'Select at least one expense to add to the report.',
emptyStateUnreportedExpenseTitle: 'No unreported expenses',
emptyStateUnreportedExpenseSubtitle: 'Looks like you don’t have any unreported expenses. Try creating one below.',
addUnreportedExpenseConfirm: 'Add to report',
explainHold: "Explain why you're holding this expense.",
reason: 'Reason',
holdReasonRequired: 'A reason is required when holding.',
Expand Down
6 changes: 6 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1111,6 +1111,12 @@ const translations = {
enableWallet: 'Habilitar billetera',
holdExpense: 'Retener gasto',
unholdExpense: 'Desbloquear gasto',
moveUnreportedExpense: 'Mover gasto no reportado',
addUnreportedExpense: 'Añadir gasto no reportado',
selectUnreportedExpense: 'Selecciona al menos un gasto para agregar al informe.',
emptyStateUnreportedExpenseTitle: 'No hay gastos no reportados',
emptyStateUnreportedExpenseSubtitle: 'Parece que no tienes gastos no reportados. Puedes crear uno a continuación.',
addUnreportedExpenseConfirm: 'Añadir al informe',
heldExpense: 'retuvo este gasto',
unheldExpense: 'desbloqueó este gasto',
explainHold: 'Explica la razón para retener esta solicitud.',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import createPlatformStackNavigator from '@libs/Navigation/PlatformStackNavigati
import Animations from '@libs/Navigation/PlatformStackNavigation/navigationOptions/animation';
import type {
AddPersonalBankAccountNavigatorParamList,
AddUnreportedExpensesParamList,
ConsoleNavigatorParamList,
DebugParamList,
EditRequestNavigatorParamList,
Expand Down Expand Up @@ -743,6 +744,10 @@ const MissingPersonalDetailsModalStackNavigator = createModalStackNavigator<Miss
[SCREENS.MISSING_PERSONAL_DETAILS_ROOT]: () => require<ReactComponentModule>('../../../../pages/MissingPersonalDetails').default,
});

const AddUnreportedExpenseModalStackNavigator = createModalStackNavigator<AddUnreportedExpensesParamList>({
[SCREENS.ADD_UNREPORTED_EXPENSES_ROOT]: () => require<ReactComponentModule>('../../../../pages/AddUnreportedExpense').default,
});

const DebugModalStackNavigator = createModalStackNavigator<DebugParamList>({
[SCREENS.DEBUG.REPORT]: () => require<ReactComponentModule>('../../../../pages/Debug/Report/DebugReportPage').default,
[SCREENS.DEBUG.REPORT_ACTION]: () => require<ReactComponentModule>('../../../../pages/Debug/ReportAction/DebugReportActionPage').default,
Expand Down Expand Up @@ -799,5 +804,6 @@ export {
DebugModalStackNavigator,
WorkspaceConfirmationModalStackNavigator,
ConsoleModalStackNavigator,
AddUnreportedExpenseModalStackNavigator,
ScheduleCallModalStackNavigator,
};
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,10 @@ function RightModalNavigator({navigation, route}: RightModalNavigatorProps) {
name={SCREENS.RIGHT_MODAL.MISSING_PERSONAL_DETAILS}
component={ModalStackNavigators.MissingPersonalDetailsModalStackNavigator}
/>
<Stack.Screen
name={SCREENS.RIGHT_MODAL.ADD_UNREPORTED_EXPENSE}
component={ModalStackNavigators.AddUnreportedExpenseModalStackNavigator}
/>
<Stack.Screen
name={SCREENS.RIGHT_MODAL.SCHEDULE_CALL}
component={ModalStackNavigators.ScheduleCallModalStackNavigator}
Expand Down
13 changes: 8 additions & 5 deletions src/libs/Navigation/helpers/getAdaptedStateFromPath.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type {OnyxCollection} from 'react-native-onyx';
import {isAnonymousUser} from '@libs/actions/Session';
import getInitialSplitNavigatorState from '@libs/Navigation/AppNavigator/createSplitNavigator/getInitialSplitNavigatorState';
import {config} from '@libs/Navigation/linkingConfig/config';
import {RHP_TO_SETTINGS, RHP_TO_SIDEBAR, RHP_TO_WORKSPACE, SEARCH_TO_RHP} from '@libs/Navigation/linkingConfig/RELATIONS';
import {RHP_TO_SEARCH, RHP_TO_SETTINGS, RHP_TO_SIDEBAR, RHP_TO_WORKSPACE} from '@libs/Navigation/linkingConfig/RELATIONS';
import type {NavigationPartialRoute, RootNavigatorParamList} from '@libs/Navigation/types';
import {extractPolicyIDFromPath, getPathWithoutPolicyID} from '@libs/PolicyUtils';
import NAVIGATORS from '@src/NAVIGATORS';
Expand Down Expand Up @@ -69,12 +69,15 @@ function getMatchingFullScreenRoute(route: NavigationPartialRoute, policyID?: st
return getMatchingFullScreenRoute(focusedStateForBackToRoute, policyID);
}

if (SEARCH_TO_RHP.includes(route.name)) {
const paramsFromRoute = getParamsFromRoute(SCREENS.SEARCH.ROOT);

if (RHP_TO_SEARCH[route.name]) {
const paramsFromRoute = getParamsFromRoute(RHP_TO_SEARCH[route.name]);
const searchRoute = {
name: RHP_TO_SEARCH[route.name],
params: paramsFromRoute.length > 0 ? pick(route.params, paramsFromRoute) : undefined,
};
return {
name: NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR,
params: paramsFromRoute.length > 0 ? pick(route.params, paramsFromRoute) : undefined,
state: getRoutesWithIndex([searchRoute]),
};
}

Expand Down
68 changes: 36 additions & 32 deletions src/libs/Navigation/linkingConfig/RELATIONS/SEARCH_TO_RHP.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,41 @@
import type {SearchFullscreenNavigatorParamList} from '@navigation/types';
import SCREENS from '@src/SCREENS';

// This file is used to define RHP screens that are in relation to the search screen.
const SEARCH_TO_RHP: string[] = [
SCREENS.SEARCH.REPORT_RHP,
SCREENS.SEARCH.TRANSACTION_HOLD_REASON_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CURRENCY_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_APPROVED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_PAID_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_EXPORTED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_POSTED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_DESCRIPTION_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_MERCHANT_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_REPORT_ID_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_AMOUNT_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CATEGORY_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_KEYWORD_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TAX_RATE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_EXPENSE_TYPE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TAG_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_FROM_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TO_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_IN_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_WORKSPACE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CARD_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TITLE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_ASSIGNEE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CREATED_BY_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_REIMBURSABLE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_BILLABLE_RHP,
SCREENS.SEARCH.SAVED_SEARCH_RENAME_RHP,
];
const SEARCH_TO_RHP: Partial<Record<keyof SearchFullscreenNavigatorParamList, string[]>> = {
[SCREENS.SEARCH.ROOT]: [
SCREENS.SEARCH.REPORT_RHP,
SCREENS.SEARCH.TRANSACTION_HOLD_REASON_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CURRENCY_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_APPROVED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_PAID_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_EXPORTED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_POSTED_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_DESCRIPTION_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_MERCHANT_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_REPORT_ID_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_AMOUNT_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CATEGORY_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_KEYWORD_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TAX_RATE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_EXPENSE_TYPE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TAG_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_FROM_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TO_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_IN_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_WORKSPACE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CARD_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_TITLE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_ASSIGNEE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_CREATED_BY_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_REIMBURSABLE_RHP,
SCREENS.SEARCH.ADVANCED_FILTERS_BILLABLE_RHP,
SCREENS.SEARCH.SAVED_SEARCH_RENAME_RHP,
],
[SCREENS.SEARCH.MONEY_REQUEST_REPORT]: [SCREENS.ADD_UNREPORTED_EXPENSES_ROOT],
};

export default SEARCH_TO_RHP;
Loading