{"version":3,"sources":["common/components/Applets/BalticMailchimpNewsLetter/BalticMailchimpNewsLetter.tsx","common/components/Applets/BalticMailchimpNewsLetter/index.ts","common/components/Applets/WelcomeScreen/images/bg-solutions@3x.jpg","common/components/Applets/WelcomeScreen/images/bg-global@3x.jpg","common/components/Applets/WelcomeScreen/images/bg-valio-group@3x.jpg","common/components/Applets/WelcomeScreen/images/bg-solutions@2x.jpg","common/components/Applets/WelcomeScreen/images/bg-global@2x.jpg","common/components/Applets/WelcomeScreen/images/bg-valio-group@2x.jpg","styleguide/images/handshake-icon.svg","styleguide/images/info-icon.svg","common/components/Widgets/constants.ts","styleguide/components/Links/HighlightedLink/HighlightedLink.tsx","styleguide/components/Typography/Ingress/Ingress.tsx","common/components/Applets/common/EditorComponents.ts","styleguide/components/Inputs/TextArea/index.ts","styleguide/components/Inputs/TextArea/TextArea.tsx","common/components/ReCaptcha/services.ts","common/components/ReCaptcha/ReCaptcha.tsx","common/components/HighlightedLinkSection/HighlightedLinkSection.tsx","common/hooks/useScript.ts","styleguide/components/Inputs/FileInput/FileInput.tsx","styleguide/components/Inputs/FileInput/index.ts","common/components/Applets/ProductFeatureBrowser/components/IngredientSelectors.tsx","styleguide/components/Typography/Ingress/index.ts","common/components/Applets/Feedback/reducers.ts","common/components/Applets/Feedback/service.ts","common/components/Applets/Feedback/components/PersonalData.tsx","common/components/Applets/Feedback/components/Complaint.tsx","common/components/Applets/Feedback/Feedback.tsx","common/components/Applets/Feedback/components/Question.tsx","common/components/Applets/Feedback/components/Confirmation.tsx","common/components/Applets/Feedback/api.ts","common/components/Applets/Feedback/index.ts","styleguide/components/Icons/MiscIcons/HandshakeIcon/index.ts","styleguide/components/Icons/MiscIcons/HandshakeIcon/HandshakeIcon.tsx","styleguide/components/Icons/MiscIcons/StrokeInfoIcon/index.ts","styleguide/components/Icons/MiscIcons/StrokeInfoIcon/StrokeInfoIcon.tsx","common/components/Applets/WelcomeScreen/WelcomeScreenApplet.tsx","common/components/Applets/WelcomeScreen/index.ts","common/components/Applets/WeeklyMenuApplet/reducers.ts","common/components/Applets/WeeklyMenuApplet/WeeklyMenuApplet.tsx","common/components/Applets/WeeklyMenuApplet/api.ts","common/components/Applets/WeeklyMenuApplet/index.ts","common/components/Applets/LactoseIntoleranceCalculator/LactoseIntoleranceCalculatorHelper.ts","common/components/Applets/LactoseIntoleranceCalculator/LactoseIntoleranceCalculator.tsx","common/components/Applets/LactoseIntoleranceCalculator/index.ts","common/components/Applets/ClearOn/services.ts","common/components/Applets/ClearOn/ClearOn.tsx","common/components/Applets/ClearOn/index.ts","common/components/Applets/ProductFeatureBrowser/components/Classifications.tsx","common/components/Applets/ProductFeatureBrowser/ProductFeatureBrowser.tsx","common/components/Applets/ProductFeatureBrowser/index.ts","common/components/Applets/FCProductComparison/FCProductComparisonHelper.ts","common/components/Applets/FCProductComparison/FCProductComparison.tsx","common/components/Applets/FCProductComparison/index.ts","common/components/Applets/SapForm/SapForm.tsx","common/components/Applets/SapForm/index.ts","common/components/Applets/IFrame/IFrame.tsx","common/components/Applets/IFrame/index.ts","common/components/Applets/VideoRibbonApplet/VideoRibbonApplet.tsx","common/components/Applets/VideoRibbonApplet/index.ts","common/components/Applets/Consulink/Consulink.tsx","common/components/Applets/Consulink/index.ts","common/components/Applets/ChatbotFrontAI/ChatbotFrontAI.tsx","common/components/Applets/ChatbotFrontAI/index.ts","common/components/Applets/CookieManagement/CookieManagement.tsx","common/components/Applets/CookieManagement/index.ts","common/components/Applets/CookieList/index.ts","common/components/Applets/CookieList/CookieList.tsx","common/components/Applets/ProductLocator/ProductLocator.tsx","common/components/Applets/ProductLocator/index.ts"],"names":["MceFormContainer","styled_components_browser_esm","div","withConfig","displayName","componentId","templateObject_3","Object","tslib_es6","constants","_a","theme","grid","gutterInPx","colors","heading","helpers","tablet","templateObject_1","desktop1440","templateObject_2","FormContent","templateObject_5","templateObject_4","MceResponse","templateObject_6","SignupWrapper","templateObject_7","Title","MediumHeader","templateObject_9","templateObject_8","EmailInput","Input","templateObject_11","templateObject_10","SubmitButton","Button","templateObject_13","templateObject_12","Applets_BalticMailchimpNewsLetter_BalticMailchimpNewsLetter","props","intl","useIntl","react_default","a","createElement","id","action","method","name","className","target","tagName","formatMessage","type","placeholder","required","aria-hidden","tabIndex","value","__webpack_exports__","module","exports","__webpack_require__","p","d","WIDGET_SPACING_HUGE","WIDGET_SPACING_LARGE","WIDGET_SPACING_MEDIUM","WIDGET_SPACING_SMALL","TEXT_WIDTH","TEXT_WIDTH_NARROW","StyledHighlightedLink","styled_components__WEBPACK_IMPORTED_MODULE_2__","tslib__WEBPACK_IMPORTED_MODULE_0__","wrapText","fonts","primary","intense","selectedItemBackground","brandPrimaryFeatureBackground","brandPrimary","linkText","white","react__WEBPACK_IMPORTED_MODULE_1__","children","StyledIngress","secondary","bodyText","_helpers__WEBPACK_IMPORTED_MODULE_3__","desktop","FormContainer","form","FieldSet","section","styleguide_helpers__WEBPACK_IMPORTED_MODULE_1__","TitleFieldSet","Column","desktop1200","SectionColumn","border","FieldGroup","SubTitleFieldGroup","ACCEPTED_FILE_FORMATS_JPG","ACCEPTED_FILE_FORMATS_PNG","ACCEPTED_FILE_FORMATS_IMAGES","FormActions","templateObject_15","templateObject_14","_TextArea__WEBPACK_IMPORTED_MODULE_0__","StyledTextArea","textarea","_Field_Field__WEBPACK_IMPORTED_MODULE_3__","inputFontWeight","TextArea","ref","validationError","helpText","icon","iconPosition","iconOffset","iconWidth","inputSize","inputClassName","label","inlineLabel","textAreaId","isValid","length","recaptchaApi","verifyRecaptcha","response","Promise","service","sent","siteKey","resultCallback","expiredCallback","recaptchaElement","react","scriptId","document","getElementById","setTimeout","renderReCaptcha","recaptcha","onload","scriptLoaded","src","head","appendChild","createScript","window","grecaptcha","render","current","sitekey","callback","handleResponse","expired-callback","error-callback","Error","verifyToken","noop_default","token","result","reset","ready","HighlightedLinkSection","styled_components__WEBPACK_IMPORTED_MODULE_1__","styleguide_helpers_media__WEBPACK_IMPORTED_MODULE_2__","useScript","react__WEBPACK_IMPORTED_MODULE_0__","targetElement","script","keys","map","refTarget","setAttribute","toString","body","removeChild","ImagePreviewContainer","hasError","actionErrorText","gutter","actionErrorBackground","isLoading","input","UploadLabel","common","FileInput_FileInput","acceptFiles","showPreviewImage","previewImageUrl","onDropImage","onUploadImage","inputId","Field","onDrop","event","file","preventDefault","currentTarget","classList","remove","dataTransfer","items","getAsFile","files","onDragOver","add","onDragLeave","message","Image","LoadingSpinner","accept","disabled","onChange","size","htmlFor","IngredientSelectorsWrapper","styleguide_helpers_media__WEBPACK_IMPORTED_MODULE_4__","IngredientSelectorWell","IngredientSelectorField","filter","selection","onIngredientSelect","disableZeroCounts","react_intl__WEBPACK_IMPORTED_MODULE_6__","styleguide_components_Inputs_Select_Select__WEBPACK_IMPORTED_MODULE_5__","e","item","i","key","slug","count","undefined","title","IngredientSelectors","aspects","styleguide_components_Typography_SmallHeader_SmallHeader__WEBPACK_IMPORTED_MODULE_3__","react_intl__WEBPACK_IMPORTED_MODULE_7__","allergenics","contains","doesNotContain","ingredients","_Ingress__WEBPACK_IMPORTED_MODULE_0__","feedbackActions","fetchProducts","index_umd","fetchResource","sendFeedback","uploadImage","feedbackReducer","state","request","success","products","payload","failure","error","resourceImageUrl","isImageLoading","data","content","packages","imageUrl","isSubmitting","isSubmitted","errorState","modelState","isImageBeingUploaded","objUrl","URL","createObjectURL","attachmentId","apiData","guid","previewImage","feedbackApi","siteUrlId","uploadFile","PrivacyPolicyLink","components_PersonalData","_d","react_hook_form_ie11","register","errors","Fragment","SmallHeader","firstName","_b","lastName","_c","email","Checkbox","href","FormContainerWithScrollableInputs","EditorComponents","Complaint_templateObject_1","RequiredDescriptionWrapper","ProductImageWrapper","CaptchaContainer","TabType","Complaint","onSubmit","onProductSelect","onUpload","methods","defaultValues","isProductFeedback","handleSubmit","getValues","clearError","setError","_h","isRecaptchaValid","setRecaptchaState","w","reCaptchaSiteKey","apiModelToFieldTranslator","bestbefore","batchnumber","feedbacktext","forename","surname","replynotrequested","selectedproductid","placeofpurchase","_i","_j","apiModelMemberName","replace","fieldName","toLowerCase","errorsvalues","values","scrollIntoView","behavior","useScrollToError","requiredDescription","trim","complaintData","Select","product","idx","url","purchaseLocation","bestBeforeDate","_e","batchId","Divider","direction","horizontal","full","_f","FileInput","acceptedFiles","split","join","_g","includes_default","ReCaptcha","Question_CaptchaContainer","Question_templateObject_1","Question","components_Confirmation","FeedbackFormWrapper","Feedback_templateObject_1","phone660","initialState","Applets_Feedback_Feedback","es","app","routing","sites","settings","services","useReducer","dispatch","activeTab","setActiveTab","tabs","isActive","product_search","searchProducts","api_fetchProducts","hasProducts","Boolean","onTabClick","fieldValues","error_3","details","api_sendFeedback","foreName","surName","phone","replyNotRequested","answerNotRequired","selectedProductId","batchNumber","bestBefore","feedbackText","placeOfPurchase","attachments","apiResponse","api_uploadFile","resourceUrl","Resource_services","api_fetchResource","renderForm","Tabs","useExternalProps","MiscIcons_HandshakeIcon","handshake_icon","width","height","MiscIcons_StrokeInfoIcon","FilteredIconImage","info_icon","BlueButton","WhiteButton","AppletWrapper","zIndices","modal","GridWrapper","HeaderWrapper","LogoWrapper","BackgroundContainer","buttonPrimaryHover","white90","ForCompaniesWrapper","bg_solutions_2x_default","bg_solutions_3x_default","ValioGroupWrapper","bg_valio_group_2x_default","bg_valio_group_3x_default","CenteredContentWrapper","ContentColumn","templateObject_17","templateObject_16","SplitPart","templateObject_18","InlinePart","templateObject_19","ValioGlobalWrapper","templateObject_22","brandSecondary","bg_global_2x_default","templateObject_20","bg_global_3x_default","templateObject_21","IconWrapper","templateObject_23","ContentRow","templateObject_25","templateObject_24","TitleWrapper","h1","templateObject_27","templateObject_26","ForCompaniesTitle","templateObject_28","TextWrapper","templateObject_29","ButtonWrapper","span","templateObject_30","WelcomeScreen_WelcomeScreenApplet","shouldShowApplet","setShouldShowApplet","path","pathname","showApplet","sessionStorage","getItem","getSessionStatus","setItem","setSessionStatus","style","setProperty","removeProperty","onWrapperClick","innerWidth","querySelector","getLinkElement","click","Logo","onClick","color","Icons","useHDVariant","backgroundColor","backgroundHoverColor","buttonHoverBackground","hoverColor","weeklyMenuAppletActions","fetchWeeklyMenu","weeklyMenuAppletReducer","weeklyMenu","WeeklyMenuSection","widgetZoneFullWidthHighlighted","utils_document","Applets_WeeklyMenuApplet_WeeklyMenuApplet","siteUrlPrefix","WeeklyMenu_services","api_fetchWeeklyMenu","General","WeeklyMenu","isStatic","LactoseIntoleranceCalculatorHelper","_super","LactoseIntoleranceCalculator","call","this","defineProperty","prototype","questions","Array","from","slice","val","multiSelect","isHidden","getIndex","points","getMessage","index","getSummary","LactoseIntoleranceCalculator_createHelper","Applets_LactoseIntoleranceCalculator_LactoseIntoleranceCalculator","PointsCalculatorApplet","singleSelectInputType","Radio","helper","NutritionIcon","clearOnApi","orderCoupon","ClearOnWrapper","article","contentSectionHiglighted","Form","styleguide_helpers","Fields","Applets_ClearOn_ClearOn","parameters","couponState","setCouponState","watch","conditionallyRequired","otherValue","titleId","watchEmail","watchMobile","campaignId","mobile","validate","pattern","RegExp","EMAIL","Alert","highlightedText","components_Classifications","Routable","HighlightedLink","FeaturesAndIngredientsWrapper","FeaturesAndIngredientsHeader","Applets_ProductFeatureBrowser_ProductFeatureBrowser","resource","productFront","Ingress","location","FeatureExistsType","AgedUnit","getComparisonData","configMap","config","header","image","features","featureKey","iconType","exists","existsWithCaret","notExists","aged","unit","days","packageMark","months","comparisonData","productImages","GridItemBase","HeaderItem","bodyBackground","ProductImage","img","ProductItem","ProductInfoItem","columnCount","HeaderTitle","ProductTitle","ItemTitle","ItemValue","PackageSymbolWrapper","FeatureIcon","status","NormalIcons","AgedComponent","messageKey","agedTime","parameterArray","headerValue","productIndex","feature","iframe","SapForm_forms","SapForm_a","Applets_SapForm_SapForm","environment","iframeRef","onLoad","contentWindow","documentElement","scrollHeight","ContentIFrame","FullScreenIFrame","IFrame_IFrame","parameterObject","forEach","parameter","keyAndValue","parseParameters","scrolling","AppletBackgroundVideo","BackgroundVideo","Math","floor","Applets_VideoRibbonApplet_VideoRibbonApplet","videoSources","Media","displayType","toggleType","breakpoint","sources","loop","Applets_Consulink_Consulink","baseUrl","Helmet","referrerPolicy","frameBorder","isInitialized","Applets_ChatbotFrontAI_ChatbotFrontAI","setChatBotVisibleState","isVisible","nodes","querySelectorAll","getChatContainers","display","registerBot","formationParameters","botScript","chatFormation","async","hideBot","CenteringWrapper","ProductLocatorWrapper","productLocatorParams","scriptSrc","locatorPlaceHolder","locatorProps","iframeSrc","protocol","hostname","allow"],"mappings":"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","file":"static/js/applet-other.e12521d4.chunk.js","sourcesContent":["import { TEXT_WIDTH, TEXT_WIDTH_NARROW, WIDGET_SPACING_SMALL } from 'common/components/Widgets/constants';\r\nimport React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport styled from 'styled-components';\r\nimport { Button } from 'styleguide/components/Buttons/Button';\r\nimport Input from 'styleguide/components/Inputs/Input';\r\nimport MediumHeader from 'styleguide/components/Typography/MediumHeader';\r\nimport { media } from 'styleguide/helpers';\r\nimport { AppletCommonProps } from '../types';\r\n\r\nconst MceFormContainer = styled.div`\r\n\twidth: 100%;\r\n\tmax-width: ${TEXT_WIDTH_NARROW}px;\r\n\tmargin: ${WIDGET_SPACING_SMALL}px auto;\r\n\tpadding: 0 ${({ theme }) => theme.grid.gutterInPx()};\r\n\tcolor: ${({ theme }) => theme.colors.heading};\r\n\r\n\t${media.tablet`\r\n\t\tpadding: 0;\r\n\t`};\r\n\r\n\t${media.desktop1440`\r\n max-width: ${TEXT_WIDTH}px;\r\n `};\r\n`;\r\n\r\nconst FormContent = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n\r\n\t${media.tablet`\r\n\t\tflex-direction: row;\r\n\t`};\r\n`;\r\n\r\nconst MceResponse = styled.div`\r\n\tdisplay: none;\r\n`;\r\n\r\nconst SignupWrapper = styled.div`\r\n\tposition: absolute;\r\n\tleft: -5000px;\r\n`;\r\n\r\nconst Title = styled(MediumHeader)`\r\n\ttext-align: center;\r\n\r\n\t${media.tablet`\r\n\t\ttext-align: inherit;\r\n\t`};\r\n`;\r\n\r\nconst EmailInput = styled(Input)`\r\n\talign-self: center;\r\n\tmargin: ${({ theme }) => theme.grid.gutterInPx(1)} 0;\r\n\r\n\t${media.tablet`\r\n\t\tmargin: 0;\r\n\t`};\r\n`;\r\n\r\nconst SubmitButton = styled(Button)`\r\n\talign-self: center;\r\n\tmargin: ${({ theme }) => theme.grid.gutterInPx(1)} 0;\r\n\r\n\t${media.tablet`\r\n\t\tmargin: 0;\r\n\t`};\r\n`;\r\n\r\nconst BalticMailchimpNewsLetter: React.FC<AppletCommonProps> = (props: AppletCommonProps) => {\r\n\tconst intl = useIntl();\r\n\r\n\treturn (\r\n\t\t<MceFormContainer id=\"mc_embed_signup\">\r\n\t\t\t<form\r\n\t\t\t\taction=\"https://valio.us18.list-manage.com/subscribe/post?u=bf12ba6d0926b2fcdedb11d9a&id=31bd7f5b01\"\r\n\t\t\t\tmethod=\"post\"\r\n\t\t\t\tid=\"mc-embedded-subscribe-form\"\r\n\t\t\t\tname=\"mc-embedded-subscribe-form\"\r\n\t\t\t\tclassName=\"validate\"\r\n\t\t\t\ttarget=\"_blank\">\r\n\t\t\t\t<FormContent id=\"mc_embed_signup_scroll\">\r\n\t\t\t\t\t<Title tagName=\"h2\">{intl.formatMessage({ id: 'applet_mailchimp_newsletter_form_title' })}</Title>\r\n\r\n\t\t\t\t\t<EmailInput\r\n\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\tname=\"EMAIL\"\r\n\t\t\t\t\t\tid=\"mce-EMAIL\"\r\n\t\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_mailchimp_newsletter_form_field_email_placeholder' })}\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div id=\"mce-responses\" className=\"clear\">\r\n\t\t\t\t\t\t<MceResponse className=\"response\" id=\"mce-error-response\" />\r\n\t\t\t\t\t\t<MceResponse className=\"response\" id=\"mce-success-response\" />\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t{/* real people should not fill this in and expect good things - do not remove this or risk form bot signups */}\r\n\t\t\t\t\t<SignupWrapper aria-hidden=\"true\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"b_bf12ba6d0926b2fcdedb11d9a_31bd7f5b01\" tabIndex={-1} value=\"\" />\r\n\t\t\t\t\t</SignupWrapper>\r\n\t\t\t\t\t<SubmitButton id=\"mc-embedded-subscribe\" type=\"submit\" name=\"subscribe\" value=\"Subscribe\">\r\n\t\t\t\t\t\t{intl.formatMessage({ id: 'applet_mailchimp_newsletter_form_subscribe_button' })}\r\n\t\t\t\t\t</SubmitButton>\r\n\t\t\t\t</FormContent>\r\n\t\t\t</form>\r\n\t\t</MceFormContainer>\r\n\t);\r\n};\r\n\r\nexport default BalticMailchimpNewsLetter;\r\n","import BalticMailchimpNewsLetter from './BalticMailchimpNewsLetter';\r\nexport default BalticMailchimpNewsLetter;\r\n","module.exports = __webpack_public_path__ + \"static/media/bg-solutions@3x.1bedd429.jpg\";","module.exports = __webpack_public_path__ + \"static/media/bg-global@3x.31e9d918.jpg\";","module.exports = __webpack_public_path__ + \"static/media/bg-valio-group@3x.958b5b3a.jpg\";","module.exports = __webpack_public_path__ + \"static/media/bg-solutions@2x.9cab4689.jpg\";","module.exports = __webpack_public_path__ + \"static/media/bg-global@2x.f95b9967.jpg\";","module.exports = __webpack_public_path__ + \"static/media/bg-valio-group@2x.2c320832.jpg\";","module.exports = __webpack_public_path__ + \"static/media/handshake-icon.e77b4f97.svg\";","module.exports = __webpack_public_path__ + \"static/media/info-icon.bf53c102.svg\";","export const WIDGET_SPACING_HUGE = 80;\r\nexport const WIDGET_SPACING_LARGE = 60;\r\nexport const WIDGET_SPACING_MEDIUM = 50;\r\nexport const WIDGET_SPACING_SMALL = 30;\r\n\r\nexport const TEXT_WIDTH = 720;\r\nexport const TEXT_WIDTH_NARROW = 600;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst StyledHighlightedLink = styled('a')<HighlightedLinkProps>`\r\n\tborder-radius: 17px;\r\n\tfont-weight: 800;\r\n\tfont-size: 13px;\r\n\tline-height: 14px;\r\n\ttext-align: center;\r\n\tpadding: 5px 12px;\r\n\ttext-decoration: none;\r\n\twhite-space: ${props => (props.wrapText ? 'normal' : 'nowrap')};\r\n\tdisplay: inline-block;\r\n\tfont-family: ${props => props.theme.fonts.primary};\r\n\tcursor: pointer;\r\n\tbackground-color: ${props =>\r\n\t\tprops.intense ? props.theme.colors.selectedItemBackground : props.theme.colors.brandPrimaryFeatureBackground};\r\n\tcolor: ${props => (props.intense ? props.theme.colors.brandPrimary : props.theme.colors.linkText)};\r\n\tborder: 1px solid\r\n\t\t${props =>\r\n\t\t\tprops.intense ? props.theme.colors.selectedItemBackground : props.theme.colors.brandPrimaryFeatureBackground};\r\n\r\n\t&:hover {\r\n\t\tborder-color: ${props => props.theme.colors.linkText};\r\n\t\tbackground-color: ${props => props.theme.colors.white};\r\n\t\ttext-decoration: none;\r\n\t}\r\n`;\r\n\r\nexport interface HighlightedLinkProps {\r\n\tintense?: boolean;\r\n\twrapText?: boolean;\r\n}\r\n\r\nconst HighlightedLink: React.FC<HighlightedLinkProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> = props => {\r\n\treturn <StyledHighlightedLink {...props}>{props.children}</StyledHighlightedLink>;\r\n};\r\n\r\nexport default HighlightedLink;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { media } from '../../../helpers';\r\n\r\nconst StyledIngress = styled.p`\r\n\tfont-family: ${props => props.theme.fonts.secondary};\r\n\tfont-size: 18px;\r\n\tcolor: ${props => props.theme.colors.bodyText};\r\n\tline-height: 1.17;\r\n\tmargin: 15px auto;\r\n\ttext-align: center;\r\n\tpadding: 0 20px;\r\n\twidth: 100%;\r\n\twhite-space: pre-wrap;\r\n\r\n\t${media.tablet`\r\n\t padding: 0 50px;\r\n\t`};\r\n\r\n\t${media.desktop`\r\n\t\tmargin: 17px auto;\r\n\t padding: 0;\r\n\t\tfont-size: 21px;\r\n\t\tline-height: 1.14;\r\n\t\tmax-width: 750px;\r\n\t`};\r\n`;\r\n\r\nconst Ingress: React.FC<{ className?: string }> = ({ children, className }) => (\r\n\t<StyledIngress className={className}>{children}</StyledIngress>\r\n);\r\n\r\nexport default Ingress;\r\n","import { media } from 'styleguide/helpers';\r\nimport styled from 'styled-components';\r\n\r\nexport const FormContainer = styled.form`\r\n\t.form-field {\r\n\t\tmargin: 16px auto 24px;\r\n\t}\r\n`;\r\n\r\nexport const FieldSet = styled.section`\r\n\t.form-field + .form-field {\r\n\t\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\r\n\t\t${media.tablet`\r\n margin-top: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n `};\r\n\t}\r\n\r\n\tlabel {\r\n\t\tmargin-bottom: ${({ theme }) => theme.grid.gutterInPx(0.5)};\r\n\t}\r\n`;\r\n\r\nexport const TitleFieldSet = styled(FieldSet)`\r\n\t${media.tablet`\r\n display: flex; \r\n `};\r\n`;\r\n\r\nexport const Column = styled.div`\r\n\t& + & {\r\n\t\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\t}\r\n\r\n\t${media.tablet`\r\n flex: 1 0 calc(50% - ${({ theme }) => theme.grid.gutterInPx(2)});\r\n width: calc(50% - ${({ theme }) => theme.grid.gutterInPx(2)});\r\n\r\n & + & {\r\n margin-top: 0;\r\n margin-left: ${({ theme }) => theme.grid.gutterInPx(2)};\r\n }\r\n `};\r\n\r\n\t${media.desktop1200`\r\n & + & {\r\n margin-left: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n }\r\n `};\r\n`;\r\n\r\nexport const SectionColumn = styled(Column)`\r\n\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\tpadding-top: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\tborder-top: 1px solid ${({ theme }) => theme.colors.border};\r\n\r\n\t& + & {\r\n\t\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\r\n\t\t${media.tablet`\r\n margin-top: 0;\r\n `};\r\n\t}\r\n\r\n\t${media.tablet`\r\n padding-top: 0;\r\n margin-top: 0;\r\n border-top: none;\r\n `};\r\n`;\r\n\r\nexport const FieldGroup = styled.section`\r\n\tborder-radius: 4px;\r\n\tbackground: ${({ theme }) => theme.colors.border};\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tjustify-content: flex-end;\r\n\tpadding: ${({ theme }) => theme.grid.gutterInPx()};\r\n`;\r\n\r\nexport const SubTitleFieldGroup = styled(FieldGroup)`\r\n\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\r\n\t.form-field {\r\n\t\tflex: 1 0 auto;\r\n\t}\r\n\r\n\tbutton {\r\n\t\tmargin-left: ${({ theme }) => theme.grid.gutterInPx()};\r\n\t}\r\n`;\r\n\r\nexport const ACCEPTED_FILE_FORMATS_JPG = '.jpg,.jpeg';\r\nexport const ACCEPTED_FILE_FORMATS_PNG = '.png';\r\nexport const ACCEPTED_FILE_FORMATS_IMAGES = '.jpg,.jpeg,.png';\r\n\r\nexport const FormActions = styled.section`\r\n\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\tpadding-top: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\tborder-top: 1px solid ${({ theme }) => theme.colors.border};\r\n\ttext-align: center;\r\n\r\n\tbutton {\r\n\t\twidth: 100%;\r\n\r\n\t\t${media.tablet`\r\n width: auto;\r\n min-width: 288px;\r\n margin: 0 auto;\r\n `};\r\n\t}\r\n\r\n\t.save-alert {\r\n\t\tmargin-bottom: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\t}\r\n`;\r\n","import TextArea from './TextArea';\r\nexport default TextArea;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport Field, {\r\n\tcommonInputStyles,\r\n\tgetBorder,\r\n\tgetFontWeight,\r\n\tgetCssPadding,\r\n\tgetInvalidStyles,\r\n\tStyledFieldProps,\r\n\tFieldProps,\r\n} from '../Field/Field';\r\n\r\nconst StyledTextArea = styled.textarea<StyledFieldProps>`\r\n\t${commonInputStyles};\r\n\r\n\tappearance: none;\r\n\tresize: vertical;\r\n\tborder: 1px solid ${props => getBorder(props)};\r\n\tfont-weight: ${({ inputFontWeight }) => getFontWeight(inputFontWeight)};\r\n\r\n\t${props => getCssPadding(props)};\r\n\t${props => getInvalidStyles(props)};\r\n`;\r\n\r\nexport interface TextAreaProps extends FieldProps {\r\n\tinputClassName?: string;\r\n}\r\n\r\ntype Props = TextAreaProps & React.TextareaHTMLAttributes<HTMLTextAreaElement>;\r\n\r\nconst TextArea = React.forwardRef<HTMLTextAreaElement, Props>(\r\n\t(\r\n\t\t{\r\n\t\t\tvalidationError,\r\n\t\t\thelpText,\r\n\t\t\tid,\r\n\t\t\tname,\r\n\t\t\ticon,\r\n\t\t\ticonPosition,\r\n\t\t\ticonOffset,\r\n\t\t\ticonWidth,\r\n\t\t\tinputSize,\r\n\t\t\tinputClassName,\r\n\t\t\tclassName,\r\n\t\t\tlabel,\r\n\t\t\tinlineLabel,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref: React.RefObject<HTMLTextAreaElement>\r\n\t) => {\r\n\t\tconst textAreaId = id || name;\r\n\r\n\t\treturn (\r\n\t\t\t<Field\r\n\t\t\t\tvalidationError={validationError}\r\n\t\t\t\thelpText={helpText}\r\n\t\t\t\tid={textAreaId}\r\n\t\t\t\tname={name}\r\n\t\t\t\ticon={icon}\r\n\t\t\t\ticonPosition={iconPosition}\r\n\t\t\t\ticonOffset={iconOffset}\r\n\t\t\t\ticonWidth={iconWidth}\r\n\t\t\t\tinputSize={inputSize}\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tlabel={label}\r\n\t\t\t\tinlineLabel={inlineLabel}>\r\n\t\t\t\t<StyledTextArea\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tid={textAreaId}\r\n\t\t\t\t\tinputSize={inputSize}\r\n\t\t\t\t\ticonWidth={iconWidth}\r\n\t\t\t\t\ticonPosition={iconPosition}\r\n\t\t\t\t\ticonOffset={iconOffset}\r\n\t\t\t\t\tclassName={inputClassName}\r\n\t\t\t\t\tisValid={validationError ? validationError.length === 0 : true}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t/>\r\n\t\t\t</Field>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default TextArea;\r\n","import { postJson } from 'utils/service';\r\n\r\nasync function verifyRecaptcha(response: string): Promise<any> {\r\n\treturn await postJson(`/api/recaptcha/verify`, response, true);\r\n}\r\n\r\nexport const recaptchaApi = {\r\n\tverifyRecaptcha,\r\n};\r\n\r\nexport type ReCaptchaApi = typeof recaptchaApi;\r\n","import noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nimport { useEffect, useRef } from 'react';\r\nimport { recaptchaApi } from './services';\r\n\r\ninterface ReCaptchaProps {\r\n\tsiteKey: string;\r\n\tresultCallback: (result: boolean) => void;\r\n\texpiredCallback?: (result: boolean) => void;\r\n}\r\n\r\nconst ReCaptcha: React.FC<ReCaptchaProps> = ({ siteKey, resultCallback, expiredCallback }) => {\r\n\tconst recaptchaElement = useRef(null);\r\n\tconst scriptId = 'recaptcha-script';\r\n\r\n\tuseEffect(() => {\r\n\t\tcreateScript();\r\n\t}, []);\r\n\r\n\treturn <div ref={recaptchaElement} />;\r\n\r\n\tfunction renderReCaptcha() {\r\n\t\t(window as any).grecaptcha.render(recaptchaElement.current, {\r\n\t\t\tsitekey: siteKey,\r\n\t\t\tcallback: handleResponse,\r\n\t\t\t'expired-callback': () => {\r\n\t\t\t\thandleResponse(false);\r\n\t\t\t},\r\n\t\t\t'error-callback': () => {\r\n\t\t\t\thandleResponse(new Error('Recaptcha connection error!'));\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tasync function handleResponse(response: string | boolean | Error) {\r\n\t\tif (typeof response === 'string') {\r\n\t\t\tawait verifyToken(response);\r\n\t\t} else if (typeof response === 'boolean' && !response) {\r\n\t\t\t(expiredCallback || noop)(response);\r\n\t\t} else if (response instanceof Error) {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\t}\r\n\r\n\tasync function verifyToken(token: string) {\r\n\t\tconst result = await recaptchaApi.verifyRecaptcha(token);\r\n\t\tif (!result) {\r\n\t\t\t(window as any).grecaptcha.reset();\r\n\t\t}\r\n\t\tresultCallback(result);\r\n\t}\r\n\r\n\tfunction createScript() {\r\n\t\tconst scriptElement = document.getElementById(scriptId);\r\n\r\n\t\tif (scriptElement) {\r\n\t\t\tsetTimeout(renderReCaptcha, 1000);\r\n\t\t\t// We don't want to create multiple instances of the same script\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst recaptcha = document.createElement('script');\r\n\t\trecaptcha.id = scriptId;\r\n\t\trecaptcha.onload = scriptLoaded;\r\n\t\trecaptcha.src = 'https://www.google.com/recaptcha/api.js?render=explicit';\r\n\t\tdocument.head.appendChild(recaptcha);\r\n\t}\r\n\r\n\tfunction scriptLoaded() {\r\n\t\t(window as any).grecaptcha.ready(renderReCaptcha);\r\n\t}\r\n};\r\n\r\nexport default ReCaptcha;\r\n","import styled from 'styled-components';\r\nimport { media } from 'styleguide/helpers/media';\r\n\r\nconst HighlightedLinkSection = styled.section`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\twidth: 80%;\r\n\tmargin: 0 auto 0;\r\n\tbox-sizing: border-box;\r\n\r\n\t> * {\r\n\t\tmargin-left: 4px;\r\n\t\tmargin-right: 4px;\r\n\t\tmargin-bottom: 10px;\r\n\t}\r\n\r\n\t${media.tablet`\r\n\t\twidth: 100%;\r\n `};\r\n\r\n\t${media.desktop`\r\n\t\twidth: 100%;\r\n\t\tpadding: 0 120px;\r\n `};\r\n`;\r\n\r\nexport default HighlightedLinkSection;\r\n","import { useEffect } from 'react';\r\n\r\nexport const useScript = (props: React.HTMLProps<HTMLElement>) =>\r\n\tuseEffect(() => {\r\n\t\tconst script = document.createElement('script');\r\n\r\n\t\tlet targetElement: any;\r\n\r\n\t\tObject.keys(props).map(p => {\r\n\t\t\tif (p === 'ref') {\r\n\t\t\t\tconst refTarget = props[p] as React.RefObject<any>;\r\n\t\t\t\tif (refTarget) {\r\n\t\t\t\t\ttargetElement = document.getElementById(refTarget.current?.id);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tscript.setAttribute(p, props[p].toString());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (targetElement) {\r\n\t\t\ttargetElement.appendChild(script);\r\n\t\t} else {\r\n\t\t\tdocument.body.appendChild(script);\r\n\t\t}\r\n\t\treturn () => {\r\n\t\t\tif (targetElement) {\r\n\t\t\t\ttargetElement.removeChild(script);\r\n\t\t\t} else {\r\n\t\t\t\tdocument.body.removeChild(script);\r\n\t\t\t}\r\n\t\t};\r\n\t}, []);\r\n","import * as React from 'react';\r\nimport Field, { FieldProps } from '../Field/Field';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport Image from 'styleguide/components/PicturesAndVideos/Image';\r\nimport LoadingSpinner from 'common/components/Loading/LoadingSpinner';\r\nimport { ButtonProps } from 'styleguide/interfaces';\r\nimport { baseButtonCss, baseFilledButtonCss } from 'styleguide/components/Buttons/common';\r\nimport styled from 'styled-components';\r\n\r\nconst ImagePreviewContainer = styled.div<{ isLoading?: boolean; hasError?: boolean }>`\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\talign-items: center;\r\n\tmargin-bottom: ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\tpadding: 16px;\r\n\tborder: 2px dashed ${({ hasError, theme }) => (hasError ? theme.colors.actionErrorText : theme.colors.border)};\r\n\tborder-radius: 4px;\r\n\tmin-height: ${({ theme }) => theme.grid.gutter * 2 + 231}px;\r\n\tposition: relative;\r\n\tbackground-color: ${({ hasError, theme }) => (hasError ? theme.colors.actionErrorBackground : theme.colors.white)};\r\n\r\n\t.image-loading {\r\n\t\tposition: absolute;\r\n\t\ttop: 50%;\r\n\t\tleft: 50%;\r\n\t\tmargin: 0;\r\n\t\ttransform: translate(-50%, -50%);\r\n\t}\r\n\r\n\timg {\r\n\t\topacity: ${({ isLoading }) => (isLoading ? '0.25' : '1')};\r\n\t}\r\n\r\n\t&.drag-highlight {\r\n\t\tbackground: ${({ theme }) => theme.colors.border};\r\n\t\tborder-style: solid;\r\n\t\tborder-color: ${({ theme }) => theme.colors.border};\r\n\r\n\t\timg {\r\n\t\t\topacity: 0.25;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nconst Input = styled.input`\r\n\tborder: 0;\r\n\tclip: rect(0, 0, 0, 0);\r\n\theight: 1px;\r\n\toverflow: hidden;\r\n\tpadding: 0;\r\n\tposition: absolute !important;\r\n\twhite-space: nowrap;\r\n\twidth: 1px;\r\n`;\r\n\r\nconst UploadLabel = styled.label<ButtonProps>`\r\n\t${baseButtonCss};\r\n\t${baseFilledButtonCss};\r\n\tdisplay: inline-flex;\r\n\tmargin: 0 auto;\r\n\ttransition: background-color 0.3s;\r\n`;\r\n\r\nexport interface FileInputProps extends FieldProps {\r\n\tshowPreviewImage?: boolean;\r\n\tpreviewImageUrl?: string | null;\r\n\tisLoading?: boolean;\r\n\tacceptFiles: string;\r\n\tonDropImage: (file: File | null) => void;\r\n\tonUploadImage: () => void;\r\n}\r\n\r\ntype Props = FileInputProps & React.InputHTMLAttributes<HTMLInputElement>;\r\n\r\nconst FileInput = React.forwardRef<HTMLInputElement, Props>(\r\n\t(\r\n\t\t{\r\n\t\t\tid,\r\n\t\t\tname,\r\n\t\t\tclassName,\r\n\t\t\tvalidationError,\r\n\t\t\thelpText,\r\n\t\t\tlabel,\r\n\t\t\tacceptFiles,\r\n\t\t\tshowPreviewImage,\r\n\t\t\tpreviewImageUrl,\r\n\t\t\tisLoading,\r\n\t\t\tonDropImage,\r\n\t\t\tonUploadImage,\r\n\t\t},\r\n\t\tref: React.RefObject<HTMLInputElement>\r\n\t) => {\r\n\t\tconst intl = useIntl();\r\n\r\n\t\tconst inputId = id || name;\r\n\r\n\t\tconst onDrop = (event: React.DragEvent<HTMLDivElement>) => {\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\tevent.currentTarget.classList.remove('drag-highlight');\r\n\r\n\t\t\tlet file: File | null;\r\n\r\n\t\t\tif (event.dataTransfer.items && event.dataTransfer.items.length > 0) {\r\n\t\t\t\tfile = event.dataTransfer.items[0].getAsFile();\r\n\t\t\t} else {\r\n\t\t\t\tfile = event.dataTransfer.files[0];\r\n\t\t\t}\r\n\r\n\t\t\tonDropImage(file);\r\n\t\t};\r\n\r\n\t\tconst onDragOver = (event: React.DragEvent<HTMLDivElement>) => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.currentTarget.classList.add('drag-highlight');\r\n\t\t};\r\n\r\n\t\tconst onDragLeave = (event: React.DragEvent<HTMLDivElement>) => {\r\n\t\t\tevent.currentTarget.classList.remove('drag-highlight');\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<Field\r\n\t\t\t\tvalidationError={validationError}\r\n\t\t\t\thelpText={helpText}\r\n\t\t\t\tid={inputId}\r\n\t\t\t\tname={name}\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tlabel={label}>\r\n\t\t\t\t<ImagePreviewContainer\r\n\t\t\t\t\tclassName=\"image-preview-container\"\r\n\t\t\t\t\tisLoading={isLoading}\r\n\t\t\t\t\thasError={!!validationError}\r\n\t\t\t\t\tonDrop={onDrop}\r\n\t\t\t\t\tonDragOver={onDragOver}\r\n\t\t\t\t\tonDragLeave={onDragLeave}>\r\n\t\t\t\t\t{!isLoading && !previewImageUrl && <FormattedMessage id=\"forms_input_file_drop_image\" />}\r\n\t\t\t\t\t{showPreviewImage && previewImageUrl && <Image src={previewImageUrl} />}\r\n\t\t\t\t\t{isLoading && <LoadingSpinner className=\"image-loading\" />}\r\n\t\t\t\t</ImagePreviewContainer>\r\n\t\t\t\t<Input\r\n\t\t\t\t\ttype=\"file\"\r\n\t\t\t\t\tid={inputId}\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\taccept={acceptFiles}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tdisabled={isLoading}\r\n\t\t\t\t\tonChange={onUploadImage}\r\n\t\t\t\t/>\r\n\t\t\t\t<UploadLabel size=\"medium\" htmlFor={inputId} disabled={isLoading}>\r\n\t\t\t\t\t{showPreviewImage && previewImageUrl\r\n\t\t\t\t\t\t? intl.formatMessage({ id: 'forms_input_file_browse_alternative' })\r\n\t\t\t\t\t\t: intl.formatMessage({ id: 'forms_input_file_browse' })}\r\n\t\t\t\t</UploadLabel>\r\n\t\t\t</Field>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default FileInput;\r\n","import FileInput from './FileInput';\r\nexport default FileInput;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport SmallHeader from 'styleguide/components/Typography/SmallHeader/SmallHeader';\r\nimport { media } from 'styleguide/helpers/media';\r\nimport Select from 'styleguide/components/Inputs/Select/Select';\r\nimport { ProductFeatures, ProductFeature } from '../interfaces';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\n\r\nconst IngredientSelectorsWrapper = styled.div`\r\n\tmargin: ${({ theme }) => theme.grid.gutterInPx(3)} auto;\r\n\r\n\t${media.tablet`\r\n\t\tmargin: ${({ theme }) => theme.grid.gutterInPx(4)} auto;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\talign-content: space-between;\r\n `};\r\n`;\r\n\r\nconst IngredientSelectorWell = styled.div`\r\n\tpadding: ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\tborder: 1px solid ${({ theme }) => theme.colors.border};\r\n\tborder-radius: 4px;\r\n\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\r\n\t${media.tablet`\r\n\t\tmargin-top: 0;\r\n\t\tflex: 1 1 auto;\r\n\t\tflex: 1 1 calc(50% - ${({ theme }) => theme.grid.gutterInPx(1.5)});\r\n\t\twidth: calc(50% - ${({ theme }) => theme.grid.gutterInPx(1.5)});\r\n\t\tpadding: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\r\n\t\t& + & {\r\n\t\t\tmargin-left: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\t\t}\r\n\t`};\r\n\r\n\t${media.desktop`\r\n\t\tflex: 1 1 auto;\r\n\t\tflex: 1 1 calc(50% - ${({ theme }) => theme.grid.gutterInPx(2)});\r\n\t\twidth: calc(50% - ${({ theme }) => theme.grid.gutterInPx(2)});\r\n\t\tpadding: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\r\n\t\t& + & {\r\n\t\t\tmargin-left: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n\t\t}\r\n\t`};\r\n\r\n\t.form-field {\r\n\t\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\t}\r\n`;\r\n\r\nconst IngredientSelectorField: React.FC<{\r\n\tlabel: string;\r\n\tfilter: string;\r\n\tselection: ProductFeature[];\r\n\tdisableZeroCounts?: boolean;\r\n\tonIngredientSelect: (value: string, filterType: string) => void;\r\n}> = ({ label, filter, selection, onIngredientSelect, disableZeroCounts }) => {\r\n\tconst intl = useIntl();\r\n\r\n\tconst onSelect = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n\t\tconst { value } = e.target;\r\n\t\tonIngredientSelect(value, filter);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Select name={filter} label={label} onChange={onSelect} inlineLabel>\r\n\t\t\t<option value=\"\">{intl.formatMessage({ id: 'global_choose' })}</option>\r\n\t\t\t{selection.map((item, i) => (\r\n\t\t\t\t<option key={i} value={item.slug} disabled={!!disableZeroCounts && item.count === 0}>\r\n\t\t\t\t\t{item.count !== undefined ? `${item.title} (${item.count})` : item.title}\r\n\t\t\t\t</option>\r\n\t\t\t))}\r\n\t\t</Select>\r\n\t);\r\n};\r\n\r\ninterface IngredientSelectorsProps {\r\n\taspects: ProductFeatures;\r\n\tonIngredientSelect: (value: string, filterType: string) => void;\r\n}\r\n\r\nconst IngredientSelectors: React.FC<IngredientSelectorsProps> = ({ aspects, onIngredientSelect }) => {\r\n\tconst intl = useIntl();\r\n\treturn (\r\n\t\t<IngredientSelectorsWrapper>\r\n\t\t\t<IngredientSelectorWell>\r\n\t\t\t\t<SmallHeader>\r\n\t\t\t\t\t<FormattedMessage id=\"product_ingredients_allergy_or_intolerance_ingredients\" />\r\n\t\t\t\t</SmallHeader>\r\n\t\t\t\t<IngredientSelectorField\r\n\t\t\t\t\tlabel={intl.formatMessage({ id: 'product_contains' })}\r\n\t\t\t\t\tfilter=\"yliherkkyys-sisaltaa\"\r\n\t\t\t\t\tselection={aspects.allergenics.contains}\r\n\t\t\t\t\tonIngredientSelect={onIngredientSelect}\r\n\t\t\t\t/>\r\n\t\t\t\t<IngredientSelectorField\r\n\t\t\t\t\tlabel={intl.formatMessage({ id: 'product_does_not_contain' })}\r\n\t\t\t\t\tfilter=\"yliherkkyys-eisisalla\"\r\n\t\t\t\t\tselection={aspects.allergenics.doesNotContain}\r\n\t\t\t\t\tonIngredientSelect={onIngredientSelect}\r\n\t\t\t\t/>\r\n\t\t\t</IngredientSelectorWell>\r\n\t\t\t<IngredientSelectorWell>\r\n\t\t\t\t<SmallHeader>\r\n\t\t\t\t\t<FormattedMessage id=\"product_other_ingredients\" />\r\n\t\t\t\t</SmallHeader>\r\n\t\t\t\t<IngredientSelectorField\r\n\t\t\t\t\tlabel={intl.formatMessage({ id: 'product_contains' })}\r\n\t\t\t\t\tfilter=\"muut-sisaltaa\"\r\n\t\t\t\t\tselection={aspects.ingredients.contains}\r\n\t\t\t\t\tonIngredientSelect={onIngredientSelect}\r\n\t\t\t\t/>\r\n\t\t\t\t<IngredientSelectorField\r\n\t\t\t\t\tlabel={intl.formatMessage({ id: 'product_does_not_contain' })}\r\n\t\t\t\t\tfilter=\"muut-eisisalla\"\r\n\t\t\t\t\tselection={aspects.ingredients.doesNotContain}\r\n\t\t\t\t\tonIngredientSelect={onIngredientSelect}\r\n\t\t\t\t/>\r\n\t\t\t</IngredientSelectorWell>\r\n\t\t</IngredientSelectorsWrapper>\r\n\t);\r\n};\r\n\r\nexport { IngredientSelectors as default, IngredientSelectorField };\r\n","import Ingress from './Ingress';\r\nexport default Ingress;\r\n","import { createAsyncAction, ActionType, getType } from 'typesafe-actions';\r\nimport { ProductSearchResult } from 'common/components/GlobalSearch/services/product-search';\r\nimport { ResourceApiShape } from 'common/components/Resource/interfaces';\r\nimport { ProductApiContent } from 'pagetypes/Product/interfaces';\r\nimport { AsyncLoadableState } from 'common/interfaces/common';\r\nimport { FeedbackImageApiModel } from './interfaces';\r\n\r\nexport interface FeedbackState extends AsyncLoadableState {\r\n\tproducts: ProductSearchResult | undefined;\r\n\tresourceImageUrl?: string;\r\n\tisImageLoading: boolean;\r\n\tattachmentId?: string;\r\n\tisImageBeingUploaded: boolean;\r\n\tpreviewImage?: string;\r\n\tisSubmitting?: boolean;\r\n\tisSubmitted?: boolean;\r\n\terrorState?: any;\r\n}\r\n\r\nexport interface FeedbackApiModel {\r\n\tproducts: ProductSearchResult;\r\n}\r\n\r\nexport interface FeedbackErrorApiModel {\r\n\terror: string;\r\n\tmodelState: any;\r\n}\r\n\r\nexport const feedbackActions = {\r\n\tfetchProducts: createAsyncAction(\r\n\t\t'FEEDBACK/FETCH_PRODUCTS',\r\n\t\t'FEEDBACK/FETCH_PRODUCTS_SUCCESS',\r\n\t\t'FEEDBACK/FETCH_PRODUCTS_FAILED'\r\n\t)<undefined, ProductSearchResult, string>(),\r\n\tfetchResource: createAsyncAction(\r\n\t\t'FEEDBACK/FETCH_RESOURCE',\r\n\t\t'FEEDBACK/FETCH_RESOURCE_SUCCESS',\r\n\t\t'FEEDBACK/FETCH_RESOURCE_FAILED'\r\n\t)<undefined, ResourceApiShape, string>(),\r\n\tsendFeedback: createAsyncAction(\r\n\t\t'FEEDBACK/POST_FEEDBACK',\r\n\t\t'FEEDBACK/POST_FEEDBACK_SUCCESS',\r\n\t\t'FEEDBACK/POST_FEEDBACK_FAILED'\r\n\t)<undefined, undefined, FeedbackErrorApiModel>(),\r\n\tuploadImage: createAsyncAction(\r\n\t\t'FEEDBACK/UPLOAD_ATTACHMENT',\r\n\t\t'FEEDBACK/UPLOAD_ATTACHMENT_SUCCESS',\r\n\t\t'FEEDBACK/UPLOAD_ATTACHMENT_FAILED'\r\n\t)<undefined, { file: File; apiData: FeedbackImageApiModel }, string>(),\r\n};\r\n\r\nexport type FeedbackActions = ActionType<typeof feedbackActions>;\r\n\r\nexport function feedbackReducer(state: FeedbackState, action: FeedbackActions): FeedbackState {\r\n\tif (action.type === getType(feedbackActions.fetchProducts.request)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: true,\r\n\t\t};\r\n\t}\r\n\tif (action.type === getType(feedbackActions.fetchProducts.success)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: false,\r\n\t\t\tproducts: action.payload,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.fetchProducts.failure)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: false,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.fetchResource.request)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tresourceImageUrl: undefined,\r\n\t\t\tisImageLoading: true,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.fetchResource.success)) {\r\n\t\tconst data = action.payload.content as ProductApiContent;\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisImageLoading: false,\r\n\t\t\tresourceImageUrl: data.packages[0].imageUrl,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.fetchResource.failure)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisImageLoading: false,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.sendFeedback.request)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSubmitting: true,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.sendFeedback.success)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSubmitting: false,\r\n\t\t\tisSubmitted: true,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.sendFeedback.failure)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSubmitting: false,\r\n\t\t\terror: action.payload.error,\r\n\t\t\terrorState: action.payload.modelState,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.uploadImage.request)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisImageBeingUploaded: true,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.uploadImage.success)) {\r\n\t\tconst objUrl =\r\n\t\t\t!!URL && typeof URL.createObjectURL === 'function' ? URL.createObjectURL(action.payload.file) : undefined;\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisImageBeingUploaded: false,\r\n\t\t\tattachmentId: action.payload.apiData.guid,\r\n\t\t\tpreviewImage: objUrl,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(feedbackActions.uploadImage.failure)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisImageBeingUploaded: false,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t}\r\n\r\n\treturn state;\r\n}\r\n","import { uploadFiles, postJson } from 'utils/service';\r\nimport { FeedbackApiModel, FeedbackImageApiModel } from './interfaces';\r\n\r\nasync function sendFeedback(siteUrlId: string, payload: FeedbackApiModel): Promise<void> {\r\n\treturn await postJson(`/api/feedback/${siteUrlId}/ConsumerEmailHandler`, payload, false);\r\n}\r\n\r\nasync function uploadFile(siteUrlId: string, file: File): Promise<FeedbackImageApiModel[]> {\r\n\treturn await uploadFiles(`/api/feedback/${siteUrlId}/Upload`, { file }, true);\r\n}\r\n\r\nexport const feedbackApi = {\r\n\tsendFeedback,\r\n\tuploadFile,\r\n};\r\n\r\nexport type FeedbackApi = typeof feedbackApi;\r\n","import React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport SmallHeader from 'styleguide/components/Typography/SmallHeader';\r\nimport Input from 'styleguide/components/Inputs/Input';\r\nimport Checkbox from 'styleguide/components/Inputs/Checkbox';\r\nimport { useFormContext } from 'react-hook-form/dist/react-hook-form.ie11';\r\nimport styled from 'styled-components';\r\nimport { FeedbackFormData } from '../interfaces';\r\n\r\nconst PrivacyPolicyLink = styled.a``;\r\n\r\nconst PersonalData: React.FC = () => {\r\n\tconst intl = useIntl();\r\n\tconst { register, errors } = useFormContext<FeedbackFormData>();\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<SmallHeader tagName=\"h2\" className=\"subheader\">\r\n\t\t\t\t<FormattedMessage id=\"applet_feedback_form_personaldata\" />\r\n\t\t\t</SmallHeader>\r\n\t\t\t<Input\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tname=\"firstName\"\r\n\t\t\t\tref={register({ required: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }) })}\r\n\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_firstname' })}\r\n\t\t\t\tvalidationError={errors.firstName?.message}\r\n\t\t\t/>\r\n\t\t\t<Input\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tname=\"lastName\"\r\n\t\t\t\tref={register({ required: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }) })}\r\n\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_lastname' })}\r\n\t\t\t\tvalidationError={errors.lastName?.message}\r\n\t\t\t/>\r\n\t\t\t<Input\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tname=\"email\"\r\n\t\t\t\tref={register({\r\n\t\t\t\t\trequired: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }),\r\n\t\t\t\t})}\r\n\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_email' })}\r\n\t\t\t\tvalidationError={errors.email?.message}\r\n\t\t\t/>\r\n\t\t\t<Input\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tname=\"phone\"\r\n\t\t\t\tref={register}\r\n\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_phone' })}\r\n\t\t\t/>\r\n\t\t\t<Checkbox name=\"answerNotRequired\" ref={register}>\r\n\t\t\t\t<FormattedMessage id=\"applet_feedback_form_field_answernotrequired\" />\r\n\t\t\t</Checkbox>\r\n\t\t\t<PrivacyPolicyLink href={intl.formatMessage({ id: 'applet_feedback_link_privacypolicy_url' })}>\r\n\t\t\t\t<FormattedMessage id=\"applet_feedback_link_privacypolicy\" />\r\n\t\t\t</PrivacyPolicyLink>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default PersonalData;\r\n","import React, { ChangeEvent, useEffect, useState } from 'react';\r\nimport { useForm, FormContext } from 'react-hook-form/dist/react-hook-form.ie11';\r\nimport { useIntl, FormattedMessage } from 'react-intl';\r\nimport Select from 'styleguide/components/Inputs/Select';\r\nimport Input from 'styleguide/components/Inputs/Input';\r\nimport Divider, { DividerDirection, DividerSize } from 'styleguide/components/Divider/Divider';\r\nimport SmallHeader from 'styleguide/components/Typography/SmallHeader';\r\nimport TextArea from 'styleguide/components/Inputs/TextArea';\r\nimport FileInput from 'styleguide/components/Inputs/FileInput';\r\nimport { ACCEPTED_FILE_FORMATS_IMAGES } from '../../common/EditorComponents';\r\nimport { ProductSearchResult } from 'common/components/GlobalSearch/services/product-search';\r\nimport PersonalData from './PersonalData';\r\nimport LoadingSpinner from 'common/components/Loading/LoadingSpinner';\r\nimport styled from 'styled-components';\r\nimport { FeedbackFormData } from '../interfaces';\r\nimport { FormActions, FormContainer } from '../../common/EditorComponents';\r\nimport { Button } from 'styleguide/components/Buttons/Button';\r\nimport includes from 'lodash/includes';\r\nimport ReCaptcha from 'common/components/ReCaptcha/ReCaptcha';\r\nimport { withWindow } from 'styleguide/helpers';\r\n\r\nconst FormContainerWithScrollableInputs = styled(FormContainer)`\r\n\t& input,\r\n\t& textarea {\r\n\t\tscroll-margin: 100px;\r\n\t}\r\n`;\r\n\r\nconst RequiredDescriptionWrapper = styled.div`\r\n\tmargin-top: 20px;\r\n\tmargin-bottom: 20px;\r\n`;\r\n\r\nconst ProductImageWrapper = styled.div`\r\n\tpadding: 30px;\r\n\tmargin: 0 auto;\r\n\ttext-align: center;\r\n`;\r\n\r\nconst CaptchaContainer = styled.div`\r\n\tmargin-bottom: 15px;\r\n\r\n\t> div {\r\n\t\tdisplay: inline-block;\r\n\t\tmargin: 0 auto;\r\n\t}\r\n`;\r\n\r\nexport interface ComplaintProps {\r\n\tonSubmit: (fieldValues: FeedbackFormData) => void;\r\n\tonProductSelect: (e: ChangeEvent<HTMLSelectElement>) => void;\r\n\tonUpload: (file: File) => void;\r\n\tisLoading: boolean;\r\n\tisSubmitting?: boolean;\r\n\tproducts: ProductSearchResult | undefined;\r\n\tresourceImageUrl?: string;\r\n\tisImageLoading: boolean;\r\n\tpreviewImage?: string;\r\n\terror?: string | null;\r\n\terrorState?: any;\r\n}\r\n\r\nconst ComplaintForm: React.FC<ComplaintProps> = ({\r\n\tonSubmit,\r\n\tonProductSelect,\r\n\tonUpload,\r\n\tisLoading,\r\n\tisSubmitting,\r\n\tproducts,\r\n\tresourceImageUrl,\r\n\tisImageLoading,\r\n\tpreviewImage,\r\n\terror,\r\n\terrorState,\r\n}) => {\r\n\tconst intl = useIntl();\r\n\r\n\tconst methods = useForm<FeedbackFormData>({ defaultValues: { isProductFeedback: true } });\r\n\tconst { handleSubmit, getValues, register, errors, clearError, setError } = methods;\r\n\r\n\tconst renderImage = () =>\r\n\t\tisImageLoading ? <LoadingSpinner /> : !!resourceImageUrl && <img src={`${resourceImageUrl}/250x250-product`} />;\r\n\r\n\tconst onDropImage = (file: File | null) => {\r\n\t\tclearError('files');\r\n\t\tif (!file) {\r\n\t\t\tsetError('files', 'load', intl.formatMessage({ id: 'forms_input_file_upload_error' }));\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!includes(['image/png', 'image/jpeg'], file.type)) {\r\n\t\t\tsetError(\r\n\t\t\t\t'files',\r\n\t\t\t\t'type',\r\n\t\t\t\tintl.formatMessage(\r\n\t\t\t\t\t{ id: 'forms_input_file_accepted_files' },\r\n\t\t\t\t\t{ acceptedFiles: ACCEPTED_FILE_FORMATS_IMAGES.split(',').join(', ') }\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tonUpload(file);\r\n\t};\r\n\r\n\tconst onUploadImage = () => {\r\n\t\tconst { files } = getValues();\r\n\t\tif (files && files.length > 0) {\r\n\t\t\tonUpload(files[0]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst [isRecaptchaValid, setRecaptchaState] = useState<boolean>(false);\r\n\r\n\tconst siteKey = withWindow(w => w.reCaptchaSiteKey);\r\n\r\n\tif (!!errorState) {\r\n\t\tconst apiModelToFieldTranslator = {\r\n\t\t\tbestbefore: 'bestBeforeDate',\r\n\t\t\tbatchnumber: 'batchId',\r\n\t\t\tfeedbacktext: 'message',\r\n\t\t\tforename: 'firstName',\r\n\t\t\tsurname: 'lastName',\r\n\t\t\treplynotrequested: 'answerNotRequired',\r\n\t\t\tselectedproductid: 'product',\r\n\t\t\tplaceofpurchase: 'purchaseLocation',\r\n\t\t};\r\n\t\tfor (const errorMember of Object.keys(errorState)) {\r\n\t\t\tconst apiModelMemberName = errorMember.replace('model.', '');\r\n\t\t\t// lowercase, because API seemd to return inconsistent casing\r\n\t\t\tconst fieldName = apiModelToFieldTranslator[apiModelMemberName.toLowerCase()] || apiModelMemberName;\r\n\t\t\tsetError(fieldName, 'validation', intl.formatMessage({ id: 'global_error' }));\r\n\t\t}\r\n\t} else if (!!error) {\r\n\t\tsetError('files', 'attach', intl.formatMessage({ id: error }));\r\n\t}\r\n\r\n\tuseScrollToError(errors);\r\n\r\n\tconst requiredDescription = intl.formatMessage({ id: 'applet_feedback_form_validation_required_description' });\r\n\r\n\tconst complaintSubmit = (data: FeedbackFormData) => {\r\n\t\tconst complaintData = { ...data, isProductFeedback: true };\r\n\t\tonSubmit(complaintData);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<FormContext {...methods}>\r\n\t\t\t{requiredDescription.trim().length > 0 && (\r\n\t\t\t\t<RequiredDescriptionWrapper>{requiredDescription}</RequiredDescriptionWrapper>\r\n\t\t\t)}\r\n\t\t\t<FormContainerWithScrollableInputs onSubmit={handleSubmit(complaintSubmit)}>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tname=\"product\"\r\n\t\t\t\t\tref={register({ required: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }) })}\r\n\t\t\t\t\tonChange={onProductSelect}\r\n\t\t\t\t\tvalidationError={errors.product?.message}>\r\n\t\t\t\t\t<option value=\"\">{intl.formatMessage({ id: 'applet_feedback_form_field_chooseproduct' })}</option>\r\n\t\t\t\t\t{!isLoading &&\r\n\t\t\t\t\t\tproducts?.items.map((i, idx) => (\r\n\t\t\t\t\t\t\t<option key={idx} value={i.url}>\r\n\t\t\t\t\t\t\t\t{i.title}\r\n\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t\t<ProductImageWrapper>{renderImage()}</ProductImageWrapper>\r\n\t\t\t\t<Input\r\n\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\tname=\"purchaseLocation\"\r\n\t\t\t\t\tref={register({ required: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }) })}\r\n\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_storename' })}\r\n\t\t\t\t\tvalidationError={errors.purchaseLocation?.message}\r\n\t\t\t\t/>\r\n\t\t\t\t<Input\r\n\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\tname=\"bestBeforeDate\"\r\n\t\t\t\t\tref={register}\r\n\t\t\t\t\tvalidationError={errors.bestBeforeDate?.message}\r\n\t\t\t\t\tlabel={intl.formatMessage({ id: 'applet_feedback_form_field_bestbefore' })}\r\n\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_bestbefore' })}\r\n\t\t\t\t/>\r\n\t\t\t\t<Input\r\n\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\tname=\"batchId\"\r\n\t\t\t\t\tref={register}\r\n\t\t\t\t\tvalidationError={errors.batchId?.message}\r\n\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_productcode' })}\r\n\t\t\t\t/>\r\n\t\t\t\t<Divider direction={DividerDirection.horizontal} size={DividerSize.full} />\r\n\t\t\t\t<SmallHeader tagName=\"h2\" className=\"subheader\">\r\n\t\t\t\t\t<FormattedMessage id=\"applet_feedback_form_questionsorcomments\" />\r\n\t\t\t\t</SmallHeader>\r\n\t\t\t\t<TextArea\r\n\t\t\t\t\tname=\"message\"\r\n\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_message_required' })}\r\n\t\t\t\t\tref={register({ required: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }) })}\r\n\t\t\t\t\tvalidationError={errors.message?.message}\r\n\t\t\t\t/>\r\n\t\t\t\t<FileInput\r\n\t\t\t\t\tname=\"files\"\r\n\t\t\t\t\tlabel={intl.formatMessage({ id: 'applet_feedback_form_field_image_upload' })}\r\n\t\t\t\t\thelpText={intl.formatMessage(\r\n\t\t\t\t\t\t{ id: 'applet_feedback_form_field_image_upload_help' },\r\n\t\t\t\t\t\t{ acceptedFiles: ACCEPTED_FILE_FORMATS_IMAGES.split(',').join(', ') }\r\n\t\t\t\t\t)}\r\n\t\t\t\t\tref={register}\r\n\t\t\t\t\tacceptFiles={ACCEPTED_FILE_FORMATS_IMAGES}\r\n\t\t\t\t\tpreviewImageUrl={previewImage}\r\n\t\t\t\t\tshowPreviewImage={!!previewImage}\r\n\t\t\t\t\tvalidationError={errors.files?.message}\r\n\t\t\t\t\tonDropImage={onDropImage}\r\n\t\t\t\t\tonUploadImage={onUploadImage}\r\n\t\t\t\t/>\r\n\t\t\t\t<Divider direction={DividerDirection.horizontal} size={DividerSize.full} />\r\n\t\t\t\t<PersonalData />\r\n\t\t\t\t<FormActions>\r\n\t\t\t\t\t<CaptchaContainer>\r\n\t\t\t\t\t\t<ReCaptcha resultCallback={setRecaptchaState} siteKey={siteKey} expiredCallback={setRecaptchaState} />\r\n\t\t\t\t\t</CaptchaContainer>\r\n\t\t\t\t\t{isRecaptchaValid && !isSubmitting && (\r\n\t\t\t\t\t\t<Button type=\"submit\">\r\n\t\t\t\t\t\t\t<FormattedMessage id=\"applet_feedback_submit\" />\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{isSubmitting && <LoadingSpinner />}\r\n\t\t\t\t</FormActions>\r\n\t\t\t</FormContainerWithScrollableInputs>\r\n\t\t</FormContext>\r\n\t);\r\n};\r\n\r\nfunction useScrollToError(errors: any) {\r\n\tuseEffect(() => {\r\n\t\tconst errorsvalues = Object.values(errors);\r\n\t\tif (errorsvalues.length > 0 && !!(errorsvalues[0] as any).ref) {\r\n\t\t\t(errorsvalues[0] as any).ref.scrollIntoView({ behavior: 'smooth' });\r\n\t\t}\r\n\t});\r\n}\r\n\r\nexport default ComplaintForm;\r\n","import React, { useState, useEffect, ChangeEvent } from 'react';\r\nimport styled from 'styled-components';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport SmallHeader from 'styleguide/components/Typography/SmallHeader';\r\nimport Tabs from 'styleguide/components/Tabs/Tabs';\r\nimport { TabProps } from 'styleguide/components/Tabs/Tab';\r\nimport { mediaBreakpoints } from 'styleguide/helpers';\r\nimport { connect, MapStateToProps } from 'react-redux';\r\nimport { State } from 'common/reducers';\r\nimport { getSiteUrlId } from 'common/components/App/services';\r\nimport { feedbackReducer, FeedbackState } from './reducers';\r\nimport { fetchProducts, fetchResource, sendFeedback, uploadFile } from './api';\r\nimport ComplaintForm from './components/Complaint';\r\nimport LoadingSpinner from 'common/components/Loading/LoadingSpinner';\r\nimport QuestionForm from './components/Question';\r\nimport { FeedbackFormData } from './interfaces';\r\nimport Confirmation from './components/Confirmation';\r\n\r\nconst FeedbackFormWrapper = styled.div`\r\n\tmax-width: calc(${mediaBreakpoints.phone660}px + ${({ theme }) => theme.grid.gutter * 4}px);\r\n\tmargin: ${({ theme }) => theme.grid.gutterInPx(4)} auto;\r\n\tpadding: 0 ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\r\n\t.subheader {\r\n\t\tmargin-top: 32px;\r\n\t}\r\n`;\r\n\r\nconst enum TabType {\r\n\tComplaint = 'complaint',\r\n\tQuestion = 'question',\r\n}\r\n\r\ninterface FeedbackStateProps {\r\n\tsiteUrlId: string;\r\n}\r\n\r\nconst initialState: FeedbackState = {\r\n\tproducts: undefined,\r\n\tisLoading: true,\r\n\tisSubmitting: false,\r\n\tisImageLoading: false,\r\n\tisImageBeingUploaded: false,\r\n};\r\n\r\nconst Feedback: React.FC<FeedbackStateProps> = ({ siteUrlId }) => {\r\n\tconst intl = useIntl();\r\n\r\n\tconst [state, dispatch] = React.useReducer<typeof feedbackReducer>(feedbackReducer, initialState);\r\n\r\n\tconst [activeTab, setActiveTab] = useState(TabType.Complaint);\r\n\r\n\tconst tabs: TabProps[] = [\r\n\t\t{\r\n\t\t\tlabel: intl.formatMessage({ id: 'applet_feedback_form_type_complaint' }),\r\n\t\t\turl: TabType.Complaint,\r\n\t\t\tisActive: activeTab === TabType.Complaint,\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: intl.formatMessage({ id: 'applet_feedback_form_type_question' }),\r\n\t\t\turl: TabType.Question,\r\n\t\t\tisActive: activeTab === TabType.Question,\r\n\t\t},\r\n\t];\r\n\r\n\tuseEffect(() => {\r\n\t\tfetchProducts(siteUrlId, dispatch);\r\n\t}, []);\r\n\r\n\tconst hasProducts = Boolean(state.products?.count);\r\n\r\n\tconst onTabClick = (url: TabType) => {\r\n\t\tsetActiveTab(url);\r\n\t};\r\n\r\n\tconst onSubmit = (fieldValues: FeedbackFormData) => {\r\n\t\tsendFeedback(\r\n\t\t\tsiteUrlId,\r\n\t\t\t{\r\n\t\t\t\tforeName: fieldValues.firstName,\r\n\t\t\t\tsurName: fieldValues.lastName,\r\n\t\t\t\temail: fieldValues.email,\r\n\t\t\t\tphone: fieldValues.phone,\r\n\t\t\t\treplyNotRequested: fieldValues.answerNotRequired,\r\n\t\t\t\tselectedProductId: fieldValues.product,\r\n\t\t\t\tbatchNumber: fieldValues.batchId,\r\n\t\t\t\tbestBefore: fieldValues.bestBeforeDate,\r\n\t\t\t\tfeedbackText: fieldValues.message,\r\n\t\t\t\tplaceOfPurchase: fieldValues.purchaseLocation,\r\n\t\t\t\tattachments: !!state.attachmentId ? [state.attachmentId] : [],\r\n\t\t\t\tisProductFeedback: fieldValues.isProductFeedback,\r\n\t\t\t},\r\n\t\t\tdispatch\r\n\t\t);\r\n\t};\r\n\r\n\tconst onUpload = (file: File) => {\r\n\t\tuploadFile(siteUrlId, file, dispatch);\r\n\t};\r\n\r\n\tconst onProductSelect = (e: ChangeEvent<HTMLSelectElement>) =>\r\n\t\t!!e.currentTarget?.value && fetchResource(siteUrlId, e.currentTarget.value, dispatch);\r\n\r\n\tconst renderComplaintForm = () =>\r\n\t\tstate.isLoading ? (\r\n\t\t\t<LoadingSpinner />\r\n\t\t) : (\r\n\t\t\t<ComplaintForm onSubmit={onSubmit} onUpload={onUpload} onProductSelect={onProductSelect} {...state} />\r\n\t\t);\r\n\r\n\tconst renderForm = () => {\r\n\t\tif (state.isLoading) {\r\n\t\t\treturn <LoadingSpinner />;\r\n\t\t}\r\n\r\n\t\tif (activeTab === TabType.Complaint && hasProducts) {\r\n\t\t\treturn renderComplaintForm();\r\n\t\t}\r\n\r\n\t\treturn <QuestionForm onSubmit={onSubmit} />;\r\n\t};\r\n\r\n\tconst renderFeedback = () =>\r\n\t\tstate.isSubmitted ? (\r\n\t\t\t<Confirmation />\r\n\t\t) : (\r\n\t\t\t<FeedbackFormWrapper>\r\n\t\t\t\t{!state.isLoading && hasProducts && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<SmallHeader tagName=\"h2\" className=\"subheader\">\r\n\t\t\t\t\t\t\t<FormattedMessage id=\"applet_feedback_form_type\" />\r\n\t\t\t\t\t\t</SmallHeader>\r\n\t\t\t\t\t\t<Tabs tabs={tabs} onTabClick={onTabClick} useExternalProps />\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{renderForm()}\r\n\t\t\t</FeedbackFormWrapper>\r\n\t\t);\r\n\r\n\treturn <>{renderFeedback()}</>;\r\n};\r\n\r\nconst mapStateToProps: MapStateToProps<FeedbackStateProps, {}, State> = ({ app, routing }): FeedbackStateProps => {\r\n\tconst sites = (app.settings && app.settings.sites) || [];\r\n\treturn {\r\n\t\tsiteUrlId: getSiteUrlId(routing, sites) || '',\r\n\t};\r\n};\r\n\r\nexport default connect(mapStateToProps)(Feedback);\r\n","import React, { useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport SmallHeader from 'styleguide/components/Typography/SmallHeader';\r\nimport { useForm, FormContext } from 'react-hook-form/dist/react-hook-form.ie11';\r\nimport { FeedbackFormData } from '../interfaces';\r\nimport TextArea from 'styleguide/components/Inputs/TextArea';\r\nimport Divider, { DividerDirection, DividerSize } from 'styleguide/components/Divider/Divider';\r\nimport PersonalData from './PersonalData';\r\nimport { FormContainer, FormActions } from '../../common/EditorComponents';\r\nimport { Button } from 'styleguide/components/Buttons/Button';\r\nimport ReCaptcha from 'common/components/ReCaptcha/ReCaptcha';\r\nimport { withWindow } from 'styleguide/helpers';\r\n\r\nconst CaptchaContainer = styled.div`\r\n\tmargin-bottom: 15px;\r\n\r\n\t> div {\r\n\t\tdisplay: inline-block;\r\n\t\tmargin: 0 auto;\r\n\t}\r\n`;\r\n\r\ninterface QuestionFormProps {\r\n\tonSubmit: (fieldValues: FeedbackFormData) => void;\r\n}\r\n\r\nconst QuestionForm: React.FC<QuestionFormProps> = ({ onSubmit }) => {\r\n\tconst intl = useIntl();\r\n\r\n\tconst methods = useForm<FeedbackFormData>();\r\n\tconst { handleSubmit, register, errors } = methods;\r\n\r\n\tconst [isRecaptchaValid, setRecaptchaState] = useState<boolean>(false);\r\n\r\n\tconst siteKey = withWindow(w => w.reCaptchaSiteKey);\r\n\r\n\treturn (\r\n\t\t<FormContext {...methods}>\r\n\t\t\t<FormContainer onSubmit={handleSubmit(onSubmit)}>\r\n\t\t\t\t<SmallHeader tagName=\"h2\" className=\"subheader\">\r\n\t\t\t\t\t<FormattedMessage id=\"applet_feedback_form_questionsorcomments\" />\r\n\t\t\t\t</SmallHeader>\r\n\t\t\t\t<TextArea\r\n\t\t\t\t\tname=\"message\"\r\n\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_feedback_form_field_message' })}\r\n\t\t\t\t\tref={register({ required: intl.formatMessage({ id: 'applet_feedback_form_validation_required' }) })}\r\n\t\t\t\t\tvalidationError={errors.message?.message}\r\n\t\t\t\t/>\r\n\t\t\t\t<Divider direction={DividerDirection.horizontal} size={DividerSize.full} />\r\n\t\t\t\t<PersonalData />\r\n\t\t\t\t<FormActions>\r\n\t\t\t\t\t<CaptchaContainer>\r\n\t\t\t\t\t\t<ReCaptcha resultCallback={setRecaptchaState} siteKey={siteKey} expiredCallback={setRecaptchaState} />\r\n\t\t\t\t\t</CaptchaContainer>\r\n\t\t\t\t\t{isRecaptchaValid && (\r\n\t\t\t\t\t\t<Button type=\"submit\">\r\n\t\t\t\t\t\t\t<FormattedMessage id=\"applet_feedback_submit\" />\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</FormActions>\r\n\t\t\t</FormContainer>\r\n\t\t</FormContext>\r\n\t);\r\n};\r\n\r\nexport default QuestionForm;\r\n","import React from 'react';\r\nimport MediumHeader from 'styleguide/components/Typography/MediumHeader';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nconst Confirmation: React.FC = () => (\r\n\t<MediumHeader>\r\n\t\t<FormattedMessage id=\"applet_feedback_submit_confirmation\" />\r\n\t</MediumHeader>\r\n);\r\n\r\nexport default Confirmation;\r\n","import { FeedbackActions, feedbackActions } from './reducers';\r\nimport { productSearchApi } from 'common/components/GlobalSearch/services/product-search';\r\nimport { resourceApi } from 'common/components/Resource/services';\r\nimport { feedbackApi } from './service';\r\nimport { FeedbackApiModel } from './interfaces';\r\n\r\nexport const fetchProducts = async (siteUrlId: string, dispatch: React.Dispatch<FeedbackActions>) => {\r\n\ttry {\r\n\t\tdispatch(feedbackActions.fetchProducts.request());\r\n\t\tconst result = await productSearchApi.searchProducts(siteUrlId, '', 1000);\r\n\t\tdispatch(feedbackActions.fetchProducts.success(result));\r\n\t} catch (error) {\r\n\t\tdispatch(feedbackActions.fetchProducts.failure('applet_feedback_fetch_products_error'));\r\n\t}\r\n};\r\n\r\nexport const fetchResource = async (\r\n\tsiteUrlId: string,\r\n\tresourceUrl: string,\r\n\tdispatch: React.Dispatch<FeedbackActions>\r\n) => {\r\n\ttry {\r\n\t\tdispatch(feedbackActions.fetchResource.request());\r\n\t\tconst result = await resourceApi.fetchResource(siteUrlId, resourceUrl);\r\n\t\tdispatch(feedbackActions.fetchResource.success(result));\r\n\t} catch (error) {\r\n\t\tdispatch(feedbackActions.fetchResource.failure('applet_feedback_fetch_resourceimage_error'));\r\n\t}\r\n};\r\n\r\nexport const sendFeedback = async (\r\n\tsiteUrlId: string,\r\n\tpayload: FeedbackApiModel,\r\n\tdispatch: React.Dispatch<FeedbackActions>\r\n) => {\r\n\ttry {\r\n\t\tdispatch(feedbackActions.sendFeedback.request());\r\n\t\tawait feedbackApi.sendFeedback(siteUrlId, payload);\r\n\t\tdispatch(feedbackActions.sendFeedback.success());\r\n\t} catch (error) {\r\n\t\tdispatch(\r\n\t\t\tfeedbackActions.sendFeedback.failure({\r\n\t\t\t\terror: 'applet_feedback_send_feedback_error',\r\n\t\t\t\tmodelState: !!error && !!error.details ? error.details.modelState : null,\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n};\r\n\r\nexport const uploadFile = async (siteUrlId: string, payload: File, dispatch: React.Dispatch<FeedbackActions>) => {\r\n\ttry {\r\n\t\tdispatch(feedbackActions.uploadImage.request());\r\n\t\tconst apiResponse = await feedbackApi.uploadFile(siteUrlId, payload);\r\n\t\tdispatch(feedbackActions.uploadImage.success({ file: payload, apiData: apiResponse[0] }));\r\n\t} catch (error) {\r\n\t\tdispatch(feedbackActions.uploadImage.failure('applet_feedback_upload_attachment_error'));\r\n\t}\r\n};\r\n","import Feedback from './Feedback';\r\nexport default Feedback;\r\n","import HandshakeIcon from './HandshakeIcon';\r\nexport default HandshakeIcon;\r\n","import * as React from 'react';\r\nimport * as handshakeIcon from '../../../../images/handshake-icon.svg';\r\n\r\nconst HandshakeIcon: React.FC<React.ImgHTMLAttributes<HTMLImageElement>> = ({ ...props }) => {\r\n\treturn <img src={handshakeIcon} width=\"50\" height=\"50\" {...props} />;\r\n};\r\n\r\nexport default HandshakeIcon;\r\n","import StrokeInfoIcon from './StrokeInfoIcon';\r\nexport default StrokeInfoIcon;\r\n","import * as React from 'react';\r\nimport * as icon from '../../../../images/info-icon.svg';\r\nimport FilteredIconImage from '../../AspectGroupIcons/FilteredIconImage';\r\n\r\nconst Icon: React.FC<React.HTMLAttributes<HTMLImageElement>> = props => <FilteredIconImage icon={icon} {...props} />;\r\n\r\nexport default Icon;\r\n","import React, { useEffect, useState } from 'react';\r\nimport styled, { useTheme } from 'styled-components';\r\nimport { ButtonLink } from 'styleguide/components/Buttons/Button';\r\nimport { LogoIcon } from 'styleguide/components/Logos/Logo';\r\nimport { media, mediaBreakpoints, withWindow } from 'styleguide/helpers';\r\n\r\nimport solutionsLg from './images/bg-solutions@3x.jpg';\r\nimport globalLg from './images/bg-global@3x.jpg';\r\nimport groupLg from './images/bg-valio-group@3x.jpg';\r\n\r\nimport solutionsSm from './images/bg-solutions@2x.jpg';\r\nimport globalSm from './images/bg-global@2x.jpg';\r\nimport groupSm from './images/bg-valio-group@2x.jpg';\r\nimport HandshakeIcon from 'styleguide/components/Icons/MiscIcons/HandshakeIcon';\r\nimport StrokeInfoIcon from 'styleguide/components/Icons/MiscIcons/StrokeInfoIcon';\r\nimport { GlobeIcon } from 'styleguide/components/Icons';\r\nimport { useSelector } from 'react-redux';\r\nimport { State } from '../../../reducers';\r\nimport { getInitiallyRenderedPath } from '../../../../utils/routing';\r\n\r\nconst BlueButton = styled(ButtonLink)``;\r\nconst WhiteButton = styled(ButtonLink)``;\r\n\r\nconst AppletWrapper = styled.div`\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tbackground-color: white;\r\n\tz-index: ${({ theme }) => theme.zIndices.modal};\r\n\toverflow-y: auto;\r\n`;\r\n\r\nconst GridWrapper = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: flex-start;\r\n\talign-content: flex-start;\r\n\t${media.desktop`\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: 50% 50%;\r\n\t\tgrid-template-rows: 84px 1fr 33.3333%;\r\n\t\twidth: 100vw;\r\n\t\theight: 100vh;\r\n\t`}\r\n`;\r\n\r\nconst HeaderWrapper = styled.div`\r\n\tbackground-color: ${({ theme }) => theme.colors.brandPrimary};\r\n\tposition: sticky;\r\n\ttop: 0;\r\n\tflex: 0 0 40px;\r\n\tz-index: 2;\r\n\t${media.desktop`\r\n\t\tposition: relative;\r\n\t\tgrid-column: span 2;\r\n\t`}\r\n`;\r\n\r\nconst LogoWrapper = styled.div`\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tbottom: -18px;\r\n\ttransform: translateX(-50%);\r\n\twidth: 64px;\r\n\t${media.desktop`\r\n\t\twidth: 115px;\r\n\t\tbottom: -15px;\r\n\t`}\r\n`;\r\n\r\nconst BackgroundContainer = styled.div`\r\n\tposition: relative;\r\n\tpadding: ${({ theme }) => theme.grid.gutterInPx(5)} 0;\r\n\tcursor: pointer;\r\n\r\n\t&:before {\r\n\t\ttransition: all ease-out 350ms;\r\n\t\tcontent: '';\r\n\t\tposition: absolute;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t\tleft: 0;\r\n\t\ttop: 0;\r\n\t\tz-index: 1;\r\n\t\tbackground-repeat: no-repeat;\r\n\t\tbackground-position: center;\r\n\t\tbackground-size: cover;\r\n\t}\r\n\r\n\t@media (hover: hover) {\r\n\t\t&:hover {\r\n\t\t\t&:before {\r\n\t\t\t\topacity: 0;\r\n\t\t\t}\r\n\r\n\t\t\t${BlueButton} {\r\n\t\t\t\tbackground-color: ${({ theme }) => theme.colors.buttonPrimaryHover};\r\n\t\t\t}\r\n\t\t\t${WhiteButton} {\r\n\t\t\t\tbackground-color: ${({ theme }) => theme.colors.white90};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nconst ForCompaniesWrapper = styled(BackgroundContainer)`\r\n background-color: ${({ theme }) => theme.colors.white};\r\n\r\n &:before {\r\n background-image: url('${solutionsSm}');\r\n ${media.desktop`\r\n background-image: url('${solutionsLg}');\r\n `}\r\n }\r\n`;\r\n\r\nconst ValioGroupWrapper = styled(BackgroundContainer)`\r\n\tcolor: ${({ theme }) => theme.colors.white};\r\n background-color: ${({ theme }) => theme.colors.brandPrimary};\r\n\r\n &:before {\r\n background-image: url('${groupSm}');\r\n ${media.desktop`\r\n background-image: url('${groupLg}');\r\n `}\r\n }\r\n`;\r\n\r\nconst CenteredContentWrapper = styled.div`\r\n\tdisplay: flex;\r\n\tflex-flow: row nowrap;\r\n\tjustify-content: center;\r\n\talign-content: center;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tposition: relative;\r\n\tz-index: 2;\r\n`;\r\n\r\nconst ContentColumn = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: center;\r\n\talign-content: flex-start;\r\n\ttext-align: center;\r\n\tpadding: 0 ${({ theme }) => theme.grid.gutterInPx(2)};\r\n\talign-items: center;\r\n\tmax-width: 380px;\r\n\r\n\t${media.tablet`\r\n max-width: 30vw;\r\n min-width: 300px;\r\n `}\r\n`;\r\n\r\nconst SplitPart = styled.div``;\r\nconst InlinePart = styled(SplitPart)``;\r\n\r\nconst ValioGlobalWrapper = styled(BackgroundContainer)`\r\n\tcolor: ${({ theme }) => theme.colors.white};\r\n background-color: ${({ theme }) => theme.colors.brandSecondary};\r\n\r\n &:before {\r\n background-image: url('${globalSm}');\r\n ${media.desktop`\r\n background-image: url('${globalLg}');\r\n background-position: center -150px;\r\n `}\r\n }\r\n\r\n\t${media.desktop`\r\n\t\tgrid-column: span 2;\r\n\t`}\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n\tmin-width: 60px;\r\n\twidth: 60px;\r\n\theight: 60px;\r\n\tmargin: 0 auto;\r\n\talign-self: center;\r\n\ttext-align: center;\r\n\r\n\t> img {\r\n\t\theight: 100%;\r\n\t\twidth: 100%;\r\n\t}\r\n`;\r\n\r\nconst ContentRow = styled(ContentColumn)`\r\n\t${media.desktop`\r\n display: grid;\r\n\t\tgrid-template-columns: 50% 50%;\r\n\t\tcolumn-gap: ${({ theme }) => theme.grid.gutterInPx(8)};\r\n justify-content: center;\r\n align-content: center;\r\n max-width: 75vw;\r\n\r\n ${SplitPart} {\r\n justify-content: flex-start;\r\n align-content: center;\r\n align-self: flex-start;\r\n text-align: left;\r\n\r\n ${IconWrapper} {\r\n margin-right: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n }\r\n }\r\n\r\n\t\t${InlinePart} {\r\n\t\t\tdisplay: flex;\r\n align-content: flex-start;\r\n\t\t}\r\n `}\r\n`;\r\n\r\nconst TitleWrapper = styled.h1`\r\n\tfont-family: ${({ theme }) => theme.fonts.primary};\r\n\tfont-size: 28px;\r\n\tfont-weight: 900;\r\n\tline-height: 1.29;\r\n\r\n\t${media.desktop`\r\n margin: ${({ theme }) => theme.grid.gutterInPx(2)} 0;\r\n `}\r\n`;\r\n\r\nconst ForCompaniesTitle = styled(TitleWrapper)`\r\n\tcolor: ${({ theme }) => theme.colors.brandPrimary};\r\n`;\r\n\r\nconst TextWrapper = styled.p`\r\n\tfont-family: ${({ theme }) => theme.fonts.secondary};\r\n\tfont-size: 16px;\r\n\tline-height: 1.5;\r\n\tletter-spacing: 0.19px;\r\n\tmargin: 0 auto ${({ theme }) => theme.grid.gutterInPx(3)};\r\n`;\r\n\r\nconst ButtonWrapper = styled.span`\r\n\tdisplay: inline-block;\r\n`;\r\n\r\nconst SESSIONSTORAGEKEY = 'com_welcomescreen_displayed';\r\n\r\nconst WelcomeScreenApplet: React.FC = () => {\r\n\tconst theme = useTheme();\r\n\tconst [shouldShowApplet, setShouldShowApplet] = useState<boolean>(false);\r\n\tconst path = useSelector((state: State) => state.routing.pathname);\r\n\r\n\tconst setSessionStatus = (w: Window) => {\r\n\t\tw.sessionStorage.setItem(SESSIONSTORAGEKEY, '1');\r\n\t};\r\n\r\n\tconst getSessionStatus = (w: Window) => w.sessionStorage.getItem(SESSIONSTORAGEKEY);\r\n\r\n\tuseEffect(() => {\r\n\t\twithWindow(w => {\r\n\t\t\tconst showApplet = getSessionStatus(w) !== '1' && getInitiallyRenderedPath() === path;\r\n\t\t\tsetShouldShowApplet(showApplet);\r\n\t\t\tsetSessionStatus(w);\r\n\t\t\tif (showApplet) {\r\n\t\t\t\tw.document.body.style.setProperty('overflow', 'hidden');\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn () => {\r\n\t\t\twithWindow(w => {\r\n\t\t\t\tw.document.body.style.removeProperty('overflow');\r\n\t\t\t});\r\n\t\t};\r\n\t}, []);\r\n\r\n\tconst getLinkElement = (e: React.MouseEvent<HTMLElement>): HTMLAnchorElement | null => {\r\n\t\tconst target = e.currentTarget;\r\n\t\treturn target.querySelector('a') as HTMLAnchorElement | null;\r\n\t};\r\n\r\n\tconst onWrapperClick = (e: React.MouseEvent<HTMLElement>) => {\r\n\t\twithWindow(w => {\r\n\t\t\tif (w.innerWidth >= mediaBreakpoints.desktop) {\r\n\t\t\t\tgetLinkElement(e)?.click();\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\treturn shouldShowApplet ? (\r\n\t\t<AppletWrapper>\r\n\t\t\t<GridWrapper>\r\n\t\t\t\t<HeaderWrapper>\r\n\t\t\t\t\t<LogoWrapper>\r\n\t\t\t\t\t\t<LogoIcon />\r\n\t\t\t\t\t</LogoWrapper>\r\n\t\t\t\t</HeaderWrapper>\r\n\t\t\t\t<ForCompaniesWrapper onClick={onWrapperClick}>\r\n\t\t\t\t\t<CenteredContentWrapper>\r\n\t\t\t\t\t\t<ContentColumn>\r\n\t\t\t\t\t\t\t<IconWrapper>\r\n\t\t\t\t\t\t\t\t<HandshakeIcon />\r\n\t\t\t\t\t\t\t</IconWrapper>\r\n\t\t\t\t\t\t\t<ForCompaniesTitle>Valio For Companies</ForCompaniesTitle>\r\n\t\t\t\t\t\t\t<TextWrapper>Dairy ingredients and innovative solutions for the food and nutrition industry.</TextWrapper>\r\n\t\t\t\t\t\t\t<ButtonWrapper>\r\n\t\t\t\t\t\t\t\t<BlueButton href=\"https://www.valio.com/food-solutions-for-companies/\" size={'medium'}>\r\n\t\t\t\t\t\t\t\t\tSee our solutions\r\n\t\t\t\t\t\t\t\t</BlueButton>\r\n\t\t\t\t\t\t\t</ButtonWrapper>\r\n\t\t\t\t\t\t</ContentColumn>\r\n\t\t\t\t\t</CenteredContentWrapper>\r\n\t\t\t\t</ForCompaniesWrapper>\r\n\t\t\t\t<ValioGroupWrapper onClick={onWrapperClick}>\r\n\t\t\t\t\t<CenteredContentWrapper>\r\n\t\t\t\t\t\t<ContentColumn>\r\n\t\t\t\t\t\t\t<IconWrapper>\r\n\t\t\t\t\t\t\t\t<StrokeInfoIcon color={theme.colors.white} />\r\n\t\t\t\t\t\t\t</IconWrapper>\r\n\t\t\t\t\t\t\t<TitleWrapper>Valio Group</TitleWrapper>\r\n\t\t\t\t\t\t\t<TextWrapper>\r\n\t\t\t\t\t\t\t\tLooking for information about Valio, consumer products or sustainability themes?\r\n\t\t\t\t\t\t\t</TextWrapper>\r\n\t\t\t\t\t\t\t<ButtonWrapper>\r\n\t\t\t\t\t\t\t\t<BlueButton href=\"/\" size={'medium'}>\r\n\t\t\t\t\t\t\t\t\tRead about Valio Group\r\n\t\t\t\t\t\t\t\t</BlueButton>\r\n\t\t\t\t\t\t\t</ButtonWrapper>\r\n\t\t\t\t\t\t</ContentColumn>\r\n\t\t\t\t\t</CenteredContentWrapper>\r\n\t\t\t\t</ValioGroupWrapper>\r\n\t\t\t\t<ValioGlobalWrapper onClick={onWrapperClick}>\r\n\t\t\t\t\t<CenteredContentWrapper>\r\n\t\t\t\t\t\t<ContentRow>\r\n\t\t\t\t\t\t\t<InlinePart>\r\n\t\t\t\t\t\t\t\t<IconWrapper>\r\n\t\t\t\t\t\t\t\t\t<GlobeIcon useHDVariant={true} color={theme.colors.white} />\r\n\t\t\t\t\t\t\t\t</IconWrapper>\r\n\t\t\t\t\t\t\t\t<TitleWrapper>Valio Global</TitleWrapper>\r\n\t\t\t\t\t\t\t</InlinePart>\r\n\t\t\t\t\t\t\t<SplitPart>\r\n\t\t\t\t\t\t\t\t<TextWrapper>Local Valio contact info and available Valio products in different countries.</TextWrapper>\r\n\t\t\t\t\t\t\t\t<ButtonWrapper>\r\n\t\t\t\t\t\t\t\t\t<WhiteButton\r\n\t\t\t\t\t\t\t\t\t\thref=\"https://www.valio.com/countries/\"\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor={theme.colors.white}\r\n\t\t\t\t\t\t\t\t\t\tcolor={theme.colors.brandPrimary}\r\n\t\t\t\t\t\t\t\t\t\tbackgroundHoverColor={theme.colors.buttonHoverBackground}\r\n\t\t\t\t\t\t\t\t\t\thoverColor={theme.colors.bodyText}\r\n\t\t\t\t\t\t\t\t\t\tsize={'medium'}>\r\n\t\t\t\t\t\t\t\t\t\tFind your Country\r\n\t\t\t\t\t\t\t\t\t</WhiteButton>\r\n\t\t\t\t\t\t\t\t</ButtonWrapper>\r\n\t\t\t\t\t\t\t</SplitPart>\r\n\t\t\t\t\t\t</ContentRow>\r\n\t\t\t\t\t</CenteredContentWrapper>\r\n\t\t\t\t</ValioGlobalWrapper>\r\n\t\t\t</GridWrapper>\r\n\t\t</AppletWrapper>\r\n\t) : null;\r\n};\r\n\r\nexport default WelcomeScreenApplet;\r\n","import WelcomeScreenApplet from './WelcomeScreenApplet';\r\nexport default WelcomeScreenApplet;\r\n","import { createAsyncAction, ActionType, getType } from 'typesafe-actions';\r\nimport { WeeklyMenuState, WeeklyMenuContent } from 'common/components/WeeklyMenu/interfaces';\r\n\r\nexport const weeklyMenuAppletActions = {\r\n\tfetchWeeklyMenu: createAsyncAction(\r\n\t\t'WEEKLY_MENU_APPLET/FETCH',\r\n\t\t'WEEKLY_MENU_APPLET/SUCCESS',\r\n\t\t'WEEKLY_MENU_APPLET/ERROR'\r\n\t)<undefined, WeeklyMenuContent, string>(),\r\n};\r\n\r\nexport type WeeklyMenuAppletActions = ActionType<typeof weeklyMenuAppletActions>;\r\n\r\nexport function weeklyMenuAppletReducer(state: WeeklyMenuState, action: WeeklyMenuAppletActions): WeeklyMenuState {\r\n\tif (action.type === getType(weeklyMenuAppletActions.fetchWeeklyMenu.request)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: true,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(weeklyMenuAppletActions.fetchWeeklyMenu.success)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: false,\r\n\t\t\tweeklyMenu: action.payload,\r\n\t\t};\r\n\t}\r\n\r\n\tif (action.type === getType(weeklyMenuAppletActions.fetchWeeklyMenu.failure)) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: false,\r\n\t\t\terror: action.payload.toString(),\r\n\t\t};\r\n\t}\r\n\r\n\treturn state;\r\n}\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { media } from 'styleguide/helpers';\r\nimport { getScrollbarWidth } from 'utils/document';\r\nimport { ContentWrapper } from 'common/components/General';\r\nimport { MapStateToProps, connect } from 'react-redux';\r\nimport { State } from 'common/reducers';\r\nimport { getSiteUrlPrefixOrDefault, getSiteUrlId } from 'common/components/App/services';\r\nimport { weeklyMenuAppletReducer, weeklyMenuAppletActions } from './reducers';\r\nimport { WeeklyMenuState } from 'common/components/WeeklyMenu/interfaces';\r\nimport WeeklyMenu from 'common/components/WeeklyMenu/WeeklyMenu';\r\nimport { fetchWeeklyMenu } from './api';\r\nimport LoadingSpinner from 'common/components/Loading/LoadingSpinner';\r\n\r\nconst WeeklyMenuSection = styled.section`\r\n\tbackground: ${({ theme }) => theme.colors.widgetZoneFullWidthHighlighted};\r\n\twidth: 100vw;\r\n\r\n\t${media.desktop`\r\n\t\twidth: calc(100vw - ${getScrollbarWidth()}px);\r\n\t`};\r\n`;\r\n\r\nconst initialState: WeeklyMenuState = {\r\n\tisLoading: false,\r\n};\r\n\r\nconst WeeklyMenuApplet: React.FC<WeeklyMenuAppletStateProps> = ({ siteUrlPrefix, siteUrlId }) => {\r\n\tconst [state, dispatch] = React.useReducer<typeof weeklyMenuAppletReducer>(weeklyMenuAppletReducer, initialState);\r\n\tconst { isLoading, error, weeklyMenu } = state;\r\n\r\n\tReact.useEffect(() => {\r\n\t\tdispatch(weeklyMenuAppletActions.fetchWeeklyMenu.request());\r\n\t\tfetchWeeklyMenu(siteUrlId, dispatch);\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<WeeklyMenuSection>\r\n\t\t\t<ContentWrapper>\r\n\t\t\t\t{isLoading && <LoadingSpinner />}\r\n\t\t\t\t{!isLoading && !error && weeklyMenu && <WeeklyMenu {...state} siteUrlPrefix={siteUrlPrefix} isStatic={true} />}\r\n\t\t\t</ContentWrapper>\r\n\t\t</WeeklyMenuSection>\r\n\t);\r\n};\r\n\r\ninterface WeeklyMenuAppletStateProps {\r\n\tsiteUrlPrefix: string;\r\n\tsiteUrlId: string;\r\n}\r\n\r\nconst mapStateToProps: MapStateToProps<WeeklyMenuAppletStateProps, {}, State> = ({\r\n\tapp,\r\n\trouting,\r\n}): WeeklyMenuAppletStateProps => {\r\n\tconst sites = (app.settings && app.settings.sites) || [];\r\n\treturn {\r\n\t\tsiteUrlPrefix: getSiteUrlPrefixOrDefault(routing, sites, '/'),\r\n\t\tsiteUrlId: getSiteUrlId(routing, sites) || '',\r\n\t};\r\n};\r\n\r\nexport default connect(mapStateToProps)(WeeklyMenuApplet);\r\n","import { getWeeklyMenu } from 'common/components/WeeklyMenu/services';\r\nimport { weeklyMenuAppletActions, WeeklyMenuAppletActions } from './reducers';\r\n\r\nexport const fetchWeeklyMenu = async (siteUrlId: string, dispatch: React.Dispatch<WeeklyMenuAppletActions>) => {\r\n\ttry {\r\n\t\tconst result = await getWeeklyMenu(siteUrlId);\r\n\t\tdispatch(weeklyMenuAppletActions.fetchWeeklyMenu.success(result));\r\n\t} catch (error) {\r\n\t\tdispatch(weeklyMenuAppletActions.fetchWeeklyMenu.failure('applet_weekly_menu_error'));\r\n\t}\r\n};\r\n","import WeeklyMenuApplet from './WeeklyMenuApplet';\r\nexport default WeeklyMenuApplet;\r\n","import { IntlShape } from 'react-intl';\r\nimport { PointsCalculatorData, PointsCalculatorHelper } from '../common/PointsCalculatorHelper';\r\n\r\nclass LactoseIntoleranceCalculator extends PointsCalculatorHelper {\r\n\tconstructor(intl: IntlShape) {\r\n\t\tsuper(intl, 'lactose');\r\n\t}\r\n\r\n\tpublic get data(): PointsCalculatorData {\r\n\t\treturn {\r\n\t\t\tquestions: Array.from(Array(11).keys())\r\n\t\t\t\t.slice(1)\r\n\t\t\t\t.map((val, idx) => ({\r\n\t\t\t\t\tid: `question_${val}`,\r\n\t\t\t\t\tmultiSelect: false,\r\n\t\t\t\t\titems: [1, 0],\r\n\t\t\t\t\tisHidden: idx !== 0,\r\n\t\t\t\t})),\r\n\t\t};\r\n\t}\r\n\r\n\tprotected getIndex(points: number) {\r\n\t\tif (points >= 3) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tprotected getMessage(index: number, points: number): string {\r\n\t\treturn this.intl.formatMessage({\r\n\t\t\tid: `applet_${this.name}_result_index_${index}`,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getSummary(index: number): string {\r\n\t\treturn this.intl.formatMessage({ id: `applet_${this.name}_result_summary_${index}` });\r\n\t}\r\n}\r\n\r\nexport default LactoseIntoleranceCalculator;\r\n","import * as React from 'react';\r\nimport { IntlShape } from 'react-intl';\r\nimport { AppletCommonProps } from '../types';\r\nimport LactoseIntoleranceCalculatorHelper from './LactoseIntoleranceCalculatorHelper';\r\nimport PointsCalculatorApplet, { SingleSelectQuestionType } from '../common/PointsCalculatorApplet';\r\nimport NutritionIcon from 'styleguide/components/Icons/AspectGroupIcons/NutritionIcon/NutritionIcon';\r\n\r\nconst createHelper = (intl: IntlShape) => new LactoseIntoleranceCalculatorHelper(intl);\r\n\r\nconst LactoseIntoleranceCalculator: React.FC<AppletCommonProps> = props => {\r\n\treturn (\r\n\t\t<PointsCalculatorApplet\r\n\t\t\t{...props}\r\n\t\t\tsingleSelectInputType={SingleSelectQuestionType.Radio}\r\n\t\t\tname=\"lactose\"\r\n\t\t\thelper={createHelper}\r\n\t\t\ticon={<NutritionIcon />}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default LactoseIntoleranceCalculator;\r\n","import LactoseIntoleranceCalculator from './LactoseIntoleranceCalculator';\r\nexport default LactoseIntoleranceCalculator;\r\n","import { postJson } from 'utils/service';\r\nimport { CouponPayload } from './interface';\r\n\r\nasync function orderCoupon(siteUrlId: string, payload: CouponPayload) {\r\n\treturn await postJson(`/api/sites/${siteUrlId}/clearon/`, payload, false);\r\n}\r\n\r\nexport const clearOnApi = {\r\n\torderCoupon,\r\n};\r\n\r\nexport type ClearOnApi = typeof clearOnApi;\r\n","import * as React from 'react';\r\nimport { useForm } from 'react-hook-form/dist/react-hook-form.ie11';\r\nimport Input from 'styleguide/components/Inputs/Input';\r\nimport { useIntl, FormattedMessage } from 'react-intl';\r\nimport { ValidationPatterns } from 'common/components/Forms/helpers';\r\nimport SmallHeader from 'styleguide/components/Typography/SmallHeader';\r\nimport { Button } from 'styleguide/components/Buttons/Button';\r\nimport styled from 'styled-components';\r\nimport { media } from 'styleguide/helpers';\r\nimport { ContentWrapper } from 'common/components/General';\r\nimport { WIDGET_SPACING_MEDIUM, TEXT_WIDTH_NARROW, TEXT_WIDTH } from 'common/components/Widgets/constants';\r\nimport { CouponStates } from './interface';\r\nimport LoadingSpinner from 'common/components/Loading/LoadingSpinner';\r\nimport Alert, { AlertType } from 'styleguide/components/Typography/Alert';\r\nimport { clearOnApi } from './services';\r\nimport { MapStateToProps, connect } from 'react-redux';\r\nimport { AppletCommonProps } from '../types';\r\nimport { State } from 'common/reducers';\r\nimport { getSiteUrlId } from 'common/components/App/services';\r\n\r\nconst ClearOnWrapper = styled.article`\r\n\tbackground: ${({ theme }) => theme.colors.contentSectionHiglighted};\r\n\ttext-align: center;\r\n\tpadding: ${WIDGET_SPACING_MEDIUM}px 0;\r\n`;\r\n\r\nconst Form = styled.form`\r\n\twidth: 100%;\r\n\tmax-width: ${TEXT_WIDTH_NARROW}px;\r\n\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\r\n\t${media.desktop1440`\r\n max-width: ${TEXT_WIDTH}px;\r\n `};\r\n\r\n\t.coupon-error {\r\n\t\tmargin-top: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\t}\r\n\r\n\t.loading-spinner {\r\n\t\tmargin: ${({ theme }) => theme.grid.gutterInPx(3)} auto;\r\n\t}\r\n`;\r\n\r\nconst Fields = styled.div`\r\n\twidth: 100%;\r\n\r\n\t${media.tablet`\r\n\t\tdisplay: flex;\t\t\r\n\r\n\t\t.form-field {\r\n\t\t\tflex: 1 1 calc(50% - ${({ theme }) => theme.grid.gutterInPx(3)});\r\n\r\n\t\t\t& + .form-field {\r\n\t\t\t\tmargin-left: ${({ theme }) => theme.grid.gutterInPx(3)};\r\n\t\t\t}\r\n\r\n\t\t\t.help-text {\r\n\t\t\t\ttext-align: left;\r\n\t\t\t}\r\n\t\t}\r\n\t`};\r\n`;\r\n\r\nconst SubmitButton = styled(Button)`\r\n\tmargin: ${({ theme }) => theme.grid.gutterInPx(3)} auto 0;\r\n`;\r\n\r\ninterface ClearOnFormData {\r\n\temail?: string;\r\n\tmobile?: string;\r\n}\r\n\r\ntype Props = StateProps & AppletCommonProps;\r\n\r\nconst ClearOn: React.FC<Props> = ({ siteUrlId, parameters }) => {\r\n\tconst intl = useIntl();\r\n\r\n\tconst [couponState, setCouponState] = React.useState<CouponStates>('COUPON_FORM');\r\n\tconst { handleSubmit, errors, register, getValues, reset, watch } = useForm<ClearOnFormData>();\r\n\r\n\tconst onSubmit = async (values: ClearOnFormData) => {\r\n\t\ttry {\r\n\t\t\tsetCouponState('COUPON_REQUEST');\r\n\t\t\tawait clearOnApi.orderCoupon(siteUrlId, { campaignId: parameters, email: values.email, mobile: values.mobile });\r\n\t\t\tsetCouponState('COUPON_CONFIRMATION');\r\n\t\t\treset();\r\n\t\t} catch (error) {\r\n\t\t\tsetCouponState('COUPON_ERROR');\r\n\t\t}\r\n\t};\r\n\r\n\tconst conditionallyRequired = (message: string, value?: string, otherValue?: string) => {\r\n\t\tif (!value && !otherValue) {\r\n\t\t\treturn message;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\tlet titleId = 'applet_clearon_title';\r\n\tif (couponState === 'COUPON_CONFIRMATION') {\r\n\t\ttitleId = 'applet_clearon_confirmation_title';\r\n\t}\r\n\r\n\tconst watchEmail = watch('email');\r\n\tconst watchMobile = watch('mobile');\r\n\r\n\treturn (\r\n\t\t<ClearOnWrapper>\r\n\t\t\t<ContentWrapper>\r\n\t\t\t\t<SmallHeader>\r\n\t\t\t\t\t<FormattedMessage id={titleId} />\r\n\t\t\t\t</SmallHeader>\r\n\t\t\t\t{couponState !== 'COUPON_CONFIRMATION' && (\r\n\t\t\t\t\t<Form onSubmit={handleSubmit(onSubmit)}>\r\n\t\t\t\t\t\t<Fields>\r\n\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\t\t\tname=\"email\"\r\n\t\t\t\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'forms_email_address' })}\r\n\t\t\t\t\t\t\t\tvalidationError={errors.email?.message}\r\n\t\t\t\t\t\t\t\thelpText={intl.formatMessage({ id: 'applet_clearon_email_help' })}\r\n\t\t\t\t\t\t\t\tdisabled={!!watchMobile}\r\n\t\t\t\t\t\t\t\tref={register({\r\n\t\t\t\t\t\t\t\t\tvalidate: value =>\r\n\t\t\t\t\t\t\t\t\t\tconditionallyRequired(\r\n\t\t\t\t\t\t\t\t\t\t\tintl.formatMessage({ id: 'applet_clearon_email_mobile_error' }),\r\n\t\t\t\t\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t\t\t\t\t\tgetValues().mobile\r\n\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\tpattern: {\r\n\t\t\t\t\t\t\t\t\t\tvalue: new RegExp(ValidationPatterns.EMAIL),\r\n\t\t\t\t\t\t\t\t\t\tmessage: intl.formatMessage({ id: 'forms_validation_email_check' }),\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\tname=\"mobile\"\r\n\t\t\t\t\t\t\t\tplaceholder={intl.formatMessage({ id: 'applet_clearon_mobile' })}\r\n\t\t\t\t\t\t\t\tvalidationError={errors.mobile?.message}\r\n\t\t\t\t\t\t\t\thelpText={intl.formatMessage({ id: 'applet_clearon_mobile_help' })}\r\n\t\t\t\t\t\t\t\tdisabled={!!watchEmail}\r\n\t\t\t\t\t\t\t\tref={register({\r\n\t\t\t\t\t\t\t\t\tvalidate: value =>\r\n\t\t\t\t\t\t\t\t\t\tconditionallyRequired(\r\n\t\t\t\t\t\t\t\t\t\t\tintl.formatMessage({ id: 'applet_clearon_email_mobile_error' }),\r\n\t\t\t\t\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t\t\t\t\t\tgetValues().email\r\n\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Fields>\r\n\t\t\t\t\t\t{couponState === 'COUPON_ERROR' && (\r\n\t\t\t\t\t\t\t<Alert\r\n\t\t\t\t\t\t\t\ttype={AlertType.Error}\r\n\t\t\t\t\t\t\t\tclassName=\"coupon-error\"\r\n\t\t\t\t\t\t\t\thighlightedText={`${intl.formatMessage({ id: 'global_error' })}:`}>\r\n\t\t\t\t\t\t\t\t{intl.formatMessage({ id: 'applet_clearon_send_error' })}\r\n\t\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{couponState === 'COUPON_REQUEST' && <LoadingSpinner className=\"loading-spinner\" />}\r\n\t\t\t\t\t\t<SubmitButton type=\"submit\" disabled={couponState === 'COUPON_REQUEST'}>\r\n\t\t\t\t\t\t\tGet coupon\r\n\t\t\t\t\t\t</SubmitButton>\r\n\t\t\t\t\t</Form>\r\n\t\t\t\t)}\r\n\t\t\t\t{couponState === 'COUPON_CONFIRMATION' && intl.formatMessage({ id: 'applet_clearon_confirmation' })}\r\n\t\t\t</ContentWrapper>\r\n\t\t</ClearOnWrapper>\r\n\t);\r\n};\r\n\r\ninterface StateProps {\r\n\tsiteUrlId: string;\r\n}\r\n\r\nconst mapStateToProps: MapStateToProps<StateProps, AppletCommonProps, State> = ({ routing, app }): StateProps => {\r\n\tconst sites = app.settings?.sites || [];\r\n\tconst siteUrlId = getSiteUrlId(routing, sites)!;\r\n\treturn {\r\n\t\tsiteUrlId,\r\n\t};\r\n};\r\n\r\nexport default connect(mapStateToProps)(ClearOn);\r\n","import ClearOn from './ClearOn';\r\nexport default ClearOn;\r\n","import * as React from 'react';\r\nimport HighlightedLink from 'styleguide/components/Links/HighlightedLink/HighlightedLink';\r\nimport injectRoutable, { InjectedRoutableProps } from 'common/components/Routing/Routable';\r\nimport HighlightedLinkSection from 'common/components/HighlightedLinkSection/HighlightedLinkSection';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\ninterface SiteDefinitionProps {\r\n\tsiteUrlPrefix: string;\r\n}\r\n\r\ntype ClassificationsProps = SiteDefinitionProps & InjectedRoutableProps;\r\n\r\nconst Classifications: React.FC<ClassificationsProps> = ({ siteUrlPrefix }) => {\r\n\treturn (\r\n\t\t<HighlightedLinkSection>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=laktoositon`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_lactose_free\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?brandi=valio-luomu`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_organic\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=vahemman-suolaa`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_less_salt\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=runsaasti-proteiinia`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_protein_rich\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=gluteeniton`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_gluten_free\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=maidoton`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_dairy_free\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=lisaaineeton`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_additive_free\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=sydanmerkki`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_heart_symbol\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?muut-sisaltaa=lgg-maitohappobakteeria`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_lgg_lactic_acid_bacteria\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=hyvaa-suomesta`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_quality_from_finland\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t\t<HighlightedLink href={`${siteUrlPrefix}tuotteet/haku/?ominaisuudet=vegaaninen`} target=\"\">\r\n\t\t\t\t<FormattedMessage id=\"product_classification_vegan\" />\r\n\t\t\t</HighlightedLink>\r\n\t\t</HighlightedLinkSection>\r\n\t);\r\n};\r\n\r\nexport default injectRoutable(Classifications);\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport MediumHeader from 'styleguide/components/Typography/MediumHeader';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport Ingress from 'styleguide/components/Typography/Ingress';\r\nimport Classifications from './components/Classifications';\r\nimport IngredientSelectors from './components/IngredientSelectors';\r\nimport { ProductFeatures } from './interfaces';\r\nimport { WIDGET_SPACING_MEDIUM } from 'common/components/Widgets/constants';\r\nimport { MapStateToProps, connect } from 'react-redux';\r\nimport { AppletCommonProps } from '../types';\r\nimport { State } from 'common/reducers';\r\nimport { ProductFrontState } from 'pagetypes/ProductFront/reducers/reducers';\r\nimport { getSiteUrlPrefixOrDefault } from 'common/components/App/services';\r\n\r\nconst FeaturesAndIngredientsWrapper = styled.div`\r\n\tmargin: ${WIDGET_SPACING_MEDIUM}px auto;\r\n`;\r\n\r\nconst FeaturesAndIngredientsHeader = styled(MediumHeader)`\r\n\ttext-align: center;\r\n`;\r\n\r\ntype Props = AppletCommonProps & StateProps;\r\n\r\nconst ProductFeatureBrowser: React.FC<Props> = ({ siteUrlPrefix, aspects }) => {\r\n\tconst intl = useIntl();\r\n\r\n\tconst onIngredientSelect = (value: string, filter: string) => {\r\n\t\twindow.location.href = `${siteUrlPrefix}${intl.formatMessage({ id: 'url_product_search' })}?${filter}=${value}`;\r\n\t};\r\n\treturn (\r\n\t\t<FeaturesAndIngredientsWrapper>\r\n\t\t\t<FeaturesAndIngredientsHeader>\r\n\t\t\t\t<FormattedMessage id=\"product_features_and_ingredients\" />\r\n\t\t\t</FeaturesAndIngredientsHeader>\r\n\t\t\t<Ingress>\r\n\t\t\t\t<FormattedMessage id=\"product_features_and_ingredients_lead_text\" />\r\n\t\t\t</Ingress>\r\n\t\t\t<Classifications siteUrlPrefix={siteUrlPrefix} />\r\n\t\t\t<IngredientSelectors aspects={aspects} onIngredientSelect={onIngredientSelect} />\r\n\t\t</FeaturesAndIngredientsWrapper>\r\n\t);\r\n};\r\n\r\ninterface StateProps {\r\n\taspects: ProductFeatures;\r\n\tsiteUrlPrefix: string;\r\n}\r\n\r\nconst mapStateToProps: MapStateToProps<StateProps, AppletCommonProps, State> = ({\r\n\tresource,\r\n\trouting,\r\n\tapp,\r\n}): StateProps => {\r\n\tconst productFront = resource.content as ProductFrontState;\r\n\tconst sites = (app.settings && app.settings.sites) || [];\r\n\treturn {\r\n\t\taspects: productFront?.aspects,\r\n\t\tsiteUrlPrefix: getSiteUrlPrefixOrDefault(routing, sites, '/'),\r\n\t};\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProductFeatureBrowser);\r\n","import ProductFeatureBrowser from './ProductFeatureBrowser';\r\nexport default ProductFeatureBrowser;\r\n","import { PackageMarkProps } from 'styleguide/components/Icons/PackageMark/PackageMark';\r\n\r\nexport enum FeatureExistsType {\r\n\texists = 'exists',\r\n\texistsWithCaret = 'existsWithCaret',\r\n\tnotExists = 'notExists',\r\n}\r\n\r\nexport enum AgedUnit {\r\n\tdays,\r\n\tmonths,\r\n}\r\n\r\nexport interface FCComparisonConfig {\r\n\tkey: string;\r\n\tproductImages?: string[];\r\n}\r\n\r\nexport interface ProductAged {\r\n\tvalue: string;\r\n\tunit: AgedUnit;\r\n}\r\n\r\nexport interface FeatureStatus {\r\n\ticonType?: FeatureExistsType;\r\n\tfeatureKey?: string;\r\n\taged?: ProductAged;\r\n\tpackageMark?: PackageMarkProps;\r\n}\r\n\r\nexport interface HeaderItem {\r\n\ttitle: string;\r\n\timage?: PackageMarkProps;\r\n}\r\n\r\nexport interface ProductItem {\r\n\ttitle: string;\r\n\timageUrl?: string;\r\n\tfeatures: FeatureStatus[];\r\n}\r\n\r\nexport interface ProductData {\r\n\theader: HeaderItem[];\r\n\tproducts: ProductItem[];\r\n}\r\n\r\nconst defaultHeaderImageProps = () => ({\r\n\twidth: '126px',\r\n\theight: '126px',\r\n});\r\n\r\nconst productDataConfig = (): { [key: string]: ProductData } => ({\r\n\t['DeliLoaves']: {\r\n\t\theader: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'products',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'origin_type',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'free_of_artificial_hormones',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnoartificialhormones',\r\n\t\t\t\t\tname: 'Free of Artificial Hormones',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'good_source_of_protein_calcium',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fccalciumproteinsource',\r\n\t\t\t\t\tname: 'Good Source of Protein/Calcium',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'non_gmo_ingredients',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnongmo',\r\n\t\t\t\t\tname: 'Non GMO',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'naturally_lactose_free',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fclactosefree',\r\n\t\t\t\t\tname: 'Naturally Lactose Free',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'aged',\r\n\t\t\t},\r\n\t\t],\r\n\t\tproducts: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Gouda',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.existsWithCaret,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Lacey Swiss',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.existsWithCaret,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Swiss - Sandwich Cut',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.existsWithCaret,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.days,\r\n\t\t\t\t\t\t\tvalue: '100',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Swiss - High Cut',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.existsWithCaret,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.days,\r\n\t\t\t\t\t\t\tvalue: '100',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Light Swiss',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.existsWithCaret,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.days,\r\n\t\t\t\t\t\t\tvalue: '60',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Sharp White Cheddar',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_domestic',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Sharp Yellow Cheddar',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_domestic',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Havarti',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_domestic',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Pepper Jack',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_domestic',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Muenster',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.days,\r\n\t\t\t\t\t\t\tvalue: '60',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Lappi',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\t['Butter']: {\r\n\t\theader: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'products',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'origin_type',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'free_of_artificial_hormones',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnoartificialhormones',\r\n\t\t\t\t\tname: 'Free of Artificial Hormones',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'good_source_of_protein_calcium',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fccalciumproteinsource',\r\n\t\t\t\t\tname: 'Good Source of Protein/Calcium',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'non_gmo_ingredients',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnongmo',\r\n\t\t\t\t\tname: 'Non GMO',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'naturally_lactose_free',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fclactosefree',\r\n\t\t\t\t\tname: 'Naturally Lactose Free',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'kosher',\r\n\t\t\t},\r\n\t\t],\r\n\t\tproducts: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Perfectly Salted Imported Butter',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpackageMark: {\r\n\t\t\t\t\t\t\ttype: 'kosherTriangle',\r\n\t\t\t\t\t\t\tname: 'Kosher',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Unsalted Imported Butter',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpackageMark: {\r\n\t\t\t\t\t\t\ttype: 'kosherTriangle',\r\n\t\t\t\t\t\t\tname: 'Kosher',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\t['CheeseSlices']: {\r\n\t\theader: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'products',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'origin_type',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'free_of_artificial_hormones',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnoartificialhormones',\r\n\t\t\t\t\tname: 'Free of Artificial Hormones',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'good_source_of_protein_calcium',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fccalciumproteinsource',\r\n\t\t\t\t\tname: 'Good Source of Protein/Calcium',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'non_gmo_ingredients',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnongmo',\r\n\t\t\t\t\tname: 'Non GMO',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'naturally_lactose_free',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fclactosefree',\r\n\t\t\t\t\tname: 'Naturally Lactose Free',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'aged',\r\n\t\t\t},\r\n\t\t],\r\n\t\tproducts: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Swiss Imported Premium Cheese Slices',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.days,\r\n\t\t\t\t\t\t\tvalue: '100',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Muenster Imported Premium Cheese Slices',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Havarti Imported Premium Cheese Slices',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Gouda Imported Premium Cheese Slices',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Cheddar-Gruyere Imported Premium Cheese Slices',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\t['SpecialityCheese']: {\r\n\t\theader: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'products',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'origin_type',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'free_of_artificial_hormones',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnoartificialhormones',\r\n\t\t\t\t\tname: 'Free of Artificial Hormones',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'good_source_of_protein_calcium',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fccalciumproteinsource',\r\n\t\t\t\t\tname: 'Good Source of Protein/Calcium',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'non_gmo_ingredients',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fcnongmo',\r\n\t\t\t\t\tname: 'Non GMO',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'naturally_lactose_free',\r\n\t\t\t\timage: {\r\n\t\t\t\t\ttype: 'fclactosefree',\r\n\t\t\t\t\tname: 'Naturally Lactose Free',\r\n\t\t\t\t\t...defaultHeaderImageProps(),\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'aged',\r\n\t\t\t},\r\n\t\t],\r\n\t\tproducts: [\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Gouda-Parmesan',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.months,\r\n\t\t\t\t\t\t\tvalue: '7',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Cheddar-Gruyere',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.days,\r\n\t\t\t\t\t\t\tvalue: '60',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Gruyere',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taged: {\r\n\t\t\t\t\t\t\tunit: AgedUnit.months,\r\n\t\t\t\t\t\t\tvalue: '6',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Forte Classico',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Gran Regale',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Spreadable cheese, Original',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: 'Spreadable cheese, Chanterelle Mushroom',\r\n\t\t\t\tfeatures: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfeatureKey: 'origin_imported',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.exists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ticonType: FeatureExistsType.notExists,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n});\r\n\r\nexport const getComparisonData = (configMap: FCComparisonConfig): ProductData | undefined => {\r\n\tconst config = productDataConfig();\r\n\r\n\tif (config[configMap.key]) {\r\n\t\tconst comparisonData = config[configMap.key];\r\n\r\n\t\tif (configMap.productImages && configMap.productImages.length > 0) {\r\n\t\t\tfor (let index = 0; index < comparisonData.products.length; index++) {\r\n\t\t\t\tif (configMap.productImages.length >= index + 1) {\r\n\t\t\t\t\tcomparisonData.products[index].imageUrl = configMap.productImages[index];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn comparisonData;\r\n\t}\r\n\r\n\treturn undefined;\r\n};\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { PackageMark } from 'styleguide/components/Icons';\r\nimport { FcCheckIcon, FcXMarkIcon } from 'styleguide/components/Icons/NormalIcons';\r\nimport { AppletCommonProps } from '../types';\r\nimport { media } from 'styleguide/helpers';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n\tAgedUnit,\r\n\tFCComparisonConfig,\r\n\tFeatureExistsType,\r\n\tFeatureStatus,\r\n\tgetComparisonData,\r\n\tProductAged,\r\n} from './FCProductComparisonHelper';\r\n\r\nconst AppletWrapper = styled.div`\r\n\tfont-family: ${({ theme }) => theme.fonts.primary};\r\n`;\r\n\r\nconst GridItemBase = styled.div`\r\n\tdisplay: flex;\r\n\tpadding: 8px;\r\n\tmargin: 0;\r\n\tflex-direction: column;\r\n\tjustify-content: center;\r\n\talign-items: center;\r\n\tflex-wrap: wrap;\r\n`;\r\n\r\nconst HeaderItem = styled(GridItemBase)`\r\n\tfont-weight: 900;\r\n\tfont-size: 14px;\r\n\tdisplay: none;\r\n\tposition: sticky;\r\n\ttop: 70px;\r\n\tbackground: ${props => props.theme.colors.bodyBackground};\r\n\tz-index: 1;\r\n\r\n\t${media.tablet`\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tjustify-content: flex-end;\r\n\t`};\r\n\r\n\t${media.desktop`\r\n\t\ttop: 95px;\r\n\t`};\r\n`;\r\n\r\nconst ProductImage = styled.img`\r\n\tmax-height: 150px;\r\n\r\n\t${media.tablet`\r\n\t\tmax-height: 120px;\r\n\t\tmax-width: 120px;\r\n\t`};\r\n\r\n\t${media.desktop`\r\n\t\tmax-height: 150px;\r\n\t\tmax-width: none;\r\n\t`};\r\n`;\r\n\r\nconst ProductItem = styled(GridItemBase)`\r\n\tfont-size: 14px;\r\n\r\n\t${media.tablet`\r\n\t\t> img:not(${ProductImage}) {\r\n\t\t\tmax-width: 70px;\r\n\t\t}\r\n\t`};\r\n\t${media.desktop`\r\n\t> img:not(${ProductImage}) {\r\n\t\tmax-width: 100px;\r\n\t}\r\n\t`};\r\n`;\r\n\r\nconst ProductInfoItem = styled(ProductItem)`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\r\n\tborder-top: 10px solid ${props => props.theme.colors.border};\r\n\r\n\t${media.tablet`\r\nborder-top: none;\r\n`};\r\n`;\r\n\r\nconst GridWrapper = styled.div<{ columnCount: number }>`\r\n\tdisplay: grid;\r\n\tgrid-template-columns: 1;\r\n\r\n\t& ${GridItemBase} {\r\n\t\tborder-bottom: 1px solid ${props => props.theme.colors.border};\r\n\t}\r\n\r\n\t& ${HeaderItem} {\r\n\t\tborder-bottom: 2px solid ${props => props.theme.colors.border};\r\n\t}\r\n\r\n\t& ${ProductInfoItem} {\r\n\t\tmargin-top: 20px;\r\n\t}\r\n\r\n\t${media.tablet<{ columnCount: number }>`\r\n\t\tgrid-template-columns: repeat(${props => props.columnCount}, 1fr);\r\n\r\n\t\t& ${GridItemBase}:nth-last-child(-n+${props => props.columnCount}) {\r\n\t\t\tborder-bottom: none;\r\n\t\t}\r\n\r\n\t\t& ${ProductInfoItem} {\r\n\t\t\tmargin-top: 0;\r\n\t\t}\r\n\t`};\r\n`;\r\n\r\nconst HeaderTitle = styled.span`\r\n\ttext-align: center;\r\n`;\r\n\r\nconst ProductTitle = styled.span`\r\n\talign-self: center;\r\n\ttext-align: center;\r\n`;\r\n\r\nconst ItemTitle = styled.span`\r\n\talign-self: center;\r\n\tfont-weight: 600;\r\n\tpadding: 4px 0;\r\n\tdisplay: flex;\r\n\r\n\t${media.tablet`\r\n\t\tdisplay: none;\r\n\t`};\r\n`;\r\n\r\nconst ItemValue = styled.span`\r\n\talign-self: center;\r\n`;\r\n\r\nconst PackageSymbolWrapper = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tmargin: -10px;\r\n\r\n\t& > div {\r\n\t\tmargin: 10px;\r\n\t}\r\n\twidth: 110px;\r\n\theight: 118px;\r\n\r\n\t${media.desktop`\r\n\t\twidth: auto;\r\n\t\theight: auto;\r\n`};\r\n`;\r\n\r\nfunction FeatureIcon(status: FeatureStatus) {\r\n\tswitch (status.iconType) {\r\n\t\tcase FeatureExistsType.exists:\r\n\t\t\treturn <FcCheckIcon />;\r\n\t\tcase FeatureExistsType.existsWithCaret:\r\n\t\t\treturn <FcCheckIcon iconType=\"withCaret\" />;\r\n\t\tcase FeatureExistsType.notExists:\r\n\t\t\treturn <FcXMarkIcon />;\r\n\t\tdefault:\r\n\t\t\treturn <></>;\r\n\t}\r\n}\r\n\r\nfunction AgedComponent(aged: ProductAged) {\r\n\tconst intl = useIntl();\r\n\tconst messageKey =\r\n\t\taged.unit === AgedUnit.days ? 'applet_product_comparison_aged_days' : 'applet_product_comparison_aged_months';\r\n\r\n\treturn <ItemValue>{intl.formatMessage({ id: messageKey }, { agedTime: aged.value })}</ItemValue>;\r\n}\r\n\r\nfunction parseParameters(parameters: string): FCComparisonConfig {\r\n\tconst parameterArray = parameters.split(' ');\r\n\r\n\tconst config: FCComparisonConfig = { key: '' };\r\n\r\n\tif (parameterArray.length > 0) {\r\n\t\tconfig.key = parameterArray[0];\r\n\t}\r\n\r\n\tif (parameterArray.length > 1) {\r\n\t\tconfig.productImages = parameterArray.slice(1);\r\n\t}\r\n\r\n\treturn config;\r\n}\r\n\r\nexport function FCProductComparison(props: AppletCommonProps) {\r\n\tconst intl = useIntl();\r\n\tif (!props.parameters) {\r\n\t\treturn <></>;\r\n\t}\r\n\r\n\tconst configMap = parseParameters(props.parameters);\r\n\r\n\tconst data = getComparisonData(configMap);\r\n\r\n\tif (!data) {\r\n\t\treturn <></>;\r\n\t}\r\n\r\n\tconst getMessage = (key: string) => {\r\n\t\treturn intl.formatMessage({ id: `applet_product_comparison_${key}` });\r\n\t};\r\n\r\n\treturn (\r\n\t\t<AppletWrapper>\r\n\t\t\t<GridWrapper columnCount={data.header.length}>\r\n\t\t\t\t{data.header.map((headerValue, index) => (\r\n\t\t\t\t\t<HeaderItem key={`comparison-header-${index}`}>\r\n\t\t\t\t\t\t{!headerValue.image && <HeaderTitle>{getMessage(headerValue.title)}</HeaderTitle>}\r\n\t\t\t\t\t\t{headerValue.image && (\r\n\t\t\t\t\t\t\t<PackageSymbolWrapper>\r\n\t\t\t\t\t\t\t\t<PackageMark {...headerValue.image} />\r\n\t\t\t\t\t\t\t</PackageSymbolWrapper>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</HeaderItem>\r\n\t\t\t\t))}\r\n\t\t\t\t{data.products.map((product, productIndex) => (\r\n\t\t\t\t\t<React.Fragment key={`product-${productIndex}`}>\r\n\t\t\t\t\t\t<ProductInfoItem key={`product-info-${productIndex}`}>\r\n\t\t\t\t\t\t\t<ProductImage src={`${product.imageUrl}/150x150-product`} />\r\n\t\t\t\t\t\t\t<ProductTitle>{product.title}</ProductTitle>\r\n\t\t\t\t\t\t</ProductInfoItem>\r\n\t\t\t\t\t\t{product.features.map((feature, index) => (\r\n\t\t\t\t\t\t\t<ProductItem key={`product-item-${productIndex}-${index}`}>\r\n\t\t\t\t\t\t\t\t<ItemTitle>{getMessage(data.header[index + 1].title)}</ItemTitle>\r\n\t\t\t\t\t\t\t\t{feature.featureKey && <ItemValue>{getMessage(feature.featureKey)}</ItemValue>}\r\n\t\t\t\t\t\t\t\t{feature.iconType && <FeatureIcon {...feature} />}\r\n\t\t\t\t\t\t\t\t{feature.aged && <AgedComponent {...feature.aged} />}\r\n\t\t\t\t\t\t\t\t{feature.packageMark && <PackageMark {...feature.packageMark} />}\r\n\t\t\t\t\t\t\t</ProductItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t))}\r\n\t\t\t</GridWrapper>\r\n\t\t</AppletWrapper>\r\n\t);\r\n}\r\n","import { FCProductComparison } from './FCProductComparison';\r\nexport default FCProductComparison;\r\n","import * as React from 'react';\r\nimport styled, { ThemeContext } from 'styled-components';\r\nimport { WIDGET_SPACING_SMALL } from 'common/components/Widgets/constants';\r\nimport { TEXT_WIDTH_NARROW, TEXT_WIDTH } from 'common/components/Widgets/constants';\r\nimport { media } from 'styleguide/helpers';\r\nimport { Forms } from './types';\r\nimport { AppletCommonProps } from '../types';\r\nimport { connect, MapStateToProps } from 'react-redux';\r\nimport { State } from 'common/reducers';\r\nimport { getSiteEnvironment } from 'common/components/App/services';\r\n\r\nconst FormContainer = styled.iframe`\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tmax-width: ${({ theme }) => TEXT_WIDTH_NARROW + theme.grid.gutter * 2}px;\r\n\tfont-size: 15px;\r\n\tpadding: 0;\r\n\tmargin: ${WIDGET_SPACING_SMALL}px auto;\r\n\tdisplay: block;\r\n\tborder: 0;\r\n\toverflow: hidden;\r\n\r\n\t${media.tablet`\r\n\t\tpadding: 0;\r\n\t`};\r\n\r\n\t${media.desktop1440`\r\n max-width: ${({ theme }) => TEXT_WIDTH + theme.grid.gutter * 2}px;\r\n `};\r\n`;\r\n\r\ntype SupportedForms =\r\n\t| 'BabyFoodContactFormCOM'\r\n\t| 'ContactFormFI'\r\n\t| 'ContactFormCOM'\r\n\t| 'FastTrackWebinarCOM'\r\n\t| 'NewsletterFI'\r\n\t| 'NewsletterCOM'\r\n\t| 'TechnologyContactFormCOM'\r\n\t| 'WhitepaperLactoseFreeCOM'\r\n\t| 'WhitepaperPhospholipidsCOM'\r\n\t| 'JRH032021WebinarRecordingForm'\r\n\t| 'FSVitriinivinkit2021'\r\n\t| 'DigestiveWellnessWebinar';\r\n\r\nconst forms: Forms<SupportedForms> = {\r\n\t['BabyFoodContactFormCOM']: 'baby-food-contact-form.com',\r\n\t['ContactFormFI']: 'contact-form.fi',\r\n\t['ContactFormCOM']: 'contact-form.com',\r\n\t['FastTrackWebinarCOM']: 'fast-track-webinar.com',\r\n\t['NewsletterFI']: 'newsletter.fi',\r\n\t['NewsletterCOM']: 'newsletter.com',\r\n\t['TechnologyContactFormCOM']: 'technology-contact-form.com',\r\n\t['WhitepaperLactoseFreeCOM']: 'whitepaper-lactose-free.com',\r\n\t['WhitepaperPhospholipidsCOM']: 'whitepaper-phospholipids.com',\r\n\t['JRH032021WebinarRecordingForm']: 'JRH032021-webinar-recording-form',\r\n\t['FSVitriinivinkit2021']: 'FS-Vitriinivinkit-2021',\r\n\t['DigestiveWellnessWebinar']: 'digestive-wellness-webinar',\r\n};\r\n\r\nconst SapForm: React.FC<SapFormStateProps & AppletCommonProps> = ({ environment, parameters }) => {\r\n\tconst theme = React.useContext(ThemeContext);\r\n\tconst iframeRef = React.useRef<HTMLIFrameElement>(null);\r\n\r\n\tconst onLoad = () => {\r\n\t\tif (iframeRef.current) {\r\n\t\t\tiframeRef.current.style.height = iframeRef.current.contentWindow?.document.documentElement.scrollHeight\r\n\t\t\t\t? iframeRef.current.contentWindow?.document.documentElement.scrollHeight + theme.grid.gutter * 8 + 'px'\r\n\t\t\t\t: 0 + 'px';\r\n\t\t}\r\n\t};\r\n\r\n\tif (!forms[parameters]) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// const env = environment === 'prod' ? '.prod' : '';\r\n\tconst env = '';\r\n\r\n\treturn (\r\n\t\t<FormContainer src={`/content/Applets/SapForm/${forms[parameters]}${env}.html`} ref={iframeRef} onLoad={onLoad} />\r\n\t);\r\n};\r\n\r\ninterface SapFormStateProps {\r\n\tenvironment?: string;\r\n}\r\n\r\nconst mapStateToProps: MapStateToProps<SapFormStateProps, {}, State> = ({ app, routing }): SapFormStateProps => {\r\n\treturn {\r\n\t\tenvironment: app.settings ? getSiteEnvironment(routing, app.settings.sites) : undefined,\r\n\t};\r\n};\r\n\r\nexport default connect(mapStateToProps)(SapForm);\r\n","import SapForm from './SapForm';\r\nexport default SapForm;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { AppletCommonProps } from '../types';\r\n\r\nconst ContentIFrame = styled.iframe<{ height: string }>`\r\n\twidth: 100%;\r\n\tborder: none;\r\n\theight: ${({ height }) => height};\r\n\tmargin: 32px auto;\r\n`;\r\n\r\nconst FullScreenIFrame = styled.iframe`\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\tdisplay: block;\r\n\tborder: 0;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n`;\r\n\r\nfunction IFrame({ parameters }: AppletCommonProps) {\r\n\tif (!parameters) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst { height, src } = parseParameters(parameters);\r\n\tif (!src) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn height ? (\r\n\t\t<ContentIFrame height={height} src={src} scrolling=\"yes\" />\r\n\t) : (\r\n\t\t<FullScreenIFrame src={src} scrolling=\"yes\" />\r\n\t);\r\n}\r\n\r\nfunction parseParameters(parameters: string): { [key: string]: string } {\r\n\tconst parameterArray = parameters.split(' ');\r\n\tif (parameterArray.length < 2) {\r\n\t\treturn {\r\n\t\t\tsrc: parameterArray[0],\r\n\t\t};\r\n\t}\r\n\tconst parameterObject = {};\r\n\tparameterArray.forEach(parameter => {\r\n\t\tconst keyAndValue = parameter.split(/=(.*)/);\r\n\t\tparameterObject[keyAndValue[0]] = keyAndValue[1];\r\n\t});\r\n\treturn parameterObject;\r\n}\r\n\r\nexport default IFrame;\r\n","import IFrame from './IFrame';\r\nexport default IFrame;\r\n","import * as React from 'react';\r\nimport { AppletCommonProps } from '../types';\r\nimport styled from 'styled-components';\r\nimport { media } from 'styleguide/helpers';\r\nimport BackgroundVideo from 'styleguide/components/PicturesAndVideos/BackgroundVideo';\r\nimport { WIDGET_SPACING_SMALL, WIDGET_SPACING_MEDIUM } from 'common/components/Widgets/constants';\r\nimport { getScrollbarWidth } from 'utils/document';\r\nimport { ToggleMedia } from 'common/components/Media';\r\n\r\nconst AppletBackgroundVideo = styled(BackgroundVideo)`\r\n\tposition: relative;\r\n\twidth: 100vw;\r\n\tmargin-left: 0;\r\n\theight: 150px;\r\n\tmargin: ${WIDGET_SPACING_SMALL}px auto;\r\n\r\n\t${media.phone`\r\n\t\tmargin-left: ${({ theme }) => theme.grid.gutterInPx(-2)};\r\n\t`};\r\n\r\n\t${media.tablet`\r\n\t\theight: 300px;\r\n\t\tmargin: ${WIDGET_SPACING_MEDIUM}px auto;\r\n\t\tmargin-left: ${({ theme }) => theme.grid.gutterInPx(-5)};\r\n\t`};\r\n\r\n\t${media.desktop`\r\n\t\twidth: calc(100vw - ${getScrollbarWidth()}px);\r\n\t\tmargin: ${WIDGET_SPACING_MEDIUM}px calc(50% - 50vw + ${Math.floor(getScrollbarWidth() / 2)}px);\r\n\t`};\r\n\r\n\t& > div {\r\n\t\theight: 100%;\r\n\t}\r\n\r\n\tvideo {\r\n\t\tmax-height: 100%;\r\n\t}\r\n`;\r\n\r\nconst VideoRibbonApplet: React.FC<AppletCommonProps> = ({ parameters }) => {\r\n\tconst videoSources = parameters.split(',');\r\n\r\n\tif (videoSources.length > 1) {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<ToggleMedia displayType=\"block\" toggleType=\"hide\" breakpoint=\"tablet\">\r\n\t\t\t\t\t<AppletBackgroundVideo\r\n\t\t\t\t\t\tsources={[\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tsrc: videoSources[0],\r\n\t\t\t\t\t\t\t\ttype: 'mp4',\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]}\r\n\t\t\t\t\t\tloop\r\n\t\t\t\t\t/>\r\n\t\t\t\t</ToggleMedia>\r\n\t\t\t\t<ToggleMedia displayType=\"block\" toggleType=\"show\" breakpoint=\"tablet\">\r\n\t\t\t\t\t<AppletBackgroundVideo\r\n\t\t\t\t\t\tsources={[\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tsrc: videoSources[1],\r\n\t\t\t\t\t\t\t\ttype: 'mp4',\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]}\r\n\t\t\t\t\t\tloop\r\n\t\t\t\t\t/>\r\n\t\t\t\t</ToggleMedia>\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<AppletBackgroundVideo\r\n\t\t\tsources={[\r\n\t\t\t\t{\r\n\t\t\t\t\tsrc: videoSources[0],\r\n\t\t\t\t\ttype: 'mp4',\r\n\t\t\t\t},\r\n\t\t\t]}\r\n\t\t\tloop\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default VideoRibbonApplet;\r\n","import VideoRibbonApplet from './VideoRibbonApplet';\r\nexport default VideoRibbonApplet;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { WIDGET_SPACING_SMALL } from 'common/components/Widgets/constants';\r\nimport { AppletCommonProps } from '../types';\r\nimport { Helmet } from 'react-helmet';\r\n\r\nconst FormContainer = styled.iframe`\r\n\twidth: 100%;\r\n\tfont-size: 15px;\r\n\tpadding: 0;\r\n\tmargin: ${WIDGET_SPACING_SMALL}px auto;\r\n\tdisplay: block;\r\n\tborder: 0;\r\n\toverflow: hidden;\r\n`;\r\n\r\nconst Consulink: React.FC<AppletCommonProps> = ({ parameters: baseUrl }) => {\r\n\t// iframe\r\n\t// https://www.frieslandcampinaconsumentenservice.com/OddlyGood-NL-Service/nl/search/\r\n\r\n\t// script\r\n\t// https://www.frieslandcampinaconsumentenservice.com/OddlyGood-NL-Service/resources/js/iframeMessageReceiver.js\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Helmet>\r\n\t\t\t\t<meta name=\"referrer\" content=\"no-referrer-when-downgrade\" />\r\n\t\t\t\t<script src={`${baseUrl}/resources/js/iframeMessageReceiver.js`} />\r\n\t\t\t</Helmet>\r\n\t\t\t<FormContainer\r\n\t\t\t\tsrc={`${baseUrl}/nl/search/`}\r\n\t\t\t\tid=\"contactIframe\"\r\n\t\t\t\t// @ts-ignore\r\n\t\t\t\treferrerPolicy=\"origin-when-cross-origin\"\r\n\t\t\t\tframeBorder=\"0\"\r\n\t\t\t/>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default Consulink;\r\n","import Consulink from './Consulink';\r\nexport default Consulink;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { withWindow } from 'styleguide/helpers';\r\nimport { AppletCommonProps } from '../types';\r\n\r\nlet isInitialized = false;\r\n\r\nconst ChatbotFrontAI: React.FC<AppletCommonProps> = ({ parameters }) => {\r\n\tconst getChatContainers = (w: Window): HTMLElement[] => {\r\n\t\tconst nodes = w.document.querySelectorAll('.front-button-container, #chat-container') as NodeListOf<Element>;\r\n\t\treturn Array.from(nodes) as HTMLElement[];\r\n\t};\r\n\r\n\tconst setChatBotVisibleState = (isVisible: boolean, w: Window) => {\r\n\t\tconst elements = getChatContainers(w);\r\n\t\telements.forEach(e => (e.style.display = isVisible ? 'block' : 'none'));\r\n\t};\r\n\r\n\tconst registerBot = (w: Window) => {\r\n\t\tif (isInitialized) {\r\n\t\t\tsetChatBotVisibleState(true, w);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst formationParameters = (parameters && parameters.trim()) || `prod-common-valio`;\r\n\r\n\t\tconst botScript = document.createElement('script');\r\n\t\tbotScript.onload = () => (w as any).chatFormation(formationParameters);\r\n\t\tbotScript.src = 'https://static.aim.front.ai/prod-common/chat-formation.min.js';\r\n\t\tbotScript.async = true;\r\n\t\tw.document.head.appendChild(botScript);\r\n\t\tisInitialized = true;\r\n\t};\r\n\r\n\tconst hideBot = (w: Window) => {\r\n\t\tsetChatBotVisibleState(false, w);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\twithWindow(registerBot);\r\n\t\treturn () => {\r\n\t\t\twithWindow(hideBot);\r\n\t\t};\r\n\t}, []);\r\n\r\n\treturn null;\r\n};\r\n\r\nexport default ChatbotFrontAI;\r\n","import ChatbotFrontAI from './ChatbotFrontAI';\r\nexport default ChatbotFrontAI;\r\n","import * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { Button } from '../../../../styleguide/components/Buttons/Button';\r\nimport styled from 'styled-components';\r\n\r\nexport function CookieManagement() {\r\n\treturn (\r\n\t\t<CenteringWrapper>\r\n\t\t\t<Button id=\"ot-sdk-btn\" className=\"ot-sdk-show-settings\">\r\n\t\t\t\t<FormattedMessage id=\"applet_cookie_management_button_title\" />\r\n\t\t\t</Button>\r\n\t\t</CenteringWrapper>\r\n\t);\r\n}\r\n\r\nconst CenteringWrapper = styled.div`\r\n\twidth: 100%;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\tmargin: ${({ theme }) => theme.grid.gutterInPx(4)};\r\n`;\r\n","import { CookieManagement } from './CookieManagement';\r\nexport default CookieManagement;\r\n","import { CookieList } from './CookieList';\r\n\r\nexport default CookieList;\r\n","import * as React from 'react';\r\n\r\nexport function CookieList() {\r\n\treturn <div id=\"ot-sdk-cookie-policy\" />;\r\n}\r\n","import { useScript } from 'common/hooks/useScript';\r\nimport * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { AppletCommonProps } from '../types';\r\n\r\nconst ProductLocatorWrapper = styled.iframe`\r\n\twidth: 100%;\r\n\theight: 770px;\r\n\tborder: 0;\r\n`;\r\n\r\nexport function ProductLocator({ parameters }: AppletCommonProps) {\r\n\tif (!parameters || parameters.trim().length === 0) {\r\n\t\treturn <div />;\r\n\t}\r\n\tconst productLocatorParams = parameters.split(' ');\r\n\r\n\tlet scriptSrc = `https://destinilocators.com/${productLocatorParams[0]}/site/install/`;\r\n\r\n\tif (productLocatorParams.length > 1) {\r\n\t\tscriptSrc += `?${productLocatorParams[1]}`;\r\n\t}\r\n\r\n\tconst locatorPlaceHolder = React.useRef<HTMLDivElement>(null);\r\n\tconst locatorProps = {\r\n\t\tsrc: scriptSrc,\r\n\t\tref: locatorPlaceHolder,\r\n\t};\r\n\r\n\tuseScript(locatorProps);\r\n\r\n\t// Use script should be enough but 3rd party script is broken so creating target iframe already here\r\n\tconst locator = `https://destinilocators.com/${productLocatorParams[0]}/site/locator.php?`;\r\n\tconst referrer = '?RFR=' + window.location.protocol + '//' + window.location.hostname;\r\n\tconst customParameters = '';\r\n\tconst systemParameters = productLocatorParams.length > 1 ? productLocatorParams[1] : '';\r\n\tconst iframeSrc = locator + referrer + '&' + customParameters + '&' + systemParameters;\r\n\r\n\treturn (\r\n\t\t<div id=\"productLocator\" ref={locatorPlaceHolder}>\r\n\t\t\t<ProductLocatorWrapper id=\"destini\" src={iframeSrc} scrolling=\"no\" allow=\"geolocation\" />\r\n\t\t</div>\r\n\t);\r\n}\r\n","import { ProductLocator } from './ProductLocator';\r\n\r\nexport default ProductLocator;\r\n"],"sourceRoot":""}