// ** React Imports import { Ref, useState, forwardRef, ReactElement, ChangeEvent } from 'react' // ** MUI Imports import Box from '@mui/material/Box' import Card from '@mui/material/Card' import Grid from '@mui/material/Grid' import Switch from '@mui/material/Switch' import Button from '@mui/material/Button' import Dialog from '@mui/material/Dialog' import TextField from '@mui/material/TextField' import IconButton from '@mui/material/IconButton' import Typography from '@mui/material/Typography' import CardContent from '@mui/material/CardContent' import Fade, { FadeProps } from '@mui/material/Fade' import DialogContent from '@mui/material/DialogContent' import DialogActions from '@mui/material/DialogActions' import FormControlLabel from '@mui/material/FormControlLabel' // ** Third Party Imports import Payment from 'payment' import Cards, { Focused } from 'react-credit-cards' // ** Util Import import { formatCVC, formatExpirationDate, formatCreditCardNumber } from 'src/@core/utils/format' // ** Styled Component Imports import CardWrapper from 'src/@core/styles/libs/react-credit-cards' // ** Styles Import import 'react-credit-cards/es/styles-compiled.css' // ** Icon Imports import Icon from 'src/@core/components/icon' const Transition = forwardRef(function Transition( props: FadeProps & { children?: ReactElement }, ref: Ref ) { return }) const DialogAddCard = () => { // ** States const [name, setName] = useState('') const [show, setShow] = useState(false) const [cvc, setCvc] = useState('') const [cardNumber, setCardNumber] = useState('') const [focus, setFocus] = useState() const [expiry, setExpiry] = useState('') const handleBlur = () => setFocus(undefined) const handleInputChange = ({ target }: ChangeEvent) => { if (target.name === 'number') { target.value = formatCreditCardNumber(target.value, Payment) setCardNumber(target.value) } else if (target.name === 'expiry') { target.value = formatExpirationDate(target.value) setExpiry(target.value) } else if (target.name === 'cvc') { target.value = formatCVC(target.value, cardNumber, Payment) setCvc(target.value) } } const handleClose = () => { setShow(false) setCvc('') setName('') setExpiry('') setCardNumber('') setFocus(undefined) } return ( Add New Card Quickly collect the credit card details, built in input mask and form validation support. `${theme.spacing(8)} !important`, px: theme => [`${theme.spacing(5)} !important`, `${theme.spacing(15)} !important`], pt: theme => [`${theme.spacing(8)} !important`, `${theme.spacing(12.5)} !important`] }} > Add New Card Add card for future billing `${theme.spacing(5)} !important` }}> setFocus(e.target.name as Focused)} /> setName(e.target.value)} onFocus={e => setFocus(e.target.name as Focused)} /> setFocus(e.target.name as Focused)} /> setFocus(e.target.name as Focused)} placeholder={Payment.fns.cardType(cardNumber) === 'amex' ? '1234' : '123'} /> } label='Save Card for future billing?' sx={{ '& .MuiTypography-root': { color: 'text.secondary' } }} /> [`${theme.spacing(5)} !important`, `${theme.spacing(15)} !important`], pb: theme => [`${theme.spacing(8)} !important`, `${theme.spacing(12.5)} !important`] }} > ) } export default DialogAddCard