diff --git a/packages/app/src/app/pages/common/Modals/PreferencesModal/PaymentInfo/index.tsx b/packages/app/src/app/pages/common/Modals/PreferencesModal/PaymentInfo/index.tsx index 44a1c2313c8..10a8c011f4a 100644 --- a/packages/app/src/app/pages/common/Modals/PreferencesModal/PaymentInfo/index.tsx +++ b/packages/app/src/app/pages/common/Modals/PreferencesModal/PaymentInfo/index.tsx @@ -1,65 +1,63 @@ -import React from 'react'; -import { inject, observer } from 'app/componentConnectors'; +import React, { FunctionComponent, useEffect, useCallback } from 'react'; +import { useOvermind } from 'app/overmind'; import { SubscribeForm } from 'app/components/SubscribeForm'; import { Card } from './Card'; import { Title, Subheading } from '../elements'; import { Container } from './elements'; -interface Props { - store: any; - signals: any; -} - -class PaymentInfoComponent extends React.Component { - componentDidMount() { - this.props.signals.preferences.paymentDetailsRequested(); - } - - updatePaymentDetails = ({ token }) => { - this.props.signals.preferences.paymentDetailsUpdated({ token }); - }; - - paymentDetails = () => { - const { preferences } = this.props.store; - - if (preferences.paymentDetailError) - return
An error occurred: {preferences.paymentDetailError}
; +export const PaymentInfo: FunctionComponent = () => { + const { + state: { + preferences: { + paymentDetailError, + paymentDetails: { last4, name, brand }, + isLoadingPaymentDetails, + }, + }, + actions: { + preferences: { paymentDetailsRequested, paymentDetailsUpdated }, + }, + } = useOvermind(); + + useEffect(() => { + paymentDetailsRequested(); + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + const updatePaymentDetails = useCallback( + ({ token }) => { + paymentDetailsUpdated({ token }); + }, + [paymentDetailsUpdated] + ); + + const paymentDetails = useCallback(() => { + if (paymentDetailError) + return
An error occurred: {paymentDetailError}
; return (
Current card - + Update card info
); - }; - - render() { - const { preferences } = this.props.store; - return ( - - Payment Info - {preferences.isLoadingPaymentDetails ? ( -
Loading payment details...
- ) : ( - this.paymentDetails() - )} -
- ); - } -} - -export const PaymentInfo = inject('store', 'signals')( - observer(PaymentInfoComponent) -); + }, [paymentDetailError, last4, name, brand, updatePaymentDetails]); + + return ( + + Payment Info + {isLoadingPaymentDetails ? ( +
Loading payment details...
+ ) : ( + paymentDetails() + )} +
+ ); +};