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;