diff --git a/src/components/menuItemPropTypes.js b/src/components/menuItemPropTypes.js
index 21e74b61b9c4..83d2feca7a0a 100644
--- a/src/components/menuItemPropTypes.js
+++ b/src/components/menuItemPropTypes.js
@@ -164,6 +164,9 @@ const propTypes = {
/** Should check anonymous user in onPress function */
shouldCheckActionAllowedOnPress: PropTypes.bool,
+ /** The menu item link or function to get the link */
+ link: PropTypes.oneOfType(PropTypes.func, PropTypes.string),
+
/** Icon should be displayed in its own color */
displayInDefaultIconColor: PropTypes.bool,
};
diff --git a/src/pages/workspace/invoices/WorkspaceInvoicesFirstSection.js b/src/pages/workspace/invoices/WorkspaceInvoicesFirstSection.tsx
similarity index 65%
rename from src/pages/workspace/invoices/WorkspaceInvoicesFirstSection.js
rename to src/pages/workspace/invoices/WorkspaceInvoicesFirstSection.tsx
index b33311021e61..ede9a94d5159 100644
--- a/src/pages/workspace/invoices/WorkspaceInvoicesFirstSection.js
+++ b/src/pages/workspace/invoices/WorkspaceInvoicesFirstSection.tsx
@@ -1,33 +1,32 @@
-import PropTypes from 'prop-types';
import React from 'react';
import {View} from 'react-native';
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';
-const propTypes = {
+type WorkspaceInvoicesFirstSectionProps = {
/** The policy ID currently being configured */
- policyID: PropTypes.string.isRequired,
-
- ...withLocalizePropTypes,
+ policyID: string;
};
-function WorkspaceInvoicesFirstSection(props) {
+function WorkspaceInvoicesFirstSection({policyID}: WorkspaceInvoicesFirstSectionProps) {
const styles = useThemeStyles();
+ const {translate} = useLocalize();
+
const sendInvoiceUrl = encodeURI('reports?param={"createInvoice":true}');
- const viewAllInvoicesUrl = `reports?policyID=${props.policyID}&from=all&type=invoice&showStates=Open,Processing,Approved,Reimbursed,Archived&isAdvancedFilterMode=true`;
+ const viewAllInvoicesUrl = `reports?policyID=${policyID}&from=all&type=invoice&showStates=Open,Processing,Approved,Reimbursed,Archived&isAdvancedFilterMode=true`;
return (
Link.openOldDotLink(sendInvoiceUrl),
icon: Expensicons.Send,
shouldShowRightIcon: true,
@@ -36,7 +35,7 @@ function WorkspaceInvoicesFirstSection(props) {
link: () => Link.buildOldDotURL(sendInvoiceUrl),
},
{
- title: props.translate('workspace.invoices.viewAllInvoices'),
+ title: translate('workspace.invoices.viewAllInvoices'),
onPress: () => Link.openOldDotLink(viewAllInvoicesUrl),
icon: Expensicons.Invoice,
shouldShowRightIcon: true,
@@ -48,13 +47,12 @@ function WorkspaceInvoicesFirstSection(props) {
containerStyles={[styles.cardSection]}
>
- {props.translate('workspace.invoices.invoiceFirstSectionCopy')}
+ {translate('workspace.invoices.invoiceFirstSectionCopy')}
);
}
-WorkspaceInvoicesFirstSection.propTypes = propTypes;
WorkspaceInvoicesFirstSection.displayName = 'WorkspaceInvoicesFirstSection';
-export default withLocalize(WorkspaceInvoicesFirstSection);
+export default WorkspaceInvoicesFirstSection;
diff --git a/src/pages/workspace/invoices/WorkspaceInvoicesNoVBAView.js b/src/pages/workspace/invoices/WorkspaceInvoicesNoVBAView.tsx
similarity index 59%
rename from src/pages/workspace/invoices/WorkspaceInvoicesNoVBAView.js
rename to src/pages/workspace/invoices/WorkspaceInvoicesNoVBAView.tsx
index 25a97ac93442..b382f0d7c609 100644
--- a/src/pages/workspace/invoices/WorkspaceInvoicesNoVBAView.js
+++ b/src/pages/workspace/invoices/WorkspaceInvoicesNoVBAView.tsx
@@ -1,37 +1,36 @@
-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 useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import WorkspaceInvoicesFirstSection from './WorkspaceInvoicesFirstSection';
-const propTypes = {
+type WorkspaceInvoicesNoVBAViewProps = {
/** The policy ID currently being configured */
- policyID: PropTypes.string.isRequired,
-
- ...withLocalizePropTypes,
+ policyID: string;
};
-function WorkspaceInvoicesNoVBAView(props) {
+function WorkspaceInvoicesNoVBAView({policyID}: WorkspaceInvoicesNoVBAViewProps) {
const styles = useThemeStyles();
+ const {translate} = useLocalize();
+
return (
<>
-
+
- {props.translate('workspace.invoices.unlockNoVBACopy')}
+ {translate('workspace.invoices.unlockNoVBACopy')}
@@ -39,7 +38,6 @@ function WorkspaceInvoicesNoVBAView(props) {
);
}
-WorkspaceInvoicesNoVBAView.propTypes = propTypes;
WorkspaceInvoicesNoVBAView.displayName = 'WorkspaceInvoicesNoVBAView';
-export default withLocalize(WorkspaceInvoicesNoVBAView);
+export default WorkspaceInvoicesNoVBAView;
diff --git a/src/pages/workspace/invoices/WorkspaceInvoicesPage.js b/src/pages/workspace/invoices/WorkspaceInvoicesPage.tsx
similarity index 50%
rename from src/pages/workspace/invoices/WorkspaceInvoicesPage.js
rename to src/pages/workspace/invoices/WorkspaceInvoicesPage.tsx
index 8bc0c4484100..8c1eb5b66871 100644
--- a/src/pages/workspace/invoices/WorkspaceInvoicesPage.js
+++ b/src/pages/workspace/invoices/WorkspaceInvoicesPage.tsx
@@ -1,33 +1,26 @@
-import PropTypes from 'prop-types';
+import {StackScreenProps} from '@react-navigation/stack';
import React from 'react';
-import withLocalize, {withLocalizePropTypes} from '@components/withLocalize';
+import useLocalize from '@hooks/useLocalize';
+import {SettingsNavigatorParamList} from '@libs/Navigation/types';
import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections';
import CONST from '@src/CONST';
+import SCREENS from '@src/SCREENS';
import WorkspaceInvoicesNoVBAView from './WorkspaceInvoicesNoVBAView';
import WorkspaceInvoicesVBAView from './WorkspaceInvoicesVBAView';
-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,
+type WorkspaceInvoicesPageProps = StackScreenProps;
- ...withLocalizePropTypes,
-};
+function WorkspaceInvoicesPage({route}: WorkspaceInvoicesPageProps) {
+ const {translate} = useLocalize();
-function WorkspaceInvoicesPage(props) {
return (
- {(hasVBA, policyID) => (
+ {(hasVBA: boolean, policyID: string) => (
<>
{!hasVBA && }
{hasVBA && }
@@ -37,7 +30,6 @@ function WorkspaceInvoicesPage(props) {
);
}
-WorkspaceInvoicesPage.propTypes = propTypes;
WorkspaceInvoicesPage.displayName = 'WorkspaceInvoicesPage';
-export default withLocalize(WorkspaceInvoicesPage);
+export default WorkspaceInvoicesPage;
diff --git a/src/pages/workspace/invoices/WorkspaceInvoicesVBAView.js b/src/pages/workspace/invoices/WorkspaceInvoicesVBAView.tsx
similarity index 58%
rename from src/pages/workspace/invoices/WorkspaceInvoicesVBAView.js
rename to src/pages/workspace/invoices/WorkspaceInvoicesVBAView.tsx
index c5e047f6291b..5c62e16eaa4a 100644
--- a/src/pages/workspace/invoices/WorkspaceInvoicesVBAView.js
+++ b/src/pages/workspace/invoices/WorkspaceInvoicesVBAView.tsx
@@ -1,36 +1,34 @@
-import PropTypes from 'prop-types';
import React from 'react';
import {View} from 'react-native';
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 WorkspaceInvoicesFirstSection from './WorkspaceInvoicesFirstSection';
-const propTypes = {
- /** The policy ID currently being configured */
- policyID: PropTypes.string.isRequired,
-
- ...withLocalizePropTypes,
+type WorkspaceInvoicesVBAViewProps = {
+ /** The polgicy ID currently being configured */
+ policyID: string;
};
-function WorkspaceInvoicesVBAView(props) {
+function WorkspaceInvoicesVBAView({policyID}: WorkspaceInvoicesVBAViewProps) {
+ const {translate} = useLocalize();
const styles = useThemeStyles();
- const viewUnpaidInvoicesUrl = `reports?policyID=${props.policyID}&from=all&type=invoice&showStates=Processing&isAdvancedFilterMode=true`;
+ const viewUnpaidInvoicesUrl = `reports?policyID=${policyID}&from=all&type=invoice&showStates=Processing&isAdvancedFilterMode=true`;
return (
<>
-
+
Link.openOldDotLink(viewUnpaidInvoicesUrl),
icon: Expensicons.Hourglass,
shouldShowRightIcon: true,
@@ -41,14 +39,13 @@ function WorkspaceInvoicesVBAView(props) {
]}
>
- {props.translate('workspace.invoices.unlockVBACopy')}
+ {translate('workspace.invoices.unlockVBACopy')}
>
);
}
-WorkspaceInvoicesVBAView.propTypes = propTypes;
WorkspaceInvoicesVBAView.displayName = 'WorkspaceInvoicesVBAView';
-export default withLocalize(WorkspaceInvoicesVBAView);
+export default WorkspaceInvoicesVBAView;