import React, { useContext, useState } from "react"; import { Stepper, Step, StepLabel, Button, Typography, CircularProgress, } from "@material-ui/core"; import { Formik, Form } from "formik"; import AddressForm from "./Forms/AddressForm"; import PaymentForm from "./Forms/PaymentForm"; import ReviewOrder from "./ReviewOrder"; import CheckoutSuccess from "./CheckoutSuccess"; import api from "../../services/api"; import toastError from "../../errors/toastError"; import { toast } from "react-toastify"; import { AuthContext } from "../../context/Auth/AuthContext"; import validationSchema from "./FormModel/validationSchema"; import checkoutFormModel from "./FormModel/checkoutFormModel"; import formInitialValues from "./FormModel/formInitialValues"; import useStyles from "./styles"; import Invoices from "../../pages/Financeiro"; import { i18n } from "../../translate/i18n"; export default function CheckoutPage(props) { const steps = [i18n.t("checkoutPage.steps.data"), i18n.t("checkoutPage.steps.customize"), i18n.t("checkoutPage.steps.review")]; const { formId, formField } = checkoutFormModel; const classes = useStyles(); const [activeStep, setActiveStep] = useState(1); const [datePayment, setDatePayment] = useState(null); const [invoiceId, setinvoiceId] = useState(props.Invoice.id); const currentValidationSchema = validationSchema[activeStep]; const isLastStep = activeStep === steps.length - 1; const { user } = useContext(AuthContext); function _renderStepContent(step, setFieldValue, setActiveStep, values ) { switch (step) { case 0: return ; case 1: return ; case 2: return ; default: return
Not Found
; } } async function _submitForm(values, actions) { try { const plan = JSON.parse(values.plan); const newValues = { firstName: values.firstName, lastName: values.lastName, address2: values.address2, city: values.city, state: values.state, zipcode: values.zipcode, country: values.country, useAddressForPaymentDetails: values.useAddressForPaymentDetails, nameOnCard: values.nameOnCard, cardNumber: values.cardNumber, cvv: values.cvv, plan: values.plan, price: plan.price, users: plan.users, connections: plan.connections, invoiceId: invoiceId } const { data } = await api.post("/subscription", newValues); setDatePayment(data) actions.setSubmitting(false); setActiveStep(activeStep + 1); toast.success(i18n.t("checkoutPage.success")); } catch (err) { toastError(err); } } function _handleSubmit(values, actions) { if (isLastStep) { _submitForm(values, actions); } else { setActiveStep(activeStep + 1); actions.setTouched({}); actions.setSubmitting(false); } } function _handleBack() { setActiveStep(activeStep - 1); } return ( {i18n.t("checkoutPage.closeToEnd")} {steps.map((label) => ( {label} ))} {activeStep === steps.length ? ( ) : ( {({ isSubmitting, setFieldValue, values }) => (
{_renderStepContent(activeStep, setFieldValue, setActiveStep, values)}
{activeStep !== 1 && ( )}
{activeStep !== 1 && ( )} {isSubmitting && ( )}
)}
)}
); }