(\n address || !signupCheckEnabled\n ? \n : \n )} />\n )\n}\n\nexport default AddressedRoute\n","import React, { useState } from 'react'\nimport ReactMarkdown from 'react-markdown';\nimport { Checkbox, ControlLabel, FormGroup, Modal, Button, Well } from 'react-bootstrap';\n\nconst CriticalContract = ({ contract, contractAccepted }) => {\n const [showModal, setShowModal] = useState(false)\n const [accepted, setAccepted] = useState(false)\n const [submitDisabled, setSubmitDisabled] = useState(true)\n\n const handleContractClicked = (e) => {\n if (accepted){\n setAccepted(false)\n contractAccepted(false)\n } else {\n e.preventDefault()\n setShowModal(true)\n }\n }\n\n const checkAllRead = (e) => {\n let target = e.target.scrollHeight - e.target.clientHeight - 20\n if (e.target.scrollTop >= target){\n setSubmitDisabled(false)\n } else {\n setSubmitDisabled(true)\n }\n }\n\n const accept = () => {\n setAccepted(true)\n contractAccepted(true)\n setShowModal(false)\n setSubmitDisabled(true)\n }\n\n const modal = () => (\n setShowModal(false)}>\n \n {contract.title}\n \n \n \n \n \n \n \n \n \n
\n \n \n )\n\n return(\n <>\n \n { handleContractClicked(e) }}>\n Check here to read and accept our {contract.title}\n \n \n {modal()}\n >\n )\n}\n\nexport default CriticalContract\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport FormGroup from 'react-bootstrap/lib/FormGroup';\nimport ReactHtmlParser from 'react-html-parser';\nimport { get } from 'lodash';\n\nconst CustomFormGroup = ({ field, containerStyle, containerClass, extraClass, children, className, ...remainingProps }) => {\n const [topOffset, setTopOffset] = useState('0px')\n const [iconHeight, setIconHeight] = useState('34')\n const [controlLabelHeight, setControlLabelHeight] = useState('30')\n const [marginBottom, setMarginBottom] = useState('0')\n const requiredFields = useSelector(state => state.requiredFields)\n const validationKey = get(field, 'validationKey', null)\n const validationKeyValid = validationKey && (\n typeof validationKey == 'boolean' && validationKey == true ||\n requiredFields[validationKey]\n )\n const container = React.createRef()\n\n useEffect(() => {\n if (!container) { return }\n let cont = $(container.current)\n let newOffset = (cont.outerHeight() / 2) - (iconHeight / 2) - (marginBottom / 2)\n let controlLabelExists = React.Children.toArray(children).filter(c => c.props.bsClass == 'control-label').length > 0\n if (controlLabelExists) { newOffset += (controlLabelHeight / 2) }\n setTopOffset(`${newOffset}px`)\n }, [field])\n\n const valid = () => (\n typeof field.valid === 'boolean' && field.valid\n )\n\n const showAsterisk = () => (\n validationKeyValid\n )\n\n const shouldValidate = () => (\n validationKeyValid &&\n (typeof field.val == 'boolean' || field.val) &&\n typeof field.valid === 'boolean'\n )\n\n const icon = () => {\n let klass = get(field, 'loading', null) ? 'fa-circle-notch fa-spin fa-blue' : ''\n if (shouldValidate()){\n klass = valid() ? 'fa-check-circle' : 'fa-times-circle'\n }\n return(\n {\n if (ele) { ele.style.setProperty('top', topOffset, 'important') }\n }}>\n \n \n )\n }\n\n const formGroupClass = () => {\n let klass = ''\n if (shouldValidate()){\n klass = valid() ? 'has-success' : 'has-error'\n }\n return(`form-group has-feedback ${klass}`)\n }\n\n const validationMessage = () => (\n shouldValidate() &&\n !valid() &&\n \n { ReactHtmlParser(get(field, `errors.${field.failedValidation}`, '')) }\n
\n )\n\n const profileElementActive = () => {\n let activeProfileElements = get(useSelector(state => state.user), 'guest.type.guest_profile_elements', [])\n return (\n !Object.keys(field).includes('profileElement') ||\n (typeof field.profileElement === 'boolean' && field.profileElement == true) ||\n (typeof field.profileElement === 'string' && activeProfileElements.includes(field.profileElement))\n )\n }\n\n const dependencyMet = () => (\n !Object.keys(field).includes('dependencyMet') ||\n field.dependencyMet()\n )\n\n const fieldActive = () => (\n profileElementActive() && dependencyMet()\n )\n\n const validationLabel = () => (\n validationKeyValid && field.validationLabel\n )\n\n const updatedChildren = () => (\n React.Children.map(children, child => {\n if(!child) { return }\n if(child.props.bsClass != 'control-label'){ return child }\n let asterisk = showAsterisk() ? '*' : ''\n return (\n React.cloneElement(child, {\n children: ReactHtmlParser(`${child.props.children} ${asterisk} ${validationLabel() || ''}`)\n })\n )\n })\n )\n\n return (\n fieldActive() &&\n \n \n {icon()}\n {updatedChildren()}\n {validationMessage()}\n \n
\n );\n}\nexport default React.memo(CustomFormGroup)\n","import PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { defaultMessages } from '../../../libs/i18n/default';\nimport { setAuthenticatedUser } from '../../../shared/actions'\nimport FirebaseEmailVerificationSend from './FirebaseEmailVerificationSend'\nimport FirebaseEmailVerificationUpdate from './FirebaseEmailVerificationUpdate'\n\nconst FirebaseEmailVerificationCheck = ({ intl, intl: { formatMessage }, subject, onEmailVerified }) => {\n const dispatch = useDispatch()\n const [timer, setTimer] = useState(0);\n const [resendLocked, setResendLocked] = useState(false)\n const [loading, setLoading] = useState(true)\n const [loadingText, setLoadingText] = useState('Loading')\n const [updating, setUpdating] = useState(false)\n const [error, setError] = useState(null)\n const resendButtonRef = useRef()\n\n const sendGenerateTokenRequest = async () => {\n if (resendLocked) return;\n\n const urlParams = new URLSearchParams(window.location.search);\n\n resendButtonRef.current.classList.add('disabled');\n\n await fetch('/users/generate_verification_token', {\n method: 'post',\n credentials: 'same-origin',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n },\n body: JSON.stringify({ subject: subject, query: urlParams.toString() })\n })\n\n setTimer(30);\n setResendLocked(true);\n }\n\n useEffect(() => {\n const resendButton = document.getElementById('resendVerification');\n\n resendButtonRef.current = resendButton\n resendButton.addEventListener('click', sendGenerateTokenRequest);\n\n return () => {\n resendButton.removeEventListener('click', sendGenerateTokenRequest);\n };\n }, [])\n\n useEffect(() => {\n const queryString = window.location.search\n const urlParams = new URLSearchParams(queryString)\n const oobCode = urlParams.get('oobCode')\n\n if (!oobCode) {\n setLoading(false)\n sendGenerateTokenRequest()\n } else {\n setLoadingText(formatMessage(defaultMessages.clientFirebaseEmailVerificationVerifying))\n\n fetch('/users/verify_code', {\n method: 'post',\n credentials: 'same-origin',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n },\n body: JSON.stringify({ code: oobCode })\n }).then(async (resp) => {\n const data = await resp.json()\n\n if (data.success) {\n dispatch(setAuthenticatedUser(data.authenticated_user));\n onEmailVerified()\n } else {\n setLoading(false)\n setError(formatMessage(defaultMessages.clientFirebaseEmailVerificationVerifyFailure))\n }\n })\n }\n }, [])\n\n useEffect(() => {\n if (loading) return\n if (!resendLocked) return\n\n const intervalId = setInterval(() => {\n setTimer(prevTimer => prevTimer - 1);\n }, 1000);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [resendLocked]);\n\n useEffect(() => {\n if (loading) return\n if (timer > 0) return\n\n resendButtonRef.current.classList.remove('disabled');\n setResendLocked(false)\n }, [timer])\n\n return (\n <>\n {updating ? (\n \n ) : (\n \n )}\n >\n )\n}\n\nFirebaseEmailVerificationCheck.propTypes = {\n page: PropTypes.string,\n intl: PropTypes.object,\n content: PropTypes.object\n};\n\nexport default FirebaseEmailVerificationCheck;\n","import PropTypes from 'prop-types';\nimport React, { useEffect, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport ReactHtmlParser from 'react-html-parser';\nimport { defaultMessages } from '../../../libs/i18n/default';\nimport LoadingSpinner from '../LoadingSpinner';\n\nconst FirebaseEmailVerificationSend = ({\n intl: { formatMessage },\n setUpdating,\n sendGenerateTokenRequest,\n timer,\n error,\n loading,\n loadingText\n}) => {\n const authenticatedUser = useSelector(state => state.authenticatedUser)\n const incorrectEmailRef = useRef()\n const resendButtonRef = useRef()\n\n const updateIncorrectEmail = () => {\n setUpdating(true)\n }\n\n useEffect(() => {\n const resendButton = document.getElementById('resendVerification');\n\n resendButtonRef.current = resendButton\n resendButton.addEventListener('click', sendGenerateTokenRequest);\n\n return () => {\n resendButton.removeEventListener('click', sendGenerateTokenRequest);\n };\n }, [])\n\n useEffect(() => {\n const incorrectEmail = document.getElementById('incorrectEmail');\n\n incorrectEmailRef.current = incorrectEmail\n incorrectEmail.addEventListener('click', updateIncorrectEmail);\n\n return () => {\n incorrectEmail.removeEventListener('click', updateIncorrectEmail);\n };\n }, [])\n\n return (\n <>\n {loading && }\n \n {error && (\n
\n {error}\n
\n )}\n
\n \n
\n
{formatMessage(defaultMessages.clientFirebaseEmailVerificationHeader)}
\n {ReactHtmlParser(formatMessage(defaultMessages.clientFirebaseEmailVerificationInstructions, { email: authenticatedUser.email }))}\n
\n {ReactHtmlParser(formatMessage(defaultMessages.clientFirebaseEmailVerificationIncorrectEmail))}\n {ReactHtmlParser(formatMessage(defaultMessages.clientFirebaseEmailVerificationResend))}\n {timer > 0 && (\n
Resend available in {timer} seconds.\n )}\n
\n >\n )\n}\n\nFirebaseEmailVerificationSend.propTypes = {\n page: PropTypes.string,\n intl: PropTypes.object,\n content: PropTypes.object\n};\n\nexport default FirebaseEmailVerificationSend;\n","import PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport React, { useRef, useState } from 'react';\nimport { ControlLabel } from 'react-bootstrap';\nimport { setAuthenticatedUser } from '../../../shared/actions'\nimport { defaultMessages } from '../../../libs/i18n/default';\nimport { updateEmail } from '../../lou/auth';\n\nconst FirebaseEmailVerificationUpdate = ({ intl: { formatMessage }, setUpdating, subject }) => {\n const dispatch = useDispatch()\n const authenticatedUser = useSelector(state => state.authenticatedUser)\n const [email, setEmail] = useState(authenticatedUser.email)\n const [password, setPassword] = useState('')\n const [submitting, setSubmitting] = useState(false)\n const [error, setError] = useState(null)\n const [success, setSuccess] = useState(null)\n const errorTimeoutRef = useRef()\n\n const camelize = (str) => {\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w|\\s+)/g, (match, index) => {\n if (+match === 0) return \"\";\n return index === 0 ? match.toLowerCase() : match.toUpperCase();\n });\n };\n\n const onSubmit = async e => {\n e.preventDefault()\n\n setSubmitting(true)\n\n const data = await updateEmail(email, password, subject)\n\n if (data.success) {\n dispatch(setAuthenticatedUser(data.authenticated_user));\n setSuccess(true)\n\n setTimeout(() => {\n setUpdating(false)\n setSubmitting(false)\n }, 4000)\n } else {\n let message;\n\n if (typeof data.message === 'string') {\n setError(data.message)\n } else if (data.message.message.includes('TOO_MANY_ATTEMPTS_TRY_LATER')) {\n message = 'clientErrorsAuthTooManyRequests'\n setError(formatMessage(defaultMessages[message]))\n } else {\n message = `clientErrorsUpdate ${data.message.message.toLowerCase().split('_').join(' ')}`\n message = camelize(message)\n setError(formatMessage(defaultMessages[message]))\n }\n\n setSubmitting(false)\n\n clearTimeout(errorTimeoutRef.current)\n errorTimeoutRef.current = setTimeout(() => {\n setError('')\n }, 5000)\n }\n }\n\n return (\n <>\n \n
Update your email address
\n \n {error && (\n \n {error}\n
\n )}\n {success && (\n \n {formatMessage(defaultMessages.clientFirebaseEmailVerificationUpdateSuccess)}\n
\n )}\n \n >\n )\n}\n\nFirebaseEmailVerificationUpdate.propTypes = {\n page: PropTypes.string,\n intl: PropTypes.object,\n content: PropTypes.object\n};\n\nexport default FirebaseEmailVerificationUpdate;\n","import React from 'react'\nimport Redirector from '../../bundles/GuestSignUp/routes/Redirector'\nimport ButtonGroup from '../../bundles/GuestSignUp/components/ButtonGroup'\nimport { setPreviousPage } from '../actions'\nimport { useDispatch } from 'react-redux';\n\nexport default ({ page, thisPage, back, skip, submitFunc, disableSubmit, children }) => (\n \n \n \n
\n)\n","import React, { useState, useEffect } from 'react';\nimport FormControl from 'react-bootstrap/lib/FormControl';\nimport { defaultMessages } from '../../libs/i18n/default';\nimport { injectIntl } from 'react-intl';\nimport { get } from 'lodash';\n\nconst FormDate = ({ date, intl: { formatMessage }, formDateId, setDate }) => {\n const [formDate, setFormDate] = useState(new Date(date))\n const paddedDate = (d) => (d && String(d).padStart(2, '0'))\n const dateValid = formDate && formDate.toString() != 'Invalid Date'\n const initialDay = dateValid ? formDate.getDate() : ''\n const initialMonth = dateValid ? paddedDate(formDate.getMonth() + 1) : ''\n const initialYear = dateValid ? formDate.getFullYear() : ''\n\n const months = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ]\n\n const monthOptions = () => (\n [\n ,\n ...months.map((m, i) => (\n \n ))\n ]\n )\n\n const updateDate = e => {\n e.preventDefault()\n\n try {\n let day = $(`#${formDateId}_day`).val().padStart(2, '0')\n let month = $(`#${formDateId}_month`).val().padStart(2, '0')\n let year = $(`#${formDateId}_year`).val()\n\n let dateString = `${year}-${month}-${day}`;\n setDate(dateString)\n\n if (datesValid(year, month, day)) {\n let date = new Date(year, parseInt(month - 1), day);\n\n if (date == 'Invalid Date') throw new Error()\n\n setFormDate(new Date(date))\n }\n } catch (err) {\n resetDate()\n }\n }\n\n const datesValid = (year, month, day) => (\n validYear(year) &&\n validDay(day) &&\n validMonth(month)\n )\n\n const resetDate = () => {\n setFormDate(null)\n setDate(null)\n }\n\n const validDay = (d) => (\n new RegExp(/^\\d?\\d{1}$/).test(d)\n )\n\n const validYear = (y) => (\n new RegExp(/^\\d{4}$/).test(y)\n )\n\n const validMonth = (m) => (\n new RegExp(/^(1[012]|0?[1-9])$/).test(m)\n )\n\n return (\n \n \n\n \n {monthOptions()}\n \n\n \n
\n )\n}\n\nexport default injectIntl(FormDate)\n","import React from \"react\";\n\nconst LoadingSpinner = ({ label = 'Loading' }) => {\n return (\n \n )\n}\n\nexport default LoadingSpinner\n","import React from 'react'\nimport { useSelector } from 'react-redux';\nimport { signOut } from \"firebase/auth\";\n\nconst Logout = () => {\n const user = useSelector(state => state.user)\n const userExists = user != null && Object.keys(user).length > 0\n\n const handleLogout = (e) => {\n e.preventDefault()\n\n window.location.replace(\"/logout\")\n }\n\n if (!userExists) return <>>\n\n return (\n \n )\n}\n\nexport default Logout\n","import React from 'react'\nimport { Route, Redirect } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\n\nconst RegisteredRoute = ({ component: Component, ...rest }) => {\n const registered = useSelector(state => state.registered)\n\n return(\n (\n registered\n ? \n : \n )} />\n )\n}\n\nexport default RegisteredRoute\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst TranslateContainer = styled.div`\n bottom: 0;\n right: 0;\n position: absolute;\n margin: 1em;\n\n @media (max-width: 900px) {\n position: relative;\n text-align: center;\n }\n`\n\nconst Translate = () => (\n \n \n \n) \n\nexport default Translate\n","import CustomFormGroup from './CustomFormGroup'\nimport Form from './Form'\nimport FormDate from './FormDate'\nimport CriticalContract from './CriticalContract'\n\nexport {\n CustomFormGroup,\n Form,\n FormDate,\n CriticalContract\n}\n","import styled from \"styled-components\"\nimport FormControl from 'react-bootstrap/lib/FormControl';\nimport Button from 'react-bootstrap/lib/Button';\n\nconst AddressContainer = styled.div.attrs(props => ({\n id: \"address-pre-check\"\n}))`\n padding: 1rem 0rem;\n display: flex;\n flex: 1 1 auto;\n`\n\nconst Row = styled.div`\n justify-content: center;\n display: flex;\n`\n\nconst Title = styled.h1`\n #guest_signup>.container &&,\n #host_signup>.container && {\n font-size: 2.5rem;\n margin-top: 3rem;\n }\n color: #074165;\n font-family: 'Lato Black', sans-serif;\n letter-spacing: 0.8px;\n`\n\nconst SubTitle = styled.h2`\n color: #7E95A1;\n font-family: 'Lato Light', sans-serif;\n letter-spacing: 0.4px;\n text-align: center;\n font-size: 2rem;\n`\n\nconst Logo = styled.img`\n max-width: 190px;\n display: inline-block;\n &:last-child{\n padding-left: 3rem;\n }\n`\n\nconst Search = styled(FormControl).attrs(props => ({\n id: 'addressSearch',\n type: \"text\",\n placeholder: \"Search for your street address\"\n}))`\n margin-bottom: 3rem;\n padding: 1rem 1.8rem;\n height: 100%;\n border-color: #AFBBC4;\n &::placeholder {\n color: #AFBBC4;\n }\n`\n\nconst Seperator = styled.hr`\n width: 100%;\n border-color: #D2DADF;\n margin: 3rem 0rem;\n`\n\nconst Help = styled.h3`\n color: #074165;\n font-family: 'Lato', sans-serif;\n letter-spacing: 0.4px;\n text-align: center;\n font-size: 1.9rem;\n margin-bottom: 3rem;\n`\n\nconst Submit = styled.button.attrs(props => ({\n className: \"btn-info btn-fixed-width\",\n type: \"submit\"\n}))`\n && {\n background-color: #D8203E;\n border-color: #D8203E;\n border-radius: 9999px;\n display: block;\n margin: auto;\n padding: 0.7rem;\n }\n &&:hover {\n background-color: #D8203E;\n border-color: #D8203E;\n }\n`\n\nconst Styles = {\n AddressContainer,\n Row,\n Title,\n SubTitle,\n Search,\n Help,\n Seperator,\n Submit,\n Logo,\n}\n\nexport default Styles","const constants = {\n SET_ACTIVE_PROFILE_ELEMENTS: \"SET_ACTIVE_PROFILE_ELEMENTS\",\n SET_ADDRESS: \"SET_ADDRESS\",\n SET_CONTENT: \"SET_CONTENT\",\n SET_ETHNICITY_OPTIONS: \"SET_ETHNICITY_OPTIONS\",\n SET_LANGUAGE_OPTIONS: \"SET_LANGUAGE_OPTIONS\",\n SET_NEXT_PAGE: \"SET_NEXT_PAGE\",\n SET_PAGE: \"SET_PAGE\",\n SET_PAGES: \"SET_PAGES\",\n SET_PREVIOUS_PAGE: \"SET_PREVIOUS_PAGE\",\n SET_PROFILE_ELEMENTS: \"SET_PROFILE_ELEMENTS\",\n SET_REQUIRED_FIELDS: \"SET_REQUIRED_FIELDS\",\n SET_RESIDENT_VACCINATION_OPTIONS: \"SET_RESIDENT_VACCINATION_OPTIONS\",\n SET_VACCINATION_MANDATORY: \"SET_VACCINATION_MANDATORY\",\n SET_TERRITORY: \"SET_TERRITORY\",\n SET_MARKET: \"SET_MARKET\",\n SET_RECAPTCHA_SITE_ID: \"SET_RECAPTCHA_SITE_ID\",\n SET_AUTHENTICATED_USER: \"SET_AUTHENTICATED_USER\"\n};\n\nexport default constants;\n","import { fetchSignInMethodsForEmail } from \"firebase/auth\";\nimport fetch from \"isomorphic-fetch\";\nimport { generatePublicClientToken } from \"../authUtils\"\n\nconst getAdType = () => {\n const queryString = window.location.search\n const urlParams = new URLSearchParams(queryString)\n const googleAd = urlParams.get(\"_gl\")\n const facebookAd = urlParams.get(\"fbclid\")\n\n if (googleAd) return \"google\"\n if (facebookAd) return \"facebook\"\n\n return null\n}\n\nconst postCreateAuthenticatedUser = async (email, password, subject) => {\n const queryString = window.location.search\n const urlParams = new URLSearchParams(queryString)\n const affiliate = urlParams.get(\"affiliate\")\n const adType = getAdType()\n\n return (\n await fetch(\"/users/create_authenticated_user\", {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\": document.querySelector(\"meta[name=\\\"csrf-token\\\"]\").getAttribute(\"content\")\n },\n body: JSON.stringify({ email, password, user_kind: subject, affiliate, ad_type: adType })\n })\n )\n}\n\nconst redirectToLogin = (territory, email) => {\n setTimeout(() => {\n const url = new URL(`${territory.sso_domain}/continue`)\n const params = url.searchParams\n\n params.append(\"from\", window.location.href)\n params.append(\"user\", email)\n params.append(\"redirect\", true)\n params.append(\"callback\", true)\n\n window.location.href = url.toString()\n }, 3000)\n}\n\nconst checkForExistingFirebaseUser = async (territory, email) => {\n try {\n const publicToken = generatePublicClientToken(territory.public_client_api_key, territory.current_time, territory.code)\n const response = await fetch(`${territory.public_host_domain}/api/v2/kookie/core/user_records?email=${email}`, {\n method: \"GET\",\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'API-KEY': publicToken,\n 'API-VERSION': '2'\n }\n })\n\n if (!response.ok) { return false }\n\n const payload = await response.json()\n const exists = Array.isArray(payload.data) && payload.data.length > 0\n\n return exists\n } catch(e) {\n console.log(e)\n return false\n }\n}\n\nconst updateEmail = async (email, password, subject) => {\n const response = await fetch(\"/users/update_auth_email\", {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\": document.querySelector(\"meta[name=\\\"csrf-token\\\"]\").getAttribute(\"content\")\n },\n body: JSON.stringify({ email, password, subject })\n })\n\n if (!response.ok) { return false }\n\n const data = await response.json()\n\n return data\n}\n\nconst checkForExistingHmsUser = async (territory, email) => {\n try {\n const publicToken = generatePublicClientToken(territory.public_client_api_key, territory.current_time, territory.code)\n const response = await fetch(`${territory.public_host_domain}/api/v2/users?email=${email}`, {\n method: \"GET\",\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'API-KEY': publicToken,\n 'API-VERSION': '2'\n }\n })\n\n if (!response.ok) { return false }\n\n const payload = await response.json()\n const exists = Array.isArray(payload.data) && payload.data.length > 0\n\n return exists\n } catch(e) {\n console.log(e)\n return false\n }\n}\n\nexport { redirectToLogin, checkForExistingFirebaseUser, checkForExistingHmsUser, postCreateAuthenticatedUser, updateEmail }\n","import P from '../bundles/GuestSignUp/pages'\nimport { isPresent } from './utilities'\nimport store from './store'\n\nconst filterElement = (profileElements, element) => {\n let home_present = profileElements.some(profile => profile.kind === element);\n return home_present && profileElements.filter(function (profile) {return profile.kind == element})[0];\n}\n\nexport const generateProfileElementObject = (defaultAnswer, element, answer, embeddedAnswer='') => {\n const profileElements = store.getState().profileElements\n const activeProfileElements = store.getState().user.guest.type.guest_profile_elements\n let home = filterElement(profileElements, element);\n let response;\n\n if (home && home.answers[answer] != undefined) {\n if (typeof home.answers[answer] === 'object' && embeddedAnswer != '') {\n response = (home.answers[answer][embeddedAnswer] === undefined) ? defaultAnswer : home.answers[answer][embeddedAnswer];\n } else {\n response = home.answers[answer];\n }\n } else {\n response = defaultAnswer;\n }\n return {\n val: response,\n validationKey: activeProfileElements.includes(answer) ? `profile_elements_${element}_${answer}${isPresent(embeddedAnswer) ? `_${embeddedAnswer}` : ''}` : '',\n profileElement: answer\n }\n};\n\nexport const setProfileElementsFromState = (defaultAnswer, element, answer, embeddedAnswer='') => {\n const { profileElements } = store.getState()\n let home = filterElement(profileElements, element);\n let response;\n\n if (home && home.answers[answer] != undefined) {\n if (typeof home.answers[answer] === 'object' && embeddedAnswer != '') {\n response = (home.answers[answer][embeddedAnswer] === undefined) ? defaultAnswer : home.answers[answer][embeddedAnswer];\n } else {\n response = home.answers[answer];\n }\n } else {\n response = defaultAnswer;\n }\n return response;\n};\n\nexport const buildProfileForm = () => {\n const profileElements = store.getState().profileElements\n const schema = store.getState().localProfileElements.schema\n let form = {};\n let key, keyType, defaultAnswer;\n\n Object.keys(schema).forEach(function(section) {\n form[section] = {};\n Object.keys(schema[section]).forEach(function(sectionItem) {\n keyType = schema[section][sectionItem];\n key = buildProfileKey(schema, section, sectionItem);\n defaultAnswer = (keyType == 'Array' ? [] : '');\n form[section][key] = setProfileElementsFromState(defaultAnswer, section, sectionItem);\n });\n });\n return form;\n};\n\nexport const buildProfileKey = (schema, section, sectionItem) => {\n let keyType = schema[section][sectionItem];\n if(typeof keyType === 'object') keyType = 'Object';\n return String(sectionItem + '|' + keyType);\n};\n\nexport const updateProfileField = (form, schema, section, sectionItem, value) => {\n let key = buildProfileKey(schema, section, sectionItem);\n form[section][key] = value;\n return form;\n};\n\nexport const updateForm = (form, payload) => {\n const schema = store.getState().localProfileElements.schema\n let value;\n Object.keys(payload).forEach(function(section) {\n Object.keys(payload[section]).forEach(function(sectionItem) {\n value = payload[section][sectionItem];\n form = updateProfileField(form, schema, section, sectionItem, value);\n })\n })\n return form;\n};\n","import C from './constants'\n\nexport const address = (state = null, action) => (\n action.type == C.SET_ADDRESS ? action.payload : state\n)\n\nexport const content = (state = null, action) => (\n action.type === C.SET_CONTENT\n ? action.payload\n : state\n)\n\nexport const ethnicityOptions = (state=false, action) => (\n action.type === C.SET_ETHNICITY_OPTIONS\n ? action.payload\n : state\n)\n\nexport const languageOptions = (state=false, action) => (\n action.type === C.SET_LANGUAGE_OPTIONS\n ? action.payload\n : state\n)\n\nexport const page = (state = null, action) => (\n action.type === C.SET_PAGE\n ? action.payload\n : state\n)\n\n\nexport const pages = (state = [], action) => (\n action.type === C.SET_PAGES\n ? action.payload\n : state\n)\n\n\nexport const nextPage = (state = false, action) => (\n action.type === C.SET_NEXT_PAGE\n ? action.payload\n : state\n)\n\n\nexport const previousPage = (state = false, action) => (\n action.type === C.SET_PREVIOUS_PAGE\n ? action.payload\n : state\n)\n\nexport const profileElements = (state = [], action) => (\n action.type === C.SET_PROFILE_ELEMENTS\n ? action.payload\n : state\n)\n\nexport const requiredFields = (state = [], action) => (\n action.type === C.SET_REQUIRED_FIELDS\n ? action.payload\n : state\n)\n\nexport const territory = (state=false, action) => (\n action.type === C.SET_TERRITORY\n ? action.payload\n : state\n)\n\nexport const recaptchaSiteId = (state = '', action) =>\n (action.type === C.SET_RECAPTCHA_SITE_ID) ?\n action.payload :\n state;\n\nexport const vaccinationMandatory = (state=[], action) =>\n (action.type === C.SET_VACCINATION_MANDATORY) ?\n action.payload :\n state;\n\nexport const authenticatedUser = (state={}, action) =>\n (action.type === C.SET_AUTHENTICATED_USER) ?\n action.payload :\n state;\n\nexport default {\n address,\n content,\n ethnicityOptions,\n languageOptions,\n nextPage,\n page,\n pages,\n previousPage,\n profileElements,\n requiredFields,\n territory,\n recaptchaSiteId,\n vaccinationMandatory,\n authenticatedUser\n}\n","import CryptoJS from \"crypto-js\";\nimport {Buffer} from \"buffer\";\n\nconst encrypt = (key_text, iv_text, data) => {\n const key = CryptoJS.SHA256(key_text);\n const iv = CryptoJS.enc.Utf8.parse(iv_text);\n const encrypted = CryptoJS.AES.encrypt(data, key, {iv: iv});\n\n return encrypted.ciphertext.toString(CryptoJS.enc.Base64)\n}\n\nconst decrypt = (key_text, iv_text, data) => {\n const key = CryptoJS.SHA256(key_text);\n const iv = CryptoJS.enc.Utf8.parse(iv_text);\n const decrypted = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.enc.Base64.parse(data) }, key, { iv: iv });\n return decrypted.toString(CryptoJS.enc.Utf8);\n}\n\nconst b64enc = (data) => {\n var b = new Buffer.from(data, \"binary\");\n return b.toString(\"base64\");\n}\n\nexport { encrypt, decrypt, b64enc }\n","import guestStore from '../bundles/GuestSignUp/store'\nimport hostStore from '../bundles/HostSignUp/store'\nexport default window.location.pathname.includes('guests/signup') ? guestStore : hostStore\n","const styles = (page, territory) => {\n const userType = window.location.pathname.includes('hosts') ? 'host' : 'guest'\n const background = territory[`${userType}_background`]\n const addressBackground = `/assets/${userType}_address_background.jpg`\n\n const layout = {\n backgroundImage: `url('${page == 'address' ? addressBackground : background}')`\n }\n\n const container = page == 'address'\n ? {\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'center',\n height: '100%'\n }\n : {}\n\n return { layout, container }\n}\n\nexport default styles\n","import { validator } from './validator';\nimport { get, flatten } from 'lodash';\nimport store from './store';\nimport { defaultMessages } from '../libs/i18n/default';\n\nexport const objVal = (obj, path) => {\n return !!path.split('.').reduce((obj, prop) => {\n return obj && obj[prop] ? obj[prop] : undefined;\n }, obj)\n}\n\nexport const getAge = dateString => {\n var today = new Date();\n var birthDate = new Date(dateString);\n var age = today.getFullYear() - birthDate.getFullYear();\n var m = today.getMonth() - birthDate.getMonth();\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\n age--;\n }\n return age;\n}\n\nexport const formatDate = date => {\n if(Date.parse(date)){\n var d = new Date(date),\n month = '' + (d.getMonth() + 1),\n day = '' + d.getDate(),\n year = d.getFullYear();\n if (month.length < 2) month = '0' + month;\n if (day.length < 2) day = '0' + day;\n return [year, month, day].join('-');\n }\n}\n\nexport const setElementValue = async(element, value, kind = 'input') => (\n await new Promise((resolve) => {\n if (!element) { return resolve() }\n let type = kind == 'input' ? window.HTMLInputElement.prototype : window.HTMLSelectElement.prototype\n let nativeInputValueSetter = Object.getOwnPropertyDescriptor(type, \"value\").set;\n nativeInputValueSetter.call(element, value);\n\n var ev = new Event(kind, { bubbles: true});\n element.dispatchEvent(ev)\n resolve()\n })\n);\n\nexport const randomChars = (length) => {\n var result = '';\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n var charactersLength = characters.length;\n for ( var i = 0; i < length; i++ ) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n};\n\nexport const blankOrValue = (val) => {\n return val == undefined ? '' : val;\n}\n\nexport const isPresent = (string) => {\n return typeof string === 'string' && string.trim() !== '';\n}\n\nexport const handleSelection = (original, newSelection) => {\n let newSelectionArray;\n\n if(original.includes(newSelection)) {\n newSelectionArray = original.filter(s => s !== newSelection);\n } else {\n newSelectionArray = [...original, newSelection];\n }\n return newSelectionArray\n}\n\nexport const generateResidentElementObject = (field, resident) => {\n return {\n val: resident[field] || '',\n validationKey: `residents_${field}`\n }\n}\n\nexport const generateRoomElementObject = (field, room) => {\n return {\n val: room[field] || '',\n validationKey: `rooms_${field}`\n }\n}\n\nexport const overEighteenYearsAgo = (dateString) => {\n let eighteen_years_ago = new Date(new Date().getFullYear() - 18, new Date().getMonth(), new Date().getDay())\n let date = new Date(dateString)\n return date ? date < eighteen_years_ago : false\n}\n\nconst buildNewObject = async(stateObject, key, val, resetDependentObject = true) => {\n const activeProfileElements = store.getState().user.guest.type.guest_profile_elements\n let newObject = {...stateObject[key]}\n val = resetDependentObject ? val : newObject.val\n let result = await validator(val, newObject.validationKey)\n newObject.val = val\n newObject.valid = get(result, 'valid')\n newObject.failedValidation = get(result, 'failedValidation')\n return newObject\n}\n\nconst dependentFields = (stateObject, key) => (\n Object.keys(stateObject).filter(k => flatten([get(stateObject[k], 'dependentObj', '')]).includes(key))\n)\n\nexport const changeState = async(stateObject, key, val, callback, resetDependentObject = true) => {\n let newObj = await buildNewObject(stateObject, key, val)\n callback({[key]: newObj})\n let newStateObj = {...stateObject, [key]: newObj}\n dependentFields(newStateObj, key).forEach(async(k) => {\n let newDependentObj = await buildNewObject(newStateObj, k, '', resetDependentObject)\n callback({[k]: newDependentObj})\n })\n}\n\nexport const linkRenderer = ({ href, children }) => (\n {children}\n)\n\nexport const yesNoOptions = (formatMessage, useBooleanValues = true) => {\n return(\n <>\n \n \n \n >\n )\n}\n\nexport const optionsFromArray = (options, formatMessage, key = 'key') => (\n [\n ,\n ...options.map(f => (\n \n ))\n ]\n)\n\nexport const camelize = (name) => (\n name.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => (\n index === 0 ? word.toLowerCase() : word.toUpperCase()\n )).replace(/\\s+/g, '')\n);\n","import { isPresent } from './utilities'\nimport moment from 'moment';\nimport V from 'validator'\nimport { get } from 'lodash'\nimport store from './store'\n\nString.prototype.capitalize = function() {\n return this.charAt(0).toUpperCase() + this.slice(1);\n}\n\nexport const validator = async (value, key) => {\n if (typeof key == 'boolean' && key == true) {\n return { valid: !!value, failedValidation: null }\n }\n if (typeof value == 'boolean') {\n return { valid: true, failedValidation: null }\n }\n const requiredFields = store.getState().requiredFields\n let valueValid = value != '' && value != undefined && value != null\n let keyValid = key && requiredFields[key]\n if (!valueValid || !keyValid) { return null }\n\n\n let valid = false;\n let failedValidation = null;\n const requiredValidations = requiredFields[key].validations\n const validationKeys = requiredValidations ? Object.keys(requiredValidations) : []\n\n const validateString = () => {\n let regexp = new RegExp(/^[\\w\\s\\-\\\\,\\/'àâçéèêëîïôûùüÿñæœ]{2,}$/);\n return regexp.test(value);\n }\n\n const validateBoolean = () => {\n let validBoolean = (\n typeof value === 'boolean' ||\n (\n typeof value === 'string' &&\n ['true', 'false'].includes(value)\n )\n )\n return validBoolean || null\n }\n\n const validatePassword = () => {\n let regexp = new RegExp(/^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/);\n failedValidation = 'password'\n return regexp.test(value);\n }\n\n const validatePlace = () => {\n failedValidation = 'place'\n return isPresent(value)\n }\n\n const validateName = () => {\n let regexp = new RegExp(/^[a-zA-Z \\-\\']{2,40}$/); //Letters only, no special characters, spaces permitted, 2-40 character length\n return regexp.test(value);\n }\n\n const validatePhone = () => {\n return V.isMobilePhone(value)\n }\n\n const validatePresence = () => {\n if (!value) { return false }\n let present;\n switch (typeof value) {\n case 'string':\n present = isPresent(value)\n break\n case 'boolean':\n present = true\n break\n default:\n present = value && value.length > 0\n break\n }\n return present\n }\n\n const validateDate = () => {\n if (typeof value != 'string') { return null }\n if (value == null || value == '') { return false }\n // Check if date is iso8601 format\n const iso8601Date = new RegExp(/^(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/)\n if (!iso8601Date.test(value)) { return false }\n const momentDate = moment(value)\n const maxDate = moment().add(3, 'years')\n let conditions = requiredValidations['date']\n let date = new Date(value)\n let latestDate = new Date(conditions.latest_date)\n let earliestDate = new Date(conditions.earliest_date)\n\n if (momentDate.isAfter(maxDate)) {\n failedValidation = 'afterMaxDate'\n return false\n } else if (earliestDate && date < earliestDate) {\n failedValidation = 'lessThanMimimum'\n return false\n } else if (latestDate && date > latestDate) {\n failedValidation = 'greaterThanMaximum'\n return false\n } else {\n return true\n }\n }\n\n const validateEmailFormat = () => {\n var regexp = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/)\n failedValidation = 'emailFormat'\n return regexp.test(value);\n }\n\n const validateFile = () => (\n value instanceof File\n )\n\n const validateArray = () => {\n let conditions = requiredValidations['array']\n return value.length >= conditions.minimum_size\n }\n\n const validateEmailUnique = () => {\n failedValidation = 'emailUnique'\n return new Promise(async (resolve) => {\n let formUrl = `/validate_email.json?email=${value}`;\n await fetch(formUrl, {\n method: 'GET',\n credentials: 'same-origin',\n headers: { 'X-Requested-With': 'XMLHttpRequest' }\n })\n .then(response => response.json())\n .then(data => {\n resolve(data.valid)\n })\n })\n }\n\n const validate = async () => {\n return await new Promise(async (resolve) => {\n if (validationKeys.length > 0) {\n for (let key of validationKeys) {\n switch (key) {\n case 'email_format':\n valid = await validateEmailFormat()\n break;\n case 'email_unique':\n valid = await validateEmailUnique()\n break;\n case 'name':\n valid = await validateName()\n break;\n case 'phone':\n valid = await validatePhone()\n break;\n case 'date':\n valid = await validateDate()\n break;\n case 'string':\n valid = await validateString()\n break;\n case 'boolean':\n valid = await validateBoolean()\n break;\n case 'password':\n valid = await validatePassword()\n break;\n case 'file':\n valid = await validateFile()\n break;\n case 'place':\n valid = await validatePlace()\n break;\n case 'array':\n valid = await validateArray()\n break;\n default:\n valid = false\n break;\n }\n if (!valid) { break; }\n }\n } else {\n valid = await validatePresence()\n }\n resolve(valid)\n })\n }\n\n return validate().then(valid => ({ valid: valid, failedValidation: failedValidation }))\n}\n\nexport const fieldsToValidate = (state) => {\n const requiredFields = store.getState().requiredFields\n const activeProfileElements = get(store.getState(), 'user.guest.type.guest_profile_elements', [])\n return (\n typeof state == 'object'\n ? Object.keys(state).filter((key) => {\n let field = state[key]\n if (!field || typeof field != 'object') { return false }\n let profileElement = field.profileElement\n let validationKey = field.validationKey\n let validationKeyExists = (typeof validationKey === 'boolean' && validationKey == true) || (validationKey && typeof requiredFields[validationKey] == 'object')\n let fieldActive = (typeof profileElement === 'boolean' && profileElement == true) || (profileElement && activeProfileElements.includes(profileElement))\n let dependencyMet = typeof field.dependencyMet != 'function' || field.dependencyMet(state[field.dependentObj])\n return validationKeyExists && fieldActive && dependencyMet\n })\n : []\n )\n}\n\nexport const pageValid = (state) => (\n fieldsToValidate(state).every((field) => (state[field].valid == true))\n)\n\nexport const executeValidations = (component) => {\n fieldsToValidate(component.state).forEach(async (field) => {\n let result = await validator(\n component.state[field].val,\n component.state[field].validationKey\n )\n let obj = component.state[field]\n obj.valid = get(result, 'valid')\n obj.failedValidation = get(result, 'failedValidation')\n component.setState({ [field]: obj });\n })\n}\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-ps\": 20315,\n\t\"./ar-ps.js\": 20315,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku-kmr\": 90563,\n\t\"./ku-kmr.js\": 90563,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;"],"names":["_constants2","_interopRequireDefault","require","_pages2","_isomorphicFetch2","_axios2","_formData2","_reactOnRails2","_profileElementHelpers","_utilities","_actions","obj","__esModule","default","handleErrors","response","ok","status","error","Error","statusText","certificateFormSubmit","exports","dispatch","setAddress","setPage","Pages","ADDRESS_PAGE","payload","getState","form","FormData","affiliate","territory","referral","pages","guest_kind","guest_kind_unknown_place","highSchoolGuestType","guest_types","find","t","code","highSchoolStudent","user","guestType","id","append","ReactOnRails","authenticityToken","blankOrValue","firebase_id","email","givenNames","familyName","gender","dob","password","referredFrom","referral_uid","intendedStart","intendedVacate","nationality","weChatId","phone","city","google","coordinates","lat","lng","name","state","postcode","place","async","fetch","method","credentials","headers","body","submitForm","then","json","data","setUser","setProfileElements","profile_elements","setRegistered","guest","type","setPages","filter","p","kind","pagesToSkip","push","includes","token","document","querySelector","getAttribute","JSON","stringify","authenticatedUser","authId","authenticated_user_id","success","message","doseOneOn","doseTwoOn","vaccinationInfoSubmit","setVaccinationInfo","vaccination","certificate","guest_id","attachment","file","setUploadStatus","axios","url","onUploadProgress","progressEvent","percentCompleted","Math","round","loaded","total","setUploadProgress","submit","guestProfileSubmit","page","changePage","Promise","resolve","profileElements","profileForm","buildProfileForm","profileElementsForPage","GUARDIAN_EMERGENCY_PAGE","indexOf","LANGUAGE_NATIONALITY_PAGE","PERSONALITY_PROFILE_PAGE","PETS_CHILDREN_PAGE","MEDICAL_PAGE","PLACEMENT_PAGE","EDUCATION_PAGE","PRODUCT_PAGE","profileSectionToSubmit","reduce","item","authenticity_token","admin","doc_id","doc_type","profile_element_entry","updateForm","profileSubmit","setNextPage","setArrival","formUrl","dietary_requirements","updateProduct","setProduct","existing","arrivalId","val","onshore","pickupId","formMethod","arrivalPlaceName","arrivalPlaceId","arrivalDate","arrivalTime","arrivalVesselNo","arrivalNotes","pickupDate","pickupTime","pickupTransportType","pickupContactType","pickupContactName","pickupContactPhone","pickupPlaceId","pickupPlaceName","pickupPickupTime","pickupNotes","updateArrival","arrival","setPickup","pickup","setOnshore","setCompleted","description","photos","photoId","reducedPhotos","setPreviousPage","C","SET_AFFILIATE","SET_ARRIVAL","arrival_times","SET_ARRIVAL_TIMES","completed","SET_COMPLETED","SET_GUEST_KIND","unknown_place","SET_GUEST_KIND_UNKNOWN_PLACE","country_code","SET_COUNTRY_CODE","environment","SET_ENVIRONMENT","SET_GUEST_TYPE","local_profile_elements","SET_LOCAL_PROFILE_ELEMENTS","SET_PICKUP","products","SET_PRODUCTS","product","SET_PRODUCT","SET_REFERRAL","registered","SET_REGISTERED","SET_USER","SET_ONSHORE","vaccination_info","SET_VACCINATION_INFO","vaccination_options","SET_VACCINATION_OPTIONS","SET_UPLOAD_STATUS","progress","SET_UPLOAD_PROGRESS","RESET_UPLOAD","_react","_react2","_reactRedux","_reactIntl","_Button2","_default","_TrackableButton2","injectIntl","ButtonGroup","intl","formatMessage","disableSubmit","submitFunc","back","skip","pressed","setPressed","useState","useSelector","useDispatch","icon","createElement","className","defaultMessages","clientCommonButtonsContinue","submitClick","e","dummyButton","position","style","visibility","text","clientCommonButtonsBack","onClick","marginLeft","disabled","clientCommonButtonsSkip","props","preventDefault","SET_MARKETING_REFERRERS","ARRIVAL_PAGE","COMPLETE_PAGE","REGISTER_PAGE","FIREBASE_REGISTER_FORM_PAGE","FIREBASE_ACCOUNT_DETAILS_FORM_PAGE","ARRIVAL_PATH","COMPLETE_PATH","EDUCATION_PATH","PERSONALITY_PROFILE_PATH","GUARDIAN_EMERGENCY_PATH","LANGUAGE_NATIONALITY_PATH","MEDICAL_PATH","PETS_CHILDREN_PATH","PLACEMENT_PATH","PRODUCT_PATH","REGISTER_PATH","FIREBASE_REGISTER_PATH","FIREBASE_ACCOUNT_DETAILS_PATH","ADDRESS_PATH","_paths2","_reactRouterDom","Redirector","this_page","redirect","enable_firebase_authentication","redirectPath","Paths","RETURN_LATER_PAGE","RETURN_LATER_PATH","updateSignupPage","Redirect","to","_reducers2","_reduxThunk2","_redux","createStore","appReducer","applyMiddleware","thunk","store","next","action","next_page","previous_page","result","terms","content","nextPage","previousPage","marketing_referrers","language_options","ethnicity_options","territoryId","territoryCode","address","length","included_pages","index","P","guest_address_check","window","gs","localProfileElements","reducers","vaccinationInfo","vaccinationOptions","uploader","combineReducers","sharedReducers","invalidatePhotos","host_id","serviceLevel","updateAvailableProducts","INVALIDATE_PHOTOS","requestPhotos","REQUEST_PHOTOS","receivePhotos","RECEIVE_PHOTOS","receivedAt","Date","now","resetUpload","fetchPhotos","host","shouldFetchPhotos","photo","resident_id","room_id","subject","invalidateRooms","fetchRoomsIfNeeded","invalidateResidents","fetchResidentsIfNeeded","fetchPhotosIfNeeded","i","attachments","pair","entries","console","log","isFetching","didInvalidate","INVALIDATE_RESIDENTS","requestResidents","REQUEST_RESIDENTS","receiveResidents","RECEIVE_RESIDENTS","residents","fetchResidents","shouldFetchResidents","host_resident","resident","requestHost","INVALIDATE_HOST","REQUEST_HOST","receiveHost","RECEIVE_HOST","shouldFetchHost","fetchHost","location","redirect_url","csrf_token","setWithdrawn","INVALIDATE_ROOMS","requestRooms","REQUEST_ROOMS","receiveRooms","RECEIVE_ROOMS","rooms","fetchRooms","shouldFetchRooms","room","setTerms","SET_CONTENT","SET_TERMS","withdrawn","SET_WITHDRAWN","SET_PAGE","SET_PAGES","SET_NEXT_PAGE","SET_PREVIOUS_PAGE","SET_PROFILE_ELEMENTS","required_fields","SET_REQUIRED_FIELDS","resident_vaccination_options","SET_RESIDENT_VACCINATION_OPTIONS","SET_RESIDENTS","setHolding","holding","SET_HOLDING","SET_ADDRESS","setProceedFromHolding","proceed_from_holding","SET_PROCEED_FROM_HOLDING","hostProfileSubmit","referral_program","SET_REFERRAL_PROGRAM","SET_LANGUAGE_OPTIONS","SET_ETHNICITY_OPTIONS","SET_TERRITORY","market","SET_MARKET","active_profile_elements","SET_ACTIVE_PROFILE_ELEMENTS","unit_no","street_no","street_name","post_code","sign_up_method","host_referral_program_active","new_pages","s","assigned_office","marital_status","maritalStatus","lifestyle","set_page","schema","phone_mobile","INFO_PAGE","ACCEPT_TERMS","CANCEL_SUBMIT","CONCLUSION_SUBMIT","CONTACT_SUBMIT","CULTURAL_BACKGROUND_SUBMIT","DIET_SUBMIT","GO_BACK","GUEST_PACKAGES_SUBMIT","GUEST_PREFERENCES_SUBMIT","HOLDING_SUBMIT","HOUSE_SUBMIT","FAMILY_INTERESTS_SUBMIT","REFERENCES_SUBMIT","INTERVAL_SUBMIT","NEXT_PAGE","PAYMENTS_SUBMIT","PETS_SUBMIT","PHOTO_SUBMIT","PROFILE_SUBMIT","REFERRAL_SUBMIT","REGISTER_USER","RESIDENTS_SUBMIT","ROOMS_SUBMIT","SET_RECAPTCHA_SITE_ID","SET_AUTHENTICATED_USER","SKIP_SUBMIT","SMOKING_SUBMIT","WITHDRAW_SUBMIT","COMPLETE_WIZARD","SET_ADDRESS_VALIDATIONS","CONCLUSION_PAGE","CONTACT_PAGE","CULTURAL_BACKGROUND_PAGE","DIET_PAGE","GUEST_PACKAGES_PAGE","GUEST_PREFERENCES_PAGE","GUEST_INTERACTION_LEVEL_PAGE","HOUSE_PAGE","HOUSE_CONTINUED_PAGE","HOLDING_PAGE","INTERVAL_PAGE","PAYMENTS_PAGE","PETS_PAGE","PHOTO_PAGE","PROFILE_PAGE","REFERRAL_PAGE","RESIDENTS_PAGE","ROOMS_PAGE","SMOKING_PAGE","WITHDRAW_PAGE","PHONE_VERIFICATION_PAGE","FAMILY_INTERESTS_PAGE","REFERENCES_PAGE","FIREBASE_DETAILS_PAGE","FIREBASE_REGISTER_PAGE","referralProgram","proceedFromHolding","first_page","registerOrAddress","host_address_check","items","Object","assign","lastUpdated","addressValidations","requiredFields","activeProfileElements","residentVaccinationOptions","recaptchaSiteId","vaccinationMandatory","_validator","filterElement","element","some","profile","setProfileElementsFromState","defaultAnswer","answer","embeddedAnswer","home","undefined","answers","validationKey","isPresent","buildProfileKey","date","parse","d","month","getMonth","day","getDate","year","getFullYear","join","key","keyType","keys","forEach","section","sectionItem","String","updateProfileField","value","ev","Event","bubbles","simulated","$","dispatchEvent","characters","charAt","floor","random","string","trim","original","newSelection","newSelectionArray","field","householdVaccination","key1","key2","split","component","valid","validator","showPopover","setState","dateString","eighteen_years_ago","getDay","_max","_moment2","_store2","prototype","capitalize","this","toUpperCase","slice","requiredValidations","validations","validationKeys","validateString","RegExp","test","validateBoolean","validatePassword","validateName","validatePhone","phone_country_code","asYouType","AsYouType","input","isValid","validatePlace","validateDate","momentDate","moment","maxDate","add","conditions","latestDate","latest_date","earliestDate","earliest_date","isAfter","popover","validateEmailFormat","validateEmailUnique","present","validatePresence","validate","fieldsToValidate","shouldValidateProfileElement","validationEnabled","dependentField","_constants","site_id","vaccination_mandatory","SET_VACCINATION_MANDATORY","_simpleEncrypt","generatePublicClientToken","apiKey","offset","secret","encrypt","_extends","bind","target","arguments","source","hasOwnProperty","call","apply","AddressedRoute","Component","rest","signupCheckEnabled","pathname","Route","render","_reactMarkdown2","_reactBootstrap","CriticalContract","contract","contractAccepted","showModal","setShowModal","accepted","setAccepted","submitDisabled","setSubmitDisabled","checkAllRead","scrollHeight","clientHeight","scrollTop","Fragment","FormGroup","margin","Checkbox","checked","display","onChange","handleContractClicked","title","Modal","show","onHide","Header","closeButton","Title","Body","Well","onScroll","maxHeight","overflow","replace","textAlign","Button","_FormGroup2","_reactHtmlParser2","_lodash","CustomFormGroup","containerStyle","containerClass","extraClass","children","remainingProps","topOffset","setTopOffset","iconHeight","setIconHeight","controlLabelHeight","setControlLabelHeight","marginBottom","setMarginBottom","get","validationKeyValid","container","React","createRef","useEffect","newOffset","current","outerHeight","Children","toArray","c","bsClass","shouldValidate","profileElementActive","profileElement","dependencyMet","ref","formGroupClass","klass","marginRight","ele","setProperty","map","child","asterisk","cloneElement","ReactHtmlParser","validationLabel","failedValidation","memo","_FirebaseEmailVerificationSend2","_FirebaseEmailVerificationUpdate2","FirebaseEmailVerificationCheck","onEmailVerified","timer","setTimer","resendLocked","setResendLocked","loading","setLoading","loadingText","setLoadingText","updating","setUpdating","setError","resendButtonRef","useRef","sendGenerateTokenRequest","urlParams","URLSearchParams","search","classList","query","toString","resendButton","getElementById","addEventListener","removeEventListener","queryString","oobCode","clientFirebaseEmailVerificationVerifying","resp","setAuthenticatedUser","authenticated_user","clientFirebaseEmailVerificationVerifyFailure","intervalId","setInterval","prevTimer","clearInterval","remove","_LoadingSpinner2","FirebaseEmailVerificationSend","incorrectEmailRef","updateIncorrectEmail","incorrectEmail","label","clientFirebaseEmailVerificationHeader","clientFirebaseEmailVerificationInstructions","clientFirebaseEmailVerificationIncorrectEmail","clientFirebaseEmailVerificationResend","_auth","FirebaseEmailVerificationUpdate","setEmail","setPassword","submitting","setSubmitting","setSuccess","errorTimeoutRef","clientFirebaseEmailVerificationUpdateSuccess","onSubmit","updateEmail","setTimeout","toLowerCase","match","clearTimeout","ControlLabel","clientCommonEmail","required","clientCommonConfirmPassword","placeholder","clientFirebaseEmailVerificationPlaceholdersPasswordEnter","color","_Redirector2","_ButtonGroup2","thisPage","_FormControl2","FormDate","formDateId","setDate","formDate","setFormDate","dateValid","initialDay","initialMonth","padStart","initialYear","months","updateDate","datesValid","parseInt","err","resetDate","validYear","validDay","validMonth","y","m","clientComponentsDateFormDateDay","defaultValue","maxLength","width","padding","componentClass","clientComponentsDateFormDateYear","LoadingSpinner","Logout","userExists","handleLogout","RegisteredRoute","TranslateContainer","styled","div","Translate","_CustomFormGroup2","_Form2","_FormDate2","_CriticalContract2","Form","_styledComponents2","AddressContainer","attrs","Row","h1","SubTitle","h2","Logo","img","Search","FormControl","Seperator","hr","Styles","Help","h3","Submit","button","_isomorphicFetch","_authUtils","redirectToLogin","URL","sso_domain","params","searchParams","href","publicToken","public_client_api_key","current_time","public_host_domain","Array","isArray","adType","getAdType","googleAd","facebookAd","user_kind","ad_type","guest_profile_elements","ethnicityOptions","languageOptions","_cryptoJs","_cryptoJs2","_buffer","key_text","iv_text","CryptoJS","SHA256","iv","enc","Utf8","AES","ciphertext","Base64","decrypt","Buffer","from","_store4","guestStore","hostStore","styles","userType","background","layout","backgroundImage","flexFlow","justifyContent","height","_store","path","prop","today","birthDate","age","HTMLInputElement","HTMLSelectElement","getOwnPropertyDescriptor","set","buildNewObject","stateObject","resetDependentObject","newObject","callback","newObj","newStateObj","dependentFields","k","flatten","newDependentObj","useBooleanValues","clientCommonYesNo","clientCommonAffirmative","clientCommonNegative","options","clientCommonSelectsSelect","f","word","_validator2","valueValid","keyValid","regexp","validateArray","minimum_size","V","isMobilePhone","File","validationKeyExists","fieldActive","dependentObj","every","webpackContext","req","webpackContextResolve","__webpack_require__","o","module"],"sourceRoot":""}