{"version":3,"file":"js/6476.chunk.js?v=1742528680091","mappings":"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","sources":["webpack://fed-boilerplate/./src/2-forms/CCheckbox.jsx","webpack://fed-boilerplate/./src/2-forms/CCheckboxContext.js","webpack://fed-boilerplate/./src/2-forms/CCheckboxItem.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-options/form-options.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/UserDetailsPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/ImportantToYouPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/DescribesYouPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/MainReasonPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/YourHomeProjectPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/HomeDetailsPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/KnowMoreAboutPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/NumberOfRoomsPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/StageOfProjectPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/TimeFramePage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/EstimatedBudgetPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/form-pages/HaveElectricianPage.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/thank-you-modal/ThankYouModal.jsx","webpack://fed-boilerplate/./src/3-components/assessment-tool-form/index.jsx","webpack://fed-boilerplate/./src/3-components/icon/index.jsx","webpack://fed-boilerplate/./src/js/utils/configHelper.js","webpack://fed-boilerplate/./src/js/utils/formik-util.js","webpack://fed-boilerplate/./node_modules/classnames/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport getRandomString from 'utils/getRandomString';\nimport CFormElementWrapper from './CFormElementWrapper';\nimport CCheckboxNameContext from './CCheckboxContext';\n\nclass CCheckbox extends React.Component {\n randomNameString = getRandomString();\n\n render() {\n const {\n formLayoutClass,\n label,\n hasError,\n errorMsg,\n isDisabled,\n children,\n name,\n } = this.props;\n\n return (\n <CFormElementWrapper\n formLayoutClass={formLayoutClass}\n label={label}\n hasError={hasError}\n errorMsg={errorMsg}\n isDisabled={isDisabled}\n elementClass=\"checkbox-wrapper\"\n >\n <CCheckboxNameContext.Provider\n value={name || this.randomNameString}\n >\n {children}\n </CCheckboxNameContext.Provider>\n </CFormElementWrapper>\n );\n }\n}\n\nCCheckbox.propTypes = {\n name: PropTypes.string,\n formLayoutClass: PropTypes.string,\n label: PropTypes.string,\n hasError: PropTypes.bool,\n errorMsg: PropTypes.string,\n isDisabled: PropTypes.bool,\n children: PropTypes.node.isRequired,\n};\n\nCCheckbox.defaultProps = {\n name: '',\n formLayoutClass: '',\n label: '',\n hasError: false,\n errorMsg: '',\n isDisabled: false,\n};\n\nexport default CCheckbox;\n","import { createContext } from 'react';\n\nconst CCheckboxNameContext = createContext('');\n\nexport default CCheckboxNameContext;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport getRandomString from 'utils/getRandomString';\nimport CCheckboxNameContext from './CCheckboxContext';\n\nclass CCheckboxItem extends React.Component {\n randomIDString = getRandomString();\n\n render() {\n return (\n // TODO `RadioNameContext.Consumer` should be converted to a Class.contextType syntax\n // in case React is updated to a newer version.\n // See https://reactjs.org/docs/context.html#classcontexttype\n <CCheckboxNameContext.Consumer>\n {defaultName => {\n return (\n <div className=\"checkbox-item\">\n <input\n id={this.props.id || this.randomIDString}\n name={this.props.name || defaultName}\n value={this.props.value}\n checked={this.props.checked}\n disabled={this.props.isDisabled}\n required={!this.props.notRequired}\n type=\"checkbox\"\n onChange={this.props.onChange}\n />\n <label htmlFor={this.props.id || this.randomIDString}>\n {this.props.label}\n </label>\n </div>\n );\n }}\n </CCheckboxNameContext.Consumer>\n );\n }\n}\n\nCCheckboxItem.propTypes = {\n id: PropTypes.string,\n name: PropTypes.string,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.bool\n ]),\n checked: PropTypes.bool,\n isDisabled: PropTypes.bool,\n notRequired: PropTypes.bool,\n label: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n};\n\nCCheckboxItem.defaultProps = {\n id: '',\n name: '',\n value: true,\n isDisabled: false,\n notRequired: false,\n checked: false,\n onChange: () => {},\n};\n\nexport default CCheckboxItem;\n","export const formQuestions = [\n { background: '/assets/images/assessment-tool/casto-about-you.jpeg', icon: 'user', question: 'Tell us a little about you so we can personalise your recommendations.', funnelStepName: 'name_surname' },\n { background: '/assets/images/assessment-tool/casto-important.jpeg', icon: 'pictogram-star', question: 'What is most important to you when considering your project?', info: 'Please choose one option.', funnelStepName: 'q_considering_project' },\n { background: '/assets/images/assessment-tool/casto-describes.jpeg', icon: 'login-2', question: 'Which best describes who lives in your home?', info: 'Please choose one option.', funnelStepName: 'q_lives_in_home' },\n { background: '/assets/images/assessment-tool/casto-main-reason.jpeg', icon: 'pictogram-tools', question: 'What is the main reason for your home renovation or build?', info: 'Please choose one option.', funnelStepName: 'q_main_reason' },\n { background: '/assets/images/assessment-tool/casto-describes-2.jpeg', icon: 'pictogram-residential', question: 'Which best describes your home project?', info: 'Please choose one option.', funnelStepName: 'q_describe_home_project' },\n { background: '/assets/images/assessment-tool/casto-building.jpeg', icon: 'pictogram-tools', question: 'Please provide details of your new/existing home.', funnelStepName: 'q_new_home_details' },\n { background: '/assets/images/assessment-tool/casto-know-more-about.jpeg', icon: 'pictogram-leaf', question: 'What would you like to know more about?', info: 'Please select one option or more.', funnelStepName: 'q_know_more_about' },\n { background: '/assets/images/assessment-tool/casto-rooms.jpeg', icon: 'pictogram-pencil', question: 'Which rooms are you planning to renovate or include in your home?', info: 'Select each room that is applicable and the number of each room being renovated or built.', funnelStepName: 'q_which_rooms' },\n { background: '/assets/images/assessment-tool/casto-stage-of-project.jpeg', icon: 'laptop', question: 'Which stage of the project are you currently at?', info: 'Please choose one option.', funnelStepName: 'q_stage_of_the_project' },\n { background: '/assets/images/assessment-tool/casto-est-completion.jpeg', icon: 'clock-2', question: 'What is the estimated completion timeframe for your project?', info: 'Please choose one option.', funnelStepName: 'q_estimated_completion_time' },\n { background: '/assets/images/assessment-tool/casto-est-budget.jpeg', icon: 'dollar-alt', question: 'What is your estimated total budget for the project?', info: 'Enter your estimated total project budget below to the nearest $10,000.', funnelStepName: 'q_estimated_budget' },\n { background: '/assets/images/assessment-tool/casto-electrician.jpeg', icon: 'pictogram-elecPlug', question: 'Have you already selected an electrician for your project?', info: '', funnelStepName: 'q_selected_an_electrician' }\n];\n\nexport const importantToYouItems = [\n { option: 'Home automation and performance' },\n { option: 'Design and aesthetics' },\n { option: 'Family focused living' },\n { option: 'Cost effective solutions' },\n { option: 'Managed by a professional' }\n];\n\nexport const describesYouItems = [\n { option: 'Just me' },\n { option: 'Couple under 50' },\n { option: 'Couple 50+' },\n { option: 'Family with young children' },\n { option: 'Family with older children' },\n { option: 'Intergenerational' }\n];\n\nexport const mainReasonItems = [\n { option: 'Financially ready' },\n { option: 'Have the time' },\n { option: 'Recently purchased or moved in' },\n { option: 'Adapting to changes in my family/lifestyle' },\n { option: 'Home repair project' },\n { option: 'Renovating for sale' },\n { option: 'Other' }\n];\n\nexport const yourHomeProjectItems = [\n { option: 'Renovating one room' },\n { option: 'Renovating multiple rooms' },\n { option: 'Renovating entire house' },\n { option: 'Building an extension' },\n { option: 'Building a new home' }\n];\n\nexport const homeLocationItems = [\n { option: 'Rural' },\n { option: 'Urban' }\n];\n\nexport const ageOfHomeItems = [\n { option: 'Built before 1980' },\n { option: 'Built between 1981-2004' },\n { option: 'Built 2005 or after' }\n];\n\nexport const typeOfHomeItems = [\n { option: 'Single storey home' },\n { option: 'Multi-storey home' },\n { option: 'Single brick home' },\n { option: 'Double brick home' },\n { option: 'Weatherboard/timber home' },\n { option: 'Heritage listed' },\n { option: 'Other' }\n];\n\nexport const easyCeilingAccessItems = [\n { option: 'Yes' },\n { option: 'No' }\n];\n\nexport const knowMoreAboutItems = [\n { option: 'Sustainable living and energy efficiency solutions' },\n { option: 'Electrical safety and protection' },\n { option: 'Creating multifunctional spaces and flexible solutions' },\n { option: 'Home comfort, control and security solutions' },\n { option: 'Design and style' }\n];\n\nexport const numberOfRoomsItems = [\n { option: 'Kitchen' },\n { option: 'Dining room' },\n { option: 'Living room' },\n { option: 'Bedroom' },\n { option: 'Bathroom' },\n { option: 'Laundry' },\n { option: 'Butler\\'s pantry or walk-in pantry' },\n { option: 'Outdoor living' },\n { option: 'Entrance, hallway or stairs' },\n { option: 'Study or home office' },\n { option: 'Garage' }\n];\n\nexport const stageOfProjectItems = [\n { option: 'Gathering ideas and information' },\n { option: 'Setting the budget' },\n { option: 'Engaging with contractors' },\n { option: 'Council or other approval' },\n { option: 'Project is about to commence' },\n { option: 'Project is underway' }\n];\n\nexport const timeFrameItems = [\n { option: '1-3 months' },\n { option: '4-6 months' },\n { option: '7-12 months' },\n { option: '13-18 months' },\n { option: '19-23 months' },\n { option: '2 years+' }\n];\n\nexport const estimatedBudgetItems = [\n { option: '$100,000' },\n { option: '$200,000' },\n { option: '$400,000' },\n { option: '$600,000' },\n { option: '$800,000' },\n { option: '$1,000,000' }\n];\n\nexport const haveElectricianItems = [\n { option: 'Yes' },\n { option: 'No' }\n];\n","import React from 'react';\nimport { bool, func, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CInput from '../../../2-forms/CInput';\n\nconst UserDetailsPage = ({\n userDetailsValues,\n validateForm,\n handleNext,\n userDetailsFilled,\n}) => {\n return (\n\n <Formik\n initialValues={userDetailsValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-row\">\n <CInput\n formLayoutClass=\"casto-form-col\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n label=\"First name\"\n name=\"firstName\"\n value={values.firstName}\n onChange={handleChange}\n errorMsg={errors.firstName}\n hasError={Boolean(\n touched.firstName &&\n errors.firstName\n )}\n onBlur={handleBlur}\n />\n </div>\n <div className=\"casto-form-row\">\n <CInput\n formLayoutClass=\"casto-form-col\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n label=\"Last name\"\n name=\"lastName\"\n value={values.lastName}\n onChange={handleChange}\n errorMsg={errors.lastName}\n hasError={Boolean(\n touched.lastName && errors.lastName\n )}\n onBlur={handleBlur}\n />\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(touched, errors) && !userDetailsFilled\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled': (!canSubmitForm(\n touched,\n errors\n ) && !userDetailsFilled),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default UserDetailsPage;\n\nUserDetailsPage.propTypes = {\n userDetailsValues: object.isRequired,\n validateForm: func.isRequired,\n handleNext: func.isRequired,\n userDetailsFilled: bool.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst ImportantToYouPage = ({\n importantToYouItems,\n importantToYouValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={importantToYouValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.importantToYou}\n hasError={Boolean(\n touched.importantToYou &&\n errors.importantToYou\n )}\n >\n {importantToYouItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"importantToYou\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.importantToYou.includes(\n item.option)\n }\n onBlur={handleBlur}\n onChange={handleChange}\n notRequired={true}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['importantToYou']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['importantToYou']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default ImportantToYouPage;\n\nImportantToYouPage.propTypes = {\n importantToYouItems: arrayOf(object).isRequired,\n importantToYouValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst DescribesYouPage = ({\n describesYouItems,\n describesYouValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={describesYouValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n // label=\"Describes You\"\n errorMsg={errors.describesYou}\n hasError={Boolean(\n touched.describesYou &&\n errors.describesYou\n )}\n >\n {describesYouItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"describesYou\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.describesYou ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['describesYou']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['describesYou']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default DescribesYouPage;\n\nDescribesYouPage.propTypes = {\n describesYouItems: arrayOf(object).isRequired,\n describesYouValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst MainReasonPage = ({\n mainReasonItems,\n mainReasonValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={mainReasonValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n // label=\"Main Reason\"\n errorMsg={errors.mainReason}\n hasError={Boolean(\n touched.mainReason &&\n errors.mainReason\n )}\n >\n {mainReasonItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"mainReason\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.mainReason ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['mainReason']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['mainReason']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default MainReasonPage;\n\nMainReasonPage.propTypes = {\n mainReasonItems: arrayOf(object).isRequired,\n mainReasonValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst YourHomeProjectPage = ({\n yourHomeProjectItems,\n yourHomeProjectValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={yourHomeProjectValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.yourHomeProject}\n hasError={Boolean(\n touched.yourHomeProject &&\n errors.yourHomeProject\n )}\n >\n {yourHomeProjectItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"yourHomeProject\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.yourHomeProject ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['yourHomeProject']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['yourHomeProject']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default YourHomeProjectPage;\n\nYourHomeProjectPage.propTypes = {\n yourHomeProjectItems: arrayOf(object).isRequired,\n yourHomeProjectValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitDropdownsOnlyForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\nimport CCheckbox from '../../../2-forms/CCheckbox';\nimport CCheckboxItem from '../../../2-forms/CCheckboxItem';\n\nconst HomeDetailsPage = ({\n homeLocationItems,\n ageOfHomeItems,\n typeOfHomeItems,\n easyCeilingAccessItems,\n homeDetailsValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={homeDetailsValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-category\">\n Home location\n </div>\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.homeLocation}\n hasError={Boolean(\n touched.homeLocation &&\n errors.homeLocation\n )}\n >\n {homeLocationItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"homeLocation\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.homeLocation ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n <div className=\"casto-form-category\">\n Age of home\n </div>\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.ageOfHome}\n hasError={Boolean(\n touched.ageOfHome &&\n errors.ageOfHome\n )}\n >\n {ageOfHomeItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"ageOfHome\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.ageOfHome ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n <div className=\"casto-form-category\">\n Type of home\n </div>\n <div className=\"casto-form-category-info\">\n Please select one option or more.\n </div>\n <div className=\"casto-form-col\">\n <CCheckbox\n formLayoutClass=\"casto-element-checkbox\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.typeOfHome}\n hasError={Boolean(\n touched.typeOfHome &&\n errors.typeOfHome\n )}\n >\n {typeOfHomeItems.map(item => {\n return (\n <CCheckboxItem\n name=\"typeOfHome\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.typeOfHome.includes(\n item.option)\n }\n onBlur={handleBlur}\n onChange={handleChange}\n notRequired={true}\n />\n );\n })}\n </CCheckbox>\n </div>\n <div className=\"casto-form-category\">\n Do you have easy access to your ceiling space?\n </div>\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.easyCeilingAccess}\n hasError={Boolean(\n touched.easyCeilingAccess &&\n errors.easyCeilingAccess\n )}\n >\n {easyCeilingAccessItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"easyCeilingAccess\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.easyCeilingAccess ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitDropdownsOnlyForm(selectFieldsToValidate(values, ['homeLocation', 'ageOfHome', 'typeOfHome', 'easyCeilingAccess']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitDropdownsOnlyForm(\n selectFieldsToValidate(values, ['homeLocation', 'ageOfHome', 'typeOfHome', 'easyCeilingAccess']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default HomeDetailsPage;\n\nHomeDetailsPage.propTypes = {\n homeLocationItems: arrayOf(object).isRequired,\n ageOfHomeItems: arrayOf(object).isRequired,\n typeOfHomeItems: arrayOf(object).isRequired,\n easyCeilingAccessItems: arrayOf(object).isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitDropdownsOnlyForm } from 'utils/formik-util';\nimport CCheckbox from '../../../2-forms/CCheckbox';\nimport CCheckboxItem from '../../../2-forms/CCheckboxItem';\n\nconst KnowMoreAboutPage = ({\n knowMoreAboutItems,\n knowMoreAboutValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={knowMoreAboutValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CCheckbox\n formLayoutClass=\"casto-element-checkbox\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.knowMoreAbout}\n hasError={Boolean(\n touched.knowMoreAbout &&\n errors.knowMoreAbout\n )}\n >\n {knowMoreAboutItems.map(item => {\n return (\n <CCheckboxItem\n name=\"knowMoreAbout\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.knowMoreAbout.includes(\n item.option)\n }\n onBlur={handleBlur}\n onChange={handleChange}\n notRequired={true}\n />\n );\n })}\n </CCheckbox>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitDropdownsOnlyForm(selectFieldsToValidate(values, ['knowMoreAbout']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitDropdownsOnlyForm(\n selectFieldsToValidate(values, ['knowMoreAbout']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default KnowMoreAboutPage;\n\nKnowMoreAboutPage.propTypes = {\n knowMoreAboutItems: arrayOf(object).isRequired,\n knowMoreAboutValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\n// import {\n// canSubmitForm,\n// } from 'utils/formik-util';\nimport Icon from '../../icon';\n\nconst NumberOfRoomsPage = ({\n numberOfRoomsItems,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n formData,\n}) => {\n const roomDefaults = selectFieldsToValidate(formData, [\n 'kitchen',\n 'diningRoom',\n 'livingRoom',\n 'bedroom',\n 'bathroom',\n 'laundry',\n 'pantry',\n 'outdoorLiving',\n 'entrance',\n 'study',\n 'garage'\n ]);\n const [numberOfRoomsValues, setNumberOfRoomsValues] = useState(roomDefaults);\n const [roomKitchen, setRoomKitchen] = useState(numberOfRoomsValues.kitchen);\n const [roomDiningRoom, setRoomDiningRoom] = useState(numberOfRoomsValues.diningRoom);\n const [roomLivingRoom, setRoomLivingRoom] = useState(numberOfRoomsValues.livingRoom);\n const [roomBedroom, setRoomBedroom] = useState(numberOfRoomsValues.bedroom);\n const [roomBathroom, setRoomBathroom] = useState(numberOfRoomsValues.bathroom);\n const [roomLaundry, setRoomLaundry] = useState(numberOfRoomsValues.laundry);\n const [roomPantry, setRoomPantry] = useState(numberOfRoomsValues.pantry);\n const [roomOutdoorLiving, setRoomOutdoorLiving] = useState(numberOfRoomsValues.outdoorLiving);\n const [roomEntrance, setRoomEntrance] = useState(numberOfRoomsValues.entrance);\n const [roomStudy, setRoomStudy] = useState(numberOfRoomsValues.study);\n const [roomGarage, setRoomGarage] = useState(numberOfRoomsValues.garage);\n const [validated, setValidated] = useState(false);\n\n const handleRoomNumberChange = useCallback((key, change) => {\n switch (key) {\n case 'kitchen':\n if (change === 'reduce') {\n setRoomKitchen(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomKitchen(prev => {\n return prev + 1;\n });\n }\n break;\n case 'diningRoom':\n if (change === 'reduce') {\n setRoomDiningRoom(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomDiningRoom(prev => {\n return prev + 1;\n });\n }\n break;\n case 'livingRoom':\n if (change === 'reduce') {\n setRoomLivingRoom(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomLivingRoom(prev => {\n return prev + 1;\n });\n }\n break;\n case 'bedroom':\n if (change === 'reduce') {\n setRoomBedroom(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomBedroom(prev => {\n return prev + 1;\n });\n }\n break;\n case 'bathroom':\n if (change === 'reduce') {\n setRoomBathroom(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomBathroom(prev => {\n return prev + 1;\n });\n }\n break;\n case 'laundry':\n if (change === 'reduce') {\n setRoomLaundry(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomLaundry(prev => {\n return prev + 1;\n });\n }\n break;\n case 'pantry':\n if (change === 'reduce') {\n setRoomPantry(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomPantry(prev => {\n return prev + 1;\n });\n }\n break;\n case 'outdoorLiving':\n if (change === 'reduce') {\n setRoomOutdoorLiving(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomOutdoorLiving(prev => {\n return prev + 1;\n });\n }\n break;\n case 'entrance':\n if (change === 'reduce') {\n setRoomEntrance(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomEntrance(prev => {\n return prev + 1;\n });\n }\n break;\n case 'study':\n if (change === 'reduce') {\n setRoomStudy(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomStudy(prev => {\n return prev + 1;\n });\n }\n break;\n case 'garage':\n if (change === 'reduce') {\n setRoomGarage(prev => {\n return prev - 1;\n });\n }\n if (change === 'add') {\n setRoomGarage(prev => {\n return prev + 1;\n });\n }\n break;\n default:\n break;\n }\n }, []);\n\n const renderRoomQuantityField = useCallback((key, index) => {\n let selectedRoom;\n\n switch (key) {\n case 'kitchen':\n selectedRoom = roomKitchen;\n break;\n case 'diningRoom':\n selectedRoom = roomDiningRoom;\n break;\n case 'livingRoom':\n selectedRoom = roomLivingRoom;\n break;\n case 'bedroom':\n selectedRoom = roomBedroom;\n break;\n case 'bathroom':\n selectedRoom = roomBathroom;\n break;\n case 'laundry':\n selectedRoom = roomLaundry;\n break;\n case 'pantry':\n selectedRoom = roomPantry;\n break;\n case 'outdoorLiving':\n selectedRoom = roomOutdoorLiving;\n break;\n case 'entrance':\n selectedRoom = roomEntrance;\n break;\n case 'study':\n selectedRoom = roomStudy;\n break;\n case 'garage':\n selectedRoom = roomGarage;\n break;\n default:\n break;\n }\n\n return (\n <div key={`casto-form-quantity-${index}`} className=\"casto-form-quantity\">\n <div>{numberOfRoomsItems[index].option}</div>\n <div className=\"casto-form-quantity-selection\">\n <button\n type=\"button\"\n disabled={\n selectedRoom === 0\n }\n className={classNames(\n 'casto-form-quantity-minus',\n { 'btn-disabled': selectedRoom === 0 }\n )}\n onClick={() => {\n return handleRoomNumberChange(key, 'reduce');\n }}\n >\n <Icon glyph=\"minus\" />\n </button>\n <div className=\"casto-form-quantity-number\">{selectedRoom}</div>\n <button\n type=\"button\"\n disabled={\n selectedRoom === 9\n }\n className={classNames(\n 'casto-form-quantity-plus',\n { 'btn-disabled': selectedRoom === 9 }\n )}\n onClick={() => {\n return handleRoomNumberChange(key, 'add');\n }}\n >\n <Icon glyph=\"plus\" />\n </button>\n </div>\n </div>\n );\n }, [roomKitchen, roomDiningRoom, roomLivingRoom, roomBedroom, roomBathroom, roomLaundry, roomPantry, roomOutdoorLiving, roomEntrance, roomStudy, roomGarage, handleRoomNumberChange, numberOfRoomsItems]);\n\n const handleRoomPageSubmit = useCallback(\n values => {\n setNumberOfRoomsValues(values);\n const roomNumberFormData = {\n kitchen: roomKitchen,\n diningRoom: roomDiningRoom,\n livingRoom: roomLivingRoom,\n bedroom: roomBedroom,\n bathroom: roomBathroom,\n laundry: roomLaundry,\n pantry: roomPantry,\n outdoorLiving: roomOutdoorLiving,\n entrance: roomEntrance,\n study: roomStudy,\n garage: roomGarage,\n };\n handleNext(roomNumberFormData);\n },\n [roomKitchen, roomDiningRoom, roomLivingRoom, roomBedroom, roomBathroom, roomLaundry, roomPantry, roomOutdoorLiving, roomEntrance, roomStudy, roomGarage, handleNext]\n );\n\n useEffect(() => {\n if (\n roomKitchen !== 0 ||\n roomDiningRoom !== 0 ||\n roomLivingRoom !== 0 ||\n roomBedroom !== 0 ||\n roomBathroom !== 0 ||\n roomLaundry !== 0 ||\n roomPantry !== 0 ||\n roomOutdoorLiving !== 0 ||\n roomEntrance !== 0 ||\n roomStudy !== 0 ||\n roomGarage !== 0\n ) {\n setValidated(true);\n } else {\n setValidated(false);\n }\n }, [\n roomKitchen,\n roomDiningRoom,\n roomLivingRoom,\n roomBedroom,\n roomBathroom,\n roomLaundry,\n roomPantry,\n roomOutdoorLiving,\n roomEntrance,\n roomStudy,\n roomGarage\n ]);\n\n return (\n <Formik\n initialValues={numberOfRoomsValues}\n validate={validateForm}\n onSubmit={handleRoomPageSubmit}\n >\n {({ handleSubmit }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n {Object.entries(numberOfRoomsValues).map(([key], index) => {\n return (\n renderRoomQuantityField(key, index)\n );\n })}\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={!validated}\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n { 'btn-disabled': !validated }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default NumberOfRoomsPage;\n\nNumberOfRoomsPage.propTypes = {\n numberOfRoomsItems: arrayOf(object).isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n formData: object.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst StageOfProjectPage = ({\n stageOfProjectItems,\n stageOfProjectValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={stageOfProjectValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.stageOfProject}\n hasError={Boolean(\n touched.stageOfProject &&\n errors.stageOfProject\n )}\n >\n {stageOfProjectItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"stageOfProject\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.stageOfProject ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['stageOfProject']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['stageOfProject']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default StageOfProjectPage;\n\nStageOfProjectPage.propTypes = {\n stageOfProjectItems: arrayOf(object).isRequired,\n stageOfProjectValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst TimeFramePage = ({\n timeFrameItems,\n timeFrameValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={timeFrameValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.timeFrame}\n hasError={Boolean(\n touched.timeFrame &&\n errors.timeFrame\n )}\n >\n {timeFrameItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"timeFrame\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.timeFrame ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['timeFrame']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['timeFrame']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default TimeFramePage;\n\nTimeFramePage.propTypes = {\n timeFrameItems: arrayOf(object).isRequired,\n timeFrameValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitCurrency } from 'utils/formik-util';\nimport CInput from '../../../2-forms/CInput';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst EstimatedBudgetPage = ({\n estimatedBudgetItems,\n estimatedBudgetValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={estimatedBudgetValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-row\">\n <CInput\n formLayoutClass=\"casto-form-col\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n label=\"Estimated budget\"\n name=\"estimatedBudget\"\n value={values.estimatedBudget}\n onChange={handleChange}\n errorMsg={errors.estimatedBudget}\n hasError={Boolean(\n touched.estimatedBudget &&\n errors.estimatedBudget\n )}\n onBlur={handleBlur}\n />\n </div>\n <div className=\"casto-form-category\">\n OR\n </div>\n <div className=\"casto-form-category-info\">\n Choose one of the quick select options.\n </div>\n <div className=\"casto-form-col-half\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.estimatedBudget}\n hasError={Boolean(\n touched.estimatedBudget &&\n errors.estimatedBudget\n )}\n >\n {estimatedBudgetItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"estimatedBudget\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.estimatedBudget ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitCurrency(selectFieldsToValidate(values, ['estimatedBudget']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitCurrency(\n selectFieldsToValidate(values, ['estimatedBudget']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Next question\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default EstimatedBudgetPage;\n\nEstimatedBudgetPage.propTypes = {\n estimatedBudgetItems: arrayOf(object).isRequired,\n estimatedBudgetValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { func, arrayOf, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { Formik } from 'formik';\nimport { canSubmitForm } from 'utils/formik-util';\nimport CRadioButton from '../../../2-forms/CRadioButton';\nimport CRadioButtonItem from '../../../2-forms/CRadioButtonItem';\n\nconst HaveElectricianPage = ({\n haveElectricianItems,\n haveElectricianValues,\n validateForm,\n selectFieldsToValidate,\n handleNext,\n}) => {\n return (\n <Formik\n initialValues={haveElectricianValues}\n validate={validateForm}\n onSubmit={handleNext}\n >\n {({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n handleSubmit,\n }) => {\n return (\n <>\n <div className=\"casto-form-options\">\n <div className=\"casto-form-col\">\n <CRadioButton\n formLayoutClass=\"casto-element-radio-box\"\n labelClass=\"casto-element-text\"\n inputClass=\"casto-element-box\"\n errorMsg={errors.haveElectrician}\n hasError={Boolean(\n touched.haveElectrician &&\n errors.haveElectrician\n )}\n >\n {haveElectricianItems.map(item => {\n return (\n <CRadioButtonItem\n name=\"haveElectrician\"\n key={item.option}\n value={item.option}\n label={item.option}\n checked={\n values.haveElectrician ===\n item.option\n }\n onBlur={handleBlur}\n onChange={handleChange}\n />\n );\n })}\n </CRadioButton>\n </div>\n </div>\n <div className=\"casto-form-submit\">\n <button\n type=\"button\"\n disabled={\n !canSubmitForm(selectFieldsToValidate(values, ['haveElectrician']), errors)\n }\n className={classNames(\n 'casto-footer-link btn-skin-1 casto-submit-btn',\n {\n 'btn-disabled':\n !canSubmitForm(\n selectFieldsToValidate(values, ['haveElectrician']),\n errors\n ),\n }\n )}\n onClick={() => {\n handleSubmit();\n }}\n >\n Get your results\n </button>\n </div>\n </>\n );\n }}\n </Formik>\n );\n};\n\nexport default HaveElectricianPage;\n\nHaveElectricianPage.propTypes = {\n haveElectricianItems: arrayOf(object).isRequired,\n haveElectricianValues: object.isRequired,\n validateForm: func.isRequired,\n selectFieldsToValidate: func.isRequired,\n handleNext: func.isRequired,\n};\n","import React from 'react';\nimport { array, bool, func, string } from 'prop-types';\nimport classNames from 'classnames';\nimport Loader from '../../../3-components/loader';\nimport Icon from '../../../3-components/icon';\n\nconst ThankYouModal = ({\n toggleErrorModal,\n isThankYouModalShowing,\n isErrorModalShowing,\n formError,\n formValidationErrors,\n}) => {\n return (\n <div className=\"c-thank-you-modal\">\n <div\n role=\"button\"\n tabIndex={0}\n className=\"modal-overlay\"\n onClick={() => {\n return (isErrorModalShowing ? toggleErrorModal() : undefined);\n }}\n onKeyPress={() => {\n return (isErrorModalShowing ? toggleErrorModal() : undefined);\n }}\n >\n <div className=\"modal-container\">\n <div\n className={classNames('modal-content', { 'error-border': isErrorModalShowing })}\n >\n {isThankYouModalShowing && (\n <>\n <div className=\"modal-info\">\n You are now being directed to your results\n </div>\n <Loader />\n </>\n )}\n {isErrorModalShowing && (\n <>\n <button type=\"button\" className=\"modal-close\">\n <Icon glyph=\"cross\" />\n </button>\n <div className=\"modal-header\">\n Something went wrong...\n </div>\n <div className=\"modal-info\">{formError}</div>\n {formValidationErrors && (\n <ul>\n {formValidationErrors.map(error => {\n return (\n <li key={error} className=\"modal-error\">{error}</li>\n );\n })}\n </ul>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nThankYouModal.propTypes = {\n toggleErrorModal: func.isRequired,\n isThankYouModalShowing: bool.isRequired,\n isErrorModalShowing: bool.isRequired,\n formError: string,\n formValidationErrors: array.isRequired,\n};\n\nexport default ThankYouModal;\n\n","import React, { useState, useCallback, useEffect } from 'react';\nimport makeAssetsPath from '../../js/utils/configHelper';\nimport { tempCookie } from '../../js/utils/storage';\nimport Icon from '../icon';\nimport axios from 'axios';\nimport classNames from 'classnames';\nimport { string } from 'prop-types';\nimport {\n checkRequiredField,\n checkRequiredNumberOrCurrency\n} from 'utils/formik-util';\nimport {\n formQuestions,\n importantToYouItems,\n describesYouItems,\n mainReasonItems,\n yourHomeProjectItems,\n homeLocationItems,\n ageOfHomeItems,\n typeOfHomeItems,\n easyCeilingAccessItems,\n knowMoreAboutItems,\n numberOfRoomsItems,\n stageOfProjectItems,\n timeFrameItems,\n estimatedBudgetItems,\n haveElectricianItems\n} from './form-options/form-options';\nimport UserDetailsPage from './form-pages/UserDetailsPage';\nimport ImportantToYouPage from './form-pages/ImportantToYouPage';\nimport DescribesYouPage from './form-pages/DescribesYouPage';\nimport MainReasonPage from './form-pages/MainReasonPage';\nimport YourHomeProjectPage from './form-pages/YourHomeProjectPage';\nimport HomeDetailsPage from './form-pages/HomeDetailsPage';\nimport KnowMoreAboutPage from './form-pages/KnowMoreAboutPage';\nimport NumberOfRoomsPage from './form-pages/NumberOfRoomsPage';\nimport StageOfProjectPage from './form-pages/StageOfProjectPage';\nimport TimeFramePage from './form-pages/TimeFramePage';\nimport EstimatedBudgetPage from './form-pages/EstimatedBudgetPage';\nimport HaveElectricianPage from './form-pages/HaveElectricianPage';\nimport ThankYouModal from './thank-you-modal/ThankYouModal';\n\nconst AssessmentToolForm = ({\n submissionUrl,\n resultsUrl,\n}) => {\n // States\n const [startingPage, setStartingPage] = useState(true);\n const [currentPage, setCurrentPage] = useState(0);\n const [userDetailsFilled, setUserDetailsFilled] = useState(false);\n const [readyToSubmit, setReadyToSubmit] = useState(false);\n const [isThankYouModalShowing, setIsThankYouModalShowing] = useState(false);\n const [isErrorModalShowing, setIsErrorModalShowing] = useState(false);\n const [formValidationErrors, setFormValidationErrors] = useState('');\n const [formError, setFormError] = useState('');\n const [formData, setFormData] = useState({\n firstName: '',\n lastName: '',\n importantToYou: '',\n describesYou: '',\n mainReason: '',\n yourHomeProject: '',\n homeLocation: '',\n ageOfHome: '',\n typeOfHome: [],\n easyCeilingAccess: 0,\n knowMoreAbout: [],\n kitchen: 0,\n diningRoom: 0,\n livingRoom: 0,\n bedroom: 0,\n bathroom: 0,\n laundry: 0,\n pantry: 0,\n outdoorLiving: 0,\n entrance: 0,\n study: 0,\n garage: 0,\n stageOfProject: '',\n timeFrame: '',\n estimatedBudget: '',\n haveElectrician: '',\n });\n const [isMobile, setIsMobile] = useState(window.innerWidth <= 768);\n\n window.dataLayer = window.dataLayer || [];\n\n // Functions\n const handleWindowSizeChange = useCallback(() => {\n setIsMobile(window.innerWidth <= 768);\n }, []);\n\n const selectFieldsToValidate = (obj, arr) => {\n return arr.reduce((acc, record) => {\n return (record in obj && (acc[record] = obj[record]), acc);\n }, {});\n };\n\n const scrollToTop = useCallback(() => {\n document.querySelector('.casto-form-section').scrollTop = 0;\n }, []);\n\n const pullAnswer = useCallback(formValues => {\n switch (currentPage) {\n case 1:\n return `${formValues.firstName} ${formValues.lastName}`;\n case 2:\n return formValues.importantToYou;\n case 3:\n return formValues.describesYou;\n case 4:\n return formValues.mainReason;\n case 5:\n return formValues.yourHomeProject;\n case 6:\n return `home_location: ${formValues.homeLocation}, age_of_home: ${formValues.ageOfHome}, typeOfHome: ${formValues.typeOfHome.join(',')}, easy_ceiling_access: ${formValues.easyCeilingAccess}`;\n case 7:\n return formValues.knowMoreAbout.join(',');\n case 8:\n return `kitchen: ${formValues.kitchen}, diningRoom: ${formValues.diningRoom}, livingRoom: ${formValues.livingRoom}, bedroom: ${formValues.bedroom}, bathroom: ${formValues.bathroom}, laundry: ${formValues.laundry}, pantry: ${formValues.pantry}, outdoorLiving: ${formValues.outdoorLiving}, entrance: ${formValues.entrance}, study: ${formValues.study}, garage: ${formValues.garage}`;\n case 9:\n return formValues.stageOfProject;\n case 10:\n return formValues.timeFrame;\n case 11:\n return formValues.estimatedBudget;\n case 12:\n return formValues.haveElectrician;\n default:\n return null;\n }\n }, [currentPage]);\n\n const nextPage = useCallback(values => {\n scrollToTop();\n window.dataLayer.push({\n event: 'assessmentToolFormProgress',\n assessmentToolFormProgress: currentPage,\n assessmentToolFormCompletion: currentPage === formQuestions.length,\n });\n if (startingPage) {\n setStartingPage(false);\n setCurrentPage(prev => {\n return prev + 1;\n });\n }\n if (!startingPage && currentPage !== 0 && currentPage < formQuestions.length) {\n setCurrentPage(prev => {\n return prev + 1;\n });\n }\n if (!startingPage) {\n const { funnelStepName } = formQuestions[currentPage - 1];\n window.dataLayer.push({\n event: 'mhe_form',\n funnel_step: currentPage,\n funnel_total_steps: formQuestions.length,\n funnel_step_name: funnelStepName,\n answer: pullAnswer(values),\n });\n }\n if (currentPage === formQuestions.length) {\n setReadyToSubmit(true);\n }\n }, [scrollToTop, currentPage, startingPage, pullAnswer]);\n\n const previousPage = useCallback(() => {\n scrollToTop();\n if (currentPage === 1) {\n setStartingPage(true);\n }\n if (currentPage === 2) {\n setUserDetailsFilled(true);\n }\n setCurrentPage(prev => {\n return prev - 1;\n });\n }, [currentPage, scrollToTop]);\n\n const validateForm = useCallback(values => {\n const errors = {};\n if (currentPage === 1) {\n checkRequiredField('firstName', values, errors);\n checkRequiredField('lastName', values, errors);\n }\n if (currentPage === 11) {\n checkRequiredNumberOrCurrency('estimatedBudget', values, errors);\n }\n return errors;\n }, [currentPage]);\n\n const handleNext = useCallback(\n values => {\n scrollToTop();\n if (Object.keys(formData).length > 0) {\n setFormData({ ...formData, ...values });\n } else {\n setFormData(values);\n }\n nextPage(values);\n },\n [formData, scrollToTop, nextPage]\n );\n\n const toggleErrorModal = useCallback(() => {\n setIsErrorModalShowing(false);\n setReadyToSubmit(false);\n }, []);\n\n const capitalizeName = useCallback(name => {\n return name.replace(/\\b(\\w)/g, s => { // factors in apostrophes and dashes in name\n return s.toUpperCase();\n });\n }, []);\n\n const convertDataForAPI = useCallback(() => {\n const roundedBudget = Math.round(formData.estimatedBudget.replace(/[$,]+/g, '') / 10000) * 10000;\n const budget = parseInt(roundedBudget);\n const currentFormData = formData;\n currentFormData.estimatedBudget = budget;\n if (formData.haveElectrician === 'Yes') {\n currentFormData.haveElectrician = 1;\n }\n if (formData.haveElectrician === 'No') {\n currentFormData.haveElectrician = 0;\n }\n if (formData.easyCeilingAccess === 'Yes') {\n currentFormData.easyCeilingAccess = 1;\n }\n if (formData.easyCeilingAccess === 'No') {\n currentFormData.easyCeilingAccess = 0;\n }\n currentFormData.firstName = capitalizeName(formData.firstName);\n currentFormData.lastName = capitalizeName(formData.lastName);\n setFormData(currentFormData);\n }, [formData, capitalizeName]);\n\n const getProgressBar = useCallback(() => {\n const percentage = Math.ceil(\n (currentPage / formQuestions.length) * 100\n );\n\n return (\n <>\n {!startingPage && (\n <button\n type=\"button\" className=\"casto-form-back\" onClick={() => {\n return previousPage();\n }}\n >\n <Icon glyph=\"arrow-left-2\" />\n <span>Back</span>\n </button>\n )}\n <div className=\"casto-form-progress\">\n <div className=\"casto-form-progress-bar\">\n <div\n className=\"casto-form-completion\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span>{currentPage} / {formQuestions.length}</span>\n </div>\n </>\n );\n }, [currentPage, startingPage, previousPage]);\n\n const handleSendAssessmentToolFormData = useCallback(() => {\n // Prevent default form submission if needed\n // Add the reCAPTCHA token to your form data\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute('6LfwxfgqAAAAAOw2Z0x_n9ikN7eCw1mUrCw-_Qex', { action: 'submit' }).then(token => {\n // Add the token to formData or as a separate field\n const formDataWithToken = { ...formData, gRecaptchaResponse: token };\n\n console.info('Form data with reCAPTCHA token:', formDataWithToken);\n // Proceed with your form submission logic\n const formApi = submissionUrl;\n\n axios\n .post(formApi, formDataWithToken) // Send formData with the reCAPTCHA token\n .then(response => {\n tempCookie('assessment-tool-results-guid', response.data.Message);\n if (window.location.host === 'localhost:3000') {\n window.location.replace(`${resultsUrl}.html`); // local testing\n } else {\n window.location.replace(resultsUrl); // redirection to result page occurs\n }\n })\n .catch(error => {\n if (error.response.data.errors) {\n const formErrorEntries = [];\n for (const [key, value] of Object.entries(error.response.data.errors)) {\n console.info(`${key}: ${value}`);\n formErrorEntries.push(value[0]);\n }\n setFormValidationErrors(formErrorEntries);\n }\n setFormError(error.response.data.Message);\n setIsThankYouModalShowing(false);\n setIsErrorModalShowing(true);\n });\n });\n });\n }, [\n formData,\n resultsUrl,\n submissionUrl\n ]);\n\n // const handleSendAssessmentToolFormData = useCallback(() => {\n // const formApi = submissionUrl;\n\n // axios\n // .post(formApi, formData)\n // .then(response => {\n // tempCookie('assessment-tool-results-guid', response.data.Message);\n // if (window.location.host === 'localhost:3000') {\n // window.location.replace(`${resultsUrl}.html`); // local testing\n // } else {\n // window.location.replace(resultsUrl); // redirection to result page occurs\n // }\n // })\n // .catch(error => {\n // if (error.response.data.errors) {\n // const formErrorEntries = [];\n // for (const [key, value] of Object.entries(error.response.data.errors)) {\n // console.info(`${key}: ${value}`);\n // formErrorEntries.push(value[0]);\n // }\n // setFormValidationErrors(formErrorEntries);\n // }\n // setFormError(error.response.data.Message);\n // setIsThankYouModalShowing(false);\n // setIsErrorModalShowing(true);\n // });\n // }, [\n // formData,\n // resultsUrl,\n // submissionUrl\n // ]\n // );\n\n const submitForm = useCallback(() => {\n convertDataForAPI();\n setIsThankYouModalShowing(true);\n handleSendAssessmentToolFormData();\n }, [convertDataForAPI, handleSendAssessmentToolFormData]);\n\n useEffect(() => {\n if (readyToSubmit) {\n submitForm();\n }\n window.addEventListener('resize', handleWindowSizeChange);\n return () => {\n window.removeEventListener('resize', handleWindowSizeChange);\n };\n }, [readyToSubmit, submitForm, handleWindowSizeChange]);\n\n return (\n <div className=\"casto-page\">\n <div className=\"casto-banner\">\n <img\n className=\"casto-background\"\n src={makeAssetsPath(currentPage === 0 ?\n '/assets/images/assessment-tool/casto-home-design.jpeg' :\n formQuestions[currentPage - 1].background\n )}\n alt=\"\"\n />\n <div className={classNames('casto-overlay', { 'slide-one': currentPage === 0 })} />\n <div className=\"casto-header\">\n {startingPage && (\n <div className=\"casto-title\">\n Optimise your home with My Home Enhancer\n </div>\n )}\n { isMobile && !startingPage && (\n <>\n <div className=\"casto-icon\">\n <Icon glyph={formQuestions[currentPage - 1].icon} />\n </div>\n <div className=\"casto-title\">\n {formQuestions[currentPage - 1].question}\n </div>\n </>\n )}\n </div>\n </div>\n <div className=\"casto-form\">\n {!startingPage && (\n <div className=\"casto-form-header\">\n {getProgressBar()}\n </div>\n )}\n <div className=\"casto-form-section\">\n {startingPage && (\n <>\n <div className=\"casto-form-info\">\n <div className=\"casto-form-brief\">\n Answer a few questions about the way you live and the way you'd love to live, and we'll provide you with budgeting advice and personalised recommendations for your renovation or new build project.\n <br />\n <br />\n Once completed, you can email yourself a copy of your results and share these recommendations with your electrician or builder.\n </div>\n </div>\n <button\n type=\"button\" className=\"casto-form-next btn-icon btn-skin-1\" onClick={() => {\n return nextPage();\n }}\n >\n <span>Let's get started</span>\n <Icon glyph=\"chevron-right\" />\n </button>\n <br />\n <span className=\"casto-form-disclaimer\">\n Any personal information collected, will be done so in accordance with our\n <a\n href={window.location.toString().includes('clipsal') ?\n 'https://www.se.com/au/en/about-us/legal/privacy-policy.jsp' : // Clipsal privacy policy\n 'https://www.se.com/nz/en/about-us/legal/privacy-policy.jsp'} // PDL privacy policy\n target=\"_blank\" rel=\"noreferrer\"\n > <u>privacy policy</u>\n </a>.\n The questions we ask about your age and living situation are to help us suggest the right product solutions for you.\n </span>\n <br />\n <span className=\"casto-form-note\">\n <b>Please Note: </b>\n For the best My Home Enhancer experience we don’t recommend using Mozilla Firefox.\n </span>\n </>\n )}\n {!startingPage && (\n <>\n {!isMobile && (\n <div className=\"casto-form-question\">\n {formQuestions[currentPage - 1].question}\n </div>\n )}\n {formQuestions[currentPage - 1].info && (\n <div className=\"casto-form-info\">\n {formQuestions[currentPage - 1].info}\n </div>\n )}\n {currentPage === 1 && (\n <UserDetailsPage\n userDetailsValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n userDetailsFilled={userDetailsFilled}\n />\n )}\n {currentPage === 2 && (\n <ImportantToYouPage\n importantToYouItems={importantToYouItems}\n importantToYouValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 3 && (\n <DescribesYouPage\n describesYouItems={describesYouItems}\n describesYouValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 4 && (\n <MainReasonPage\n mainReasonItems={mainReasonItems}\n mainReasonValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 5 && (\n <YourHomeProjectPage\n yourHomeProjectItems={yourHomeProjectItems}\n yourHomeProjectValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 6 && (\n <HomeDetailsPage\n homeLocationItems={homeLocationItems}\n ageOfHomeItems={ageOfHomeItems}\n typeOfHomeItems={typeOfHomeItems}\n easyCeilingAccessItems={easyCeilingAccessItems}\n homeDetailsValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 7 && (\n <KnowMoreAboutPage\n knowMoreAboutItems={knowMoreAboutItems}\n knowMoreAboutValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 8 && (\n <NumberOfRoomsPage\n numberOfRoomsItems={numberOfRoomsItems}\n formData={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 9 && (\n <StageOfProjectPage\n stageOfProjectItems={stageOfProjectItems}\n stageOfProjectValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 10 && (\n <TimeFramePage\n timeFrameItems={timeFrameItems}\n timeFrameValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 11 && (\n <EstimatedBudgetPage\n estimatedBudgetItems={estimatedBudgetItems}\n estimatedBudgetValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n {currentPage === 12 && (\n <HaveElectricianPage\n haveElectricianItems={haveElectricianItems}\n haveElectricianValues={formData}\n validateForm={validateForm}\n selectFieldsToValidate={selectFieldsToValidate}\n handleNext={handleNext}\n />\n )}\n </>\n )}\n </div>\n </div>\n {(isThankYouModalShowing || isErrorModalShowing) && (\n <ThankYouModal\n toggleErrorModal={toggleErrorModal}\n isThankYouModalShowing={isThankYouModalShowing}\n isErrorModalShowing={isErrorModalShowing}\n formError={formError}\n formValidationErrors={formValidationErrors}\n />\n )}\n </div>\n );\n};\n\nexport default AssessmentToolForm;\n\nAssessmentToolForm.propTypes = {\n submissionUrl: string.isRequired,\n resultsUrl: string.isRequired,\n};\n\nAssessmentToolForm.defaultProps = {};\n","import React from 'react';\nimport { string } from 'prop-types';\n\nexport default class Icon extends React.Component {\n shouldComponentUpdate(nextProps) {\n if (\n this.props.className !== nextProps.className ||\n this.props.glyph !== nextProps.glyph\n ) {\n return true;\n }\n\n return false;\n }\n\n render() {\n return (\n <svg className={`svg-icon ${this.props.className}`}>\n <use xlinkHref={`#${this.props.glyph}`} />\n </svg>\n );\n }\n}\n\nIcon.propTypes = {\n glyph: string.isRequired,\n className: string,\n};\n\nIcon.defaultProps = { className: '' };\n","/**\n * @param {string} path\n * @returns {string}\n */\nexport default function makeAssetsPath(path) {\n const $config = document.querySelectorAll('.js-config');\n console.info('path');\n if (!$config.length || !$config[0].dataset.assetsPath) {\n return path;\n }\n\n return `${$config[0].dataset.assetsPath}${path}`;\n}\n\n// COMMENT OUT ABOVE AND SWAP TO BELOW TO BUILD SERVER.JS FILE\n\n// import { document } from 'components/global/global';\n\n// /**\n// * @param {string} path\n// * @returns {string}\n// */\n// export default function makeAssetsPath(path) {\n// const $config = document.querySelectorAll('.js-config');\n// if (!$config.length || !$config[0].dataset.assetsPath) {\n// return path;\n// }\n\n// return `${$config[0].dataset.assetsPath}${path}`;\n// }\n","export const isValidEmail = email => {\n const rEmail =\n /^(([^<>()[\\]\\\\.,;:\\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 return rEmail.test(email);\n};\n\nexport const isValidNumber = number => {\n const rNumber = /^\\d*$/;\n return rNumber.test(number);\n};\n\nexport const isValidCurrency = currency => {\n const rCurrency = /(?=.*\\d)^\\$(([1-9]\\d{0,2}(,\\d{3})*)|0)?(\\.\\d{1,2})?$/;\n return rCurrency.test(currency);\n};\n\nexport const checkRequiredField = (\n field,\n values,\n errors,\n errorMsg = 'Required'\n) => {\n if (!values[field]) {\n errors[field] = errorMsg;\n }\n};\n\nexport const checkRequiredNumberOrCurrency = (\n field,\n values,\n errors,\n errorMsg = 'Required format of number or currency, e.g. 10000 or $10,000'\n) => {\n if (!isValidNumber(values[field]) && !isValidCurrency(values[field])) {\n errors[field] = errorMsg;\n }\n if (values[field].replace(/[^a-zA-Z0-9 ]/g, '') < 10000) {\n errors[field] = 'Budget must be over $10,000';\n }\n if (values[field].replace(/[^a-zA-Z0-9 ]/g, '') > 10000000) {\n errors[field] = 'Budget must be under $10,000,000';\n }\n};\n\nexport const checkRequiredDecimalField = (\n field,\n values,\n errors,\n errorMsg = 'Number required'\n) => {\n if (values[field]) {\n // allows decimal and whole numbers\n if (Number.isNaN(Number(values[field]))) {\n errors[field] = errorMsg;\n }\n }\n if (!values[field]) {\n errors[field] = errorMsg;\n }\n};\n\nexport const checkRequiredNumberField = (\n field,\n values,\n errors,\n errorMsg = 'Number required'\n) => {\n if (values[field]) {\n // only allows full numbers\n if (!isValidNumber(values[field])) {\n errors[field] = errorMsg;\n }\n }\n if (!values[field]) {\n errors[field] = errorMsg;\n }\n};\n\nexport const checkEmailField = (\n field,\n values,\n errors,\n errorMsg = 'Invalid email'\n) => {\n if (values[field]) {\n if (!isValidEmail(values[field])) {\n errors[field] = errorMsg;\n }\n }\n};\n\nexport const canSubmitForm = (touched, errors) => {\n let hasTouched = false;\n let hasError = false;\n for (const prop in touched) {\n if (\n Object.prototype.hasOwnProperty.call(touched, prop) &&\n touched[prop]\n ) {\n hasTouched = true;\n }\n }\n for (const prop in errors) {\n if (\n Object.prototype.hasOwnProperty.call(errors, prop) &&\n errors[prop]\n ) {\n hasError = true;\n }\n }\n return hasTouched && !hasError;\n};\n\n// used if a form page has ONLY dropdowns or radio buttons\nexport const canSubmitDropdownsOnlyForm = (values, errors) => {\n let hasError = false;\n const noEmptyValues = Object.values(values).every(v => {\n return v !== '';\n });\n const emptyArray = Object.keys(values).some(key => {\n return values[key].length === 0;\n });\n\n for (const prop in errors) {\n if (\n Object.prototype.hasOwnProperty.call(errors, prop) &&\n errors[prop]\n ) {\n hasError = true;\n }\n }\n\n // eslint-disable-next-line no-constant-binary-expression\n return noEmptyValues && !emptyArray && values !== {} && !hasError;\n};\n\nexport const canSubmitCurrency = (values, errors) => {\n let hasError = false;\n const noEmptyValues = Object.values(values).every(v => {\n return v !== '';\n });\n const emptyArray = Object.keys(values).some(key => {\n return values[key].length === 0;\n });\n\n for (const prop in errors) {\n if (\n Object.prototype.hasOwnProperty.call(errors, prop) &&\n errors[prop]\n ) {\n hasError = true;\n }\n }\n\n const rNumber = /^\\d*$/;\n const rCurrency = /(?=.*\\d)^\\$(([1-9]\\d{0,2}(,\\d{3})*)|0)?(\\.\\d{1,2})?$/;\n const checkValidNumbers = Object.values(values).every(v => {\n return rNumber.test(Number(v));\n });\n const checkValidCurrencies = Object.values(values).every(v => {\n return rCurrency.test(v);\n });\n\n // eslint-disable-next-line no-constant-binary-expression\n return noEmptyValues && !emptyArray && (checkValidNumbers || checkValidCurrencies) && values !== {} && !hasError;\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n"],"names":["CCheckbox","_React$Component","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","concat","randomNameString","getRandomString","_inherits","key","value","_this$props","this","props","formLayoutClass","label","hasError","errorMsg","isDisabled","children","name","React","CFormElementWrapper","elementClass","CCheckboxNameContext","Provider","propTypes","PropTypes","isRequired","defaultProps","createContext","CCheckboxItem","randomIDString","_this2","Consumer","defaultName","className","id","checked","disabled","required","notRequired","type","onChange","htmlFor","formQuestions","background","icon","question","funnelStepName","info","importantToYouItems","option","describesYouItems","mainReasonItems","yourHomeProjectItems","homeLocationItems","ageOfHomeItems","typeOfHomeItems","easyCeilingAccessItems","knowMoreAboutItems","numberOfRoomsItems","stageOfProjectItems","timeFrameItems","estimatedBudgetItems","haveElectricianItems","UserDetailsPage","_ref","userDetailsValues","validateForm","handleNext","userDetailsFilled","Formik","initialValues","validate","onSubmit","_ref2","values","errors","touched","handleChange","handleBlur","handleSubmit","CInput","labelClass","inputClass","firstName","Boolean","onBlur","lastName","canSubmitForm","classNames","onClick","object","func","bool","ImportantToYouPage","importantToYouValues","selectFieldsToValidate","CRadioButton","importantToYou","map","item","CRadioButtonItem","includes","arrayOf","DescribesYouPage","describesYouValues","describesYou","MainReasonPage","mainReasonValues","mainReason","YourHomeProjectPage","yourHomeProjectValues","yourHomeProject","HomeDetailsPage","homeDetailsValues","homeLocation","ageOfHome","typeOfHome","easyCeilingAccess","canSubmitDropdownsOnlyForm","KnowMoreAboutPage","knowMoreAboutValues","knowMoreAbout","NumberOfRoomsPage","roomDefaults","formData","_useState2","_slicedToArray","useState","numberOfRoomsValues","setNumberOfRoomsValues","_useState4","kitchen","roomKitchen","setRoomKitchen","_useState6","diningRoom","roomDiningRoom","setRoomDiningRoom","_useState8","livingRoom","roomLivingRoom","setRoomLivingRoom","_useState10","bedroom","roomBedroom","setRoomBedroom","_useState12","bathroom","roomBathroom","setRoomBathroom","_useState14","laundry","roomLaundry","setRoomLaundry","_useState16","pantry","roomPantry","setRoomPantry","_useState18","outdoorLiving","roomOutdoorLiving","setRoomOutdoorLiving","_useState20","entrance","roomEntrance","setRoomEntrance","_useState22","study","roomStudy","setRoomStudy","_useState24","garage","roomGarage","setRoomGarage","_useState26","validated","setValidated","handleRoomNumberChange","useCallback","change","prev","renderRoomQuantityField","index","selectedRoom","Icon","glyph","handleRoomPageSubmit","useEffect","Object","entries","_ref3","StageOfProjectPage","stageOfProjectValues","stageOfProject","TimeFramePage","timeFrameValues","timeFrame","EstimatedBudgetPage","estimatedBudgetValues","estimatedBudget","canSubmitCurrency","HaveElectricianPage","haveElectricianValues","haveElectrician","ThankYouModal","toggleErrorModal","isThankYouModalShowing","isErrorModalShowing","formError","formValidationErrors","role","tabIndex","undefined","onKeyPress","Loader","error","string","array","AssessmentToolForm","submissionUrl","resultsUrl","startingPage","setStartingPage","currentPage","setCurrentPage","setUserDetailsFilled","readyToSubmit","setReadyToSubmit","setIsThankYouModalShowing","setIsErrorModalShowing","setFormValidationErrors","setFormError","setFormData","window","innerWidth","isMobile","setIsMobile","dataLayer","handleWindowSizeChange","obj","arr","reduce","acc","record","scrollToTop","document","querySelector","scrollTop","pullAnswer","formValues","join","nextPage","push","event","assessmentToolFormProgress","assessmentToolFormCompletion","funnel_step","funnel_total_steps","funnel_step_name","answer","previousPage","checkRequiredField","checkRequiredNumberOrCurrency","keys","_objectSpread","capitalizeName","replace","s","toUpperCase","convertDataForAPI","roundedBudget","Math","round","budget","parseInt","currentFormData","getProgressBar","percentage","ceil","style","width","handleSendAssessmentToolFormData","grecaptcha","ready","execute","action","then","token","formDataWithToken","gRecaptchaResponse","console","formApi","axios","post","response","tempCookie","data","Message","location","host","formErrorEntries","_i","_Object$entries","_Object$entries$_i","submitForm","addEventListener","removeEventListener","src","makeAssetsPath","alt","href","toString","target","rel","nextProps","xlinkHref","path","$config","querySelectorAll","dataset","assetsPath","isValidEmail","email","test","field","currency","number","hasTouched","prop","prototype","hasOwnProperty","call","noEmptyValues","every","v","emptyArray","some","rNumber","rCurrency","checkValidNumbers","Number","checkValidCurrencies","hasOwn","classes","i","arg","appendClass","parseValue","isArray","apply","newClass","module","exports","default"],"sourceRoot":""}