import PropTypes from 'prop-types'; import { useEffect, useState } from 'react'; // @mui import { useTheme } from '@mui/material/styles'; import Button from '@mui/material/Button'; import Card from '@mui/material/Card'; import CardMedia from '@mui/material/CardMedia'; import ClickAwayListener from '@mui/material/ClickAwayListener'; import Divider from '@mui/material/Divider'; import Fade from '@mui/material/Fade'; import InputAdornment from '@mui/material/InputAdornment'; import List from '@mui/material/List'; import ListItemAvatar from '@mui/material/ListItemAvatar'; import ListItemButton from '@mui/material/ListItemButton'; import ListItemText from '@mui/material/ListItemText'; import OutlinedInput from '@mui/material/OutlinedInput'; import Popper from '@mui/material/Popper'; import Stack from '@mui/material/Stack'; import Tooltip from '@mui/material/Tooltip'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party import { Controller } from 'react-hook-form'; // @project import { contactSchema } from '@/utils/validation-schema/common'; // @icons import { IconChevronDown, IconHelp } from '@tabler/icons-react'; // @types // @data import countries from '@/data/countries'; /*************************** CONTACT ***************************/ export default function Contact({ dialCode, placeholder = 'ex. 9876x xxxxx', helpText, isDisabled = false, isCountryDisabled = false, fullWidth = false, control, isError = false, onCountryChange }) { const theme = useTheme(); const [anchorEl, setAnchorEl] = useState(null); const [selectedCountry, setSelectedCountry] = useState(countries[0]); const open = Boolean(anchorEl); const id = open ? 'dialcode-popper' : undefined; const handleClick = (event) => { setAnchorEl(anchorEl ? null : event.currentTarget); }; useEffect(() => { const data = countries.find((item) => item.dialCode === (dialCode || '+1')) || countries[0]; setSelectedCountry(data); if (!dialCode && onCountryChange) onCountryChange(data); // eslint-disable-next-line react-hooks/exhaustive-deps }, [dialCode]); const countryChange = (country) => { if (onCountryChange) { onCountryChange(country); } setAnchorEl(null); }; return ( ( ) })} disabled={isDisabled} aria-describedby="contact-field" slotProps={{ input: { 'aria-label': 'contact' } }} fullWidth={fullWidth} startAdornment={ <> {({ TransitionProps }) => ( setAnchorEl(null)}> {countries.map((country, index) => ( countryChange(country)} > {country.name}} /> ))} )} } /> )} /> ); } Contact.propTypes = { dialCode: PropTypes.any, placeholder: PropTypes.string, helpText: PropTypes.any, isDisabled: PropTypes.bool, isCountryDisabled: PropTypes.bool, fullWidth: PropTypes.bool, control: PropTypes.any, isError: PropTypes.bool, onCountryChange: PropTypes.any };