From 713b968111f235826b3fa944fa0e1c5ad6f9937f Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Thu, 18 Jan 2024 18:06:15 +0000 Subject: [PATCH 1/7] refactor(typescript): migrate workspacetravelpage --- .../travel/WorkspaceTravelNoVBAView.js | 41 ------------------ .../travel/WorkspaceTravelNoVBAView.tsx | 36 ++++++++++++++++ .../workspace/travel/WorkspaceTravelPage.js | 43 ------------------- .../workspace/travel/WorkspaceTravelPage.tsx | 32 ++++++++++++++ ...lVBAView.js => WorkspaceTravelVBAView.tsx} | 29 ++++++------- 5 files changed, 81 insertions(+), 100 deletions(-) delete mode 100644 src/pages/workspace/travel/WorkspaceTravelNoVBAView.js create mode 100644 src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx delete mode 100644 src/pages/workspace/travel/WorkspaceTravelPage.js create mode 100644 src/pages/workspace/travel/WorkspaceTravelPage.tsx rename src/pages/workspace/travel/{WorkspaceTravelVBAView.js => WorkspaceTravelVBAView.tsx} (66%) diff --git a/src/pages/workspace/travel/WorkspaceTravelNoVBAView.js b/src/pages/workspace/travel/WorkspaceTravelNoVBAView.js deleted file mode 100644 index d8154955a5d7..000000000000 --- a/src/pages/workspace/travel/WorkspaceTravelNoVBAView.js +++ /dev/null @@ -1,41 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import {View} from 'react-native'; -import ConnectBankAccountButton from '@components/ConnectBankAccountButton'; -import * as Illustrations from '@components/Icon/Illustrations'; -import Section from '@components/Section'; -import Text from '@components/Text'; -import withLocalize, {withLocalizePropTypes} from '@components/withLocalize'; -import useThemeStyles from '@hooks/useThemeStyles'; - -const propTypes = { - /** The policy ID currently being configured */ - policyID: PropTypes.string.isRequired, - - ...withLocalizePropTypes, -}; - -function WorkspaceTravelNoVBAView(props) { - const styles = useThemeStyles(); - return ( - <> -
- - {props.translate('workspace.travel.noVBACopy')} - - -
- - ); -} - -WorkspaceTravelNoVBAView.propTypes = propTypes; -WorkspaceTravelNoVBAView.displayName = 'WorkspaceTravelNoVBAView'; - -export default withLocalize(WorkspaceTravelNoVBAView); diff --git a/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx b/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx new file mode 100644 index 000000000000..15ee88ba83ae --- /dev/null +++ b/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import {View} from 'react-native'; +import ConnectBankAccountButton from '@components/ConnectBankAccountButton'; +import * as Illustrations from '@components/Icon/Illustrations'; +import Section from '@components/Section'; +import Text from '@components/Text'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; + +type WorkspaceTravelNoVBAViewProps = { + policyID: string; +}; + +function WorkspaceTravelNoVBAView({policyID}: WorkspaceTravelNoVBAViewProps) { + const styles = useThemeStyles(); + const {translate} = useLocalize(); + + return ( +
+ + {translate('workspace.travel.noVBACopy')} + + +
+ ); +} + +WorkspaceTravelNoVBAView.displayName = 'WorkspaceTravelNoVBAView'; + +export default WorkspaceTravelNoVBAView; diff --git a/src/pages/workspace/travel/WorkspaceTravelPage.js b/src/pages/workspace/travel/WorkspaceTravelPage.js deleted file mode 100644 index a88e180cc7b6..000000000000 --- a/src/pages/workspace/travel/WorkspaceTravelPage.js +++ /dev/null @@ -1,43 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import withLocalize, {withLocalizePropTypes} from '@components/withLocalize'; -import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections'; -import CONST from '@src/CONST'; -import WorkspaceTravelNoVBAView from './WorkspaceTravelNoVBAView'; -import WorkspaceTravelVBAView from './WorkspaceTravelVBAView'; - -const propTypes = { - /** The route object passed to this page from the navigator */ - route: PropTypes.shape({ - /** Each parameter passed via the URL */ - params: PropTypes.shape({ - /** The policyID that is being configured */ - policyID: PropTypes.string.isRequired, - }).isRequired, - }).isRequired, - - ...withLocalizePropTypes, -}; - -function WorkspaceTravelPage(props) { - return ( - - {(hasVBA, policyID) => ( - <> - {!hasVBA && } - {hasVBA && } - - )} - - ); -} - -WorkspaceTravelPage.propTypes = propTypes; -WorkspaceTravelPage.displayName = 'WorkspaceTravelPage'; - -export default withLocalize(WorkspaceTravelPage); diff --git a/src/pages/workspace/travel/WorkspaceTravelPage.tsx b/src/pages/workspace/travel/WorkspaceTravelPage.tsx new file mode 100644 index 000000000000..5ecfa27b9196 --- /dev/null +++ b/src/pages/workspace/travel/WorkspaceTravelPage.tsx @@ -0,0 +1,32 @@ +import type {StackScreenProps} from '@react-navigation/stack'; +import React from 'react'; +import useLocalize from '@hooks/useLocalize'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections'; +import CONST from '@src/CONST'; +import WorkspaceTravelNoVBAView from './WorkspaceTravelNoVBAView'; +import WorkspaceTravelVBAView from './WorkspaceTravelVBAView'; + +function WorkspaceTravelPage({route}: StackScreenProps) { + const {translate} = useLocalize(); + + return ( + + {(hasVBA: boolean, policyID: string) => ( + <> + {!hasVBA && } + {hasVBA && } + + )} + + ); +} + +WorkspaceTravelPage.displayName = 'WorkspaceTravelPage'; + +export default WorkspaceTravelPage; diff --git a/src/pages/workspace/travel/WorkspaceTravelVBAView.js b/src/pages/workspace/travel/WorkspaceTravelVBAView.tsx similarity index 66% rename from src/pages/workspace/travel/WorkspaceTravelVBAView.js rename to src/pages/workspace/travel/WorkspaceTravelVBAView.tsx index 5228f9185852..03e82d749984 100644 --- a/src/pages/workspace/travel/WorkspaceTravelVBAView.js +++ b/src/pages/workspace/travel/WorkspaceTravelVBAView.tsx @@ -4,60 +4,57 @@ import * as Expensicons from '@components/Icon/Expensicons'; import * as Illustrations from '@components/Icon/Illustrations'; import Section from '@components/Section'; import Text from '@components/Text'; -import withLocalize, {withLocalizePropTypes} from '@components/withLocalize'; +import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import * as Link from '@userActions/Link'; import * as Report from '@userActions/Report'; import CONST from '@src/CONST'; -const propTypes = { - ...withLocalizePropTypes, -}; - -function WorkspaceTravelVBAView(props) { +function WorkspaceTravelVBAView() { const styles = useThemeStyles(); + const {translate} = useLocalize(); + return (
Link.openOldDotLink('domain_companycards'), icon: Expensicons.ExpensifyCard, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, - wrapperStyle: [styles.cardMenuItem], + wrapperStyle: styles.cardMenuItem, link: () => Link.buildOldDotURL('domain_companycards'), }, { - title: props.translate('workspace.travel.bookTravelWithConcierge'), + title: translate('workspace.travel.bookTravelWithConcierge'), onPress: () => { Report.navigateToConciergeChat(); }, icon: Expensicons.Concierge, shouldShowRightIcon: true, - wrapperStyle: [styles.cardMenuItem], + wrapperStyle: styles.cardMenuItem, }, { - title: props.translate('requestorStep.learnMore'), + title: translate('requestorStep.learnMore'), onPress: () => Link.openExternalLink(CONST.CONCIERGE_TRAVEL_URL), icon: Expensicons.Info, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, - wrapperStyle: [styles.cardMenuItem], + wrapperStyle: styles.cardMenuItem, link: CONST.CONCIERGE_TRAVEL_URL, }, ]} > - {props.translate('workspace.travel.VBACopy')} + {translate('workspace.travel.VBACopy')}
); } -WorkspaceTravelVBAView.propTypes = propTypes; WorkspaceTravelVBAView.displayName = 'WorkspaceTravelVBAView'; -export default withLocalize(WorkspaceTravelVBAView); +export default WorkspaceTravelVBAView; From 3c4d9616e112af16dfecd1eca170319cef93714d Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Mon, 22 Jan 2024 17:42:04 +0000 Subject: [PATCH 2/7] refactor(typescript): apply pull request feedback --- src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx | 1 + src/pages/workspace/travel/WorkspaceTravelPage.tsx | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx b/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx index 15ee88ba83ae..3709cbafba96 100644 --- a/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx +++ b/src/pages/workspace/travel/WorkspaceTravelNoVBAView.tsx @@ -8,6 +8,7 @@ import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; type WorkspaceTravelNoVBAViewProps = { + /** The policy ID currently being configured */ policyID: string; }; diff --git a/src/pages/workspace/travel/WorkspaceTravelPage.tsx b/src/pages/workspace/travel/WorkspaceTravelPage.tsx index 5ecfa27b9196..e14c5a514135 100644 --- a/src/pages/workspace/travel/WorkspaceTravelPage.tsx +++ b/src/pages/workspace/travel/WorkspaceTravelPage.tsx @@ -4,10 +4,13 @@ import useLocalize from '@hooks/useLocalize'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections'; import CONST from '@src/CONST'; +import type SCREENS from '@src/SCREENS'; import WorkspaceTravelNoVBAView from './WorkspaceTravelNoVBAView'; import WorkspaceTravelVBAView from './WorkspaceTravelVBAView'; -function WorkspaceTravelPage({route}: StackScreenProps) { +type WorkspaceTravelPageProps = StackScreenProps; + +function WorkspaceTravelPage({route}: WorkspaceTravelPageProps) { const {translate} = useLocalize(); return ( From f8f63545b7a193c70ffc55f10725cb45922dbd04 Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Tue, 30 Jan 2024 19:14:33 +0000 Subject: [PATCH 3/7] chore(typescript): resolve typing issues --- src/pages/workspace/travel/WorkspaceTravelPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/travel/WorkspaceTravelPage.tsx b/src/pages/workspace/travel/WorkspaceTravelPage.tsx index e14c5a514135..04452a634f19 100644 --- a/src/pages/workspace/travel/WorkspaceTravelPage.tsx +++ b/src/pages/workspace/travel/WorkspaceTravelPage.tsx @@ -20,7 +20,7 @@ function WorkspaceTravelPage({route}: WorkspaceTravelPageProps) { route={route} guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_TRAVEL} > - {(hasVBA: boolean, policyID: string) => ( + {(hasVBA = false, policyID = '') => ( <> {!hasVBA && } {hasVBA && } From a1864f6adfc63908d29834cdeed82daf75891295 Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Thu, 1 Feb 2024 13:52:40 +0000 Subject: [PATCH 4/7] chore(typescript): resolve typing issues --- src/pages/workspace/WorkspacePageWithSections.tsx | 6 +++--- src/pages/workspace/withPolicy.tsx | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/pages/workspace/WorkspacePageWithSections.tsx b/src/pages/workspace/WorkspacePageWithSections.tsx index 89d863c47baa..3f37a9c4a092 100644 --- a/src/pages/workspace/WorkspacePageWithSections.tsx +++ b/src/pages/workspace/WorkspacePageWithSections.tsx @@ -1,4 +1,3 @@ -import type {RouteProp} from '@react-navigation/native'; import React, {useEffect, useMemo, useRef} from 'react'; import type {ReactNode} from 'react'; import {View} from 'react-native'; @@ -21,6 +20,7 @@ import ROUTES from '@src/ROUTES'; import type {Route} from '@src/ROUTES'; import type {Policy, ReimbursementAccount, User} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; +import type {PolicyRoute} from './withPolicy'; import type {WithPolicyAndFullscreenLoadingProps} from './withPolicyAndFullscreenLoading'; import withPolicyAndFullscreenLoading from './withPolicyAndFullscreenLoading'; @@ -41,7 +41,7 @@ type WorkspacePageWithSectionsProps = WithPolicyAndFullscreenLoadingProps & headerText: string; /** The route object passed to this page from the navigator */ - route: RouteProp<{params: {policyID: string}}>; + route: PolicyRoute; /** Main content of the page */ children: (hasVBA?: boolean, policyID?: string, isUsingECard?: boolean) => ReactNode; @@ -93,7 +93,7 @@ function WorkspacePageWithSections({ const isLoading = reimbursementAccount?.isLoading ?? true; const achState = reimbursementAccount?.achData?.state ?? ''; const isUsingECard = user?.isUsingExpensifyCard ?? false; - const policyID = route.params.policyID; + const policyID = route.params?.policyID ?? ''; const policyName = policy?.name; const hasVBA = achState === BankAccount.STATE.OPEN; const content = children(hasVBA, policyID, isUsingECard); diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index ec38b61fb0dc..f61e3c3df462 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -5,13 +5,16 @@ import type {ComponentType, ForwardedRef, RefAttributes} from 'react'; import React, {forwardRef} from 'react'; import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; +import type {ValueOf} from 'type-fest'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import policyMemberPropType from '@pages/policyMemberPropType'; import * as Policy from '@userActions/Policy'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import type SCREENS from '@src/SCREENS'; import type * as OnyxTypes from '@src/types/onyx'; -type PolicyRoute = RouteProp<{params: {policyID: string}}>; +type PolicyRoute = RouteProp>; function getPolicyIDFromRoute(route: PolicyRoute): string { return route?.params?.policyID ?? ''; @@ -131,4 +134,4 @@ export default function (WrappedComponent: } export {policyPropTypes, policyDefaultProps}; -export type {WithPolicyOnyxProps, WithPolicyProps}; +export type {WithPolicyOnyxProps, WithPolicyProps, PolicyRoute}; From 04f348e1b61d1b65f31f4dffb3f8514219f89498 Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Mon, 5 Feb 2024 22:26:33 +0000 Subject: [PATCH 5/7] fix(typescript): typing issues --- .../workspace/WorkspacePageWithSections.tsx | 4 ---- .../workspace/travel/WorkspaceTravelPage.tsx | 4 ++-- src/pages/workspace/withPolicy.tsx | 22 +++++++------------ 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/pages/workspace/WorkspacePageWithSections.tsx b/src/pages/workspace/WorkspacePageWithSections.tsx index 70198f38f18c..7fb56cada0cd 100644 --- a/src/pages/workspace/WorkspacePageWithSections.tsx +++ b/src/pages/workspace/WorkspacePageWithSections.tsx @@ -21,7 +21,6 @@ import type {Route} from '@src/ROUTES'; import ROUTES from '@src/ROUTES'; import type {Policy, ReimbursementAccount, User} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -import type {PolicyRoute} from './withPolicy'; import type {WithPolicyAndFullscreenLoadingProps} from './withPolicyAndFullscreenLoading'; import withPolicyAndFullscreenLoading from './withPolicyAndFullscreenLoading'; @@ -41,9 +40,6 @@ type WorkspacePageWithSectionsProps = WithPolicyAndFullscreenLoadingProps & /** The text to display in the header */ headerText: string; - /** The route object passed to this page from the navigator */ - route: PolicyRoute; - /** Main content of the page */ children: (hasVBA: boolean, policyID: string, isUsingECard: boolean) => ReactNode; diff --git a/src/pages/workspace/travel/WorkspaceTravelPage.tsx b/src/pages/workspace/travel/WorkspaceTravelPage.tsx index 1af638b1c8a6..3e8508a9f48c 100644 --- a/src/pages/workspace/travel/WorkspaceTravelPage.tsx +++ b/src/pages/workspace/travel/WorkspaceTravelPage.tsx @@ -4,14 +4,14 @@ import {View} from 'react-native'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; -import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import type {CentralPaneNavigatorParamList} from '@libs/Navigation/types'; import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections'; import CONST from '@src/CONST'; import type SCREENS from '@src/SCREENS'; import WorkspaceTravelNoVBAView from './WorkspaceTravelNoVBAView'; import WorkspaceTravelVBAView from './WorkspaceTravelVBAView'; -type WorkspaceTravelPageProps = StackScreenProps; +type WorkspaceTravelPageProps = StackScreenProps; function WorkspaceTravelPage({route}: WorkspaceTravelPageProps) { const {translate} = useLocalize(); diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index 8764412c87ad..eec256a57924 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -1,23 +1,17 @@ -import type {RouteProp} from '@react-navigation/native'; +import type {NavigationState, RouteProp} from '@react-navigation/native'; import {useNavigationState} from '@react-navigation/native'; import PropTypes from 'prop-types'; import type {ComponentType, ForwardedRef, RefAttributes} from 'react'; import React, {forwardRef} from 'react'; import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; -import type {ValueOf} from 'type-fest'; -import type {BottomTabNavigatorParamList, CentralPaneNavigatorParamList, SettingsNavigatorParamList} from '@navigation/types'; import policyMemberPropType from '@pages/policyMemberPropType'; import * as Policy from '@userActions/Policy'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type SCREENS from '@src/SCREENS'; import type * as OnyxTypes from '@src/types/onyx'; -type WorkspaceParamList = BottomTabNavigatorParamList & CentralPaneNavigatorParamList & SettingsNavigatorParamList; -type PolicyRoute = RouteProp>; - -function getPolicyIDFromRoute(route: PolicyRoute): string { +function getPolicyIDFromRoute(route?: RouteProp, string>): string { return route?.params?.policyID ?? ''; } @@ -84,7 +78,7 @@ type WithPolicyOnyxProps = { }; type WithPolicyProps = WithPolicyOnyxProps & { - route: PolicyRoute; + route: RouteProp, string>; }; const policyDefaultProps: WithPolicyOnyxProps = { @@ -97,11 +91,11 @@ const policyDefaultProps: WithPolicyOnyxProps = { /* * HOC for connecting a policy in Onyx corresponding to the policyID in route params */ -export default function (WrappedComponent: ComponentType>): React.ComponentType> { +export default function (WrappedComponent: ComponentType>): React.ComponentType> { function WithPolicy(props: TProps, ref: ForwardedRef) { - const routes = useNavigationState((state) => state.routes || []); - const currentRoute = routes?.at(-1); - const policyID = getPolicyIDFromRoute(currentRoute as PolicyRoute); + const routes = useNavigationState((state: NavigationState>) => state.routes); + const currentRoute = routes.at(-1); + const policyID = getPolicyIDFromRoute(currentRoute); if (policyID.length > 0) { Policy.updateLastAccessedWorkspace(policyID); @@ -135,4 +129,4 @@ export default function (WrappedComponent: } export {policyPropTypes, policyDefaultProps}; -export type {WithPolicyOnyxProps, WithPolicyProps, PolicyRoute}; +export type {WithPolicyOnyxProps, WithPolicyProps}; From 9a9c00c9ef2bda9b91228a14ad20676a08d65134 Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Wed, 7 Feb 2024 12:54:15 +0000 Subject: [PATCH 6/7] refactor: revert change --- src/pages/workspace/withPolicy.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index eec256a57924..795a739c8ce7 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -91,7 +91,7 @@ const policyDefaultProps: WithPolicyOnyxProps = { /* * HOC for connecting a policy in Onyx corresponding to the policyID in route params */ -export default function (WrappedComponent: ComponentType>): React.ComponentType> { +export default function (WrappedComponent: ComponentType>): React.ComponentType> { function WithPolicy(props: TProps, ref: ForwardedRef) { const routes = useNavigationState((state: NavigationState>) => state.routes); const currentRoute = routes.at(-1); From a41d9091712d9fa3a835f9885e1efade1a62617c Mon Sep 17 00:00:00 2001 From: Pedro Guerreiro Date: Mon, 12 Feb 2024 16:46:11 +0000 Subject: [PATCH 7/7] refactor: apply pull request feedback --- src/pages/workspace/travel/WorkspaceTravelPage.tsx | 2 +- src/pages/workspace/travel/WorkspaceTravelVBAView.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/travel/WorkspaceTravelPage.tsx b/src/pages/workspace/travel/WorkspaceTravelPage.tsx index 3e8508a9f48c..88dfe5254fcf 100644 --- a/src/pages/workspace/travel/WorkspaceTravelPage.tsx +++ b/src/pages/workspace/travel/WorkspaceTravelPage.tsx @@ -26,7 +26,7 @@ function WorkspaceTravelPage({route}: WorkspaceTravelPageProps) { guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_TRAVEL} shouldShowOfflineIndicatorInWideScreen > - {(hasVBA = false, policyID = '') => ( + {(hasVBA, policyID) => ( {!hasVBA && } {hasVBA && } diff --git a/src/pages/workspace/travel/WorkspaceTravelVBAView.tsx b/src/pages/workspace/travel/WorkspaceTravelVBAView.tsx index 7a7323385e9e..ae4002e14d4b 100644 --- a/src/pages/workspace/travel/WorkspaceTravelVBAView.tsx +++ b/src/pages/workspace/travel/WorkspaceTravelVBAView.tsx @@ -49,7 +49,7 @@ function WorkspaceTravelVBAView() { }, ]} > - + {translate('workspace.travel.VBACopy')}