From 82da97f39b454d496f63fc7edbaeb2042c24b80d Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jul 2024 11:14:35 +0200 Subject: [PATCH 1/7] Add new routes & rename existing workflow routes --- src/ROUTES.ts | 32 ++++++++---- src/SCREENS.ts | 5 +- .../FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts | 5 +- src/languages/en.ts | 9 ++++ src/languages/es.ts | 9 ++++ .../ModalStackNavigators/index.tsx | 6 ++- .../FULL_SCREEN_TO_RHP_MAPPING.ts | 5 +- src/libs/Navigation/linkingConfig/config.ts | 13 ++++- src/libs/Navigation/types.ts | 12 ++++- src/pages/workspace/withPolicy.tsx | 5 +- .../workflows/WorkspaceWorkflowsPage.tsx | 2 +- ...rkspaceWorkflowsApprovalsApproverPage.tsx} | 14 +++--- .../WorkspaceWorkflowsApprovalsCreatePage.tsx | 50 +++++++++++++++++++ .../WorkspaceWorkflowsApprovalsEditPage.tsx | 50 +++++++++++++++++++ ...paceWorkflowsApprovalsExpensesFromPage.tsx | 50 +++++++++++++++++++ 15 files changed, 241 insertions(+), 26 deletions(-) rename src/pages/workspace/workflows/{WorkspaceWorkflowsApproverPage.tsx => approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx} (93%) create mode 100644 src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx create mode 100644 src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx create mode 100644 src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsExpensesFromPage.tsx diff --git a/src/ROUTES.ts b/src/ROUTES.ts index f4e78005ccbc..eb27572c05e5 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 15361ee049a5..c6d15a5609ce 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -395,7 +395,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..e4ca934c7295 100644 --- a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts +++ b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts @@ -18,7 +18,10 @@ const WIDE_LAYOUT_INACTIVE_SCREENS: string[] = [ SCREENS.WORKSPACE.PROFILE, SCREENS.WORKSPACE.CARD, 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.REIMBURSE, diff --git a/src/languages/en.ts b/src/languages/en.ts index 0275c90d551b..13aa649c87be 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1272,6 +1272,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 8a9c5f1e81d9..dc4f0c35a65d 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1281,6 +1281,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 b19dd76d9e9c..377192ea178c 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 ad800fa3e92f..791ee3c45723 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 8aaf716c6e54..ef4d3c03de0a 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -501,8 +501,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 55e1f6203f8b..1640d70867f8 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1103,7 +1103,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 11c2d370fc3d..793a7cbbaad5 100644 --- a/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx +++ b/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx @@ -149,7 +149,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 93% rename from src/pages/workspace/workflows/WorkspaceWorkflowsApproverPage.tsx rename to src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx index 05d2eb0eb7be..585ff75c0332 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(''); @@ -161,7 +161,7 @@ function WorkspaceWorkflowsApproverPage({policy, personalDetails, isLoadingRepor > ; + +function WorkspaceWorkflowsApprovalsCreatePage({policy, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsCreatePageProps) { + const {translate} = useLocalize(); + + 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..f1a1470bd9b9 --- /dev/null +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx @@ -0,0 +1,50 @@ +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(); + + 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..b8e10a7ace08 --- /dev/null +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsExpensesFromPage.tsx @@ -0,0 +1,50 @@ +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(); + + return ( + + + + + + + + ); +} + +WorkspaceWorkflowsApprovalsExpensesFromPage.displayName = 'WorkspaceWorkflowsApprovalsExpensesFromPage'; + +export default withPolicyAndFullscreenLoading(WorkspaceWorkflowsApprovalsExpensesFromPage); From 7f255e9f7799011cae103ca8a1e0287c79ae7800 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jul 2024 12:24:52 +0200 Subject: [PATCH 2/7] Move logic to a variable --- .../approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx | 5 ++++- .../approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx | 5 ++++- .../approvals/WorkspaceWorkflowsApprovalsEditPage.tsx | 5 ++++- .../WorkspaceWorkflowsApprovalsExpensesFromPage.tsx | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx index 585ff75c0332..8e9005c46587 100644 --- a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx @@ -154,6 +154,9 @@ function WorkspaceWorkflowsApprovalsApproverPage({policy, personalDetails, isLoa Navigation.goBack(); }; + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundView = (isEmptyObject(policy) && !isLoadingReportData) || !PolicyUtils.isPolicyAdmin(policy) || PolicyUtils.isPendingDeletePolicy(policy); + return ( Date: Tue, 23 Jul 2024 12:54:15 +0200 Subject: [PATCH 3/7] Remove screens from WIDE_LAYOUT_INACTIVE_SCREENS --- src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts index e4ca934c7295..a1a3acb4b7d2 100644 --- a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts +++ b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts @@ -18,10 +18,6 @@ const WIDE_LAYOUT_INACTIVE_SCREENS: string[] = [ SCREENS.WORKSPACE.PROFILE, SCREENS.WORKSPACE.CARD, SCREENS.WORKSPACE.WORKFLOWS, - 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.REIMBURSE, From f77a1be394b2d5962126e17ebcf04d00de654127 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jul 2024 13:13:25 +0200 Subject: [PATCH 4/7] Remove more screens from WIDE_LAYOUT_INACTIVE_SCREENS --- src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts index a1a3acb4b7d2..d90411912f0b 100644 --- a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts +++ b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts @@ -18,8 +18,6 @@ const WIDE_LAYOUT_INACTIVE_SCREENS: string[] = [ SCREENS.WORKSPACE.PROFILE, SCREENS.WORKSPACE.CARD, SCREENS.WORKSPACE.WORKFLOWS, - SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY, - SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET, SCREENS.WORKSPACE.REIMBURSE, SCREENS.WORKSPACE.BILLS, SCREENS.WORKSPACE.INVOICES, From 8e490b9953a8ff4c824a20ac624f4f7d55b05a13 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jul 2024 13:15:48 +0200 Subject: [PATCH 5/7] Add missing accounting screen to WIDE_LAYOUT_INACTIVE_SCREENS --- src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts index d90411912f0b..799541e0a35e 100644 --- a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts +++ b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts @@ -14,6 +14,7 @@ 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, From 51eb4c444f556261fffccc1829c05e0327a7a2fe Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jul 2024 13:20:31 +0200 Subject: [PATCH 6/7] Add more descriptive comment --- src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts b/src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts index 799541e0a35e..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, From 40eb51b2cc8f561157decce7422d0005f97ed24e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jul 2024 19:39:26 +0200 Subject: [PATCH 7/7] Fix workflow screens props --- .../approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx | 3 +-- .../approvals/WorkspaceWorkflowsApprovalsEditPage.tsx | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx index 296f17b050ff..d7a4696446cc 100644 --- a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx @@ -14,8 +14,7 @@ import CONST from '@src/CONST'; import type SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -type WorkspaceWorkflowsApprovalsCreatePageProps = WithPolicyAndFullscreenLoadingProps & - StackScreenProps; +type WorkspaceWorkflowsApprovalsCreatePageProps = WithPolicyAndFullscreenLoadingProps & StackScreenProps; function WorkspaceWorkflowsApprovalsCreatePage({policy, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsCreatePageProps) { const {translate} = useLocalize(); diff --git a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx index a562d88226bd..8b55831b276c 100644 --- a/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx +++ b/src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx @@ -14,8 +14,7 @@ import CONST from '@src/CONST'; import type SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -type WorkspaceWorkflowsApprovalsEditPageProps = WithPolicyAndFullscreenLoadingProps & - StackScreenProps; +type WorkspaceWorkflowsApprovalsEditPageProps = WithPolicyAndFullscreenLoadingProps & StackScreenProps; function WorkspaceWorkflowsApprovalsEditPage({policy, isLoadingReportData = true, route}: WorkspaceWorkflowsApprovalsEditPageProps) { const {translate} = useLocalize();