1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-01-08 23:46:14 +01:00
fab-manager/app/frontend/src/javascript/components/payment/stripe/stripe-modal.tsx

84 lines
2.8 KiB
TypeScript
Raw Normal View History

2021-04-08 15:21:24 +02:00
import React, { FunctionComponent, ReactNode } from 'react';
2021-04-08 10:46:09 +02:00
import { StripeElements } from './stripe-elements';
2020-11-25 17:13:45 +01:00
import { StripeForm } from './stripe-form';
import { GatewayFormProps, AbstractPaymentModal } from '../abstract-payment-modal';
import { ShoppingCart } from '../../../models/payment';
import { PaymentSchedule } from '../../../models/payment-schedule';
import { User } from '../../../models/user';
2020-11-25 17:13:45 +01:00
import stripeLogo from '../../../../../images/powered_by_stripe.png';
import mastercardLogo from '../../../../../images/mastercard.png';
import visaLogo from '../../../../../images/visa.png';
import { Invoice } from '../../../models/invoice';
interface StripeModalProps {
isOpen: boolean,
toggleModal: () => void,
afterSuccess: (result: Invoice|PaymentSchedule) => void,
onError: (message: string) => void,
cart: ShoppingCart,
currentUser: User,
2021-06-28 18:17:11 +02:00
schedule?: PaymentSchedule,
customer: User
}
/**
2021-04-08 15:21:24 +02:00
* This component enables the user to input his card data or process payments, using the Stripe gateway.
* Supports Strong-Customer Authentication (SCA).
*
* This component should not be called directly. Prefer using <CardPaymentModal> which can handle the configuration
* of a different payment gateway.
*/
export const StripeModal: React.FC<StripeModalProps> = ({ isOpen, toggleModal, afterSuccess, onError, cart, currentUser, schedule, customer }) => {
2020-11-24 16:26:18 +01:00
/**
2020-11-30 16:52:55 +01:00
* Return the logos, shown in the modal footer.
*/
2020-11-30 16:52:55 +01:00
const logoFooter = (): ReactNode => {
return (
2020-11-30 16:52:55 +01:00
<div className="stripe-modal-icons">
<i className="fa fa-lock fa-2x" />
2020-11-30 16:52:55 +01:00
<img src={stripeLogo} alt="powered by stripe" />
<img src={mastercardLogo} alt="mastercard" />
<img src={visaLogo} alt="visa" />
</div>
);
2021-07-01 12:34:10 +02:00
};
/**
2021-04-08 15:21:24 +02:00
* Integrates the StripeForm into the parent PaymentModal
*/
2021-07-01 12:34:10 +02:00
const renderForm: FunctionComponent<GatewayFormProps> = ({ onSubmit, onSuccess, onError, operator, className, formId, cart, customer, paymentSchedule, children }) => {
2021-04-08 15:21:24 +02:00
return (
<StripeElements>
<StripeForm onSubmit={onSubmit}
2021-07-01 12:34:10 +02:00
onSuccess={onSuccess}
onError={onError}
operator={operator}
className={className}
formId={formId}
cart={cart}
customer={customer}
paymentSchedule={paymentSchedule}>
2021-04-08 15:21:24 +02:00
{children}
2020-11-30 16:52:55 +01:00
</StripeForm>
2021-04-08 15:21:24 +02:00
</StripeElements>
);
2021-07-01 12:34:10 +02:00
};
2021-04-08 15:21:24 +02:00
return (
<AbstractPaymentModal className="stripe-modal"
2021-07-01 12:34:10 +02:00
isOpen={isOpen}
toggleModal={toggleModal}
logoFooter={logoFooter()}
formId="stripe-form"
formClassName="stripe-form"
currentUser={currentUser}
cart={cart}
customer={customer}
afterSuccess={afterSuccess}
onError={onError}
2021-07-01 12:34:10 +02:00
schedule={schedule}
GatewayForm={renderForm} />
);
2021-07-01 12:34:10 +02:00
};