{"version":3,"sources":["assets/logo.png","components/ContactFormError.js","components/ContactForm.js","components/HomePage.js","App.js","index.js"],"names":["ErrorMessage","_ref","message","_jsxs","className","children","_jsx","href","ContactForm","phoneNumber","setPhoneNumber","useState","status","setStatus","error","setError","handleChange","e","input","target","value","formattedPhoneNumber","replace","startsWith","slice","formattedNumber","length","formatRussianNumber","charAt","formatDutchNumber","formatPhoneNumber","onSubmit","async","preventDefault","isRussian","match","isDutchMobile","isLocalDutchMobile","validatePhoneNumber","axios","post","err","type","placeholder","onChange","onPaste","required","HomePage","useHistory","src","logo","alt","rel","FaInstagram","size","App","Router","Switch","Route","exact","path","component","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.19c14eef.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/logo.b56f059c.png\";","// ErrorMessage.js\nimport React from 'react';\n\nconst ErrorMessage = ({ message }) => {\n return (\n

\n {message} Please contact us via WhatsApp or Instagram.\n

\n );\n};\n\nexport default ErrorMessage;","import React, { useState } from 'react';\nimport axios from 'axios';\nimport ErrorMessage from './ContactFormError';\nimport ContactFormError from \"./ContactFormError\";\n\n\nfunction ContactForm() {\n const [phoneNumber, setPhoneNumber] = useState('');\n const [status, setStatus] = useState('');\n const [error, setError] = useState('');\n\n const formatRussianNumber = (phoneNumber) => {\n if (!phoneNumber) return '';\n\n // Remove leading '8' and replace it with '7'\n if (phoneNumber.startsWith('8')) {\n phoneNumber = '7' + phoneNumber.slice(1);\n }\n // Remove leading '9' and replace it with '79'\n if (phoneNumber.startsWith('9')) {\n phoneNumber = '79' + phoneNumber.slice(1);\n }\n\n let formattedNumber = '+7';\n\n if (phoneNumber.length > 1) {\n formattedNumber += ' (';\n let areaCode = phoneNumber.slice(1, 4);\n formattedNumber += areaCode;\n\n if (phoneNumber.length >= 4) {\n formattedNumber += ') ';\n }\n }\n\n if (phoneNumber.length >= 4) {\n let firstPart = phoneNumber.slice(4, 7);\n formattedNumber += firstPart;\n } else if (phoneNumber.length > 4) {\n let firstPart = phoneNumber.slice(4);\n formattedNumber += firstPart;\n }\n\n if (phoneNumber.length >= 7) {\n let secondPart = phoneNumber.slice(7, 9);\n formattedNumber += '-' + secondPart;\n } else if (phoneNumber.length > 7) {\n let secondPart = phoneNumber.slice(7);\n formattedNumber += '-' + secondPart;\n }\n\n if (phoneNumber.length >= 9) {\n let thirdPart = phoneNumber.slice(9, 11);\n formattedNumber += '-' + thirdPart;\n } else if (phoneNumber.length > 9) {\n let thirdPart = phoneNumber.slice(9);\n formattedNumber += '-' + thirdPart;\n }\n\n return formattedNumber;\n };\n\n const formatDutchNumber = (phoneNumber) => {\n if (!phoneNumber) return '';\n\n // Normalize phone number to start with '31'\n if (phoneNumber.startsWith('31')) {\n phoneNumber = phoneNumber;\n } else if (phoneNumber.startsWith('06')) {\n phoneNumber = '31' + phoneNumber.slice(1);\n } else if (phoneNumber.startsWith('6')) {\n phoneNumber = '31' + phoneNumber;\n }\n\n // Remove country code '31' for formatting\n let countryCode = '+31';\n phoneNumber = phoneNumber.slice(2); // Remove '31'\n\n let formattedNumber = countryCode;\n\n if (phoneNumber.length > 0) {\n formattedNumber += ' ' + phoneNumber.charAt(0); // '6'\n }\n\n if (phoneNumber.length >= 3) {\n formattedNumber += ' ' + phoneNumber.slice(1, 3);\n } else if (phoneNumber.length > 1) {\n formattedNumber += ' ' + phoneNumber.slice(1);\n }\n\n if (phoneNumber.length >= 5) {\n formattedNumber += ' ' + phoneNumber.slice(3, 5);\n } else if (phoneNumber.length > 3) {\n formattedNumber += ' ' + phoneNumber.slice(3);\n }\n\n if (phoneNumber.length > 5) {\n formattedNumber += ' ' + phoneNumber.slice(5);\n }\n\n return formattedNumber;\n };\n\n\n const formatPhoneNumber = (value) => {\n // Remove all non-digit characters\n const phoneNumber = value.replace(/\\D/g, '');\n\n if (!phoneNumber) {\n // If the input is empty after removing non-digits, return an empty string\n return '';\n }\n\n if (phoneNumber.startsWith('7') || phoneNumber.startsWith('8') || phoneNumber.startsWith('9')) {\n // Russian number\n return formatRussianNumber(phoneNumber);\n } else if (\n phoneNumber.startsWith('31') ||\n phoneNumber.startsWith('6') ||\n phoneNumber.startsWith('06')\n ) {\n // Dutch number\n return formatDutchNumber(phoneNumber);\n } else {\n // If input does not match known patterns, return the unformatted number\n return value;\n }\n };\n\n // Function to validate phone number\n const validatePhoneNumber = (value) => {\n const phoneNumber = value.replace(/\\D/g, '');\n\n // Validate Russian numbers\n const isRussian = phoneNumber.match(/^7\\d{10}$/) || phoneNumber.match(/^8\\d{10}$/);\n\n // Validate Dutch mobile numbers with country code\n const isDutchMobile = phoneNumber.match(/^316\\d{8}$/);\n\n // Validate local Dutch mobile numbers starting with '06'\n const isLocalDutchMobile = phoneNumber.match(/^06\\d{8}$/);\n\n return isRussian || isDutchMobile || isLocalDutchMobile;\n };\n\n const handleChange = (e) => {\n let input = e.target.value;\n\n try {\n let formattedPhoneNumber = formatPhoneNumber(input);\n setPhoneNumber(formattedPhoneNumber);\n } catch (error) {\n // If formatting fails, set the input as it is\n setPhoneNumber(input);\n }\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n\n if (!validatePhoneNumber(phoneNumber)) {\n setError('Please enter a valid mobile phone number');\n setStatus('');\n return;\n } else {\n setError('');\n setStatus('');\n }\n\n // Submission logic\n try {\n const response = await axios.post('/api/contact', { phoneNumber });\n setStatus('Thank you! We will contact you soon.');\n setPhoneNumber(''); // Reset the phone number field\n } catch (err) {\n setError(ErrorMessage({ message: \"An error occurred.\" }));\n }\n };\n\n return (\n
\n
\n
\n \n \n
\n {error &&

{error}

}\n
\n {status &&

{status}

}\n
\n );\n}\n\nexport default ContactForm;\n","import React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport '../assets/styles.css';\nimport logo from '../assets/logo.png';\nimport axios from 'axios';\nimport { FaInstagram } from 'react-icons/fa';\nimport ContactForm from './ContactForm';\n\nfunction HomePage() {\n const history = useHistory();\n\n return (\n
\n
\n \"Whisper\n

Whisper Cleaning

\n

Where Quality Speaks for Itself

\n
\n \n
\n \n \n \n
\n
\n );\n}\n\nexport default HomePage;\n","import React from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport HomePage from './components/HomePage';\nimport ContactForm from './components/ContactForm';\n\nfunction App() {\n return (\n \n \n \n \n \n \n );\n}\n\nexport default App;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(\n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}