diff --git a/src/pages/settings/Payments/AddDebitCardPage.js b/src/pages/settings/Payments/AddDebitCardPage.js index a810c4701122..a95788b3f7d8 100644 --- a/src/pages/settings/Payments/AddDebitCardPage.js +++ b/src/pages/settings/Payments/AddDebitCardPage.js @@ -1,15 +1,14 @@ -import React, {Component} from 'react'; +import React, {useEffect} from 'react'; import {View} from 'react-native'; import _ from 'underscore'; import {withOnyx} from 'react-native-onyx'; import PropTypes from 'prop-types'; -import compose from '../../../libs/compose'; import HeaderWithBackButton from '../../../components/HeaderWithBackButton'; import ScreenWrapper from '../../../components/ScreenWrapper'; import styles from '../../../styles/styles'; import Text from '../../../components/Text'; import TextLink from '../../../components/TextLink'; -import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize'; +import useLocalize from '../../../hooks/useLocalize'; import * as PaymentMethods from '../../../libs/actions/PaymentMethods'; import * as ValidationUtils from '../../../libs/ValidationUtils'; import CheckboxWithLabel from '../../../components/CheckboxWithLabel'; @@ -23,6 +22,7 @@ import Form from '../../../components/Form'; import Permissions from '../../../libs/Permissions'; import Navigation from '../../../libs/Navigation/Navigation'; import ROUTES from '../../../ROUTES'; +import usePrevious from '../../../hooks/usePrevious'; const propTypes = { /* Onyx Props */ @@ -32,8 +32,6 @@ const propTypes = { /** List of betas available to current user */ betas: PropTypes.arrayOf(PropTypes.string), - - ...withLocalizePropTypes, }; const defaultProps = { @@ -43,34 +41,31 @@ const defaultProps = { betas: [], }; -class DebitCardPage extends Component { - constructor(props) { - super(props); +function DebitCardPage(props) { + const {translate} = useLocalize(); + const prevFormDataSetupComplete = usePrevious(props.formData.setupComplete); - this.validate = this.validate.bind(this); + useEffect(() => { PaymentMethods.clearDebitCardFormErrorAndSubmit(); - } + }, []); - componentDidUpdate(prevProps) { - if (prevProps.formData.setupComplete || !this.props.formData.setupComplete) { + useEffect(() => { + if (prevFormDataSetupComplete || !props.formData.setupComplete) { return; } PaymentMethods.continueSetup(); - } - /** - * Make sure we reset the onyx values so old errors don't show if this form is displayed later - */ - componentWillUnmount() { - PaymentMethods.clearDebitCardFormErrorAndSubmit(); - } + return () => { + PaymentMethods.clearDebitCardFormErrorAndSubmit(); + }; + }, [prevFormDataSetupComplete, props.formData.setupComplete]); /** * @param {Object} values - form input values passed by the Form component * @returns {Boolean} */ - validate(values) { + const validate = (values) => { const errors = {}; if (!values.nameOnCard || !ValidationUtils.isValidLegalName(values.nameOnCard)) { @@ -101,7 +96,7 @@ class DebitCardPage extends Component { errors.addressState = 'addDebitCardPage.error.addressState'; } - if (!Permissions.canUsePasswordlessLogins(this.props.betas) && (!values.password || _.isEmpty(values.password.trim()))) { + if (!Permissions.canUsePasswordlessLogins(props.betas) && (!values.password || _.isEmpty(values.password.trim()))) { errors.password = 'addDebitCardPage.error.password'; } @@ -110,122 +105,117 @@ class DebitCardPage extends Component { } return errors; - } - - render() { - return ( - - Navigation.goBack(ROUTES.SETTINGS_PAYMENTS)} + }; + + return ( + + Navigation.goBack(ROUTES.SETTINGS_PAYMENTS)} + /> +
+ - - - - - - - - - - + + + + - - + - + + - - + + + + + + {!Permissions.canUsePasswordlessLogins(props.betas) && ( + + - {!Permissions.canUsePasswordlessLogins(this.props.betas) && ( - - - + )} + ( + + {`${translate('common.iAcceptThe')}`} + {`${translate('common.expensifyTermsOfService')}`} + )} - ( - - {`${this.props.translate('common.iAcceptThe')}`} - {`${this.props.translate('common.expensifyTermsOfService')}`} - - )} - style={[styles.mt4]} - /> - -
- ); - } + style={[styles.mt4]} + /> + +
+ ); } DebitCardPage.propTypes = propTypes; DebitCardPage.defaultProps = defaultProps; -export default compose( - withLocalize, - withOnyx({ - formData: { - key: ONYXKEYS.FORMS.ADD_DEBIT_CARD_FORM, - }, - betas: { - key: ONYXKEYS.BETAS, - }, - }), -)(DebitCardPage); +export default withOnyx({ + formData: { + key: ONYXKEYS.FORMS.ADD_DEBIT_CARD_FORM, + }, + betas: { + key: ONYXKEYS.BETAS, + }, +})(DebitCardPage);