diff --git a/src/ROUTES.ts b/src/ROUTES.ts index ae7781318c52..d09e614d64dd 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -619,21 +619,33 @@ const ROUTES = { route: 'settings/workspaces/:policyID/workflows', getRoute: (policyID: string) => `settings/workspaces/${policyID}/workflows` as const, }, - WORKSPACE_WORKFLOWS_PAYER: { - route: 'workspace/:policyID/settings/workflows/payer', - getRoute: (policyId: string) => `workspace/${policyId}/settings/workflows/payer` as const, + WORKSPACE_WORKFLOWS_APPROVALS_NEW: { + route: 'settings/workspaces/:policyID/workflows/approvals/new', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/workflows/approvals/new` as const, + }, + WORKSPACE_WORKFLOWS_APPROVALS_EDIT: { + route: 'settings/workspaces/:policyID/workflows/approvals/:firstApproverEmail/edit', + getRoute: (policyID: string, firstApproverEmail: string) => `settings/workspaces/${policyID}/workflows/approvals/${encodeURIComponent(firstApproverEmail)}/edit` as const, + }, + WORKSPACE_WORKFLOWS_APPROVALS_EXPENSES_FROM: { + route: 'settings/workspaces/:policyID/workflows/approvals/expenses-from', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/workflows/approvals/expenses-from` as const, }, - WORKSPACE_WORKFLOWS_APPROVER: { - route: 'settings/workspaces/:policyID/settings/workflows/approver', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/settings/workflows/approver` as const, + WORKSPACE_WORKFLOWS_APPROVALS_APPROVER: { + route: 'settings/workspaces/:policyID/workflows/approvals/approver', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/workflows/approvals/approver` as const, + }, + WORKSPACE_WORKFLOWS_PAYER: { + route: 'settings/workspaces/:policyID/workflows/payer', + getRoute: (policyId: string) => `settings/workspaces/${policyId}/workflows/payer` as const, }, WORKSPACE_WORKFLOWS_AUTOREPORTING_FREQUENCY: { - route: 'settings/workspaces/:policyID/settings/workflows/auto-reporting-frequency', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/settings/workflows/auto-reporting-frequency` as const, + route: 'settings/workspaces/:policyID/workflows/auto-reporting-frequency', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/workflows/auto-reporting-frequency` as const, }, WORKSPACE_WORKFLOWS_AUTOREPORTING_MONTHLY_OFFSET: { - route: 'settings/workspaces/:policyID/settings/workflows/auto-reporting-frequency/monthly-offset', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/settings/workflows/auto-reporting-frequency/monthly-offset` as const, + route: 'settings/workspaces/:policyID/workflows/auto-reporting-frequency/monthly-offset', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/workflows/auto-reporting-frequency/monthly-offset` as const, }, WORKSPACE_CARD: { route: 'settings/workspaces/:policyID/card', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index d7d56089876d..ec530defc5bc 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -396,7 +396,10 @@ const SCREENS = { ADDRESS: 'Workspace_Profile_Address', WORKFLOWS: 'Workspace_Workflows', WORKFLOWS_PAYER: 'Workspace_Workflows_Payer', - WORKFLOWS_APPROVER: 'Workspace_Workflows_Approver', + WORKFLOWS_APPROVALS_NEW: 'Workspace_Approvals_New', + WORKFLOWS_APPROVALS_EDIT: 'Workspace_Approvals_Edit', + WORKFLOWS_APPROVALS_EXPENSES_FROM: 'Workspace_Workflows_Approvals_Expenses_From', + WORKFLOWS_APPROVALS_APPROVER: 'Workspace_Workflows_Approvals_Approver', WORKFLOWS_AUTO_REPORTING_FREQUENCY: 'Workspace_Workflows_Auto_Reporting_Frequency', WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET: 'Workspace_Workflows_Auto_Reporting_Monthly_Offset', DESCRIPTION: 'Workspace_Profile_Description', diff --git a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts index 551a30cba46e..82e7d4f30a85 100644 --- a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts +++ b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts @@ -1,7 +1,10 @@ import NAVIGATORS from '@src/NAVIGATORS'; import SCREENS from '@src/SCREENS'; -// Screens that should not have active focus trap when rendered on wide screen in order to allow Tab navigation in LHP and RHP +/** + * Screens displayed in the BottomTab and CentralPane displayed side by side that should not have active + * focus trap when rendered on a wide screen to allow navigation between them using the keyboard + */ const WIDE_LAYOUT_INACTIVE_SCREENS: string[] = [ NAVIGATORS.BOTTOM_TAB_NAVIGATOR, SCREENS.HOME, @@ -14,13 +17,11 @@ const WIDE_LAYOUT_INACTIVE_SCREENS: string[] = [ SCREENS.SETTINGS.ABOUT, SCREENS.SETTINGS.WORKSPACES, SCREENS.SETTINGS.SUBSCRIPTION.ROOT, + SCREENS.WORKSPACE.ACCOUNTING.ROOT, SCREENS.WORKSPACE.INITIAL, SCREENS.WORKSPACE.PROFILE, SCREENS.WORKSPACE.CARD, SCREENS.WORKSPACE.WORKFLOWS, - SCREENS.WORKSPACE.WORKFLOWS_APPROVER, - SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY, - SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET, SCREENS.WORKSPACE.REIMBURSE, SCREENS.WORKSPACE.BILLS, SCREENS.WORKSPACE.INVOICES, diff --git a/src/languages/en.ts b/src/languages/en.ts index e101be918fa1..23a13020ff05 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1273,6 +1273,15 @@ export default { autoReportingFrequencyErrorMessage: "Submission frequency couldn't be changed. Please try again or contact support.", monthlyOffsetErrorMessage: "Monthly frequency couldn't be changed. Please try again or contact support.", }, + workflowsCreateApprovalsPage: { + title: 'Add approval workflow', + }, + workflowsEditApprovalsPage: { + title: 'Edit approval workflow', + }, + workflowsExpensesFromPage: { + title: 'Expenses from', + }, workflowsApprovalPage: { genericErrorMessage: "The approver couldn't be changed. Please try again or contact support.", }, diff --git a/src/languages/es.ts b/src/languages/es.ts index cf9d49a04c86..c17a98967b31 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1282,6 +1282,15 @@ export default { autoReportingFrequencyErrorMessage: 'La frecuencia de envío no pudo ser cambiada. Por favor, inténtelo de nuevo o contacte al soporte.', monthlyOffsetErrorMessage: 'La frecuencia mensual no pudo ser cambiada. Por favor, inténtelo de nuevo o contacte al soporte.', }, + workflowsCreateApprovalsPage: { + title: 'Añadir flujo de aprobación', + }, + workflowsEditApprovalsPage: { + title: 'Edicion flujo de aprobación', + }, + workflowsExpensesFromPage: { + title: 'Gastos de', + }, workflowsApprovalPage: { genericErrorMessage: 'El aprobador no pudo ser cambiado. Por favor, inténtelo de nuevo o contacte al soporte.', }, diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index d22efe973eeb..583cae49df21 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -222,7 +222,11 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/reimburse/WorkspaceRateAndUnitPage/RatePage').default, [SCREENS.WORKSPACE.RATE_AND_UNIT_UNIT]: () => require('../../../../pages/workspace/reimburse/WorkspaceRateAndUnitPage/UnitPage').default, [SCREENS.WORKSPACE.INVITE]: () => require('../../../../pages/workspace/WorkspaceInvitePage').default, - [SCREENS.WORKSPACE.WORKFLOWS_APPROVER]: () => require('../../../../pages/workspace/workflows/WorkspaceWorkflowsApproverPage').default, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_NEW]: () => require('../../../../pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage').default, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EDIT]: () => require('../../../../pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage').default, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EXPENSES_FROM]: () => + require('../../../../pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsExpensesFromPage').default, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_APPROVER]: () => require('../../../../pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage').default, [SCREENS.WORKSPACE.INVITE_MESSAGE]: () => require('../../../../pages/workspace/WorkspaceInviteMessagePage').default, [SCREENS.WORKSPACE.WORKFLOWS_PAYER]: () => require('../../../../pages/workspace/workflows/WorkspaceWorkflowsPayerPage').default, [SCREENS.WORKSPACE.NAME]: () => require('../../../../pages/workspace/WorkspaceNamePage').default, diff --git a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts index 8cbb1d25f455..c27ccaab5176 100755 --- a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts +++ b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts @@ -14,7 +14,10 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial> = { SCREENS.WORKSPACE.OWNER_CHANGE_ERROR, ], [SCREENS.WORKSPACE.WORKFLOWS]: [ - SCREENS.WORKSPACE.WORKFLOWS_APPROVER, + SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_NEW, + SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EDIT, + SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EXPENSES_FROM, + SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_APPROVER, SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY, SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET, SCREENS.WORKSPACE.WORKFLOWS_PAYER, diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 77fafb9fba4d..17b6d8149070 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -504,8 +504,17 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.INVITE]: { path: ROUTES.WORKSPACE_INVITE.route, }, - [SCREENS.WORKSPACE.WORKFLOWS_APPROVER]: { - path: ROUTES.WORKSPACE_WORKFLOWS_APPROVER.route, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_NEW]: { + path: ROUTES.WORKSPACE_WORKFLOWS_APPROVALS_NEW.route, + }, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EDIT]: { + path: ROUTES.WORKSPACE_WORKFLOWS_APPROVALS_EDIT.route, + }, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EXPENSES_FROM]: { + path: ROUTES.WORKSPACE_WORKFLOWS_APPROVALS_EXPENSES_FROM.route, + }, + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_APPROVER]: { + path: ROUTES.WORKSPACE_WORKFLOWS_APPROVALS_APPROVER.route, }, [SCREENS.WORKSPACE.INVITE_MESSAGE]: { path: ROUTES.WORKSPACE_INVITE_MESSAGE.route, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 140c978fa0f8..fadce5727fce 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1107,7 +1107,17 @@ type FullScreenNavigatorParamList = { [SCREENS.WORKSPACE.WORKFLOWS]: { policyID: string; }; - [SCREENS.WORKSPACE.WORKFLOWS_APPROVER]: { + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_NEW]: { + policyID: string; + }; + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EDIT]: { + policyID: string; + firstApproverEmail: string; + }; + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EXPENSES_FROM]: { + policyID: string; + }; + [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_APPROVER]: { policyID: string; }; [SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY]: { diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index 09a5e5b42466..dbd7a7cb3a58 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -25,7 +25,10 @@ type PolicyRoute = RouteProp< | typeof SCREENS.WORKSPACE.INVITE_MESSAGE | typeof SCREENS.WORKSPACE.WORKFLOWS_PAYER | typeof SCREENS.WORKSPACE.WORKFLOWS - | typeof SCREENS.WORKSPACE.WORKFLOWS_APPROVER + | typeof SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_NEW + | typeof SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EDIT + | typeof SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_EXPENSES_FROM + | typeof SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_APPROVER | typeof SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET | typeof SCREENS.WORKSPACE.TRAVEL | typeof SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY diff --git a/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx b/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx index da1b23176054..533fdff34893 100644 --- a/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx +++ b/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx @@ -147,7 +147,7 @@ function WorkspaceWorkflowsPage({policy, betas, route}: WorkspaceWorkflowsPagePr titleStyle={styles.textLabelSupportingNormal} descriptionTextStyle={styles.textNormalThemeText} description={policyApproverName ?? ''} - onPress={() => Navigation.navigate(ROUTES.WORKSPACE_WORKFLOWS_APPROVER.getRoute(route.params.policyID))} + onPress={() => Navigation.navigate(ROUTES.WORKSPACE_WORKFLOWS_APPROVALS_APPROVER.getRoute(route.params.policyID))} shouldShowRightIcon wrapperStyle={containerStyle} hoverAndPressStyle={[styles.mr0, styles.br2]} diff --git a/src/pages/workspace/workflows/WorkspaceWorkflowsApproverPage.tsx b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx similarity index 90% rename from src/pages/workspace/workflows/WorkspaceWorkflowsApproverPage.tsx rename to src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx index 05d2eb0eb7be..8e9005c46587 100644 --- a/src/pages/workspace/workflows/WorkspaceWorkflowsApproverPage.tsx +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx @@ -28,18 +28,18 @@ import type SCREENS from '@src/SCREENS'; import type {PersonalDetailsList, PolicyEmployee} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -type WorkspaceWorkflowsApproverPageOnyxProps = { +type WorkspaceWorkflowsApprovalsApproverPageOnyxProps = { /** All of the personal details for everyone */ personalDetails: OnyxEntry; }; -type WorkspaceWorkflowsApproverPageProps = WorkspaceWorkflowsApproverPageOnyxProps & +type WorkspaceWorkflowsApprovalsApproverPageProps = WorkspaceWorkflowsApprovalsApproverPageOnyxProps & WithPolicyAndFullscreenLoadingProps & - StackScreenProps; + StackScreenProps; type MemberOption = Omit & {accountID: number}; type MembersSection = SectionListData>; -function WorkspaceWorkflowsApproverPage({policy, personalDetails, isLoadingReportData = true, route}: WorkspaceWorkflowsApproverPageProps) { +function WorkspaceWorkflowsApprovalsApproverPage({policy, personalDetails, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsApproverPageProps) { const {translate} = useLocalize(); const policyName = policy?.name ?? ''; const [searchTerm, setSearchTerm] = useState(''); @@ -154,6 +154,9 @@ function WorkspaceWorkflowsApproverPage({policy, personalDetails, isLoadingRepor Navigation.goBack(); }; + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundView = (isEmptyObject(policy) && !isLoadingReportData) || !PolicyUtils.isPolicyAdmin(policy) || PolicyUtils.isPendingDeletePolicy(policy); + return ( ; + +function WorkspaceWorkflowsApprovalsCreatePage({policy, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsCreatePageProps) { + const {translate} = useLocalize(); + + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundView = (isEmptyObject(policy) && !isLoadingReportData) || !PolicyUtils.isPolicyAdmin(policy) || PolicyUtils.isPendingDeletePolicy(policy); + + return ( + + + + + + + + ); +} + +WorkspaceWorkflowsApprovalsCreatePage.displayName = 'WorkspaceWorkflowsApprovalsCreatePage'; + +export default withPolicyAndFullscreenLoading(WorkspaceWorkflowsApprovalsCreatePage); diff --git a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx new file mode 100644 index 000000000000..8b55831b276c --- /dev/null +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx @@ -0,0 +1,52 @@ +import type {StackScreenProps} from '@react-navigation/stack'; +import React from 'react'; +import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import useLocalize from '@hooks/useLocalize'; +import Navigation from '@libs/Navigation/Navigation'; +import type {FullScreenNavigatorParamList} from '@libs/Navigation/types'; +import * as PolicyUtils from '@libs/PolicyUtils'; +import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; +import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading'; +import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading'; +import CONST from '@src/CONST'; +import type SCREENS from '@src/SCREENS'; +import {isEmptyObject} from '@src/types/utils/EmptyObject'; + +type WorkspaceWorkflowsApprovalsEditPageProps = WithPolicyAndFullscreenLoadingProps & StackScreenProps; + +function WorkspaceWorkflowsApprovalsEditPage({policy, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsEditPageProps) { + const {translate} = useLocalize(); + + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundView = (isEmptyObject(policy) && !isLoadingReportData) || !PolicyUtils.isPolicyAdmin(policy) || PolicyUtils.isPendingDeletePolicy(policy); + + return ( + + + + + + + + ); +} + +WorkspaceWorkflowsApprovalsEditPage.displayName = 'WorkspaceWorkflowsApprovalsEditPage'; + +export default withPolicyAndFullscreenLoading(WorkspaceWorkflowsApprovalsEditPage); diff --git a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsExpensesFromPage.tsx b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsExpensesFromPage.tsx new file mode 100644 index 000000000000..f96831f5a34a --- /dev/null +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsExpensesFromPage.tsx @@ -0,0 +1,53 @@ +import type {StackScreenProps} from '@react-navigation/stack'; +import React from 'react'; +import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import useLocalize from '@hooks/useLocalize'; +import Navigation from '@libs/Navigation/Navigation'; +import type {FullScreenNavigatorParamList} from '@libs/Navigation/types'; +import * as PolicyUtils from '@libs/PolicyUtils'; +import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; +import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading'; +import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading'; +import CONST from '@src/CONST'; +import type SCREENS from '@src/SCREENS'; +import {isEmptyObject} from '@src/types/utils/EmptyObject'; + +type WorkspaceWorkflowsApprovalsExpensesFromPageProps = WithPolicyAndFullscreenLoadingProps & + StackScreenProps; + +function WorkspaceWorkflowsApprovalsExpensesFromPage({policy, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsExpensesFromPageProps) { + const {translate} = useLocalize(); + + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundView = (isEmptyObject(policy) && !isLoadingReportData) || !PolicyUtils.isPolicyAdmin(policy) || PolicyUtils.isPendingDeletePolicy(policy); + + return ( + + + + + + + + ); +} + +WorkspaceWorkflowsApprovalsExpensesFromPage.displayName = 'WorkspaceWorkflowsApprovalsExpensesFromPage'; + +export default withPolicyAndFullscreenLoading(WorkspaceWorkflowsApprovalsExpensesFromPage);