{"version":3,"file":"46.0762b8fcdb5d6ea68677.chunk.js","mappings":"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WACVC,MAAO,QACPC,OAAQ,SACRC,gBAAiB,kBACjBC,kBAAmB,oBACnBC,iBAAkB,mBAClBC,qBAAsB,uBACtBC,YAAa,eAEFC,EAAuB,CAClC,CACEC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,KACNzC,MAAO,MAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNzC,MAAO,SAET,CACEyC,KAAM,QACNz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KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,KAAQ,KACR,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,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","sources":["webpack://AlfaLaval/./assets/icons/common/Profile.tsx","webpack://AlfaLaval/./assets/icons/common/IconContainer.tsx","webpack://AlfaLaval/./assets/icons/common/Facebook.tsx","webpack://AlfaLaval/./assets/icons/common/Twitter.tsx","webpack://AlfaLaval/./assets/icons/common/ExternalLink.tsx","webpack://AlfaLaval/./assets/icons/common/Arrow.tsx","webpack://AlfaLaval/./assets/icons/common/Cross.tsx","webpack://AlfaLaval/./assets/icons/common/Delete.tsx","webpack://AlfaLaval/./assets/icons/common/Email.tsx","webpack://AlfaLaval/./assets/icons/common/Phone.tsx","webpack://AlfaLaval/./components/Button/Button.tsx","webpack://AlfaLaval/./components/Checkbox/Checkbox.tsx","webpack://AlfaLaval/./components/Input/Input.tsx","webpack://AlfaLaval/./components/QuoteItem/QuoteItem.tsx","webpack://AlfaLaval/./components/RadioButton/RadioButton.tsx","webpack://AlfaLaval/./helpers/consts.ts","webpack://AlfaLaval/./helpers/generateTransactionId.ts","webpack://AlfaLaval/./helpers/stringHelpers.ts","webpack://AlfaLaval/./components/Form/Form.tsx","webpack://AlfaLaval/./components/TextArea/TextArea.tsx","webpack://AlfaLaval/./components/Form/components/Toggle/Toggle.tsx","webpack://AlfaLaval/./components/FileUpload/FileUpload.helpers.ts","webpack://AlfaLaval/./components/FileUpload/FileUpload.tsx","webpack://AlfaLaval/./components/Form/components/FormSelect/FormSelect.tsx","webpack://AlfaLaval/./components/Form/components/TextBoxList/TextBoxList.tsx","webpack://AlfaLaval/./modules/EnquiryForm/EnquiryForm.service.ts","webpack://AlfaLaval/./components/Form/components/SerialLink/SerialLink.tsx","webpack://AlfaLaval/./components/PhoneNumber/PhoneNumber.tsx","webpack://AlfaLaval/./components/PhoneNumber/countryCodes.ts","webpack://AlfaLaval/./components/Form/Form.hooks.tsx","webpack://AlfaLaval/./modules/EnquiryForm/components/EnquiryTypeForm/EnquiryTypeForm.helpers.ts","webpack://AlfaLaval/./modules/EnquiryForm/components/EnquiryTypeForm/EnquiryTypeForm.tsx","webpack://AlfaLaval/./modules/EnquiryForm/components/EnquiryTypeForm/EnquiryTypeForm.hooks.tsx","webpack://AlfaLaval/./modules/EnquiryForm/EnquiryForm.helpers.ts","webpack://AlfaLaval/./modules/EnquiryForm/EnquiryForm.tsx","webpack://AlfaLaval/./modules/EnquiryForm/index.ts","webpack://AlfaLaval/./modules/EnquiryForm/ContactUsBlock.tsx","webpack://AlfaLaval/./services/endpoints.ts"],"sourcesContent":["import React from 'react';\r\n\r\nexport const Profile = () => (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n width='21'\r\n height='21'\r\n viewBox='0 0 21 21'\r\n fill='none'\r\n stroke='#11387f'\r\n strokeWidth='2'\r\n strokeLinecap='round'\r\n strokeLinejoin='round'\r\n >\r\n <circle cx='12' cy='7' r='4' />\r\n <path d='M12 14s-8-1.5-8 4h16c0-5.5-8-4-8-4z' />\r\n </svg>\r\n);\r\n","import React, { ReactNode } from 'react';\r\n\r\ninterface IconContainerProps {\r\n icon: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const IconContainer = ({ icon, className }: IconContainerProps) => {\r\n return (\r\n <i className={className} aria-hidden=\"true\">\r\n {icon}\r\n </i>\r\n )\r\n};","import React from 'react';\r\n\r\nexport const Facebook = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"20\" viewBox=\"0 0 24 24\" width=\"20\">\r\n <rect fill=\"none\" height=\"20\" width=\"20\" />\r\n <path d=\"M22,12c0-5.52-4.48-10-10-10S2,6.48,2,12c0,4.84,3.44,8.87,8,9.8V15H8v-3h2V9.5C10,7.57,11.57,6,13.5,6H16v3h-2 c-0.55,0-1,0.45-1,1v2h3v3h-3v6.95C18.05,21.45,22,17.19,22,12z\" />\r\n </svg>\r\n);\r\n\r\n\r\n","import React from 'react';\r\n\r\nexport const Twitter = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\r\n <path d=\"M 2.3671875 3 L 9.4628906 13.140625 L 2.7402344 21 L 5.3808594 21 L 10.644531 14.830078 L 14.960938 21 L 21.871094 21 L 14.449219 10.375 L 20.740234 3 L 18.140625 3 L 13.271484 8.6875 L 9.2988281 3 L 2.3671875 3 z M 6.2070312 5 L 8.2558594 5 L 18.033203 19 L 16.001953 19 L 6.2070312 5 z\"></path>\r\n </svg>\r\n);","import React from 'react';\r\n\r\nexport const ExternalLink = () => (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"external-link\">\r\n <path id=\"Vector\" d=\"M18 13V17C18 18.0609 17.5786 19.0783 16.8284 19.8284C16.0783 20.5786 15.0609 21 14 21H3V6H11\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n <path id=\"Vector_2\" d=\"M15 3H21V9\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n <path id=\"Vector_3\" d=\"M10 14L21 3\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </g>\r\n </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const Arrow = ({ stroke = '#10387F', rotate = 0 }) => {\r\n return (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n width='24'\r\n height='24'\r\n viewBox='0 0 24 24'\r\n fill='none'\r\n style={{\r\n transformBox: 'fill-box',\r\n transformOrigin: 'center',\r\n transform: `rotate(${rotate}deg)`,\r\n }}\r\n >\r\n <path d='M9 18.5L15 12.5L9 6.5' stroke={stroke} strokeWidth='2' />\r\n </svg>\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport const Cross = () => (\r\n <svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\r\n <path\r\n d='M18 6L6 18'\r\n stroke='currentColor'\r\n strokeWidth='2'\r\n strokeLinecap='round'\r\n strokeLinejoin='round'\r\n />\r\n <path\r\n d='M6 6L18 18'\r\n stroke='currentColor'\r\n strokeWidth='2'\r\n strokeLinecap='round'\r\n strokeLinejoin='round'\r\n />\r\n </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const Delete = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6H5H21\" stroke=\"#3D3935\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V18C19 19.0609 18.5786 20.0783 17.8284 20.8284C17.0783 21.5786 16.0609 22 15 22H5V6H19Z\" stroke=\"#3D3935\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n <path d=\"M10 11V17\" stroke=\"#3D3935\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n <path d=\"M14 11V17\" stroke=\"#3D3935\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const EmailSvg = () => (\r\n <svg width='20' height='15' viewBox='0 0 20 15' fill='none' xmlns='http://www.w3.org/2000/svg'>\r\n <path\r\n d='M0.833496 2.74939C0.833496 1.64482 1.72893 0.74939 2.8335 0.74939H17.1668C18.2714 0.74939 19.1668 1.64482 19.1668 2.74939V3.50801L11.7086 8.675C10.6809 9.38697 9.31942 9.38697 8.29173 8.675L0.833496 3.50801V2.74939Z'\r\n fill='#3D3935'\r\n />\r\n <path\r\n d='M0.833496 4.42755L8.29173 9.59454C9.31942 10.3065 10.6809 10.3065 11.7086 9.59454L19.1668 4.42755V12.0827C19.1668 13.1873 18.2714 14.0827 17.1668 14.0827H2.8335C1.72893 14.0827 0.833496 13.1873 0.833496 12.0827V4.42755Z'\r\n fill='#3D3935'\r\n />\r\n </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const PhoneSvg = () => (\r\n <svg width='18' height='17' viewBox='0 0 18 17' fill='none' xmlns='http://www.w3.org/2000/svg'>\r\n <path\r\n fillRule='evenodd'\r\n clipRule='evenodd'\r\n d='M17.3327 12.5608V15.0698C17.3336 15.3028 17.2857 15.5333 17.1923 15.7468C17.0988 15.9602 16.9617 16.1517 16.7896 16.3092C16.6177 16.4667 16.4146 16.5865 16.1936 16.6611C15.9725 16.7358 15.7382 16.7635 15.5058 16.7425C12.9272 16.4629 10.4502 15.5835 8.27395 14.175C6.24917 12.8909 4.53255 11.1777 3.24595 9.15694C1.82971 6.97511 0.948369 4.49104 0.673306 1.90593C0.652365 1.67465 0.679901 1.44157 0.754173 1.22149C0.828436 1.00143 0.947808 0.799203 1.10467 0.627696C1.26154 0.456188 1.45247 0.319163 1.66532 0.225335C1.87815 0.131506 2.10824 0.0829403 2.34091 0.0827228H4.8549C5.26157 0.0787251 5.65584 0.222458 5.9642 0.487116C6.27256 0.751775 6.47396 1.11931 6.53088 1.52122C6.63701 2.32415 6.83377 3.11253 7.11751 3.87132C7.23022 4.17066 7.25461 4.49599 7.18782 4.80875C7.12095 5.12151 6.96567 5.4086 6.74042 5.63599L5.67613 6.69811C6.86905 8.79196 8.60613 10.5256 10.7041 11.7161L11.7684 10.654C11.9961 10.4292 12.2838 10.2742 12.5972 10.2075C12.9106 10.1408 13.2365 10.1651 13.5365 10.2776C14.2968 10.5608 15.0868 10.7572 15.8913 10.8631C16.2983 10.9204 16.6701 11.125 16.9359 11.438C17.2016 11.7511 17.3428 12.1507 17.3327 12.5608Z'\r\n fill='#3D3935'\r\n />\r\n </svg>\r\n);\r\n","import { createElement, ReactNode, MouseEvent } from 'react';\r\nimport classNames from 'classnames';\r\n\r\nexport interface ButtonProps extends React.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\r\n text: string;\r\n className?: string;\r\n type?: 'button' | 'submit' | 'reset';\r\n onClick?: (e: MouseEvent<HTMLButtonElement>) => void;\r\n href?: string;\r\n size?: 'xs' | 'small' | 'medium' | 'large';\r\n disabled?: boolean;\r\n color?: 'grey' | 'default' | 'primary' | 'cta';\r\n border?: boolean;\r\n children?: ReactNode;\r\n}\r\n\r\nexport const Button = ({\r\n text,\r\n className = '',\r\n onClick = () => {},\r\n href,\r\n size = 'medium',\r\n disabled = false,\r\n color = 'default',\r\n border = false,\r\n children,\r\n type,\r\n ...props\r\n}: ButtonProps) => {\r\n const tag = href ? 'a' : 'button';\r\n\r\n return createElement(\r\n tag,\r\n {\r\n onClick,\r\n className:\r\n classNames('c-button', {\r\n 'is-xs': size === 'xs',\r\n 'is-small': size === 'small',\r\n 'is-medium': size === 'medium',\r\n 'is-large': size === 'large',\r\n 'is-disabled': !!disabled,\r\n 'is-grey': color === 'grey',\r\n 'is-default': color === 'default',\r\n 'is-primary': color === 'primary',\r\n 'is-cta': color === 'cta',\r\n 'is-border': !!border,\r\n }) +\r\n ' ' +\r\n className,\r\n href,\r\n ...(tag === 'a' && { target: '_blank' }),\r\n type,\r\n ...props,\r\n },\r\n [text, children]\r\n );\r\n};\r\n","import React, { ChangeEventHandler, forwardRef } from 'react';\r\nimport './Checkbox.scss';\r\n\r\ninterface CheckboxProps {\r\n label?: string;\r\n value?: string;\r\n required?: boolean;\r\n id: string;\r\n name: string;\r\n onChange: ChangeEventHandler<HTMLInputElement>;\r\n onBlur?: ChangeEventHandler<HTMLInputElement>;\r\n checked?: boolean;\r\n}\r\n\r\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\r\n ({ label, value = label, id, name, onChange, onBlur, checked, required }, ref) => {\r\n return (\r\n <label>\r\n <input\r\n ref={ref}\r\n type='checkbox'\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n className='c-checkbox-input'\r\n name={name}\r\n value={value}\r\n id={id}\r\n defaultChecked={checked}\r\n />\r\n </label>\r\n );\r\n }\r\n);\r\n","import React, { forwardRef } from 'react';\r\nimport './Input.scss';\r\n\r\ninterface InputProps extends React.HTMLAttributes<HTMLInputElement> {\r\n type: 'text' | 'email';\r\n label?: string;\r\n name: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n value?: string;\r\n defaultValue?: string;\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n type = 'text',\r\n label,\r\n name,\r\n placeholder,\r\n required,\r\n className = '',\r\n defaultValue = '',\r\n value,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n return (\r\n <label className={'c-input ' + className}>\r\n {label && <span className='c-input-label'>{`${label} ${required ? '*' : ''}`}</span>}\r\n <input\r\n ref={ref}\r\n type={type}\r\n name={name}\r\n id={name}\r\n placeholder={placeholder}\r\n className='c-input-field'\r\n defaultValue={defaultValue}\r\n value={value}\r\n {...props}\r\n />\r\n </label>\r\n );\r\n }\r\n);\r\n","import React from 'react';\r\nimport { Delete } from '@icons/common';\r\nimport { RadioButton } from '@components/RadioButton';\r\nimport classNames from 'classnames';\r\nimport './QuoteItem.scss';\r\n\r\ninterface QuoteItemProps {\r\n itemImage: string;\r\n itemName: string;\r\n itemDescription?: string;\r\n buttonType: string;\r\n className?: string;\r\n onSelect?: (itemName: string) => void;\r\n onButtonClick?: (itemName: string) => void;\r\n}\r\n\r\nexport const QuoteItem = ({\r\n itemImage,\r\n itemName,\r\n itemDescription,\r\n buttonType,\r\n className,\r\n onSelect,\r\n onButtonClick = () => {},\r\n}: QuoteItemProps) => {\r\n const renderButtonComponent = () => {\r\n switch (buttonType) {\r\n case 'delete':\r\n return <Delete />;\r\n case 'radio':\r\n return <RadioButton id='quote_radio' name='quote_item' />;\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <label\r\n className={classNames(`quote-item ${className}`)}\r\n onClick={() => onSelect && onSelect(itemName)}\r\n >\r\n <div className='quote-image-container'>\r\n <img loading='lazy' src={itemImage} alt={itemName} />\r\n </div>\r\n\r\n <div className='quote-item-text'>\r\n <div className='title'>{itemName}</div>\r\n {itemDescription && <p className='description'>{itemDescription}</p>}\r\n </div>\r\n <div className='quote-item-button' onClick={() => onButtonClick(itemName)}>\r\n {renderButtonComponent()}\r\n </div>\r\n </label>\r\n );\r\n};\r\n","import React, { forwardRef } from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface RadioButtonProps {\r\n title?: string;\r\n id: string;\r\n name: string;\r\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n checked?: boolean;\r\n value?: string;\r\n}\r\n\r\nexport const RadioButton = forwardRef<HTMLInputElement, RadioButtonProps>(\r\n ({ title, id, name, onChange, checked = false, value, ...props }, ref) => {\r\n return (\r\n <div className='c-radio-button'>\r\n <label className='c-radio-button-container'>\r\n <input\r\n ref={ref}\r\n type='radio'\r\n onChange={onChange}\r\n className='checkmark'\r\n name={name}\r\n value={value || title}\r\n id={id}\r\n defaultChecked={checked}\r\n {...props}\r\n />\r\n {title}\r\n </label>\r\n </div>\r\n );\r\n }\r\n);\r\n","export const HEADER_HEIGHT = 88;\r\nexport const TOP_BAR_HEIGHT = 32;\r\nexport const FULL_HEADER_HEIGHT = 120;\r\nexport const pageType = {\r\n column: 'MegaMenuColumnPage',\r\n section: 'MegaMenuSectionPage',\r\n otherColumn: 'MegaMenuOtherPage',\r\n};\r\n\r\ntype LangType = {\r\n code: string;\r\n value: string;\r\n};\r\n\r\nexport const formFieldType = {\r\n quoteitem: \"quoteitem\",\r\n textbox: \"textbox\",\r\n textboxlist: \"textboxlist\",\r\n textarea: \"textarea\",\r\n email: \"textboxemail\",\r\n phone: 'phonenumber',\r\n file: \"fileupload\",\r\n checkbox: \"checkbox\",\r\n radio: \"radio\",\r\n toggle: \"toggle\",\r\n regionselection: \"regionselection\",\r\n industryselection: \"industryselection\",\r\n productselection: \"productselection\",\r\n applicationselection: \"applicationselection\",\r\n optiongroup: \"optiongroup\",\r\n};\r\nexport const langJson: LangType[] = [\r\n {\r\n code: 'en', // what episerver has\r\n value: 'en', // bc7 standared\r\n },\r\n {\r\n code: 'sv',\r\n value: 'sv',\r\n },\r\n {\r\n code: 'de',\r\n value: 'de',\r\n },\r\n {\r\n code: 'fr',\r\n value: 'fr',\r\n },\r\n {\r\n code: 'es',\r\n value: 'es',\r\n },\r\n {\r\n code: 'no',\r\n value: 'no',\r\n },\r\n {\r\n code: 'da',\r\n value: 'da',\r\n },\r\n {\r\n code: 'fi',\r\n value: 'fi',\r\n },\r\n {\r\n code: 'nl',\r\n value: 'nl',\r\n },\r\n {\r\n code: 'en-ca',\r\n value: 'en-ca',\r\n },\r\n {\r\n code: 'fr-ca',\r\n value: 'fr-ca',\r\n },\r\n {\r\n code: 'pt',\r\n value: 'pt',\r\n },\r\n {\r\n code: 'ru',\r\n value: 'ru',\r\n },\r\n {\r\n code: 'it',\r\n value: 'it',\r\n },\r\n {\r\n code: 'sk',\r\n value: 'sk',\r\n },\r\n {\r\n code: 'cs',\r\n value: 'cs',\r\n },\r\n {\r\n code: 'hu',\r\n value: 'hu',\r\n },\r\n {\r\n code: 'zh',\r\n value: 'zh',\r\n },\r\n {\r\n code: 'pl',\r\n value: 'pl',\r\n },\r\n {\r\n code: 'ja',\r\n value: 'ja',\r\n },\r\n {\r\n code: 'ko',\r\n value: 'ko',\r\n },\r\n {\r\n code: 'el',\r\n value: 'el',\r\n },\r\n {\r\n code: 'tr',\r\n value: 'tr',\r\n },\r\n {\r\n code: 'zh-tw',\r\n value: 'zh-tw',\r\n },\r\n {\r\n code: 'lv',\r\n value: 'lv',\r\n },\r\n {\r\n code: 'lt',\r\n value: 'lt',\r\n },\r\n {\r\n code: 'ro',\r\n value: 'ro',\r\n },\r\n {\r\n code: 'sl',\r\n value: 'sl',\r\n },\r\n {\r\n code: 'en-gb',\r\n value: 'en-gb',\r\n },\r\n {\r\n code: 'he',\r\n value: 'he',\r\n },\r\n {\r\n code: 'fr-be',\r\n value: 'fr-be',\r\n },\r\n {\r\n code: 'en-bz',\r\n value: 'en-bz',\r\n },\r\n {\r\n code: 'es-mx',\r\n value: 'es-mx',\r\n },\r\n {\r\n code: 'es-ar',\r\n value: 'es-ar',\r\n },\r\n {\r\n code: 'en-us',\r\n value: 'en-us',\r\n },\r\n {\r\n code: 'en-au',\r\n value: 'en-au',\r\n },\r\n {\r\n code: 'en-nz',\r\n value: 'en-nz',\r\n },\r\n {\r\n code: 'en-sg',\r\n value: 'en-sg',\r\n },\r\n {\r\n code: 'es-co',\r\n value: 'es-co',\r\n },\r\n {\r\n code: 'en-in',\r\n value: 'en-in',\r\n },\r\n {\r\n code: 'en-tt',\r\n value: 'en-tt',\r\n },\r\n {\r\n code: 'en-za',\r\n value: 'en-za',\r\n },\r\n {\r\n code: 'uk',\r\n value: 'uk',\r\n },\r\n {\r\n code: 'en-my',\r\n value: 'en-my',\r\n },\r\n {\r\n code: 'id',\r\n value: 'id',\r\n },\r\n {\r\n code: 'th',\r\n value: 'th',\r\n },\r\n {\r\n code: 'bg',\r\n value: 'bg',\r\n },\r\n {\r\n code: 'en-fr',\r\n value: 'en-fr',\r\n },\r\n];\r\n\r\n//Story 365068 - Added to check for the links that contains \"shop.alfalaval.com\"\r\nexport const productShopUrl = \"shop.alfalaval.com\";","export const generateTransactionId = (useCurrentTime: boolean, formId?: string): string => {\r\n const transctionElement = document.getElementById('TransactionId') as HTMLInputElement | null;\r\n const Id = transctionElement ? transctionElement.value : '';\r\n const timestamp = useCurrentTime\r\n ? new Date().getTime() * 10000\r\n : window.localStorage.getItem('timestamp');\r\n window.localStorage.setItem('timestamp', timestamp as string);\r\n const transactionId = Id\r\n ? Id.replace(/Timestamp/, timestamp?.toString())\r\n .replace(/PageId/, formId)\r\n : '';\r\n return transactionId;\r\n};\r\n","// replaces all spaces with -\r\nexport const getComputerName = (str: string): string => {\r\n if (!str) return '';\r\n const computerName = str.replace(/\\s+/g, '-').toLowerCase();\r\n return computerName;\r\n};\r\n\r\nexport const truncateString = (str: string, limit: number): string => {\r\n if (!str) return '';\r\n let truncated = str.substring(0, limit);\r\n truncated += '...';\r\n return truncated;\r\n};\r\n\r\nexport const normalizeInput = (value: string): string => {\r\n return value.toLowerCase().trim();\r\n};\r\n\r\nexport const interpolateString = (str: string, ...args: string[]): string => {\r\n let interpolatedString = str;\r\n args.forEach((arg, index) => {\r\n interpolatedString = interpolatedString.replace(`{${index}}`, arg);\r\n });\r\n return interpolatedString;\r\n};\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Button } from '@components/Button';\r\nimport { FormData } from './Form.types';\r\nimport { useFormLoader } from './Form.hooks';\r\nimport './Form.scss';\r\n\r\ninterface EnquiryTypeFormProps {\r\n formData: FormData;\r\n sendBtnLabel?: string;\r\n isSubmitDisabled?: boolean;\r\n fieldLoader: ReturnType<typeof useFormLoader>;\r\n onSubmit: React.FormEventHandler<HTMLFormElement>;\r\n errors: Record<string, any>;\r\n formError: string | boolean;\r\n isSubmitting: boolean;\r\n}\r\n\r\nexport const Form = ({\r\n formData,\r\n sendBtnLabel = 'Send',\r\n isSubmitDisabled,\r\n fieldLoader,\r\n onSubmit,\r\n errors,\r\n formError,\r\n isSubmitting,\r\n}: EnquiryTypeFormProps) => {\r\n return (\r\n <form\r\n className='c-form-submit'\r\n encType='multipart/form-data'\r\n method='post'\r\n onSubmit={(e) => onSubmit(e)}\r\n >\r\n {formData?.FormSections?.map(({ SubHeading, FormField = [] }, index) => {\r\n return (\r\n <div key={index}>\r\n {SubHeading && <h3>{SubHeading}</h3>}\r\n {FormField.map((formField, index) => {\r\n const name = formField.Name;\r\n\r\n const Field = fieldLoader(formField, index);\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={classNames('c-form-field-wrapper', {\r\n 'c-form-field-wrapper--error': errors[name],\r\n })}\r\n >\r\n {Field}\r\n {Field && errors[name] && (\r\n <span\r\n className='c-common-validation c-common-validation-danger'\r\n id={`error_${name}`}\r\n >\r\n {errors[name].message}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n })}\r\n {!isSubmitting ? (\r\n <Button\r\n className='c-send-btn'\r\n color='primary'\r\n text={sendBtnLabel}\r\n disabled={isSubmitDisabled}\r\n />\r\n ) : (\r\n <div className='c-form-spinner'>\r\n <img className='inline-block' src='/ui/css/img/loader.gif' alt='Loading...' />\r\n </div>\r\n )}\r\n\r\n {formError && (\r\n <div\r\n className='c-err-msg'\r\n dangerouslySetInnerHTML={{\r\n __html: typeof formError === 'string' ? formError : 'Please try again later!',\r\n }}\r\n />\r\n )}\r\n </form>\r\n );\r\n};\r\n","import React, { ChangeEvent, forwardRef } from 'react';\r\nimport './TextArea.scss';\r\n\r\ninterface TextAreaProps extends React.HTMLAttributes<HTMLTextAreaElement> {\r\n label: string;\r\n name: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;\r\n}\r\n\r\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\r\n ({ label, name, placeholder, required, value, onChange, className = '', ...props }, ref) => {\r\n return (\r\n <label className={'c-textarea ' + className}>\r\n <span className='c-textarea-label'>{`${label || ''} ${required ? '*' : ''}`}</span>\r\n <textarea\r\n ref={ref}\r\n name={name}\r\n id={name}\r\n placeholder={placeholder}\r\n value={value}\r\n onChange={onChange}\r\n className='c-textarea-field'\r\n {...props}\r\n />\r\n </label>\r\n );\r\n }\r\n);\r\n","import React, { forwardRef, HTMLAttributes, ChangeEvent } from 'react';\r\nimport './Toggle.scss';\r\n\r\ninterface ToggleProps extends HTMLAttributes<HTMLInputElement> {\r\n id: string;\r\n name: string;\r\n label: string;\r\n onText: string;\r\n offText: string;\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\r\n}\r\n\r\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\r\n ({ id, name, onChange, label, onText, offText, ...props }, ref) => {\r\n return (\r\n <div className='btn-container'>\r\n <div className='switch btn-color-mode-switch'>\r\n <input type='checkbox' ref={ref} name={name} id={id} onChange={onChange} {...props} />\r\n <label\r\n htmlFor={id}\r\n className='btn-color-mode-switch-inner'\r\n data-on={onText}\r\n data-off={offText}\r\n />\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n","export const getFileExtension = (fileName: string) => {\r\n return fileName.split('.').pop();\r\n};\r\n\r\nexport const formatExtensions = (extensions: string[]) => {\r\n return extensions.map((ext) => `.${ext}`).join(', ');\r\n};\r\n\r\nexport const isFileExists = (files: File[], inputFiles: File[]) => {\r\n return files.some(\r\n (f) =>\r\n inputFiles.filter((ipFile) => ipFile.name.toLowerCase() === f.name.toLowerCase()).length >\r\n 0\r\n );\r\n};\r\n\r\nexport const loadFileTypeIcon = (type) => {\r\n const ext = getFileExtension(type);\r\n let iconClass = 'icon-file-empty';\r\n switch (ext) {\r\n case 'pdf':\r\n iconClass = 'icon-pdf';\r\n break;\r\n case 'xlsx':\r\n case 'xls':\r\n iconClass = 'icon-file-excel';\r\n break;\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n iconClass = 'icon-file-img';\r\n break;\r\n\r\n default:\r\n iconClass = 'icon-file-empty';\r\n }\r\n return iconClass;\r\n};\r\n\r\nexport const getFilesSize = (files: File[]) => {\r\n return files.reduce((acc, file) => acc + file.size, 0) / Math.pow(1024, 2);\r\n}\r\n\r\nexport const isValidExtension = (files: File[], extensions: string[]) => {\r\n return files.every((file) => extensions.includes(getFileExtension(file.name)));\r\n}","import React, { ChangeEvent, forwardRef, useState, MouseEvent, Fragment, useEffect } from 'react';\r\nimport './FileUpload.scss';\r\nimport {\r\n formatExtensions,\r\n getFilesSize,\r\n isFileExists,\r\n isValidExtension,\r\n loadFileTypeIcon,\r\n} from './FileUpload.helpers';\r\n\r\nexport interface FileUploadData {\r\n FileSize: number;\r\n FileExtensions: string;\r\n FileSizeValidationMessage: string;\r\n FileUploadButtonLabel: string;\r\n ValidationMessage?: string;\r\n}\r\n\r\nexport interface FileUploadProps {\r\n name: string;\r\n label: string;\r\n placeholder?: string;\r\n required: boolean;\r\n btnLabel: string;\r\n extensions: string;\r\n maxSize: number;\r\n validationErrorMsg: string;\r\n sizeValidationMsg: string;\r\n onFilesUpdate: (files: File[]) => void;\r\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\r\n}\r\n\r\nexport const FileUpload = forwardRef<HTMLInputElement, FileUploadProps>(\r\n (\r\n {\r\n name = 'ImageUpload',\r\n label,\r\n placeholder,\r\n required,\r\n extensions,\r\n btnLabel,\r\n maxSize,\r\n onFilesUpdate,\r\n validationErrorMsg,\r\n sizeValidationMsg,\r\n onChange,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [files, setFiles] = useState<File[]>([]);\r\n const [errors, setErrors] = useState({\r\n fileExistsError: false,\r\n validFileError: false,\r\n isMaxFileSizeError: false,\r\n });\r\n\r\n useEffect(() => {\r\n //submit to the form\r\n onFilesUpdate(files);\r\n }, [files]);\r\n\r\n const getIsValid = (err: typeof errors) => {\r\n return Object.values(err).every((e) => e === false);\r\n };\r\n\r\n const handleUpload = (e: ChangeEvent<HTMLInputElement>) => {\r\n const newFiles = Array.from(e.target.files);\r\n const allFiles = [...newFiles, ...files];\r\n const errors = {\r\n fileExistsError: isFileExists(files, newFiles),\r\n validFileError: !isValidExtension(newFiles, extensions.split(',')),\r\n isMaxFileSizeError: !!(maxSize && getFilesSize(allFiles) > maxSize),\r\n };\r\n\r\n const isValid = getIsValid(errors);\r\n setErrors(errors);\r\n\r\n if (isValid) {\r\n setFiles(allFiles);\r\n }\r\n };\r\n\r\n const onClick = (e: MouseEvent<HTMLInputElement>) => {\r\n const target = e.target as HTMLInputElement;\r\n target.value = '';\r\n };\r\n\r\n const removeFile = (arrIndex: number) => {\r\n const updatedArr = files.filter((_, index) => index !== arrIndex);\r\n setFiles(updatedArr);\r\n };\r\n\r\n return (\r\n <div className='c-common-input'>\r\n <div className='c-contact-upload-row'>\r\n <div className='c-contact-upload-ico'>\r\n <div className='upload-btn-wrapper'>\r\n <button className='btn'>\r\n <i>\r\n <div className='icon-file-upload' />\r\n </i>\r\n <span>{btnLabel || 'Upload files'}</span>\r\n </button>\r\n <input\r\n ref={ref}\r\n onChange={handleUpload}\r\n onClick={onClick}\r\n type='file'\r\n name={name}\r\n multiple\r\n placeholder={placeholder}\r\n accept={formatExtensions(extensions.split(','))}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n <div className='c-file-upload-label'>\r\n {label && (\r\n <label htmlFor={name}>\r\n {label}\r\n {required && ' *'}\r\n </label>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div>\r\n {errors.fileExistsError && (\r\n <>\r\n <span className='c-common-validation c-common-validation-danger'>\r\n File already exists\r\n </span>\r\n <br />\r\n </>\r\n )}\r\n {errors.validFileError && (\r\n <>\r\n <span className='c-common-validation c-common-validation-danger'>\r\n {validationErrorMsg\r\n ? validationErrorMsg.replace('{0}', extensions)\r\n : 'Error while uploading the file'}\r\n </span>\r\n <br />\r\n </>\r\n )}\r\n {errors.isMaxFileSizeError && (\r\n <>\r\n <span className='c-common-validation c-common-validation-danger'>\r\n {sizeValidationMsg\r\n ? sizeValidationMsg.replace('{1}', maxSize.toString())\r\n : 'File size error'}\r\n </span>\r\n <br />\r\n </>\r\n )}\r\n </div>\r\n {files.length > 0 && (\r\n <div className='c-common-validation c-upload-files'>\r\n {files.map(({ name }, index) => {\r\n const iconClass = loadFileTypeIcon(name);\r\n return (\r\n <Fragment key={index.toString()}>\r\n <label>\r\n <div className='c-upload-flexdir-left'>\r\n <span className='c-file-icon'>\r\n <i className={`${iconClass}`}></i>\r\n </span>\r\n <span className='c-upload-file-label'>{name}</span>\r\n </div>\r\n <div className='c-upload-flexdir-right'>\r\n <span className='c-icon-close'>\r\n <i\r\n className='icon-cancel-circle'\r\n onClick={() => {\r\n removeFile(index);\r\n }}\r\n ></i>\r\n </span>\r\n </div>\r\n </label>\r\n <hr />\r\n </Fragment>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n","import { Options, RegionSelectOption } from '@modules/EnquiryForm/EnquiryForm.types';\r\nimport React, { forwardRef } from 'react';\r\nimport './FormSelect.scss';\r\n\r\ntype FormSelectProps = {\r\n label: string;\r\n required: boolean;\r\n selectText: string;\r\n hasGroups?: boolean;\r\n options: Options | RegionSelectOption[];\r\n};\r\n\r\nexport const FormSelect = forwardRef<HTMLSelectElement, FormSelectProps>(\r\n ({ label, options, required, selectText, hasGroups = true, ...props }, ref) => {\r\n return (\r\n <div className='c-form-top'>\r\n <label htmlFor='' className='c-select-field-label'>\r\n {label}\r\n {required ? ' *' : ''}\r\n </label>\r\n <select ref={ref} className='c-form-select' required={required} {...props}>\r\n <option value='select'>{selectText}</option>\r\n {hasGroups &&\r\n options.map((group, index) => (\r\n <optgroup label={group.GroupHeading} key={index}>\r\n {group.Options.map((option, i) => (\r\n <option key={i} value={option.Value}>\r\n {option.Text}\r\n </option>\r\n ))}\r\n </optgroup>\r\n ))}\r\n\r\n {!hasGroups &&\r\n options.map((option, index) => (\r\n <option key={index} value={option.Value}>\r\n {option.Text}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n );\r\n }\r\n);\r\n","import React, { useState, useEffect, ChangeEvent } from 'react';\r\nimport './TextBoxList.scss';\r\n\r\ninterface TextBoxListProps {\r\n name: string;\r\n placeholder: string;\r\n addInputBtnText: string;\r\n onBlur?: (e: ChangeEvent<HTMLInputElement>) => void;\r\n onChange: (value: string[]) => void;\r\n}\r\n\r\nexport const TextBoxList = ({\r\n name,\r\n placeholder,\r\n onChange,\r\n onBlur,\r\n addInputBtnText,\r\n}: TextBoxListProps) => {\r\n const [inputs, setInputs] = useState<string[]>(['']);\r\n\r\n const removeInput = (index: number) => {\r\n const newInputs = [...inputs];\r\n newInputs.splice(index, 1);\r\n setInputs(newInputs);\r\n };\r\n\r\n const addInput = () => {\r\n setInputs([...inputs, '']);\r\n };\r\n\r\n const onChangeInput = (e: React.ChangeEvent<HTMLInputElement>, index: number) => {\r\n const { value } = e.target;\r\n const newInputs = [...inputs];\r\n newInputs[index] = value;\r\n setInputs(newInputs);\r\n };\r\n\r\n useEffect(() => {\r\n onChange(inputs);\r\n }, [inputs]);\r\n\r\n return (\r\n <>\r\n {inputs.map((value, index) => (\r\n <div key={index} style={{ display: 'flex' }}>\r\n <input\r\n type='text'\r\n className='c-common-input c-form-serial-input-val'\r\n name={name}\r\n placeholder={placeholder}\r\n value={value}\r\n onChange={(e) => {\r\n onChangeInput(e, index);\r\n }}\r\n onBlur={onBlur}\r\n />\r\n {index !== 0 && (\r\n <span style={{ margin: '10px', flexBasis: '2%' }}>\r\n <i\r\n className='icon-cancel-circle'\r\n onClick={() => {\r\n removeInput(index);\r\n }}\r\n />\r\n </span>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {addInputBtnText && (\r\n <span className='c-contact-us-field-label c-contact-link-btn-label' onClick={addInput}>\r\n + {addInputBtnText}\r\n </span>\r\n )}\r\n </>\r\n );\r\n};\r\n","import { apiSlice } from '@services/apiSlice';\r\nimport { ContactUs as endpoints } from '@services/endpoints';\r\nimport { SerialLinkData, Enquiry } from './EnquiryForm.types';\r\n\r\nexport interface SubmitFormResponse {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nconst enquiryApi = apiSlice.injectEndpoints({\r\n endpoints: (build) => ({\r\n fetchSerialLinkData: build.query<\r\n SerialLinkData,\r\n {\r\n pageId?: string;\r\n }\r\n >({\r\n query: (params) => ({\r\n url: endpoints.fetchEnquirySerialLinkData,\r\n params: {\r\n language: window.lang,\r\n pageId: params.pageId ?? window.pageId,\r\n },\r\n }),\r\n }),\r\n fetchEnquiryForm: build.query<\r\n Enquiry,\r\n {\r\n pageId?: string;\r\n enquiryType: string;\r\n categoryId?: string;\r\n }\r\n >({\r\n query: (params) => {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n const hasProductData = !!history.state?.product;\r\n return {\r\n url: endpoints.fetchEnquiryForm,\r\n params: {\r\n language: window.lang,\r\n pageId: params.pageId ?? window.pageId,\r\n enquiryType: params.enquiryType,\r\n countryId: window.countryId,\r\n CategoryID: params.categoryId || localStorage.getItem('CategoryID') || null,\r\n productLineId: hasProductData ? '' : searchParams.get('productLine') || '',\r\n productModelId: hasProductData ? '' : searchParams.get('productModel') || '',\r\n productLinePageId: hasProductData ? '' : searchParams.get('productLinePageId') || '',\r\n },\r\n };\r\n },\r\n transformResponse: (response: Enquiry) => {\r\n const hasProductData = !!history.state?.product;\r\n const productData = history.state?.product;\r\n\r\n const productSection = hasProductData\r\n ? [\r\n {\r\n SubHeading: response.Page.ProductSelectedTitle,\r\n FormField: [\r\n {\r\n DataType: 'QuoteItem',\r\n Name: productData.name,\r\n ProductDescription: productData.description,\r\n ImageSrc: productData.imageSrc,\r\n },\r\n ],\r\n },\r\n ]\r\n : [];\r\n return {\r\n ...response,\r\n FormData: {\r\n ...response.FormData,\r\n FormSections: [...productSection, ...response.FormData.FormSections],\r\n },\r\n };\r\n },\r\n }),\r\n fetchEnquiryApplicationList: build.query<{ ApplicationJsonList: string }, number>({\r\n query: (industryId) => ({\r\n url: endpoints.fetchEnquiryApplicationList,\r\n params: {\r\n lang: window.lang,\r\n ID: industryId,\r\n },\r\n }),\r\n }),\r\n submitEnquiryForm: build.mutation<SubmitFormResponse, FormData>({\r\n query: (data) => ({\r\n url: endpoints.submitEnquiryForm,\r\n method: 'POST',\r\n body: data,\r\n }),\r\n }),\r\n }),\r\n overrideExisting: false,\r\n});\r\n\r\nexport const {\r\n useFetchSerialLinkDataQuery,\r\n useLazyFetchEnquiryFormQuery,\r\n useFetchEnquiryApplicationListQuery,\r\n useSubmitEnquiryFormMutation,\r\n} = enquiryApi;\r\n","import React, { useState } from 'react';\r\nimport { useFetchSerialLinkDataQuery } from '@modules/EnquiryForm/EnquiryForm.service';\r\nimport './SerialLink.scss';\r\n\r\ninterface SerialLinkProps {\r\n linkLabel: string;\r\n}\r\n\r\nexport const SerialLink = ({ linkLabel }: SerialLinkProps) => {\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const contactUsBlock = document.getElementById('ContactUsBlock');\r\n const pageId = contactUsBlock?.dataset?.data\r\n ? JSON.parse(contactUsBlock?.dataset?.data)?.pageId\r\n : window.pageId;\r\n const { data } = useFetchSerialLinkDataQuery({\r\n pageId: pageId,\r\n });\r\n const serialLink = data ? JSON.parse(data.JsonMessage) : null;\r\n\r\n const openModal = () => {\r\n setIsModalOpen(true);\r\n };\r\n\r\n const closeModal = () => {\r\n setIsModalOpen(false);\r\n };\r\n\r\n if (!linkLabel || !serialLink) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <label className='c-form-serial-link' onClick={openModal}>\r\n {linkLabel}\r\n </label>\r\n {serialLink && isModalOpen && (\r\n <div className='c-form-modal'>\r\n <div className='c-form-popup-container'>\r\n <div className='c-form-popup-header'>\r\n <p className='c-form-popup-title'>{serialLink.Title}</p>\r\n <span className='icon-symbol-close c-form-popup-close' onClick={closeModal}></span>\r\n </div>\r\n\r\n <div className='c-form-popup-body'>\r\n <div className='c-form-popup-body-left'>\r\n <img\r\n src={serialLink.Image}\r\n alt={serialLink.ImageAltText}\r\n className='c-product-card'\r\n ></img>\r\n </div>\r\n\r\n <div\r\n className='c-form-popup-body-right'\r\n dangerouslySetInnerHTML={{\r\n __html: serialLink.Description,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import React, { ChangeEvent, forwardRef, useState } from 'react';\r\nimport PhoneInput from 'react-phone-input-2';\r\nimport classNames from 'classnames';\r\nimport './PhoneNumber.scss';\r\n\r\ninterface PhoneNumberProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\r\n label?: string;\r\n name: string;\r\n country?: string;\r\n onChange?: (value: string, data?: unknown, e?: ChangeEvent<HTMLInputElement>) => void;\r\n className?: string;\r\n}\r\n\r\nexport const PhoneNumber = forwardRef<HTMLInputElement, PhoneNumberProps>(\r\n (\r\n { label, name, country, required, className = '', value, placeholder, onChange, ...props },\r\n ref\r\n ) => {\r\n const [formattedInput, setFormattedInput] = useState('');\r\n\r\n const handleInputChange = (value: string) => {\r\n setFormattedInput(value);\r\n onChange && onChange(value);\r\n };\r\n\r\n const handleBackspaceKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'Backspace') {\r\n e.preventDefault(); // Prevent the default behavior of the backspace key\r\n setFormattedInput((initialInput) => {\r\n const formattedValue = initialInput.slice(0, -1);\r\n onChange && onChange(formattedValue);\r\n return formattedValue;\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <label className={classNames('c-input', 'c-phone-input', className)}>\r\n {label && <span className='c-input-label'>{`${label} ${required ? '*' : ''}`}</span>}\r\n <PhoneInput\r\n value={formattedInput}\r\n onChange={handleInputChange}\r\n onKeyDown={handleBackspaceKey}\r\n country={country || window.lang}\r\n inputProps={{\r\n name, \r\n placeholder,\r\n ref,\r\n className: 'c-input-field',\r\n ...props,\r\n }}\r\n />\r\n </label>\r\n );\r\n }\r\n);\r\n","const codes = {\r\n '754': 'dz',\r\n '755': 'ao',\r\n '756': 'am',\r\n '757': 'bj',\r\n '758': 'bw',\r\n '759': 'bf',\r\n '760': 'bi',\r\n '2025': 'cm',\r\n '761': 'cv',\r\n '762': 'cf',\r\n '763': 'td',\r\n '764': 'cg',\r\n '765': 'cd',\r\n '767': 'dj',\r\n '768': 'eg',\r\n '769': 'gq',\r\n '770': 'er',\r\n '771': 'et',\r\n '772': 'ga',\r\n '773': 'gm',\r\n '774': 'gh',\r\n '775': 'gw',\r\n '2026': 'ci',\r\n '777': 'ke',\r\n '778': 'ls',\r\n '779': 'lr',\r\n '780': 'ly',\r\n '781': 'mg',\r\n '782': 'mw',\r\n '783': 'ml',\r\n '784': 'mr',\r\n '785': 'mu',\r\n '786': 'ma',\r\n '787': 'mz',\r\n '788': 'na',\r\n '789': 'ne',\r\n '790': 'ng',\r\n '791': 're',\r\n '792': 'rw',\r\n '793': 'sn',\r\n '794': 'sc',\r\n '795': 'sl',\r\n '796': 'so',\r\n '797': 'za',\r\n '2631': 'sd',\r\n '2632': 'ss',\r\n '798': 'sz',\r\n '799': 'tz',\r\n '800': 'tg',\r\n '801': 'tn',\r\n '802': 'ug',\r\n '803': 'eh',\r\n '804': 'zm',\r\n '805': 'zw',\r\n '807': 'af',\r\n '808': 'bh',\r\n '809': 'bd',\r\n '810': 'bt',\r\n '811': 'bn',\r\n '812': 'kh',\r\n '814': 'cn',\r\n '815': 'tl',\r\n '816': 'in',\r\n '817': 'id',\r\n '818': 'ir',\r\n '819': 'iq',\r\n '820': 'il',\r\n '821': 'jp',\r\n '1481': 'jo',\r\n '822': 'kz',\r\n '823': 'kr',\r\n '824': 'kw',\r\n '825': 'kg',\r\n '826': 'la',\r\n '827': 'lb',\r\n '828': 'mo',\r\n '829': 'my',\r\n '830': 'mv',\r\n '1999': 'me',\r\n '831': 'mn',\r\n '832': 'mm',\r\n '833': 'np',\r\n '834': 'om',\r\n '835': 'pk',\r\n '1934': 'ps',\r\n '836': 'ph',\r\n '837': 'qa',\r\n '838': 'sa',\r\n '839': 'sg',\r\n '840': 'lk',\r\n '841': 'sy',\r\n '842': 'tw',\r\n '843': 'tj',\r\n '844': 'th',\r\n '845': 'tm',\r\n '846': 'ae',\r\n '847': 'uz',\r\n '848': 'vn',\r\n '2538': 'vn',\r\n '849': 'ye',\r\n '2566': 'ag',\r\n '2567': 'aw',\r\n '2569': 'bb',\r\n '2559': 'bz',\r\n '2560': 'cr',\r\n '2572': 'cu',\r\n '2573': 'cw',\r\n '2579': 'dm',\r\n '2574': 'do',\r\n '2590': 'bq',\r\n '2561': 'sv',\r\n '2575': 'gd',\r\n '2576': 'gp',\r\n '2562': 'gt',\r\n '2578': 'ht',\r\n '2563': 'hn',\r\n '2581': 'mq',\r\n '2582': 'ms',\r\n '2564': 'ni',\r\n '2565': 'pa',\r\n '2584': 'kn',\r\n '2583': 'lc',\r\n '2577': 'mf',\r\n '2585': 'pm',\r\n '2586': 'vc',\r\n '2587': 'sx',\r\n '2588': 'tt',\r\n '2589': 'tc',\r\n '1882': 'al',\r\n '851': 'at',\r\n '852': 'az',\r\n '853': 'by',\r\n '854': 'be',\r\n '855': 'ba',\r\n '856': 'bg',\r\n '857': 'hr',\r\n '858': 'cy',\r\n '859': 'cz',\r\n '860': 'dk',\r\n '861': 'ee',\r\n '862': 'fi',\r\n '863': 'fr',\r\n '864': 'ge',\r\n '865': 'de',\r\n '866': 'gr',\r\n '867': 'hu',\r\n '868': 'is',\r\n '2086': 'ie',\r\n '869': 'it',\r\n '870': 'xk',\r\n '871': 'lv',\r\n '872': 'lt',\r\n '2076': 'lu',\r\n '874': 'mt',\r\n '875': 'md',\r\n '876': 'mc',\r\n '2767': 'me',\r\n '877': 'nl',\r\n '873': 'mk',\r\n '878': 'no',\r\n '879': 'pl',\r\n '880': 'pt',\r\n '881': 'ro',\r\n '882': 'ru',\r\n '883': 'rs',\r\n '884': 'sk',\r\n '885': 'si',\r\n '886': 'es',\r\n '887': 'se',\r\n '888': 'ch',\r\n '889': 'tr',\r\n '890': 'ua',\r\n '891': 'gb',\r\n '893': 'bs',\r\n '895': 'bm',\r\n '896': 'ca',\r\n '897': 'ky',\r\n '908': 'jm',\r\n '910': 'mx',\r\n '2591': 'pr',\r\n '915': 'us',\r\n '917': 'ar',\r\n '918': 'bo',\r\n '919': 'br',\r\n '920': 'cl',\r\n '1480': 'co',\r\n '2062': 'ec',\r\n '921': 'gf',\r\n '922': 'gy',\r\n '923': 'py',\r\n '924': 'pe',\r\n '925': 'sr',\r\n '926': 'uy',\r\n '927': 've',\r\n '929': 'au',\r\n '930': 'pf',\r\n '931': 'nr',\r\n '932': 'nc',\r\n '933': 'nz',\r\n '934': 'pg',\r\n '935': 'xx',\r\n};\r\n\r\nexport default codes;\r\n","import React, { ReactNode, useEffect } from 'react';\r\nimport { formFieldType } from '@helpers/consts';\r\nimport { RadioButton } from '@components/RadioButton';\r\nimport { TextArea } from '@components/TextArea';\r\nimport { Toggle } from './components/Toggle';\r\nimport { Input } from '@components/Input';\r\nimport {\r\n Path,\r\n UseFormRegister,\r\n UseFormSetValue,\r\n UseFormTrigger,\r\n UseFormWatch,\r\n} from 'react-hook-form';\r\nimport { FormValues, FileFormField, FormField, Options } from './Form.types';\r\nimport { FileUpload } from '@components/FileUpload';\r\nimport { Checkbox } from '@components/Checkbox';\r\nimport { FormSelect } from './components/FormSelect';\r\nimport { TextBoxList } from './components/TextBoxList';\r\nimport { SerialLink } from './components/SerialLink';\r\nimport { useFetchEnquiryApplicationListQuery } from '@modules/EnquiryForm/EnquiryForm.service';\r\nimport { QuoteItem } from '@components/QuoteItem';\r\nimport { PhoneNumber, countryCodes } from '@components/PhoneNumber';\r\n\r\nconst useApplicationFieldState = ({\r\n watchIndustriesSelector,\r\n onFetchApplicationData,\r\n}: {\r\n watchIndustriesSelector: string;\r\n onFetchApplicationData: () => void;\r\n}) => {\r\n const { data: applicationDataResponse } = useFetchEnquiryApplicationListQuery(\r\n +watchIndustriesSelector,\r\n { skip: !watchIndustriesSelector || watchIndustriesSelector === 'select' }\r\n );\r\n let applicationData = JSON.parse(applicationDataResponse?.ApplicationJsonList || '[]') as Options;\r\n\r\n if (watchIndustriesSelector === 'select') {\r\n applicationData = [] as Options;\r\n }\r\n useEffect(() => {\r\n onFetchApplicationData();\r\n }, [applicationDataResponse?.ApplicationJsonList]);\r\n\r\n return applicationData;\r\n};\r\n\r\nexport function useFormLoader(\r\n register: UseFormRegister<FormValues>,\r\n watch: UseFormWatch<FormValues>,\r\n setFormValue: UseFormSetValue<FormValues>,\r\n trigger: UseFormTrigger<FormValues>,\r\n hasToggleField: boolean,\r\n madeFirstSubmit: boolean,\r\n dropdownToDisable?: string\r\n): (formField: FormField | FileFormField, index: number) => ReactNode {\r\n const watchToggle = watch('Toggle', false);\r\n const watchCountry = watch('Country');\r\n const selectedProductNames = watch('selectedProductNames');\r\n\r\n const applicationData = useApplicationFieldState({\r\n watchIndustriesSelector: watch('Industry'),\r\n onFetchApplicationData: () => {\r\n setFormValue('Application', 'select');\r\n },\r\n });\r\n\r\n return (formField: FormField | FileFormField, index: number) => {\r\n const dataType = formField.DataType?.toLowerCase() || '';\r\n const name = formField.Name as Path<FormValues>;\r\n const productIsRemoved = !selectedProductNames?.includes(formField.Name);\r\n\r\n switch (dataType) {\r\n case formFieldType.quoteitem: {\r\n if (!selectedProductNames?.length || productIsRemoved) {\r\n return null;\r\n }\r\n return (\r\n <QuoteItem\r\n itemImage={formField.ImageSrc}\r\n itemName={formField.Name}\r\n itemDescription={formField.ProductDescription}\r\n buttonType='delete'\r\n className='form-product has-border'\r\n onButtonClick={() => {\r\n setFormValue(\r\n 'selectedProductNames',\r\n selectedProductNames.filter((name) => name !== formField.Name)\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n case formFieldType.textbox:\r\n case formFieldType.email:\r\n return (\r\n <div key={index} className='c-contact-us-field-label'>\r\n <Input\r\n label={formField.Label}\r\n type={formFieldType.textbox ? 'text' : 'email'}\r\n className='c-contact-us-field-label'\r\n placeholder={formField.Placeholder}\r\n required={formField.IsMandatory}\r\n {...register(name, {\r\n required: { value: formField.IsMandatory, message: formField.MandatoryMessage },\r\n pattern: {\r\n value: new RegExp(formField.ValidationRegex?.replace('\\\\\\\\', '\\\\'), 'gu'),\r\n message: formField.ValidationMessage,\r\n },\r\n })}\r\n />\r\n </div>\r\n );\r\n case formFieldType.phone:\r\n return (\r\n <div key={index} className='c-contact-us-field-label'>\r\n <PhoneNumber\r\n name={name}\r\n label={formField.Label}\r\n className='c-contact-us-field-label'\r\n placeholder={formField.Placeholder}\r\n country={countryCodes[watchCountry.toString()]}\r\n required={formField.IsMandatory}\r\n {...register(name, {\r\n required: { value: formField.IsMandatory, message: formField.MandatoryMessage },\r\n })}\r\n onChange={(value) => {\r\n setFormValue(name, value);\r\n }}\r\n />\r\n </div>\r\n );\r\n case formFieldType.textarea:\r\n return (\r\n <div key={index} className='c-contact-us-field-label'>\r\n <TextArea\r\n label={formField.Label}\r\n className='c-contact-us-field-label c-contact-us-textarea'\r\n placeholder={formField.Placeholder}\r\n required={formField.IsMandatory}\r\n {...register(name, {\r\n required: { value: formField.IsMandatory, message: formField.MandatoryMessage },\r\n pattern: {\r\n value: new RegExp(formField.ValidationRegex?.replace('\\\\\\\\', '\\\\'), 'gu'),\r\n message: formField.ValidationMessage,\r\n },\r\n })}\r\n />\r\n </div>\r\n );\r\n\r\n case formFieldType.radio:\r\n const radioName = name || 'ServiceType';\r\n\r\n return (\r\n <div key={index} className='c-contact-radio-main'>\r\n {formField.Options.map((opt, index) => (\r\n <div className='c-contact-radio' key={index}>\r\n <RadioButton\r\n title={opt.Text}\r\n id={opt.Value}\r\n {...register(radioName, {\r\n required: { value: formField.IsMandatory, message: formField.MandatoryMessage },\r\n })}\r\n value={opt.Text}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n case formFieldType.toggle: {\r\n const sparePartText = formField.Options.find((item) => item.Value === 'Spareparts').Text;\r\n const newQuoteText = formField.Options.find((item) => item.Value === 'Newquote').Text;\r\n\r\n return (\r\n <Toggle\r\n id='service_type'\r\n label={formField.Label}\r\n onText={sparePartText}\r\n offText={newQuoteText}\r\n {...register(name)}\r\n />\r\n );\r\n }\r\n case formFieldType.textboxlist: {\r\n if (hasToggleField && !watchToggle) {\r\n return null;\r\n }\r\n\r\n register(name, {\r\n validate: (value) => {\r\n if (!formField.IsMandatory) {\r\n return true;\r\n }\r\n\r\n const val = value as string[];\r\n // if array of serial numbers is empty, return error message\r\n return !val.join('') ? formField.MandatoryMessage : true;\r\n },\r\n });\r\n\r\n const onBlur = () => {\r\n // trigger validation on blur if form was submitted at least once\r\n if (madeFirstSubmit) {\r\n trigger(name);\r\n }\r\n };\r\n\r\n return (\r\n <div className='c-contact-us-serial'>\r\n <label className='c-contact-us-field-label'>{formField.Label}</label>\r\n <br />\r\n <SerialLink linkLabel={formField.LinkLabel} />\r\n <TextBoxList\r\n name={name}\r\n placeholder={formField.Placeholder}\r\n addInputBtnText={formField.LinkButtonLabel}\r\n onChange={(value) => {\r\n setFormValue(name, value);\r\n }}\r\n onBlur={onBlur}\r\n />\r\n </div>\r\n );\r\n }\r\n case formFieldType.file:\r\n const field = formField as FileFormField;\r\n register(name);\r\n return (\r\n <FileUpload\r\n name={name}\r\n key={index}\r\n label={field.Label}\r\n required={field.IsMandatory}\r\n extensions={field.FileExtensions || 'jpg,jpeg,png,xlsx,pdf'}\r\n btnLabel={field.FileUploadButtonLabel}\r\n maxSize={field.FileSize}\r\n validationErrorMsg={field.ValidationMessage}\r\n sizeValidationMsg={field.FileSizeValidationMessage}\r\n onFilesUpdate={(files) => {\r\n setFormValue(name, files);\r\n }}\r\n />\r\n );\r\n case formFieldType.checkbox:\r\n return (\r\n <div key={index} className='c-form-checkbox'>\r\n <Checkbox\r\n label=''\r\n id={name}\r\n {...register(name, {\r\n validate: (value) => {\r\n if (formField.IsMandatory && !value) {\r\n return formField.MandatoryMessage;\r\n }\r\n return true;\r\n },\r\n onChange: () => {\r\n if (name === 'GDPR') {\r\n trigger(name);\r\n }\r\n },\r\n })}\r\n />\r\n <div\r\n className='c-form-checkbox-label'\r\n dangerouslySetInnerHTML={{ __html: formField.Label }}\r\n />\r\n </div>\r\n );\r\n case formFieldType.regionselection:\r\n case formFieldType.industryselection:\r\n case formFieldType.productselection: {\r\n const options =\r\n formField.IndustrySelectOptions ||\r\n formField.RegionSelectOptions ||\r\n formField.ProductSelectOptions;\r\n\r\n return (\r\n <FormSelect\r\n hasGroups\r\n key={index}\r\n label={formField.Label}\r\n selectText={formField.SelectLabel}\r\n options={options}\r\n required={formField.IsMandatory}\r\n disabled={!options.length || dropdownToDisable === formField.DataType}\r\n {...register(name, {\r\n validate: (value) => {\r\n const isValid = formField.IsMandatory ? value !== 'select' : true;\r\n return isValid || formField.MandatoryMessage;\r\n },\r\n })}\r\n />\r\n );\r\n }\r\n case formFieldType.applicationselection:\r\n if (!applicationData.length) {\r\n return null;\r\n }\r\n return (\r\n <FormSelect\r\n key={index}\r\n label={formField.Label}\r\n selectText={formField.SelectLabel}\r\n hasGroups={false}\r\n options={applicationData}\r\n required={formField.IsMandatory}\r\n {...register(name, {\r\n validate: (value) => {\r\n const isValid = formField.IsMandatory ? value !== 'select' : true;\r\n return isValid || formField.MandatoryMessage;\r\n },\r\n })}\r\n />\r\n );\r\n }\r\n };\r\n}\r\n","import { formFieldType } from '@helpers/consts';\r\nimport { generateTransactionId } from '@helpers/generateTransactionId';\r\nimport {\r\n EnquiryFormData,\r\n Options,\r\n RegionSelectOption,\r\n} from '@modules/EnquiryForm/EnquiryForm.types';\r\nimport { EnquiryForm } from './EnquiryTypeForm';\r\nimport { interpolateString } from '@helpers/stringHelpers';\r\n\r\nconst getAllFields = (formData: EnquiryFormData) => {\r\n return formData.FormSections.flatMap((section) => section.FormField);\r\n};\r\n\r\nexport const getDefaultSelected = (\r\n options: RegionSelectOption[],\r\n isApplicationSelection: boolean\r\n) => {\r\n if (isApplicationSelection) return 'select';\r\n\r\n // finds the first selected option\r\n const allGroups = options.reduce((acc, curr) => [...acc, ...curr.Options], [] as Options);\r\n const selected = allGroups.find((option) => option.Selected);\r\n\r\n return selected ? selected.Value : 'select';\r\n};\r\n\r\nexport const getFormDefaultValues = (formData: EnquiryFormData) => {\r\n const defaultValues = {} as EnquiryForm;\r\n const allFields = getAllFields(formData);\r\n\r\n formData.FormSections.forEach((section) => {\r\n section.FormField.forEach((field) => {\r\n const dataType = field.DataType?.toLowerCase() || '';\r\n const name = field.Name;\r\n switch (dataType) {\r\n case formFieldType.quoteitem: {\r\n const namesArr = defaultValues.selectedProductNames\r\n ? [...defaultValues.selectedProductNames]\r\n : [];\r\n defaultValues.selectedProductNames = [...namesArr, name];\r\n break;\r\n }\r\n case formFieldType.regionselection:\r\n case formFieldType.industryselection:\r\n case formFieldType.productselection:\r\n case formFieldType.applicationselection:\r\n const isApplicationSelection = dataType === formFieldType.applicationselection;\r\n const options =\r\n field.IndustrySelectOptions || field.RegionSelectOptions || field.ProductSelectOptions;\r\n defaultValues[name] = getDefaultSelected(options, isApplicationSelection);\r\n break;\r\n case formFieldType.toggle:\r\n // if serial number is required, toggling 'spare parts' state by default\r\n const serialNrField = allFields.find((f) => f.Name === 'SerialNr');\r\n\r\n if (serialNrField && serialNrField.IsMandatory) {\r\n defaultValues[name] = true;\r\n }\r\n break;\r\n default:\r\n defaultValues[name] = undefined;\r\n }\r\n });\r\n });\r\n\r\n return defaultValues;\r\n};\r\n\r\nexport const createFormData = (\r\n type: string,\r\n data: EnquiryForm,\r\n recaptchaToken: string,\r\n parentPage: {\r\n Id: string;\r\n Url: string;\r\n },\r\n i18n: Record<string, string>,\r\n ParentPageID\r\n) => {\r\n const formDataPayload = new FormData();\r\n const { selectedProductNames, ...formData } = data;\r\n const selectedProductsString = data.selectedProductNames?.map((name) =>\r\n interpolateString(i18n.ProductSelectedMessage, name)\r\n );\r\n\r\n const formValues = {\r\n ...formData,\r\n\r\n recaptcha: recaptchaToken,\r\n Comments: (selectedProductsString ? selectedProductsString + ' ' : '') + formData.Comments,\r\n QuoteType: type,\r\n ContactUs: type,\r\n PageUrl: parentPage.Url,\r\n PageId: window.pageId,\r\n ParentPageId: parentPage.Id || ParentPageID,\r\n FormUrl: window.location.href,\r\n Lang: window.lang,\r\n transactionId: generateTransactionId(true),\r\n };\r\n\r\n Object.entries(formValues).forEach(([key, value]) => {\r\n switch (key) {\r\n case 'ImageUpload':\r\n const files = value as File[];\r\n\r\n files.forEach((file) => {\r\n formDataPayload.append('ImageUpload', file);\r\n formDataPayload.append('EmailAttachment', file);\r\n });\r\n break;\r\n case 'SerialNr':\r\n const serialNumbers = (value as string[]) || [];\r\n formDataPayload.append(key, serialNumbers.filter((value) => !!value).join(','));\r\n break;\r\n case 'Application':\r\n if (value === 'select') {\r\n formDataPayload.append(key, '');\r\n } else {\r\n formDataPayload.append(key, value?.toString() || '');\r\n }\r\n break;\r\n default:\r\n formDataPayload.append(key, value?.toString() || '');\r\n }\r\n });\r\n\r\n return { formDataPayload, formValues };\r\n};\r\n","import React, { BaseSyntheticEvent, useMemo, useState } from 'react';\r\nimport { FieldErrors, SubmitHandler, useForm } from 'react-hook-form';\r\nimport { Form } from '@components/Form';\r\nimport { useFormLoader } from '@components/Form/Form.hooks';\r\nimport { EnquiryFormData } from '@modules/EnquiryForm/EnquiryForm.types';\r\nimport {\r\n SubmitFormResponse,\r\n useSubmitEnquiryFormMutation,\r\n} from '@modules/EnquiryForm/EnquiryForm.service';\r\nimport { useOnSubmitError, useParentPageState } from './EnquiryTypeForm.hooks';\r\nimport { createFormData, getFormDefaultValues } from './EnquiryTypeForm.helpers';\r\nimport './EnquiryTypeForm.scss';\r\n\r\ninterface EnquiryTypeFormProps {\r\n formData: EnquiryFormData;\r\n type: string;\r\n dropdownToDisable?: string;\r\n pageId?: string;\r\n parentPageID: string;\r\n i18n: Record<string, string>;\r\n onFormSubmit: (data: SubmitFormResponse, formValues: EnquiryForm, e: BaseSyntheticEvent) => void;\r\n}\r\n\r\nexport type EnquiryForm = Partial<{\r\n Comments: string;\r\n ImageUpload: File[];\r\n recaptcha: string;\r\n Name: string;\r\n Email: string;\r\n Phone: string;\r\n Company: string;\r\n Country: string;\r\n City: string;\r\n Address: string;\r\n PostalCode: string;\r\n SerialNr: string[];\r\n Industry: string;\r\n Application: string;\r\n Product: string;\r\n Region: string;\r\n ServiceType: string;\r\n Toggle: boolean;\r\n GDPR: boolean;\r\n selectedProductNames: string[];\r\n}>;\r\n\r\nexport const EnquiryTypeForm = ({\r\n formData,\r\n i18n,\r\n onFormSubmit,\r\n dropdownToDisable,\r\n type,\r\n pageId,\r\n parentPageID,\r\n}: EnquiryTypeFormProps) => {\r\n const [formSubmitError, setFormSubmitError] = useOnSubmitError();\r\n const [doFormSubmit] = useSubmitEnquiryFormMutation();\r\n const [firstSuccess, setFirstSuccess] = useState(false);\r\n const defaultValues = getFormDefaultValues(formData);\r\n const formFields = Object.keys(defaultValues);\r\n\r\n const throughModel =\r\n formData.FormSections[0].FormField[0].DataType === 'QuoteItem' ? 'through-modal' : '';\r\n\r\n const {\r\n register,\r\n handleSubmit,\r\n setValue,\r\n watch,\r\n trigger,\r\n formState: { errors, isSubmitting, isSubmitted },\r\n } = useForm({\r\n reValidateMode: 'onBlur',\r\n defaultValues,\r\n shouldFocusError: false,\r\n });\r\n const gdpr = watch('GDPR');\r\n const hasToggleField = useMemo(\r\n () =>\r\n formData?.FormSections?.some((section) =>\r\n section.FormField.find((field) => field.DataType === 'Toggle')\r\n ),\r\n [formData]\r\n );\r\n\r\n const { parentPageId, parentPageUrl } = useParentPageState();\r\n //To render the form field elements based on the type - Dynamic elements\r\n const loadFieldElements = useFormLoader(\r\n register,\r\n watch,\r\n setValue,\r\n trigger,\r\n hasToggleField,\r\n isSubmitted === true,\r\n dropdownToDisable\r\n );\r\n\r\n const focusOnFirstError = () => {\r\n const firstFieldWithError = formFields.find((field) => errors[field]);\r\n const firstFieldWithErrorElement: HTMLElement = document.querySelector(\r\n `[name=${firstFieldWithError}]`\r\n );\r\n\r\n firstFieldWithErrorElement?.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n firstFieldWithErrorElement?.focus();\r\n };\r\n\r\n const onSubmit: SubmitHandler<EnquiryForm> = async (data, event) => {\r\n event.stopPropagation();\r\n const recaptchaToken = await window.onLoadContact();\r\n\r\n const { formDataPayload, formValues } = createFormData(\r\n type,\r\n data,\r\n recaptchaToken,\r\n {\r\n Id: parentPageId,\r\n Url: parentPageUrl,\r\n },\r\n i18n,\r\n parentPageID\r\n );\r\n\r\n if (pageId) {\r\n formDataPayload.delete('PageId');\r\n formDataPayload.append('PageId', pageId);\r\n }\r\n\r\n return doFormSubmit(formDataPayload)\r\n .unwrap()\r\n .then((result) => {\r\n if (!(result && result.success)) {\r\n setFormSubmitError(result?.message || true);\r\n } else {\r\n setFirstSuccess(true); //To disable send button after 1st successful api request\r\n onFormSubmit(result, formValues, event);\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n };\r\n\r\n const onFormValidationError = (errors: FieldErrors<EnquiryForm>) => {\r\n focusOnFirstError();\r\n\r\n if (hasToggleField && errors?.SerialNr) {\r\n setValue('Toggle', true, { shouldValidate: false });\r\n }\r\n };\r\n \r\n return (\r\n <div className={`c-contact-enquiry-right ${throughModel}`}>\r\n <Form\r\n formData={formData}\r\n sendBtnLabel={i18n.SendButtonLabel}\r\n isSubmitDisabled={gdpr === false || firstSuccess}\r\n fieldLoader={loadFieldElements}\r\n onSubmit={handleSubmit(onSubmit, onFormValidationError)}\r\n errors={errors}\r\n formError={formSubmitError}\r\n isSubmitting={isSubmitting}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport const useParentPageState = () => {\r\n const [parentPageId, setParentPageID] = useState<string>(null);\r\n const [parentPageUrl, setParentPageUrl] = useState<string>(null);\r\n\r\n useEffect(() => {\r\n // QuoteOriginPageId is set in the parent page of this form. When enquiry type form is rendered in multiple tabs at the same time,\r\n // it is required to maintian state individual to each tab/component. The state is maintianed in react component and also in session\r\n // storage in case the page reloads/refreshes.\r\n const parentId = localStorage.getItem('quoteOriginPageID') || null;\r\n const sessionParentId = sessionStorage.getItem('quoteOriginPageID') || null;\r\n const parentUrl = localStorage.getItem('quoteOriginPageUrl') || null;\r\n const sessionParentUrl = sessionStorage.getItem('quoteOriginPageUrl') || null;\r\n const isReloadEvent =\r\n (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming)\r\n ?.type === 'reload';\r\n\r\n // update parentId from local storage if state does not have parentPageId already\r\n if (parentId && !parentPageId) {\r\n setParentPageID(parentId);\r\n sessionStorage.setItem('quoteOriginPageID', parentId);\r\n localStorage.removeItem('quoteOriginPageID');\r\n } else if (sessionParentId && !parentId) {\r\n if (isReloadEvent) {\r\n // use the session storage data only in case of page reload event.\r\n setParentPageID(sessionParentId);\r\n } else {\r\n // clear the session storage for other types of navigation other than reload\r\n sessionStorage.removeItem('quoteOriginPageID');\r\n }\r\n }\r\n\r\n if (parentUrl && !parentPageUrl) {\r\n setParentPageUrl(parentUrl);\r\n sessionStorage.setItem('quoteOriginPageUrl', parentUrl);\r\n localStorage.removeItem('quoteOriginPageUrl');\r\n } else if (sessionParentUrl && !parentUrl) {\r\n // use the session storage data only in case of page reload event.\r\n if (isReloadEvent) {\r\n setParentPageUrl(sessionParentUrl);\r\n } else {\r\n // clear the session storage for other types of navigation other than reload\r\n sessionStorage.removeItem('quoteOriginPageUrl');\r\n }\r\n } else {\r\n setParentPageUrl(window.location.href);\r\n }\r\n\r\n const handlePopState = () => {\r\n window.location.reload();\r\n };\r\n\r\n window.addEventListener('popstate', handlePopState);\r\n\r\n return () => {\r\n window.removeEventListener('popstate', handlePopState);\r\n };\r\n }, []);\r\n\r\n return { parentPageId, parentPageUrl };\r\n};\r\n\r\nexport const useOnSubmitError = () => {\r\n const [formSubmitError, setFormSubmitError] = useState<string | boolean>(false);\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => {\r\n setFormSubmitError(false);\r\n }, 2000);\r\n\r\n return () => {\r\n clearTimeout(timeout);\r\n };\r\n }, [formSubmitError]);\r\n\r\n return [formSubmitError, setFormSubmitError] as const;\r\n};\r\n","import dataLayer from '@helpers/dataLayer';\r\nimport { BaseSyntheticEvent } from 'react';\r\nimport { EnquiryForm } from './components/EnquiryTypeForm';\r\n\r\nconst getSelectContents = (event: BaseSyntheticEvent) => {\r\n const selectedTexts: Record<string, string> = {};\r\n\r\n Array.from<HTMLSelectElement>(event.target.elements)\r\n .filter((el) => el.tagName === 'SELECT')\r\n .forEach((el) => {\r\n const selectedItem = el.options[el.selectedIndex];\r\n selectedTexts[el.name] = selectedItem.text;\r\n });\r\n\r\n return selectedTexts;\r\n};\r\n\r\nexport const doDataLayerPush = (\r\n formValues: EnquiryForm & { transactionId: string },\r\n pageTitle: string,\r\n event: BaseSyntheticEvent\r\n) => {\r\n const selectedContents = getSelectContents(event);\r\n\r\n dataLayer.push('generate_lead', {\r\n form_enquiry: window.pageId,\r\n form_enquiryname: pageTitle.length ? pageTitle : undefined,\r\n form_company: formValues.Company || '',\r\n form_country: selectedContents.Country,\r\n form_industry: selectedContents.Industry,\r\n form_product: selectedContents.ProductCategory,\r\n form_spareparts: formValues.Toggle,\r\n form_servicetype: formValues.ServiceType?.length ? formValues.ServiceType : undefined,\r\n form_serial_number: formValues.SerialNr?.length ? formValues.SerialNr.toString() : undefined,\r\n form_application: selectedContents.Application,\r\n transaction_id: formValues.transactionId,\r\n });\r\n};\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { EnquiryTypeForm } from '../../modules/EnquiryForm/components/EnquiryTypeForm';\r\nimport { doDataLayerPush } from './EnquiryForm.helpers';\r\nimport { EnquiryFormProps } from './EnquiryForm.types';\r\nimport './EnquiryForm.scss';\r\n\r\nexport function EnquiryForm({\r\n type,\r\n formData,\r\n pageId,\r\n parentPageID,\r\n dropdownToDisable,\r\n isContactUsBlock,\r\n onSubmitSuccess = () => { },\r\n onBackClick = () => { },\r\n}: EnquiryFormProps) {\r\n const successMsgRef = useRef(null);\r\n const [successMsg, setSuccessMsg] = useState('');\r\n\r\n const onFormSubmit = (data, formValues, e) => {\r\n if (data.success) {\r\n setSuccessMsg(data.message);\r\n doDataLayerPush(formValues, formData.Page.Title, e);\r\n onSubmitSuccess();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (successMsg && successMsgRef.current) {\r\n successMsgRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n }, [successMsg]);\r\n\r\n // Clearing the state when page is refreshed\r\n window.addEventListener('beforeunload', function (event) {\r\n if (window.location.reload) {\r\n window.history.replaceState(null, '', window.location.href);\r\n }\r\n });\r\n\r\n if (successMsg) {\r\n return (\r\n <>\r\n {!isContactUsBlock && (\r\n <i\r\n className='icon-arrow-left'\r\n onClick={() => {\r\n setSuccessMsg('');\r\n onBackClick();\r\n }}\r\n />\r\n )}\r\n <div ref={successMsgRef} id='successMsg' className='enquiry-section-left'>\r\n <div\r\n dangerouslySetInnerHTML={{\r\n __html: successMsg,\r\n }}\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <div id='enqFormPage'>\r\n <h2 className='header-sec'>{formData?.Page?.Title || ''}</h2>\r\n <div className='enquiry-section'>\r\n {!isContactUsBlock && (\r\n <div className='enquiry-section-left'>\r\n <p>{formData?.Page?.FormDescription || ''}</p>\r\n </div>\r\n )}\r\n <div className='enquiry-section-right'>\r\n {formData && (\r\n <EnquiryTypeForm\r\n formData={formData.FormData}\r\n type={type}\r\n i18n={formData.Page}\r\n pageId={pageId}\r\n parentPageID={parentPageID}\r\n dropdownToDisable={dropdownToDisable}\r\n onFormSubmit={onFormSubmit}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","export * from './EnquiryForm';\r\nexport * from './EnquiryForm.service';\r\nimport { ContactUsBlock } from './ContactUsBlock';\r\nexport default ContactUsBlock;\r\n","import React, { useEffect } from 'react';\r\nimport { useLazyFetchEnquiryFormQuery } from './EnquiryForm.service';\r\nimport { EnquiryForm } from './EnquiryForm';\r\n\r\nexport const ContactUsBlock = () => {\r\n const contactUsBlock = document.getElementById('ContactUsBlock');\r\n const data = JSON.parse(contactUsBlock?.dataset.data);\r\n const enqType = data.enquiryType;\r\n const pageId = data.pageId;\r\n const categoryId = data.CategoryId;\r\n const dropdownToDisable = data.dropdownToDisable;\r\n const isContactUsBlock = data.isContactUsBlock;\r\n const parentPageID = data.currentPageId;\r\n\r\n const [fetchEnquiryForm, { data: formData }] = useLazyFetchEnquiryFormQuery();\r\n\r\n useEffect(() => {\r\n fetchEnquiryForm({ enquiryType: enqType, pageId, categoryId });\r\n }, []);\r\n\r\n return (\r\n <EnquiryForm\r\n dropdownToDisable={dropdownToDisable}\r\n formData={formData}\r\n type={enqType}\r\n pageId={pageId}\r\n isContactUsBlock={isContactUsBlock}\r\n parentPageID={parentPageID}\r\n />\r\n );\r\n};\r\n","export const Breadcrumb = {\r\n fetchBreadcrumb: '/webapi/Breadcrumb/Get',\r\n};\r\n\r\nexport const Footer = {\r\n fetchFooter: '/api/footer',\r\n};\r\n\r\nexport const CountrySelector = {\r\n fetchCountrySelectList: '/webapi/CountrySelector/Get',\r\n};\r\n\r\nexport const RelatedTabs = {\r\n fetchRelatedTabs: '/webapi/RelatedTabs/Get',\r\n relatedTabs: '/webapi/RelatedTabs/GetTabs', // NOT IN USE\r\n};\r\n\r\nexport const Search = {\r\n doSearch: '/webapi/SearchApi/SearchFor',\r\n doSearchAutocomplete: '/webapi/SearchApi/GetAutocomplete',\r\n};\r\n\r\nexport const NewsAndStories = {\r\n fetchNewsAndStoriesData: '/webapi/NewsListingApi/GetNewsListItems',\r\n fetchNews: '/webapi/NewsListingApi/GetNewsList',\r\n fetchStories: '/webapi/StoriesList/Get',\r\n};\r\n\r\nexport const Webinars = {\r\n fetchWebinarBanner: '/webapi/WebinarLandingPage/Get',\r\n fetchWebinarList: '/webapi/WebinarPage/Get',\r\n};\r\n\r\nexport const Header = {\r\n fetchHeader: '/webapi/Header/Get', //NOT IN USE\r\n fetchSubNavigation: '/webapi/SubNavigation/Get',\r\n fetchMegaMenuNavigation: '/api/mainmenu',\r\n fetchGeolocation: '/api/Geolocation',\r\n fetchTopMenu: '/api/TopNavigation/',\r\n fetchMegaMenuColumn: '/webapi/menuitems/columns',\r\n};\r\n\r\nexport const Stories = {\r\n fetchStories: '/webapi/StoriesList/Get',\r\n};\r\n\r\nexport const News = {\r\n fetchNews: '/webapi/NewsListPage/Get',\r\n};\r\n\r\nexport const Vacancies = {\r\n fetchVacancies: '/webapi/Vacancy/Get', // NOT IN USE\r\n};\r\n\r\nexport const Webshop = {\r\n fetchWebshop: '/webapi/WebShop/Get', // NOT IN USE\r\n};\r\n\r\nexport const ContactUs = {\r\n fetchContactUsForm: '/webapi/ContactUsForm/GetForm',\r\n fetchFindOfficeData: '/webapi/CountriesCategories/Get',\r\n fetchEnquiryForm: '/webapi/contactus/getenquiryform',\r\n fetchEnquirySerialLinkData: '/webapi/contactus/GetModalPopUp',\r\n submitEnquiryForm: '/Quote/ProcessForm',\r\n fetchEnquiryApplicationList: '/webapi/contactus/GetIndustryApplication',\r\n};\r\n\r\nexport const InvestorRelations = {\r\n fetchPressReleaseFilterData: '/api/v1/ir/pressrelease',\r\n fetchInvestorRelationsNews: '/api/v1/ir/news',\r\n fetchInvestorRelationsPage: '/api/v1/ir/page2',\r\n fetchInvestorRelationsMenu: '/api/v1/ir/menu2',\r\n makeSubscription: '//publish.ne.cision.com/Subscription/SubscribeWithCaptcha',\r\n};\r\n\r\nexport const CoolCalc = {\r\n getCoolCalc: '/webapi/CoolCalc/Get', // NOT IN USE\r\n shareCoolCalc: '/webapi/CoolCalc/Save',\r\n};\r\n\r\nexport const Hexpert = {\r\n fetchHexpertPage: '/api/v1/hex/page',\r\n getAntiForgeryToken: '/api/v1/hex/GetAntiForgery',\r\n submitHexpertForm: '/EPiServer.Forms/DataSubmit/Submit',\r\n createHexpertPdf: '/api/v1/hex/CreatePdf',\r\n getIsMatchingProducts: '/api/v1/hex/IsMatchingProduct',\r\n getHexpertResult: '/api/v1/hex/GetResult',\r\n mailResult: '/api/v1/hex/SendMail',\r\n};\r\n\r\nexport const SafetyDatasheet = {\r\n fetchSafetyDatasheet: '/webapi/SafetyDataSheet/GetSafetyDataSheetResult',\r\n};\r\n"],"names":["Profile","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","cx","cy","r","d","IconContainer","icon","className","Facebook","Twitter","x","y","ExternalLink","id","Arrow","rotate","style","transformBox","transformOrigin","transform","Cross","Delete","EmailSvg","PhoneSvg","fillRule","clipRule","Button","text","onClick","href","size","disabled","color","border","children","type","props","tag","createElement","target","Checkbox","forwardRef","label","value","name","onChange","onBlur","checked","required","ref","defaultChecked","Input","placeholder","defaultValue","QuoteItem","itemImage","itemName","itemDescription","buttonType","onSelect","onButtonClick","loading","src","alt","RadioButton","renderButtonComponent","title","formFieldType","quoteitem","textbox","textboxlist","textarea","email","phone","file","checkbox","radio","toggle","regionselection","industryselection","productselection","applicationselection","optiongroup","langJson","code","productShopUrl","generateTransactionId","useCurrentTime","formId","transctionElement","document","getElementById","Id","timestamp","Date","getTime","window","localStorage","getItem","setItem","replace","toString","getComputerName","str","toLowerCase","truncateString","limit","truncated","substring","interpolateString","args","interpolatedString","forEach","arg","index","Form","formData","sendBtnLabel","isSubmitDisabled","fieldLoader","onSubmit","errors","formError","isSubmitting","encType","method","e","FormSections","map","SubHeading","FormField","key","formField","Name","Field","message","dangerouslySetInnerHTML","__html","TextArea","Toggle","onText","offText","htmlFor","getFileExtension","fileName","split","pop","formatExtensions","extensions","ext","join","isFileExists","files","inputFiles","some","f","filter","ipFile","length","getFilesSize","reduce","acc","Math","pow","isValidExtension","every","includes","FileUpload","btnLabel","maxSize","onFilesUpdate","validationErrorMsg","sizeValidationMsg","setFiles","useState","setErrors","fileExistsError","validFileError","isMaxFileSizeError","useEffect","newFiles","Array","from","allFiles","isValid","err","Object","values","multiple","accept","iconClass","loadFileTypeIcon","Fragment","arrIndex","updatedArr","_","removeFile","FormSelect","options","selectText","hasGroups","group","GroupHeading","Options","option","i","Value","Text","TextBoxList","addInputBtnText","inputs","setInputs","display","newInputs","onChangeInput","margin","flexBasis","splice","removeInput","enquiryApi","apiSlice","endpoints","build","fetchSerialLinkData","query","params","url","language","lang","pageId","fetchEnquiryForm","searchParams","URLSearchParams","location","search","hasProductData","history","state","product","enquiryType","countryId","CategoryID","categoryId","productLineId","get","productModelId","productLinePageId","transformResponse","response","productData","productSection","Page","ProductSelectedTitle","DataType","ProductDescription","description","ImageSrc","imageSrc","FormData","fetchEnquiryApplicationList","industryId","ID","submitEnquiryForm","mutation","data","body","overrideExisting","useFetchSerialLinkDataQuery","useLazyFetchEnquiryFormQuery","useFetchEnquiryApplicationListQuery","useSubmitEnquiryFormMutation","SerialLink","linkLabel","isModalOpen","setIsModalOpen","contactUsBlock","dataset","JSON","parse","serialLink","JsonMessage","Title","Image","ImageAltText","Description","PhoneNumber","country","formattedInput","setFormattedInput","onKeyDown","preventDefault","initialInput","formattedValue","slice","inputProps","useFormLoader","register","watch","setFormValue","trigger","hasToggleField","madeFirstSubmit","dropdownToDisable","watchToggle","watchCountry","selectedProductNames","applicationData","watchIndustriesSelector","onFetchApplicationData","applicationDataResponse","skip","ApplicationJsonList","useApplicationFieldState","dataType","productIsRemoved","I","Label","Placeholder","IsMandatory","MandatoryMessage","pattern","RegExp","ValidationRegex","ValidationMessage","countryCodes","radioName","opt","sparePartText","find","item","newQuoteText","validate","LinkLabel","LinkButtonLabel","field","FileExtensions","FileUploadButtonLabel","FileSize","FileSizeValidationMessage","IndustrySelectOptions","RegionSelectOptions","ProductSelectOptions","SelectLabel","EnquiryTypeForm","i18n","onFormSubmit","parentPageID","formSubmitError","setFormSubmitError","timeout","setTimeout","clearTimeout","useOnSubmitError","doFormSubmit","firstSuccess","setFirstSuccess","defaultValues","allFields","flatMap","section","getAllFields","namesArr","isApplicationSelection","selected","curr","Selected","getDefaultSelected","serialNrField","undefined","getFormDefaultValues","formFields","keys","throughModel","handleSubmit","setValue","formState","isSubmitted","reValidateMode","shouldFocusError","gdpr","useMemo","parentPageId","parentPageUrl","setParentPageID","setParentPageUrl","parentId","sessionParentId","sessionStorage","parentUrl","sessionParentUrl","isReloadEvent","performance","getEntriesByType","removeItem","handlePopState","reload","addEventListener","removeEventListener","useParentPageState","loadFieldElements","focusOnFirstError","firstFieldWithError","firstFieldWithErrorElement","querySelector","scrollIntoView","behavior","block","focus","SendButtonLabel","async","event","stopPropagation","recaptchaToken","onLoadContact","formDataPayload","formValues","parentPage","ParentPageID","selectedProductsString","ProductSelectedMessage","recaptcha","Comments","QuoteType","ContactUs","PageUrl","Url","PageId","ParentPageId","FormUrl","Lang","transactionId","entries","append","serialNumbers","createFormData","delete","unwrap","then","result","success","catch","console","log","SerialNr","shouldValidate","doDataLayerPush","pageTitle","selectedContents","selectedTexts","elements","el","tagName","selectedItem","selectedIndex","getSelectContents","dataLayer","form_enquiry","form_enquiryname","form_company","Company","form_country","Country","form_industry","Industry","form_product","ProductCategory","form_spareparts","form_servicetype","ServiceType","form_serial_number","form_application","Application","transaction_id","EnquiryForm","isContactUsBlock","onSubmitSuccess","onBackClick","successMsgRef","useRef","successMsg","setSuccessMsg","current","replaceState","FormDescription","enqType","CategoryId","currentPageId","Breadcrumb","fetchBreadcrumb","Footer","fetchFooter","CountrySelector","fetchCountrySelectList","RelatedTabs","fetchRelatedTabs","relatedTabs","Search","doSearch","doSearchAutocomplete","NewsAndStories","fetchNewsAndStoriesData","fetchNews","fetchStories","Webinars","fetchWebinarBanner","fetchWebinarList","Header","fetchHeader","fetchSubNavigation","fetchMegaMenuNavigation","fetchGeolocation","fetchTopMenu","fetchMegaMenuColumn","Stories","News","fetchContactUsForm","fetchFindOfficeData","fetchEnquirySerialLinkData","InvestorRelations","fetchPressReleaseFilterData","fetchInvestorRelationsNews","fetchInvestorRelationsPage","fetchInvestorRelationsMenu","makeSubscription","CoolCalc","getCoolCalc","shareCoolCalc","Hexpert","fetchHexpertPage","getAntiForgeryToken","submitHexpertForm","createHexpertPdf","getIsMatchingProducts","getHexpertResult","mailResult","SafetyDatasheet","fetchSafetyDatasheet"],"sourceRoot":""}