{"version":3,"sources":["global.styles.ts","state/cart/actions.ts","utils/utils.ts","state/repo/index.ts","helpers/configurationHelper.ts","components/billing/CheckoutMail.old.tsx","state/configuration/actions.ts","helpers/priceHelper.ts","components/elements/Radio.style.ts","components/elements/Radio.tsx","state/configuration/index.ts","services/repo.ts","components/layout/Sidebar/DetailList.tsx","components/layout/Sidebar/Details.tsx","api/BaseApi.ts","api/ConfigurationApi.ts","api/MailApi.ts","api/Api.ts","state/templates/index.ts","images/background.jpg","icons/no-image.svg","images/flexline_logo.png","images/flexline_logo_no.png","images/flexline_logo_de.png","images/flexline_logo_en.png","images/flexline_logo_se.png","images/flexline_logo_ee.png","images/flexline_hd_logo.png","images/flexline_hd_logo_no.png","images/flexline_hd_logo_de.png","images/flexline_hd_logo_en.png","images/flexline_hd_logo_se.png","images/flexline_hd_logo_ee.png","images/flexline_black_logo.png","images/flexline_black_logo_no.png","images/flexline_black_logo_de.png","images/flexline_black_logo_en.png","images/flexline_black_logo_se.png","images/flexline_black_logo_ee.png","icons/heavy_logo.svg","images/background-heavy.jpg","images/background-black-tint.jpg","images/template1.png","images/template2.png","images/template3.png","images/template4.png","images/template5.png","images/template-hd1.png","images/template-hd2.png","images/template-hd3.png","images/template-hd4.png","images/template-black-2040.png","images/template-black-2955.png","images/template-black-5230.png","state/repository-data sync /^/.*/.json$","components/elements/IconButton.style.ts","icons/cog.svg","icons/search.svg","icons/earth.svg","icons/cross.svg","icons/plus.svg","icons/share2.svg","icons/floppy-disk.svg","icons/dots.svg","icons/arrow-left.svg","icons/arrow-right.svg","icons/upload.svg","icons/info.svg","icons/database.svg","icons/cart.svg","icons/spinner8.svg","icons/double-arrows.svg","icons/arrow-down.svg","icons/crop.svg","icons/lightbulb.svg","icons/phone.svg","icons/mail.svg","icons/type.svg","icons/burger-menu.svg","components/elements/Icon.tsx","components/elements/IconButton.tsx","components/layout/Welcome/Logo.style.ts","components/layout/Welcome/Logo.tsx","components/elements/MenuDropDown.style.ts","components/elements/MenuDropDown.tsx","state/repo/actions.ts","components/layout/Header.style.ts","helpers/Tracking.ts","components/layout/Header.tsx","components/layout/Sidebar/Panel.style.ts","components/layout/Sidebar/Panel.tsx","components/elements/Range.style.ts","components/elements/Slider.tsx","components/elements/Toggle.style.ts","components/elements/Toggle.tsx","components/elements/Button.tsx","components/elements/Stepper.style.ts","components/elements/Stepper.tsx","components/layout/Sidebar/Content.style.ts","components/layout/Sidebar/Content.tsx","components/layout/Sidebar/Tabs.tsx","components/layout/Controls/Search.tsx","components/layout/Sidebar/Sidebar.style.ts","components/layout/Sidebar/Product.style.ts","components/billing/CheckoutMail.tsx","components/elements/DropDown.style.ts","components/elements/DropDown.tsx","components/elements/Textfield.style.ts","components/elements/TextField.tsx","components/elements/Checkbox.style.ts","components/elements/Checkbox.tsx","components/layout/Sidebar/Row.tsx","state/user/actions.ts","components/layout/Sidebar/components/SidebarCart.tsx","components/layout/Sidebar/components/CartPage.tsx","components/layout/Sidebar/components/Warning.tsx","components/layout/Sidebar/Sidebar.tsx","components/layout/Controls/Size.tsx","components/layout/Controls/Pan.tsx","components/layout/Configurator/Configurator.style.ts","components/layout/Configurator/Configurator.tsx","components/dialogue/Popup.style.ts","components/dialogue/Popup.tsx","components/layout/Controls/Language.tsx","components/layout/Welcome/LandingPage.style.ts","components/layout/Welcome/LandingPage.tsx","components/layout/Configurator/Preloader.style.ts","components/elements/Loader.tsx","components/layout/Configurator/Preloader.tsx","components/layout/Sidebar/Preview.style.ts","components/layout/Sidebar/Preview.tsx","components/elements/NumberField.tsx","components/dialogue/Cookie.tsx","Debug.tsx","icons/size-drawing.svg","Head.tsx","App.tsx","serviceWorker.ts","state/user/index.ts","state/cart/index.ts","state/index.ts","index.tsx"],"names":["PrimaryColor","SecondaryColor","TertiaryColor","BackgroundColor","SecondaryBackgroundColor","OffColor","BorderColor","setCurrency","currencyCode","type","payload","changePage","page","setCamera","camera","changePageHideNotification","changeModuleHideNotification","show","dismissed","changeSizeHideNotification","changeModuleShowNotification","showPreview","url","closePreview","showSidebarPreview","product","productType","sidebar","updateSidebarPreview","closeSidebarPreview","closePreloader","addCartImage","base64","updateCartAccessory","id","amount","updateCartAdditional","setCartAccessoryAdditional","accessories","additional","saveConfigurationAction","storageId","setConstraint","width","depth","constraint","setProductLine","line","productLine","Boolean","window","location","hostname","match","getImage","newUrl","cleanUrl","split","concat","img","getUrlConfiguration","initialang","urlParams","URLSearchParams","search","get","lang","getLanguageByHostname","curr","lang_fallback","navigator","language","substring","toLowerCase","project","pathname","currency","getProductLine","includes","GetProductLineURl","currentProductLine","validateEmail","val","test","getLogo","langCode","img_hd_de","img_hd_en","img_hd_no","img_hd_se","img_hd_ee","img_hd_da","img_black_de","img_black_en","img_black_no","img_black_se","img_black_ee","img_black_da","img_de","img_en","img_no","img_se","img_ee","img_da","pop","isMobile","innerWidth","siteUrl","shareUrl","protocol","host","DEBUG_MODE","initialRepo","repo","allProducts","getAllProducts","Material","searchProduct","title","subtitle","indexOf","state","basecabinets","basemodules","cupboards","extra","tabletop","toolboards","Object","values","step3","reduce","list","tool","push","items","step4","dic","getRandomModule","configuration","corner","_repo$basemodules$fil","_repo$basemodules$fil2","_repo$basecabinets$fi","_repo$toolboards$find","fullCabinet","arguments","length","undefined","canDouble","isLifted","lifter","uuidv1","base","filter","m","isCorner","prices","isDouble","cupboard","c","cabinet","find","getRandomCabinet","panel","light","canCart","canFull","canCupboard","includeCarts","parts","getConfigurationProducts","sortedParts","isCart","map","sort","a","b","least","Math","floor","random","getProduct","productId","getModuleInfo","module","repoReducer","action","lightKits","XLCart","setModulesFromMeasurements","left","right","_repo$basemodules$fin","_repo$basemodules$fin2","_repo$basemodules$fin3","_repo$basemodules$fin4","_repo$basemodules$fin5","_repo$basemodules$fin6","_repo$basemodules$fin7","_repo$basemodules$fin8","_repo$basemodules$fin9","_repo$basemodules$fin10","oriLeft","oriRight","defaultMaterial","material","defaultLifterModel","x","isLifter","defaultTabletop","defaultCupboards","defaultLights","defaultLifter","defaultPanels","cornerLength","size","cabinetLength","isBaseModule","moduleLength","leftCount","rightCount","result","changeModuleSize","getSize","_size$width","width2","setDefaultModules","_repo$basemodules$fin11","hasLight","hasLifter","hasCupboard","hasPanel","t","adjustModuleListSize","setConfiguration","modulesLength","modules","lengths","_lengths","_m$cabinet","endingModule","moduleLengths","assign","deleteFrom","splice","index","isCartModule","allowAllTableTops","validateModules","validateState","hasCorner","validateXLCartLaminate","check","i","IsNeighborCabinetEmpty","IsNeighborCabinetNotBase","isValidXLCart","lastIndex","isModule","isFullModule","_repo$basecabinets$fi2","_repo$allProducts","_module$cabinet","getModuleList","forEach","_repo$basemodules$fin12","_repo$basecabinets$fi3","addPartToDictionary","carts","atfa","count","_repo$tabletop$find","cornerTable","tables","t1","t2","console","log","maxLength","ceil","remove","removeFromAll","removeFromFirst","atttd","addTabletops","lastLightState","_repo$basemodules$fin13","_repo$basecabinets$fi6","lightState","altd","alfa","addLights","_dic$0145TBCL","abfaBlack","abfaGrey","addBrackets","part","baseModule","partPanels","lastBase","lastPanel","_m$panel","_repo$basecabinets$fi4","isPanel","_m$panel2","_repo$basecabinets$fi5","tableCount","lastTableTop","smallestTables","doubleEmptyCheck","laminate","_module$cabinet2","moduleData","atbs","abs","sum","height","p","cabinetHeight","_x$size$height","_x$size","max","calculatedHeight","_part$size$height","_part$size","_lifter$size$height","_lifter$size","_part$size$height2","_part$size2","_x$size$height2","_x$size2","_part$size$height3","_part$size3","_lifter$size$height2","_lifter$size2","_part$size$height4","_part$size4","getCustomSize","maxDepth","hasCabinet","_x$size$height3","_x$size3","_part$size$height5","_part$size5","_lifter$size$height3","_lifter$size3","_part$size$height6","_part$size6","_x$size$height4","_x$size4","_part$size$height7","_part$size7","_lifter$size$height4","_lifter$size4","_part$size$height8","_part$size8","setPart","part_type","moduleId","model","setAllParts","cornerModel","saveConfiguration","email","async","dispatch","api","configurationApi","sendShareMail","key","send","fetch","method","headers","body","JSON","stringify","then","response","json","data","ex","loadConfiguration","template","configAction","setToTemplate","templateToConfiguration","selectModule","getPrice","extra1","extra2","price","getPartsPrice","toLocaleString","keys","getItemPrice","getCurrency","cur","_repo$currency$find$f","_repo$currency$find","format","RadioStyle","styled","div","_templateObject","_taggedTemplateLiteral","Radio","props","change","e","onChange","currentTarget","value","React","className","style","opacity","disabled","htmlFor","group","children","onClick","checked","name","initialConfiguration","Multiplex","modelId","_repo$cupboards$find","_repo$toolboards$find2","_repo$allProducts$mod","getModule","slice","reverse","configurationReducer","side","selected","getModules","includeFull","getCabinets","includeCartsXL","getCupboards","getToolboards","getStep3","k","getStep4","arr","obj","DetailList","textTransform","noProduct","onSetPart","checkedId","marginLeft","src","imageUrl","onShowPreview","alt","marginRight","minWidth","color","lineHeight","margin","fontSize","marginTop","paddingRight","findIndex","configurationSide","element","Details","_state$configuration$","_state$configuration$2","_state$repo$basemodul","useDispatch","useSelector","tokens","translations","canXLCabinet","canEmpty","_state$configuration$3","_state$configuration$4","neighborElement","otherNeighborElement","IsNeighborCabinetEmptyLaminate","cabinets","panels","isFullCabinet","partId","_state$configuration$5","padding","CUPBOARD","NO_CUPBOARD","PANEL","NO_PANEL","CABINET","NO_CABINET","TYPE","BaseApi","constructor","this","httpGet","http","httpPost","httpPut","httpDelete","res","ok","Promise","reject","status","ConfigurationApi","httpClient","MailApi","sendMail","mailApi","templatesGrey","_modules$find","templates","templateReducer","templatesHD","templatesBlack","exports","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","resolve","StyledButton","button","_title","_path","_extends","bind","target","source","prototype","hasOwnProperty","call","apply","SvgCog","_ref","svgRef","createElement","viewBox","ref","d","ForwardRef","forwardRef","SvgSearch","SvgEarth","SvgCross","SvgPlus","SvgShare2","SvgFloppyDisk","SvgDots","SvgArrowLeft","SvgArrowRight","SvgUpload","_path2","_path3","SvgInfo","SvgDatabase","SvgCart","SvgSpinner8","SvgDoubleArrows","SvgArrowDown","SvgCrop","SvgLightbulb","xmlSpace","fillRule","clipRule","strokeLinejoin","strokeMiterlimit","fill","stroke","strokeWidth","SvgPhone","SvgMail","SvgType","transform","fontVariationSettings","vectorEffect","fillOpacity","strokeLinecap","strokeDasharray","strokeDashoffset","strokeOpacity","paintOrder","stopColor","_g","_g2","_g3","SvgBurgerMenu","y","RenderIcon","getIcon","Cog","Search","Globe","Close","Plus","Save","Share","Dots","Upload","ArrowLeft","ArrowRight","DoubleArrow","Info","Currency","Cart","Spinner","ArrowDown","Crop","Bulb","Phone","Mail","Type","Burger","IconButton","as","tooltip","icon","Icon","StyledLogo","Logo","StyledMenu","MenuDropDown","showMenu","toggleMenu","showHideMenu","addEventListener","removeEventListener","align","setLanguage","require","StyledHeader","header","PriceStyle","_templateObject2","Buttons","_templateObject3","TrackEvent","category","label","obj2","ReactGA","event","Header","toggle","updateSetting","cart","r","current","preventDefault","showProject","showPopup","TOTAL_EX_MVA","replace","NEW_PROJECT","Menu","CHANGE_PRODUCT_LINE","PRODUCT_NAME","showProductLine","PRODUCT_NAME_BLACK","PRODUCT_NAME_HEAVY_DUTY","SAVE","showSave","LANGUAGE","languages","defaultCurrency","CURRENCY","SHARE","showShare","CONTACT","href","INFO_PHONE","INFO_MAIL","PanelStyle","Panel","minHeight","active","total","maxHeight","RangeStyle","Slider","updateChange","moved","updateMove","percent","start","onTouchMove","parent","touches","parentElement","offsetLeft","clientWidth","round","clientX","currentCount","onTouchEnd","iosFallback","num","min","defaultValue","step","matchMedia","matches","parseInt","onMouseUp","ToggleStyle","Toggle","Button","StyledStep","StyledInput","input","Stepper","updateCurrent","refSelect","decrease","pattern","placeholder","isNaN","setSelect","selectionStart","increase","showPrice","text","StyledContent","Content","tabbed","StyledTabs","Tabs","setTab","evt","changedTab","StyledSearch","SEARCH","onSearch","StyledSidebarNav","StyledSidebar","SidebarToggle","HideContent","_templateObject4","CartItemHeader","h4","CartItemStyle","SidebarPreviewHeader","SidebarPreviewContainer","sender","senderEmail","message","trans","sendOrderFlexSpy","html","getShareEmail","subject","FLEXLINE","image","configimg","bcc","sendOrder","postMail","order","getShareLogo","getCustomerEmail","customer","customerName","seller","firstname","lastname","productNameTrans","productLinkTrans","OPEN_LINK","OPEN_LINK_HD","OPEN_LINK_BLACK","YOUR_FLEXLINE","REFERENCE_NR","DATE","date","getDate","getMonth","getFullYear","DEAR","dealer","DEALER_THANKS","REQUEST_THANKS","OPEN_CONFIG","TAG_LINE","senderName","copy","hasSender","getProductNameTrans","SHARE_FLEXLINE_TITLE","SHARE_THANKS","SHARE_GREET","SHARE_OPEN_CONFIG","SHARE_OPEN_LINK","getInternalHtml","itemsToHtml","dealerEmail","dealerFirmname","SELLER_NAME","dealerAddress","dealerDepartment","dealerZip","dealerCity","dealerCountry","EMAIL","PHONE","dealerPhone","COMMENT","dealerComment","firmname","address","zip","city","country","phone","comment","DEALER","delivery","products","loopThroughProductElements","TOTAL","dictionary","quantity","writeSingleItem","tableStyle","tableStyleRight","StyledList","DropDown","_props$options","selectRef","options","selector","selectedIndex","required","onFocus","_window","_document$querySelect","scrollTo","document","querySelector","data-index","StyledText","TextField","changed","minLength","getPattern","StyledCheckbox","Checkbox","updateChecked","defaultChecked","StyledRow","Row","columns","updateUser","field","SidebarCart","flexlineuser","updateFlexline","flexlineuserCustomer","updateFlexlineCustomer","flexlineuserCustomer2","updateFlexlineCustomer2","dealerChosen","setChosenDealer","sortCountries","countries","Intl","Collator","compare","countryMatch","countryCode","renderDealerCustomerInformation","renderUserInformation","user","FIRM_NAME","FIRST_NAME","errorMessage","LAST_NAME","ADDRESS","ZIP","CITY","COUNTRY","CHOOSE_COUNTRY","renderDefaultUser","renderDealerDropdown","dealers","currentCountryCode","DEFAULT_DEALER","CHOOSE_DEALER_INFO","CHOOSE_DEALER","renderFlexlineUserTrigger","toString","FLEXLINE_PARTNER","BASKET","updatePage","updateMenuTab","activeMenuTab","BASKET_CONTENT_MOBILE","formSuccess","onSubmit","cartForm","BASKET_CONTENT","renderFlexlineUser","DEALER_INFORMATION","DEPARTMENT","DEALER_SALE","DEALER_ORDER","DEALER_ADDRESS","DEALER_DELIVERY","CUSTOMER_DELIVERY","CUSTOMER_INFORMATIONS","rel","ACCEPT_TERMS","checkOut","CHECKOUT","CartPage","activeTab","togglePageContent","partslist","togglePartsList","renderCartLines","keyPrefix","elements","productArray","idA","idB","item","buildCartItem","cursor","dangerouslySetInnerHTML","__html","renderCartPage","renderImage","imgString","YOUR_CONFIGURATION","HIDE_PARTS_LIST","SHOW_PARTS_LIST","ACCESSORIES","ADDITIONAL","Warning","shouldShow","setShouldShow","useState","useEffect","condition","warningMessage","Sidebar","_getAccessories$filte","_getAdditional$filter","_state$repo$step3$cur","_state$repo$step4$cur","updatePanel","accessoriesSearch","setAccessoriesSearch","additionalSearch","setAdditionalSearch","updateTab","isWidthOverConstraint","setIsWidthOverConstraint","currentAccessory","updateAccessory","getAccessories","currentAdditional","updateAdditional","getAdditional","hasPanels","hasCupboards","hasLighting","allowLifter","pages","updateToggleContent","updateFormSuccess","preview","sidebar_preview","setMobile","previousTab","pageId","pageName","nextTab","setPanel","notified","notified_module","_cartForm$current","checkValidity","cartOrder","Date","customerOrder","internalOrder","_cartForm$current2","reportValidity","flat","changeSize","getTableTopImage","_state$repo$tabletop$","resetScroll","PANEL_TITLE_DIMENSIONS","MODULE_COUNT","marginBottom","CORNER","INCLUDE_CORNER","MODULE_COUNT_RIGHT","SETTINGS","INCLUDE_CUPBOARDS","toggleCupboards","set","_repo$cupboards$find2","INCLUDE_PANELS","togglePanels","toggleLighting","INCLUDE_LIGHTING","toggleLifter","lifterModel","MATERIALS","Array","from","Set","border","_state$repo$tabletop$2","getTableTopText","PANEL_TITLE_MODULES","MODULES_SELECT_HELP_TEXT","PANEL_TITLE_ACCESSORIES","ACCESSORIES_DESC","PANEL_TITLE_ADDITIONAL","ADDITIONAL_DESC","paddingTop","NEXT","checkSize","CONSTRAINT_WARNING","zIndex","getPreviewInitalValue","previewUpdate","PRICE","DIMENSIONS","UNITS","whiteSpace","extended_text","ALL","MINE","display","ei","StyledSize","Size","WIDTH_SHORT","HEIGHT_SHORT","DEPTH_SHORT","StyledPan","Pan","updateView","currentCamera","PAN_LEFT","PAN_OVERVIEW","PAN_RIGHT","ConfiguratorStyle","HeavyLogo","unityContext","UnityContext","loaderUrl","dataUrl","frameworkUrl","codeUrl","unitySend","takeScreenshot","Configurator","on","setLastSelected","notified_module_dismissed","b64","canvas","setTimeout","updateModel","preloader","lastConfiguration","setLastConfiguration","force","lastSelected","lastCamera","setLastCamera","notified_sizes","PANELS_HELP_TEXT","PANELS_HELP_TEXT_MOBILE","NOTIFICATION_MODULES","SizeComponent","heavylogo","Unity","PopupStyle","Popup","StyledLanguage","LanguageChooser","changeLanguage","click","getCurrent","_props$languages$find","StyledPage","LandingPage","updateTemplates","onpopstate","backgroundImage","bg","bg3","bg2","getIntro","FRONTPAGE_INTRO_FLEXLINE","FRONTPAGE_INTRO_FLEXLINE_BLACK","FRONTPAGE_INTRO_HEAVY","FRONTPAGE_INTRO","history","pushState","onNavClick","NEW_CONFIGURATION","onSizeClick","CONSTRAINT_TEXT","CONSTRAINT","TEMPLATES","Language","PRIVACY_POLICY","maxWidth","templateImage","s","w","txt","template1","template2","template3","template4","template5","templateBlack2040","templateBlack2955","templateBlack5230","templatehd1","templatehd2","templatehd3","templatehd4","alignItems","justifyContent","StyledLoader","Loader","Preloader","done","updateDone","isdone","StyledPreview","Preview","NumberField","error","updateError","StyledCookie","Cookie","didAccept","updateAccept","setCookie","cookie","ProductLine","Fragment","ModuleInfoView","moduleInfo","float","Debug","_linearGradient","createRef","overflow","backgroundColor","position","SvgSizeDrawing","offset","stopOpacity","gradientTransform","gradientUnits","y2","x2","y1","x1","xlinkHref","Head","Helmet","charSet","PAGE_TITLE","App","popup","updatePopup","save","updateSave","share","updateShare","updateProject","updateProductLine","updateCurrentProductLine","productRedirect","updateProductRedirect","reset","updateReset","showMain","updateMain","mobileActive","updateMobileActive","showSize","updateSize","debug","conf","loading","updateLoading","updateEmail","sent","updateSent","sentNotice","toggleSentNotice","shareNotice","toggleShareNotice","toggled","updateToggled","mobileToggled","updateMobileToggled","shareFields","updateShareFields","recipient","productLineUrl","initialize","NOTIFICATION_EXIT","forceLang","l","path","lastIndexOf","origin","queryString","SAVED_MESSAGE","SHARED_MESSAGE","RESET_CONFIRM","CANCEL","CONFIRM","SAVE_TEXT","OK","SHARE_TEXT","SHARE_FIELD_SENDER_NAME","SHARE_FIELD_SENDER_EMAIL","SHARE_FIELD_RECIPIENT_EMAIL","SHARE_FIELD_MESSAGE","SHARE_EMAIL","NEW_CONFIGURATION_START","NEW_CONFIGURATION_DESC","SAVE_FIRST","RESTART","WIDTH","bottom","SizeDocument","showReset","COOKIE_DISCLAIMER","initialUser","userReducer","initialCart","notified_sizes_dismissed","cartReducer","access","combineReducers","composeEnhancers","composeWithDevTools","applyMiddleware","thunk","store","createStore","configurationState","ReactDOM","render","Provider","getElementById","serviceWorker","ready","registration","unregister","process"],"mappings":"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","file":"static/js/main.9592afcc.chunk.js","sourcesContent":["\r\nexport const PrimaryColor = \"#FCB131\";\r\nexport const SecondaryColor = \"#373E44\";\r\nexport const TertiaryColor = \"#3F515B\";\r\nexport const BackgroundColor = \"#F7F7F9\";\r\nexport const SecondaryBackgroundColor = \"#DCDCDE\";\r\nexport const OffColor = \"#84888C\";\r\n\r\nexport const BorderColor = \"#B7BBBE\";","import { PAGES } from \"../../typings/cart\"\r\nimport { Product, Dictionary, ProductType, ProductLine } from '../../typings/repo';\r\nimport { CAMERAORIENTATION } from 'typings/globals';\r\nimport { StatusType } from '.';\r\n\r\nexport const setCurrency = (currencyCode: string) =>\r\n{\r\n return {\r\n type: \"CHANGE_CURRENCY\",\r\n payload: currencyCode\r\n } \r\n}\r\n\r\nexport const changePage = (page: PAGES) =>\r\n{\r\n return {\r\n type: \"CHANGE_PAGE\",\r\n payload: page\r\n } \r\n}\r\n\r\nexport const setCamera = (camera: CAMERAORIENTATION) =>\r\n{\r\n return {\r\n type: \"SET_CAMERA\",\r\n payload: camera\r\n } \r\n}\r\n\r\n\r\nexport const changePageHideNotification = (page: PAGES) =>\r\n{\r\n return {\r\n type: \"CHANGE_PAGE_HIDE_NOTIFICATION\",\r\n payload: page\r\n } \r\n}\r\n\r\n\r\nexport const changeModuleHideNotification = (page: PAGES) =>\r\n{\r\n return {\r\n type: \"CHANGE_NOTIFICATION_MODULE\",\r\n payload: page,\r\n show: false,\r\n dismissed: true\r\n } \r\n}\r\n\r\nexport const changeSizeHideNotification = (page: PAGES) =>\r\n{\r\n return {\r\n type: \"CHANGE_NOTIFICATION_SIZES\",\r\n payload: page,\r\n show: false,\r\n dismissed: true\r\n } \r\n}\r\n\r\n\r\nexport const changeModuleShowNotification = (page: PAGES) =>\r\n{\r\n return {\r\n type: \"CHANGE_NOTIFICATION_MODULE\",\r\n payload: page,\r\n show: true,\r\n dismissed: false\r\n } \r\n}\r\n\r\n\r\nexport const showPreview = (url: string) =>\r\n{\r\n return {\r\n type: \"SHOW_PREVIEW\",\r\n payload: url\r\n } \r\n}\r\n\r\nexport const closePreview = () =>\r\n{\r\n return {\r\n type: \"CLOSE_PREVIEW\"\r\n } \r\n}\r\n\r\nexport const showSidebarPreview = (product: Product | Product, productType?: ProductType) =>\r\n{\r\n return {\r\n type: \"SHOW_SIDEBAR_PREVIEW\",\r\n sidebar: product,\r\n productType: productType\r\n } \r\n}\r\n\r\nexport const updateSidebarPreview = (product: Product | Product) =>\r\n{\r\n return {\r\n type: \"UPDATE_SIDEBAR_PREVIEW\",\r\n sidebar: product\r\n } \r\n}\r\n\r\nexport const closeSidebarPreview = () =>\r\n{\r\n return {\r\n type: \"CLOSE_SIDEBAR_PREVIEW\"\r\n } \r\n}\r\n\r\nexport const closePreloader = () =>\r\n{\r\n return {\r\n type: \"CLOSE_PRELOADER\"\r\n } \r\n}\r\n\r\n\r\nexport const addCartImage = (base64: string) => \r\n{\r\n return {\r\n type: \"ADD_CART_IMAGE\",\r\n payload: base64\r\n }\r\n}\r\n\r\nexport const updateCartAccessory = (id:string, amount: number) =>\r\n{\r\n return {\r\n type: \"UPDATE_ACCESSORY\",\r\n amount: amount,\r\n id: id\r\n } \r\n}\r\n\r\nexport const updateCartAdditional = (id:string, amount: number) =>\r\n{\r\n return {\r\n type: \"UPDATE_ADDITIONAL\",\r\n amount: amount,\r\n id: id\r\n } \r\n}\r\n\r\nexport const setCartAccessoryAdditional = (accessories?: Dictionary, additional?: Dictionary) =>\r\n{\r\n return {\r\n type: \"SET_ACCESSORY_ADDITIONAL\",\r\n accessories,\r\n additional\r\n } \r\n}\r\n\r\nexport const saveConfigurationAction = (storageId?: string) =>\r\n{\r\n return {\r\n type: \"SAVE_CONFIGURATION\",\r\n id: storageId\r\n } \r\n}\r\n\r\n\r\nexport const setConstraint = (width: number, depth: number) =>\r\n{\r\n return {\r\n type: \"SET_CONSTRAINT\",\r\n constraint: {width: width, depth: depth}\r\n } \r\n}\r\n\r\n\r\nexport const setStatus = (status: StatusType) =>\r\n{\r\n return {\r\n type: \"SET_STATUS\",\r\n status: status\r\n } \r\n}\r\n\r\n\r\nexport const setProductLine = (line: ProductLine) =>\r\n{ \r\n return {\r\n type: \"SET_PRODUCT_LINE\",\r\n productLine: line\r\n } \r\n}\r\n","import img from \"../icons/no-image.svg\";\r\nimport img_da from \"images/flexline_logo.png\";\r\nimport img_no from \"images/flexline_logo_no.png\";\r\nimport img_de from \"images/flexline_logo_de.png\";\r\nimport img_en from \"images/flexline_logo_en.png\";\r\nimport img_se from \"images/flexline_logo_se.png\";\r\nimport img_ee from \"images/flexline_logo_ee.png\";\r\n\r\nimport img_hd_da from \"images/flexline_hd_logo.png\";\r\nimport img_hd_no from \"images/flexline_hd_logo_no.png\";\r\nimport img_hd_de from \"images/flexline_hd_logo_de.png\";\r\nimport img_hd_en from \"images/flexline_hd_logo_en.png\";\r\nimport img_hd_se from \"images/flexline_hd_logo_se.png\";\r\nimport img_hd_ee from \"images/flexline_hd_logo_ee.png\";\r\n\r\nimport img_black_da from \"images/flexline_black_logo.png\";\r\nimport img_black_no from \"images/flexline_black_logo_no.png\";\r\nimport img_black_de from \"images/flexline_black_logo_de.png\";\r\nimport img_black_en from \"images/flexline_black_logo_en.png\";\r\nimport img_black_se from \"images/flexline_black_logo_se.png\";\r\nimport img_black_ee from \"images/flexline_black_logo_ee.png\";\r\n\r\nexport const isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\n\r\nexport const getImage = (url: string | undefined, type: \"LARGE\" | \"MEDIUM\" | \"THUMBNAIL\" | \"ORIGINAL\") =>\r\n{\r\n let newUrl = url;\r\n\r\n if (url)\r\n {\r\n const cleanUrl = url.split(\"?\")[0];\r\n switch (type)\r\n {\r\n case \"THUMBNAIL\":\r\n return `${cleanUrl}?width=80&height=80&format=jpg&bgcolor=fff`;\r\n case \"MEDIUM\":\r\n return `${cleanUrl}?width=465&height=465&format=jpg`;\r\n case \"LARGE\":\r\n return `${cleanUrl}?width=1100&format=jpg`;\r\n case \"ORIGINAL\":\r\n return `${cleanUrl}`;\r\n }\r\n } else\r\n {\r\n newUrl = img;\r\n }\r\n return newUrl;\r\n}\r\n\r\ninterface Config\r\n{\r\n id: string;\r\n language: string;\r\n currency: string;\r\n project: string;\r\n}\r\n\r\nexport const getUrlConfiguration = (initialang?: boolean): Config | null =>\r\n{\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const id = urlParams.get('id');\r\n let lang = urlParams.get('lang') ? urlParams.get('lang') : getLanguageByHostname();\r\n const curr = urlParams.get('currency');\r\n const lang_fallback = navigator.language.substring(0, 2).toLowerCase();\r\n const project = window.location.pathname;\r\n \r\n if (initialang)\r\n {\r\n const l = lang !== null ? lang : lang_fallback;\r\n return {\r\n language: l,\r\n id: \"\",\r\n currency: \"\",\r\n project: project === \"/HeavyDuty\" ? \"hd\" : \"\",\r\n }\r\n }\r\n if (id)\r\n {\r\n return {\r\n id: id,\r\n language: lang ? lang : lang_fallback,\r\n currency: curr ? curr : \"\",\r\n project: project === \"/HeavyDuty\" ? \"hd\" : \"\",\r\n }\r\n }\r\n if (project) {\r\n return {\r\n id: \"id\",\r\n language: lang ? lang : lang_fallback,\r\n currency: \"\",\r\n project: project === \"/HeavyDuty\" ? \"hd\" : \"\",\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport const getProductLine = () => {\r\n const project = window.location.pathname;\r\n let productLine = \"\";\r\n\r\n if (project.includes(\"/HeavyDuty\")) {\r\n productLine = \"hd\";\r\n } else if (project.includes(\"/FLEXLINE-GREY\")) {\r\n productLine = \"grey\";\r\n } else if (project.includes(\"/FLEXLINE-BLACK\")) {\r\n productLine = \"black\";\r\n } else {\r\n productLine = \"grey\"; // Default value\r\n }\r\n return productLine;\r\n}\r\n\r\nexport const GetProductLineURl = () => {\r\n const currentProductLine = getProductLine();\r\n if (currentProductLine === \"hd\") {\r\n return \"/HeavyDuty\"\r\n } else if (currentProductLine === \"grey\") {\r\n return \"/FLEXLINE-GREY\";\r\n } else if (currentProductLine === \"black\") {\r\n return \"/FLEXLINE-BLACK\"\r\n } else {\r\n return \"/FLEXLINE-GREY\";\r\n }\r\n}\r\n\r\nexport const validateEmail = (val: string) =>\r\n{\r\n if (/^\\w+([\\\\.-]?\\w+)*@\\w+([\\\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(val))\r\n {\r\n return (true)\r\n }\r\n //alert(\"You have entered an invalid email address!\")\r\n return (false)\r\n}\r\n\r\n\r\nexport const getLogo = (langCode: string, productLine?: string) =>\r\n{\r\n var url = \"\";\r\n\r\n if(productLine === \"hd\")\r\n {\r\n switch (langCode)\r\n {\r\n case \"de\":\r\n url = img_hd_de;\r\n break;\r\n case \"en\":\r\n url = img_hd_en;\r\n break;\r\n case \"no\":\r\n url = img_hd_no;\r\n break;\r\n case \"se\":\r\n url = img_hd_se;\r\n break;\r\n case \"ee\":\r\n url = img_hd_ee;\r\n break;\r\n default:\r\n url = img_hd_da;\r\n break;\r\n }\r\n }\r\n else if(productLine === \"black\"){\r\n switch (langCode)\r\n {\r\n case \"de\":\r\n url = img_black_de;\r\n break;\r\n case \"en\":\r\n url = img_black_en;\r\n break;\r\n case \"no\":\r\n url = img_black_no;\r\n break;\r\n case \"se\":\r\n url = img_black_se;\r\n break;\r\n case \"ee\":\r\n url = img_black_ee;\r\n break;\r\n default:\r\n url = img_black_da;\r\n break;\r\n }\r\n }\r\n else{\r\n switch (langCode)\r\n {\r\n case \"de\":\r\n url = img_de;\r\n break;\r\n case \"en\":\r\n url = img_en;\r\n break;\r\n case \"no\":\r\n url = img_no;\r\n break;\r\n case \"se\":\r\n url = img_se;\r\n break;\r\n case \"ee\":\r\n url = img_ee;\r\n break;\r\n default:\r\n url = img_da;\r\n break;\r\n }\r\n }\r\n\r\n return url;\r\n}\r\n\r\nconst getLanguageByHostname = (): string =>\r\n{\r\n const hostname = window.location.hostname;\r\n const domainEnding = hostname.split('.').pop();\r\n switch (domainEnding)\r\n {\r\n case \"se\":\r\n return \"se\";\r\n case \"de\":\r\n return \"de\";\r\n case \"com\":\r\n return \"en\";\r\n case \"no\":\r\n return \"no\";\r\n default:\r\n return \"da\";\r\n }\r\n}\r\n\r\nexport const isMobile = ():boolean => {\r\n return window.innerWidth < 769 ? true : false;\r\n}\r\n \r\n//export const siteUrl = \"https://localhost:44371\";\r\nexport const siteUrl = \"\";\r\nexport const shareUrl = window.location.protocol + \"//\" + window.location.host;\r\n\r\nexport const DEBUG_MODE = false;","import repo from \"../repository-data/grey/repository-grey-en.json\";\r\nimport uuidv1 from \"uuid/v1\";\r\nimport { RepoAction } from './actions.js';\r\nimport { RepoState, Product, Tool, Dictionary } from 'typings/repo';\r\nimport { Module, ConfigurationState } from 'typings/configuration';\r\nimport { PartType } from 'typings/globals.js';\r\nimport { getConfigurationProducts } from 'helpers/configurationHelper';\r\n\r\nconst initialRepo: RepoState = { ...repo, allProducts: getAllProducts(repo) };\r\n\r\nexport enum Material {\r\n Laminate = 'Laminate',\r\n Metal = 'Metal',\r\n Wood = 'Wood',\r\n MetalHD = 'MetalHD',\r\n WoodHD = 'WoodHD',\r\n Multiplex = 'Multiplex'\r\n}\r\n\r\nconst repoReducer = (state = initialRepo, action: RepoAction): RepoState =>\r\n{\r\n switch (action.type)\r\n {\r\n case \"SET_REPO\":\r\n state = { ...action.repo, allProducts : getAllProducts(action.repo) };\r\n break;\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport const searchProduct = (search: string, product: Product) => {\r\n return !search || `${product.id} ${product.title} ${product.subtitle}`.toLowerCase().indexOf(search.toLowerCase()) >= 0;\r\n}\r\n\r\nfunction getAllProducts(state: any) : Dictionary {\r\n return state.basecabinets\r\n .concat(state.basemodules)\r\n .concat(state.cupboards)\r\n .concat(state.extra)\r\n .concat(state.tabletop)\r\n .concat(state.toolboards)\r\n .concat(Object.values(state.step3 as Dictionary).reduce((list, tool) => {list.push(...tool.items); return list; } ,[]))\r\n .concat(Object.values(state.step4 as Dictionary).reduce((list, tool) => {list.push(...tool.items); return list; } ,[]))\r\n .reduce((dic: Dictionary, product: Product) => { dic[product.id] = product; return dic; },{});\r\n}\r\n\r\nexport interface ModuleInfo {\r\n id: string;\r\n base?: Product;\r\n cupboard?: Product;\r\n cabinet?: Product;\r\n panel?: Product;\r\n tabletop?: Product;\r\n light: boolean;\r\n}\r\n\r\nexport const getRandomModule = (repo: RepoState, configuration: ConfigurationState, corner: boolean, tabletop: Material, fullCabinet: boolean = false, canCart: boolean = false, canDouble: boolean = false, isLifted: boolean = false, lifter: string = \"\" ): Module =>\r\n{\r\n return {\r\n id: uuidv1(),\r\n base: fullCabinet ? repo.basemodules.filter(m => m.isCorner === corner && m.prices['DKK'] !== 0 && (canDouble === m.isDouble || m.isDouble !== true))[0]?.id : repo.basemodules.filter(m => m.isCorner === corner && m.prices['DKK'] === 0 && (canDouble === m.isDouble || m.isDouble !== true))[0]?.id,\r\n cupboard: fullCabinet ? undefined : repo.cupboards.filter(c => c.isCorner === corner)[0].id,\r\n cabinet: fullCabinet ? undefined : corner ? repo.basecabinets.find(c => c.isCorner)?.id : getRandomCabinet(repo, configuration, false, canDouble),\r\n panel: !fullCabinet ? repo.toolboards.find(c => c.isCorner === corner)?.id : undefined,\r\n tabletop: fullCabinet ? undefined : tabletop,\r\n light: false,\r\n canCart: false,\r\n canFull: false,\r\n canCupboard: false,\r\n isLifted: isLifted,\r\n lifter: lifter\r\n };\r\n}\r\n\r\nexport const getRandomCabinet = (repo: RepoState, configuration: ConfigurationState, includeCarts: boolean, canDouble: boolean) : string => {\r\n var parts = getConfigurationProducts(configuration, repo);\r\n \r\n var sortedParts = repo.basecabinets.filter(c => !c.isCorner && (!c.isCart || includeCarts) && (canDouble === c.isDouble || c.isDouble !== true)).map(c => c.id).sort((a: string, b: string) => (parts[a] || 0) - (parts[b] || 0));\r\n var least = parts[sortedParts[0]] || 0;\r\n sortedParts = sortedParts.filter(c => (parts[c] || 0) === least);\r\n \r\n return sortedParts[Math.floor(Math.random()*sortedParts.length)];\r\n}\r\n\r\nexport const getRandomProduct = (repo: RepoState, corner: boolean, part_type: PartType) : Product =>\r\n{\r\n const list = getProductList(repo, part_type).filter(p => (p.isCorner === true) === corner);\r\n return list[Math.floor(Math.random()*list.length)];\r\n}\r\n\r\nexport const getProduct = (repo: RepoState, productId?: string) : Product | undefined =>\r\n{\r\n if(!productId) return undefined;\r\n return repo.allProducts[productId];\r\n}\r\n\r\nconst getProductList = (repo: RepoState, part_type: PartType) : Product[] => {\r\n switch(part_type){\r\n case \"BASE\": return repo.basemodules.filter(x => x.isLifter !== true);\r\n case \"CABINET\": return repo.basecabinets.filter(c => c.isCart !== true);\r\n case \"CUPBOARD\": return repo.cupboards;\r\n case \"LIGHT\": return repo.extra;\r\n case \"PANEL\": return repo.toolboards;\r\n case \"TABLETOP\": return repo.tabletop;\r\n case \"LIFTER\": return repo.basemodules.filter(x => x.isLifter === true);\r\n case \"LIFTERMODEL\": return repo.basemodules.filter(x => x.isLifter === true);\r\n }\r\n}\r\n\r\nexport const getModuleInfo = (repo: RepoState, module: Module) : ModuleInfo =>\r\n{\r\n return {\r\n id: module.id,\r\n base: getProduct(repo, module.base),\r\n cabinet: getProduct(repo, module.cabinet),\r\n cupboard: getProduct(repo, module.cupboard),\r\n //panel: getProduct(repo, module.panel),\r\n tabletop: getProduct(repo, module.tabletop),\r\n light: module.light,\r\n };\r\n}\r\n\r\nexport const def = (obj: T | undefined, def: Y) : T | Y => {\r\n return obj ? obj : def;\r\n}\r\n\r\nexport default repoReducer;","import { RepoState, Dictionary, Size } from 'typings/repo';\r\nimport { ConfigurationState, Module } from 'typings/configuration';\r\nimport { getModuleList } from 'state/configuration';\r\nimport { Material, getProduct, getRandomModule } from 'state/repo';\r\nimport { setConfiguration } from 'state/configuration/actions';\r\nimport { IsNeighborCabinetEmpty, IsNeighborCabinetEmptyLaminate, IsNeighborCabinetNotBase } from 'components/layout/Sidebar/Details';\r\n\r\nexport const endBracketGrey = \"0144-WGB1375A\";\r\nexport const betweenBracketGrey = \"0144-WGB1375\";\r\nexport const endBracketBlack = \"0147-WGB1375A-B\";\r\nexport const betweenBracketBlack = \"0147-WGB1375-B\";\r\nexport const lightKits = [\"9001-LIGHTKIT1\", \"9001-LIGHTKIT2\", \"9001-LIGHTKIT3\"];\r\nexport const XLCart = \"0144-TGC1307WB\";\r\nexport const EmptyDoubleSpace = \"0244-TSB1300\";\r\n\r\n\r\nexport const setModulesFromMeasurements = (repo: RepoState, left: number, right: number) => {\r\n var oriLeft = left; var oriRight = right;\r\n let corner = false;\r\n var defaultMaterial = repo.tabletop[0].material;\r\n var defaultLifterModel = repo.basemodules.find(x => x.isLifter)?.id;\r\n let configuration: ConfigurationState = { left: [], right: [], defaultTabletop: defaultMaterial, defaultCupboards: true, defaultLights: false, defaultLifter: false, defaultPanels: true, defaultLifterModel: defaultLifterModel !== undefined ? defaultLifterModel : \"\"};\r\n var cornerLength = repo.basemodules.find(m => m.isCorner)?.size?.width ?? 865;\r\n var cabinetLength = repo.basemodules.find(m => !m.isBaseModule && !m.isCorner && m.isDouble !== true)?.size?.width ?? 600;\r\n var moduleLength = repo.basemodules.find(m => m.isBaseModule && !m.isCorner && m.isDouble !== true)?.size?.width ?? 680;\r\n if (right >= cornerLength + moduleLength && left >= cornerLength + moduleLength && repo.project !== \"hd\") { // size of corner plus 1 module\r\n right -= cornerLength ?? 0;\r\n left -= cornerLength ?? 0;\r\n corner = true;\r\n }\r\n let leftCount = 0;\r\n let rightCount = 0;\r\n if (left >= cabinetLength + moduleLength) { // calculate for tall module of width 600 to be included\r\n leftCount += 2;\r\n left -= cabinetLength + moduleLength;\r\n }\r\n if (right >= cabinetLength + moduleLength) { // calculate for tall module of width 600 to be included\r\n rightCount += 2;\r\n right -= cabinetLength + moduleLength;\r\n }\r\n leftCount += Math.floor(left / moduleLength);\r\n rightCount += Math.floor(right / moduleLength);\r\n if(leftCount > 12) leftCount = 12;\r\n if(rightCount > 12) rightCount = 12;\r\n var result = changeModuleSize(repo, configuration, leftCount, corner, corner ? rightCount : 0);\r\n var size = getSize(configuration, repo);\r\n while(size.width > oriLeft) {\r\n changeModuleSize(repo, configuration, --leftCount, corner, corner ? rightCount : 0);\r\n size = getSize(configuration, repo);\r\n }\r\n while(oriRight > 0 && (size.width2 ?? 0) > oriRight) {\r\n changeModuleSize(repo, configuration, leftCount, corner, corner ? --rightCount : 0);\r\n size = getSize(configuration, repo);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport const setDefaultModules = (repo: RepoState) =>\r\n{\r\n var defaultMaterial = repo.tabletop[0].material;\r\n var defaultLifterModel = repo.basemodules.find(x => x.isLifter)?.id;\r\n\r\n let configuration: ConfigurationState = { left: [], right: [], defaultTabletop: defaultMaterial, defaultCupboards: true, defaultLights: false, defaultLifter: false, defaultPanels: true, defaultLifterModel: defaultLifterModel !== undefined ? defaultLifterModel : \"\" };\r\n return changeModuleSize(repo, configuration, 4, false, 0);\r\n}\r\n\r\nexport const changeModuleSize = (repo: RepoState, configuration: ConfigurationState, left: number, corner: boolean, right: number) => \r\n{\r\n const tabletop = configuration.defaultTabletop;\r\n const hasLight = configuration.defaultLights;\r\n const hasLifter = configuration.defaultLifter;\r\n const hasCupboard = configuration.defaultCupboards;\r\n const hasPanel = configuration.defaultPanels;\r\n if (corner !== (configuration.corner !== undefined))\r\n {\r\n if(corner){\r\n var module = getRandomModule(repo, configuration, true, tabletop);\r\n module.cupboard = hasCupboard ? module.cupboard : undefined;\r\n module.panel = hasPanel ? repo.toolboards.filter(t => t.isCorner)[0].id : undefined;\r\n module.light = hasLight;\r\n module.isLifted = hasLifter;\r\n configuration.corner = module;\r\n } else {\r\n configuration.corner = undefined;\r\n }\r\n }\r\n configuration.left = adjustModuleListSize(repo, configuration, configuration.left, left, tabletop, true, hasPanel, hasCupboard, hasLight, hasLifter, configuration.defaultLifterModel);\r\n configuration.right = adjustModuleListSize(repo, configuration, configuration.right, right, tabletop, true, hasPanel, hasCupboard, hasLight, hasLifter, configuration.defaultLifterModel);\r\n return setConfiguration(configuration);\r\n}\r\n\r\nfunction modulesLength(modules: Module[], lengths: {[x: string]: number}) {\r\n if(modules.length === 0) return 0;\r\n return modules.map(m => lengths[m.cabinet ?? m.base] ?? 1).reduce((a, b) => a + b);\r\n}\r\n\r\nconst adjustModuleListSize = (repo: RepoState, configuration: ConfigurationState, modules: Module[], length: number, tabletop: Material, endingModule: boolean, hasPanel: boolean, hasCupboard: boolean, hasLight: boolean, hasLifter: boolean, lifter: string): Module[] =>\r\n{\r\n if(length === 0) return [];\r\n var moduleLengths = Object.assign({}, ...repo.basecabinets.map(m => ({[m.id]: m.isDouble === true ? 2 : 1 })));\r\n while (modulesLength(modules, moduleLengths) > length)\r\n {\r\n const deleteFrom = length <= 2 ? length === 1 ? 0 : 1 : (length - 2); // Delete modules apart from ending when length >= 2\r\n if(modules.splice(deleteFrom, 1).length === 0) break;\r\n }\r\n if (modulesLength(modules, moduleLengths) < length)\r\n {\r\n if (endingModule && modules.length <= 1 && length > 1)\r\n { // Add ending module \r\n modules.push(getRandomModule(repo, configuration, false, tabletop, true, false, false));\r\n }\r\n while (modulesLength(modules, moduleLengths) < length)\r\n {\r\n var canDouble = modules.length !== 0 && length - modulesLength(modules, moduleLengths) >= 2;\r\n var index = Math.floor(Math.random()*(modules.length-2)) + 1;\r\n var canCart = modules.length > 2 && modules[index].canCart && !isCartModule(repo, modules[index]) && allowAllTableTops(repo, configuration);\r\n var module = getRandomModule(repo, configuration, false, tabletop, false, canCart, canDouble);\r\n \r\n module.cupboard = hasCupboard ? module.cupboard : undefined;\r\n module.panel = hasPanel ? repo.toolboards.filter(t => !t.isCorner)[0].id : undefined;\r\n module.light = hasLight;\r\n module.isLifted = hasLifter;\r\n module.lifter = lifter;\r\n modules.splice(!endingModule ? modules.length : modules.length < 2 ? 0 : index, 0, module);\r\n validateModules(repo, modules, false, tabletop);\r\n }\r\n }\r\n return modules;\r\n}\r\n\r\n/* Validates and corrects mistakes in configuration state*/\r\nexport const validateState = (repo: RepoState, configuration: ConfigurationState) =>\r\n{\r\n const hasCorner = configuration.corner !== undefined && configuration.corner.cupboard !== undefined;\r\n \r\n validateModules(repo, configuration.left, hasCorner, configuration.defaultTabletop);\r\n validateModules(repo, configuration.right, hasCorner, configuration.defaultTabletop);\r\n\r\n validateXLCartLaminate(repo, configuration, configuration.left);\r\n validateXLCartLaminate(repo, configuration, configuration.right);\r\n \r\n // if( configuration.defaultTabletop !== \"Laminate\" && repo?.project !== undefined && repo.project === \"grey\") {\r\n // validateTableTop(configuration, configuration.left);\r\n // validateTableTop(configuration, configuration.right);\r\n // }\r\n if (configuration.corner)\r\n {\r\n const module = configuration.corner;\r\n module.panel = module.panel || module.cupboard !== undefined ? repo.toolboards.filter(t => t.isCorner)[0].id : undefined;\r\n module.light = module.light && module.cupboard !== undefined;\r\n module.canCart = module.canFull = false;\r\n module.canCupboard = (configuration.left.length === 0 || configuration.left[0].base === repo.basemodules.filter(t => !t.isCorner && t.isBaseModule)[0].id) &&\r\n (configuration.right.length === 0 || configuration.right[0].base === repo.basemodules.filter(t => !t.isCorner && t.isBaseModule)[0].id);\r\n module.cupboard = module.canCupboard ? module.cupboard : undefined;\r\n }\r\n}\r\nconst validateXLCartLaminate = (repo: RepoState, configuration: ConfigurationState, modules: Module[]) => {\r\n let check = false;\r\n for (var i = 0; i < modules.length; i++)\r\n {\r\n const module = modules[i];\r\n if(module.cabinet === XLCart) {\r\n check = ((IsNeighborCabinetEmpty(repo, configuration, module.id, false) === -1 || !IsNeighborCabinetNotBase(repo, configuration, module.id)) && i !== 0 && i !== modules.length-1); \r\n if(check) {\r\n module.isValidXLCart = true;\r\n }\r\n }\r\n }\r\n return check;\r\n}\r\n\r\nexport const allowAllTableTops = (repo: RepoState, configuration: ConfigurationState) => {\r\n let modules = configuration.left;\r\n for (var i = 0; i < modules.length; i++)\r\n {\r\n const module = modules[i];\r\n if(module.cabinet === undefined) {\r\n let idx = IsNeighborCabinetEmpty(repo, configuration, module.id, false);\r\n if(idx !== -1 ) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n modules = configuration.right;\r\n for (var i = 0; i < modules.length; i++)\r\n {\r\n const module = modules[i];\r\n if(module.cabinet === undefined) {\r\n let idx = IsNeighborCabinetEmpty(repo, configuration, module.id, false);\r\n if(idx !== -1 ) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n/* Validates and corrects mistakes in module list*/\r\nconst validateModules = (repo: RepoState, modules: Module[], hasCorner: boolean, defaultTabletop: Material) =>\r\n{\r\n const lastIndex = modules.length - 1;\r\n for (var i = 0; i < modules.length; i++)\r\n {\r\n const module = modules[i]\r\n const isModule = repo.basemodules.find(m => m.id === module.base && m.isBaseModule) !== undefined; // is a modular set and not a full cabinet\r\n module.tabletop = isModule ? module.tabletop || defaultTabletop : undefined; // only provide tabletop when it is a modular set\r\n \r\n\r\n module.cupboard = isModule ? module.cupboard : undefined; // only provide cupboard when it is a modular set\r\n module.panel = isModule && module.panel !== undefined || module.cupboard !== undefined ? module.panel || repo.toolboards.filter(t => t.isCorner)[0].id : undefined; // force enabled panel when cupboard is set\r\n module.light = module.light && module.cupboard !== undefined; // force disabled light when no cupboard is set\r\n module.canCupboard = true;\r\n \r\n module.canFull = (!hasCorner || i !== 0) && (i === 0 || !isCartModule(repo, modules[i - 1])) && (i === lastIndex || !isCartModule(repo, modules[i + 1])); // boolean to check that a full cabinet is possible\r\n module.canCart = module.canFull && i !== 0 && i !== lastIndex && \r\n !isFullModule(repo, modules[i-1]) && !isFullModule(repo, modules[i+1]) &&\r\n (i < 3 || !isCartModule(repo, modules[i - 2])) && (i > lastIndex - 3 || !isCartModule(repo, modules[i + 2])); // boolean to check that cart or empty cabinet is possible\r\n if (!module.canCart && isCartModule(repo, module))\r\n { // reset to default cabinet in case of error\r\n module.base = repo.basemodules.filter(m => m.isBaseModule && !m.isCorner)[0].id;\r\n module.cabinet = repo.basecabinets.filter(m => !m.isCorner)[0]?.id;\r\n } else if (!module.canFull && !isModule)\r\n {\r\n module.cabinet = repo.basecabinets.filter(m => !m.isCorner)[0]?.id;\r\n module.tabletop = defaultTabletop;\r\n } else if(!isModule) {\r\n module.cabinet = undefined;\r\n }\r\n\r\n if(module.tabletop === undefined) {\r\n module.lifter = undefined;\r\n module.isLifted = false; \r\n }\r\n }\r\n}\r\n\r\nconst isCartModule = (repo: RepoState, module: Module) =>\r\n{\r\n return repo.allProducts[module.cabinet ?? \"\"]?.isCart === true;\r\n}\r\n\r\nconst isFullModule = (repo: RepoState, module: Module) =>\r\n{\r\n return repo.allProducts[module.base].isBaseModule === false;\r\n}\r\n\r\nexport const getConfigurationProducts = (configuration: ConfigurationState, repo: RepoState) =>\r\n{\r\n let parts: Dictionary = {};\r\n let modules = getModuleList(configuration);\r\n\r\n\r\n modules.forEach(m =>\r\n {\r\n let isBaseModule = repo.basemodules.find(b => b.id === m.base)?.isBaseModule;\r\n let isDouble = repo.basecabinets.find(b => b.id === m.cabinet)?.isDouble;\r\n if (!isBaseModule) {\r\n addPartToDictionary(parts, m.base);\r\n }\r\n addPartToDictionary(parts, m.cabinet);\r\n addPartToDictionary(parts, m.cupboard);\r\n addPartToDictionary(parts, m.panel);\r\n if(isDouble) {\r\n addPartToDictionary(parts, m.cupboard);\r\n addPartToDictionary(parts, m.panel);\r\n }\r\n if(m.isLifted && m.lifter !== undefined && m.cabinet !== undefined && m.cabinet !== EmptyDoubleSpace && m.cabinet !== \"0144-TGC1307WB\" && m.cabinet !== \"0144-TGC1305W\") {\r\n addPartToDictionary(parts, m.lifter);\r\n if(isDouble) {\r\n addPartToDictionary(parts, m.lifter);\r\n }\r\n }\r\n if(m.cabinet === XLCart) {\r\n if( m.tabletop !== \"Laminate\") {\r\n addPartToDictionary(parts, EmptyDoubleSpace);\r\n } \r\n else if (!m.isValidXLCart) {\r\n addPartToDictionary(parts, EmptyDoubleSpace);\r\n }\r\n }\r\n \r\n \r\n });\r\n\r\n\r\n if (configuration.corner && configuration.corner.panel) parts[configuration.corner.panel] += 1;\r\n addTabletops(configuration, repo, parts);\r\n addLights(repo, configuration, parts);\r\n addBrackets(repo, configuration, parts);\r\n \r\n \r\n return parts;\r\n}\r\n\r\nfunction addPartToDictionary(dic: Dictionary, part?: string)\r\n{\r\n if(part) dic[part] = dic[part] ? dic[part] + 1 : 1;\r\n}\r\n\r\nfunction addBrackets(repo: RepoState, configuration: ConfigurationState, dic: Dictionary)\r\n{\r\n if (repo.project === \"hd\") {\r\n var count = (dic[\"0145-TBCL345\"] ?? 0);\r\n if(count > 0) {\r\n dic[\"0145-TBCL316\"] = count;\r\n dic[\"0145-TBCL3200\"] = count;\r\n }\r\n return;\r\n } else if (repo.project === \"black\") {\r\n dic[endBracketBlack] = 0;\r\n dic[betweenBracketBlack] = 0;\r\n abfaBlack(repo, configuration.left, dic);\r\n abfaBlack(repo, configuration.right, dic);\r\n if(configuration.corner && configuration.corner.panel) {\r\n dic[endBracketBlack] += 4; // add 4 brackets for corner panel\r\n if (configuration.left.length > 0 && configuration.left[0].panel === repo.toolboards.filter(t => !t.isCorner)[0].id) {\r\n // replace 2 endbrackets with a betweenbracket when left side starts with a panel\r\n dic[endBracketBlack] -= 2;\r\n dic[betweenBracketBlack] += 1;\r\n }\r\n if (configuration.right.length > 0 && configuration.right[0].panel === repo.toolboards.filter(t => !t.isCorner)[0].id) {\r\n // replace 2 endbrackets with a betweenbracket when right side starts with a panel\r\n dic[endBracketBlack] -= 2;\r\n dic[betweenBracketBlack] += 1;\r\n }\r\n }\r\n } else {\r\n dic[endBracketGrey] = 0;\r\n dic[betweenBracketGrey] = 0;\r\n abfaGrey(repo, configuration.left, dic);\r\n abfaGrey(repo, configuration.right, dic);\r\n if(configuration.corner && configuration.corner.panel) {\r\n dic[endBracketGrey] += 4; // add 4 brackets for corner panel\r\n if (configuration.left.length > 0 && configuration.left[0].panel === repo.toolboards.filter(t => !t.isCorner)[0].id) {\r\n // replace 2 endbrackets with a betweenbracket when left side starts with a panel\r\n dic[endBracketGrey] -= 2;\r\n dic[betweenBracketGrey] += 1;\r\n }\r\n if (configuration.right.length > 0 && configuration.right[0].panel === repo.toolboards.filter(t => !t.isCorner)[0].id) {\r\n // replace 2 endbrackets with a betweenbracket when right side starts with a panel\r\n dic[endBracketGrey] -= 2;\r\n dic[betweenBracketGrey] += 1;\r\n }\r\n }\r\n }\r\n \r\n}\r\n\r\nfunction abfaGrey(repo: RepoState, modules: Module[], dic: Dictionary)\r\n{\r\n let baseModule = repo.basemodules.filter(m => m.isBaseModule && !m.isCorner)[0]?.id;\r\n let partPanels = repo.toolboards.filter(t => !t.isCorner && t.id !== \"0144-GB03\").map(t => t.id);\r\n let lastBase: string = baseModule;\r\n let lastPanel: boolean = false;\r\n modules.forEach(m =>\r\n {\r\n let isPanel = partPanels.indexOf(m.panel ?? '') !== -1;\r\n let isDouble = repo.basecabinets.find(b => b.id === m.cabinet)?.isDouble;\r\n if (isDouble && isPanel) {\r\n dic[betweenBracketGrey] += 1; // add a bracket between double module if it has panels\r\n }\r\n if (lastPanel !== isPanel){\r\n if(lastBase !== m.base) {\r\n dic[betweenBracketGrey] += 1; // going from base module with panel to full cabinet or vise versa\r\n } else {\r\n dic[endBracketGrey] += 1; // going from base module with panel to base module without panel or vise versa\r\n }\r\n } else {\r\n if (isPanel || (lastBase !== baseModule && m.base !== baseModule)) {\r\n if(lastPanel && isPanel) {\r\n dic[betweenBracketGrey] += 1; // between 2 panels and not between 2 full cabinets\r\n }\r\n }\r\n }\r\n lastPanel = isPanel;\r\n lastBase = m.base;\r\n });\r\n if(lastPanel) {\r\n // add ending bracket in case of a panel\r\n dic[endBracketGrey] += 1;\r\n }\r\n}\r\n\r\nfunction abfaBlack(repo: RepoState, modules: Module[], dic: Dictionary)\r\n{\r\n let baseModule = repo.basemodules.filter(m => m.isBaseModule && !m.isCorner)[0]?.id;\r\n let partPanels = repo.toolboards.filter(t => !t.isCorner && t.id !== \"0144-GB03\").map(t => t.id);\r\n let lastBase: string = baseModule;\r\n let lastPanel: boolean = false;\r\n modules.forEach(m =>\r\n {\r\n let isPanel = partPanels.indexOf(m.panel ?? '') !== -1;\r\n let isDouble = repo.basecabinets.find(b => b.id === m.cabinet)?.isDouble;\r\n if (isDouble && isPanel) {\r\n dic[betweenBracketBlack] += 1; // add a bracket between double module if it has panels\r\n }\r\n if (lastPanel !== isPanel){\r\n if(lastBase !== m.base) {\r\n dic[betweenBracketBlack] += 1; // going from base module with panel to full cabinet or vise versa\r\n } else {\r\n dic[endBracketBlack] += 1; // going from base module with panel to base module without panel or vise versa\r\n }\r\n } else {\r\n if (isPanel || (lastBase !== baseModule && m.base !== baseModule)) {\r\n if(lastPanel && isPanel) {\r\n dic[betweenBracketBlack] += 1; // between 2 panels and not between 2 full cabinets\r\n }\r\n }\r\n }\r\n lastPanel = isPanel;\r\n lastBase = m.base;\r\n });\r\n if(lastPanel) {\r\n // add ending bracket in case of a panel\r\n dic[endBracketBlack] += 1;\r\n }\r\n}\r\n\r\n\r\nfunction addLights(repo: RepoState, configuration: ConfigurationState, dic: Dictionary)\r\n{\r\n let modules = getModuleList(configuration);\r\n alfa(repo, modules, dic);\r\n}\r\n\r\n// add lights from array (helper function)\r\nfunction alfa(repo: RepoState, modules: Module[], dic: Dictionary)\r\n{\r\n let count = 0;\r\n let lastLightState = 0;\r\n modules.forEach(m =>\r\n {\r\n const isCorner = repo.basemodules.find(b => b.id === m.base)?.isCorner;\r\n let isDouble = repo.basecabinets.find(b => b.id === m.cabinet)?.isDouble;\r\n const lightState = m.light ? 1 : 0;\r\n //const lightState = m.light ? m.cupboard === partCupboardDouble ? 2 : 1 : 0; // height of cupboard\r\n if (lastLightState !== lightState)\r\n {\r\n //console.log(count);\r\n // add previous tables if a change in material occurs\r\n if (lastLightState > 0)\r\n {\r\n altd(count, dic);\r\n }\r\n lastLightState = lightState;\r\n count = isCorner || isDouble ? 2 : 1;\r\n } else\r\n {\r\n count += isCorner || isDouble ? 2 : 1;\r\n }\r\n });\r\n if (lastLightState > 0)\r\n {\r\n // add unaccounted lights\r\n altd(count, dic);\r\n }\r\n}\r\n\r\n// add lights to dictionary (helper function)\r\nfunction altd(count: number, dic: Dictionary)\r\n{\r\n if (count <= 0) return;\r\n\r\n let tableCount = [0, 0, 0];\r\n switch (count % 3)\r\n {\r\n // Add only 3 length lights\r\n case 0: tableCount[2] = count / 3; break;\r\n // Add a 1 length light if count is 1, else add 2x2 length lights + 3 length lights for the rest\r\n case 1: if (count === 1) tableCount[0] = 1; else { tableCount[1] = 2; tableCount[2] = (count - 4) / 3; } break;\r\n // Add a 2 length light + 3 length lights for the rest\r\n case 2: tableCount[1] = 1; tableCount[2] = (count - 2) / 3; break;\r\n }\r\n for (var i = 0; i < 3; i++)\r\n {\r\n if (tableCount[i] > 0) dic[lightKits[i]] = dic[lightKits[i]] ? dic[lightKits[i]] + tableCount[i] : tableCount[i];\r\n }\r\n}\r\n\r\nfunction addTabletops(configuration: ConfigurationState, repo: RepoState, dic: Dictionary)\r\n{\r\n let carts = repo.basecabinets.filter(c => c.isCart).map(c => c.id);\r\n atfa(configuration, configuration.left, repo, dic, carts);\r\n atfa(configuration, configuration.right, repo, dic, carts);\r\n if (configuration.corner && configuration.corner.tabletop)\r\n {\r\n // Add corner table\r\n atttd(1, repo, dic, configuration.corner.tabletop, true);\r\n }\r\n}\r\n\r\n// add tabletops from array (helper function)\r\nfunction atfa(configuration: ConfigurationState, modules: Module[], repo: RepoState, dic: Dictionary, carts: string[])\r\n{\r\n let lastTableTop: Material | undefined = undefined;\r\n\r\n let smallestTables: number[] = [];\r\n let doubleEmptyCount = 0;\r\n let doubleEmptyCheck = false;\r\n let laminate = false;\r\n for(var i = 0; i < modules.length; i++) {\r\n let module = modules[i];\r\n let moduleData = repo.allProducts[module.cabinet ?? module.base];\r\n if(module.tabletop === \"Laminate\") {\r\n laminate = true;\r\n }\r\n if(module.tabletop !== lastTableTop) {\r\n if(smallestTables.length > 0) {\r\n atbs(smallestTables, repo, dic, lastTableTop, laminate);\r\n smallestTables = [];\r\n }\r\n lastTableTop = module.tabletop;\r\n }\r\n \r\n if(laminate) {\r\n if(module.tabletop === undefined) {\r\n // do nothing\r\n } else if ((module.cabinet === undefined && IsNeighborCabinetEmpty(repo,configuration,module.id, false) !== -1) || (module.cabinet === XLCart && module.isValidXLCart)) { \r\n if( module.cabinet === XLCart || smallestTables[smallestTables.length-1] !== 4) {\r\n doubleEmptyCount++; \r\n doubleEmptyCheck = true;\r\n smallestTables.push(4);\r\n if(smallestTables.length > 1) {\r\n smallestTables[smallestTables.length-2] = smallestTables[smallestTables.length-2] - 1;\r\n if(smallestTables[smallestTables.length-2] === 0 ) {\r\n smallestTables.splice(smallestTables.length-2, 1);\r\n }\r\n }\r\n }\r\n }\r\n else if(moduleData.isDouble === true) {\r\n if(doubleEmptyCheck === true) {\r\n smallestTables.push(1);\r\n doubleEmptyCheck = false;\r\n } else {\r\n smallestTables.push(2);\r\n }\r\n } else if(moduleData.isCart === true || module.cabinet === undefined) {\r\n if(doubleEmptyCheck === true) {\r\n smallestTables.pop();\r\n smallestTables.push(2);\r\n doubleEmptyCheck = false;\r\n } else {\r\n if(smallestTables.length > 0){\r\n smallestTables[smallestTables.length - 1] = smallestTables[smallestTables.length - 1] - 1;\r\n if(smallestTables[smallestTables.length - 1] === 0) {\r\n smallestTables.pop();\r\n }\r\n }\r\n \r\n smallestTables.push(3);\r\n }\r\n \r\n i++;\r\n } else {\r\n if(doubleEmptyCheck === true) {\r\n doubleEmptyCheck = false;\r\n } else {\r\n smallestTables.push(1);\r\n }\r\n }\r\n } else {\r\n laminate = false;\r\n if(module.tabletop === undefined) {\r\n // do nothing\r\n } \r\n else if(moduleData.isDouble === true) {\r\n smallestTables.push(2);\r\n } else if(moduleData.isCart === true || module.cabinet === undefined) {\r\n if(smallestTables.length > 0){\r\n smallestTables[smallestTables.length - 1] = smallestTables[smallestTables.length - 1] - 1;\r\n if(smallestTables[smallestTables.length - 1] === 0) {\r\n smallestTables.pop();\r\n }\r\n }\r\n smallestTables.push(3);\r\n i++;\r\n } else {\r\n smallestTables.push(1);\r\n }\r\n }\r\n \r\n }\r\n \r\n atbs(smallestTables, repo, dic, lastTableTop, laminate);\r\n\r\n /*modules.forEach(m =>\r\n {\r\n let isDouble = repo.allProducts[m.cabinet ?? m.base].isDouble === true;\r\n if (lastTableTop !== m.tabletop)\r\n {\r\n // add previous tables if a change in material occurs\r\n atttd(count, repo, dic, lastTableTop, false);\r\n lastTableTop = m.tabletop;\r\n count = isDouble ? 2 : 1;\r\n } else if (m.cabinet && carts.findIndex(c => c === m.cabinet) >= 0)\r\n {\r\n // add previous tables before the table used for the cart\r\n atttd(count - 1, repo, dic, lastTableTop, false);\r\n // add the cart table of length 3\r\n atttd(3, repo, dic, lastTableTop, false);\r\n // set count to ignore the next table\r\n count = -1;\r\n } else\r\n {\r\n count += isDouble ? 2 : 1;\r\n }\r\n });\r\n // add unaccounted tables\r\n atttd(count, repo, dic, lastTableTop, false);*/\r\n}\r\n\r\n// add table by smallest\r\nfunction atbs(smallestTables: number[], repo: RepoState, dic: Dictionary, material: Material | undefined, laminate: boolean) {\r\n \r\n if (smallestTables.length <= 0 || material === undefined) return;\r\n let tables = repo.tabletop.filter(t => t.isCorner !== true && material === t.material).sort((t1, t2) => { return (t1.length as number) - (t2.length as number) }).map(t => t.id);\r\n if (tables.length === 0) {\r\n console.log(\"No tabletops to perform calculations\");\r\n }\r\n let maxLength = tables.length; // Max table length, assuming table lengths of 1, 2 ..\r\n \r\n if(!laminate) {\r\n for(var i = 0; i < smallestTables.length - 1; i++) { // Make 1+1=2 and make 2's and 3's non spliceable\r\n if(smallestTables[i] === 1 && smallestTables[i + 1] === 1) {\r\n smallestTables.splice(i, 2, 2);\r\n } else if(smallestTables[i] > 1) {\r\n smallestTables[i] = -smallestTables[i];\r\n }\r\n }\r\n if(maxLength >= 3) { // Make 1 + 2 = 3\r\n for(let i = 0; i < smallestTables.length - 1; i++) {\r\n if(Math.abs(smallestTables[i]) + Math.abs(smallestTables[i+1]) === 3) {\r\n smallestTables.splice(i, 2, -3);\r\n }\r\n }\r\n }\r\n if(maxLength >= 3) { // Make 2 + 2 + 2 = 3 + 3\r\n for(let i = 0; i < smallestTables.length - 2; i++) {\r\n if(Math.abs(smallestTables[i]) === 2 && smallestTables[i+1] === 2 && Math.abs(smallestTables[i+2]) === 2) {\r\n smallestTables.splice(i, 3, -3, -3);\r\n }\r\n }\r\n }\r\n if(maxLength >= 4) { // Make 2 + 2 = 4 or 1 + 3 = 4\r\n for(let i = 0; i < smallestTables.length - 1; i++) {\r\n if(Math.abs(smallestTables[i]) + Math.abs(smallestTables[i+1]) === 4) {\r\n smallestTables.splice(i, 2, -4);\r\n }\r\n }\r\n } else { // make 1 + 3 = 2 + 2\r\n for(let i = 0; i < smallestTables.length - 1; i++) {\r\n if(Math.abs(smallestTables[i]) === 1 && Math.abs(smallestTables[i+1]) === -3) {\r\n smallestTables.splice(i, 2, 2);\r\n smallestTables.splice(i+1, 2, 2);\r\n }\r\n }\r\n }\r\n } else {\r\n \r\n for(var i = 0; i < smallestTables.length - 1; i++) { // Make 1+1=2 and make 2's and 3's non spliceable\r\n if(smallestTables[i] === 1 && smallestTables[i + 1] === 1) {\r\n smallestTables.splice(i, 2, 2);\r\n } else if(smallestTables[i] > 1) {\r\n smallestTables[i] = -smallestTables[i];\r\n }\r\n }\r\n\r\n if(maxLength >= 3) { // Make 1 + 2 = 3\r\n for(let i = 0; i < smallestTables.length - 1; i++) {\r\n if(Math.abs(smallestTables[i]) + Math.abs(smallestTables[i+1]) === 3) {\r\n smallestTables.splice(i, 2, -3);\r\n }\r\n }\r\n }\r\n if(maxLength >= 3) { // Make 2 + 2 + 2 = 3 + 3\r\n for(let i = 0; i < smallestTables.length - 2; i++) {\r\n if(Math.abs(smallestTables[i]) === 2 && smallestTables[i+1] === 2 && Math.abs(smallestTables[i+2]) === 2) {\r\n smallestTables.splice(i, 3, -3, -3);\r\n }\r\n }\r\n }\r\n if(maxLength >= 4) { // Make 2 + 2 = 4 or 1 + 3 = 4\r\n for(let i = 0; i < smallestTables.length - 1; i++) {\r\n if(Math.abs(smallestTables[i]) + Math.abs(smallestTables[i+1]) === 4) {\r\n smallestTables.splice(i, 2, -4);\r\n }\r\n }\r\n }\r\n if(maxLength >= 4 && smallestTables.length === 3) { // Make 2 + 3 + 3 = 4 + 4\r\n for(let i = 0; i < smallestTables.length - 1; i++) {\r\n if(Math.abs(smallestTables[i]) + Math.abs(smallestTables[i+1]) + Math.abs(smallestTables[i+2]) === 8) {\r\n smallestTables.splice(i, 2, -4);\r\n smallestTables.splice(i+1, 1, -4);\r\n }\r\n }\r\n }\r\n if(maxLength >= 4 && smallestTables.length === 4) { // make 12 hardcoded\r\n let sum = 0;\r\n for(let i = 0; i < smallestTables.length ; i++) {\r\n sum += Math.abs(smallestTables[i]);\r\n }\r\n if(sum === 12) {\r\n smallestTables = [4, 4, 4]\r\n }\r\n }\r\n }\r\n \r\n for (let i = 0; i < smallestTables.length; i++) {\r\n var type = tables[Math.abs(smallestTables[i]) - 1]; // Tabletop type from index (length - 1)\r\n dic[type] = dic[type] ? dic[type] + 1 : 1; // Add tabletop to dic\r\n }\r\n}\r\n\r\n// add tabletops to dictionary (helper function)\r\nfunction atttd(count: number, repo: RepoState, dic: Dictionary, material: Material | undefined, isCorner: boolean)\r\n{\r\n if (count <= 0 || material === undefined) return;\r\n if (isCorner)\r\n {\r\n const cornerTable = repo.tabletop.find(t => t.isCorner === true && material === t.material)?.id;\r\n if (cornerTable) dic[cornerTable] = 1;\r\n } else\r\n {\r\n let tables = repo.tabletop.filter(t => t.isCorner !== true && material === t.material).sort((t1, t2) => { return (t1.length as number) - (t2.length as number) }).map(t => t.id);\r\n if (tables.length === 0) {\r\n console.log(\"No tabletops to perform calculations\");\r\n }\r\n let maxLength = tables.length; // Max table length, assuming table lengths of 1, 2 ..\r\n let amount = Math.ceil(count / maxLength); // Number of tabletops to order\r\n let remove = (maxLength * amount - count) % maxLength; // Total length to remove from setup of tabletops of max length\r\n let removeFromAll = Math.floor(remove / amount); // Length to remove from all tabletops\r\n let removeFromFirst = remove % amount; // Amount of tabletops to remove an extra length of 1\r\n\r\n for (var i = 0; i < amount; i++) {\r\n let tableLength = maxLength - removeFromAll - (i < removeFromFirst ? 1 : 0); // Tabletop length\r\n var type = tables[tableLength - 1]; // Tabletop type from index (length - 1)\r\n dic[type] = dic[type] ? dic[type] + 1 : 1; // Add tabletop to dic\r\n }\r\n }\r\n}\r\n\r\nexport const getSize = (configuration: ConfigurationState, repo: RepoState) =>\r\n{\r\n const size: Size = {\r\n width: 0,\r\n height: 0,\r\n depth: 0\r\n };\r\n\r\n if (configuration.corner)\r\n {\r\n let part = getProduct(repo, configuration.corner.base)\r\n if (part !== undefined && part.size)\r\n {\r\n const length = part.size.width;\r\n size.width = length;\r\n size.depth = length;\r\n size.height = part.size.height;\r\n }\r\n }\r\n\r\n configuration.left.reduce((size, p) =>\r\n {\r\n let part = getProduct(repo, p.base);\r\n let cabinet = getProduct(repo, p.cabinet);\r\n let cabinetHeight = 0;\r\n repo.basecabinets.reduce(x => {\r\n cabinetHeight = Math.max(cabinetHeight, x.size?.height ?? 0)\r\n return x; \r\n });\r\n let lifter = getProduct(repo, p.lifter);\r\n let toolboard = getProduct(repo, p.panel);\r\n let calculatedHeight = 0;\r\n if(toolboard !== undefined) {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n } else if(part?.isBaseModule) {\r\n calculatedHeight = cabinetHeight + (p.isLifted ? (lifter?.size?.height ?? 0) : 0) + 38 //38 is a magic number defining the height of the tabletop;\r\n } else {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n }\r\n\r\n if (!part || !part.size) return size;\r\n size.depth = Math.max(part.size.depth, size.depth);\r\n size.height = Math.max(calculatedHeight, size.height);\r\n size.width += (cabinet && cabinet.size && cabinet.size.width > part.size.width) ? cabinet.size.width : part.size.width;\r\n return size;\r\n }, size);\r\n\r\n configuration.right.reduce((size, p) =>\r\n {\r\n let part = getProduct(repo, p.base);\r\n let cabinet = getProduct(repo, p.cabinet);\r\n let cabinetHeight = 0;\r\n repo.basecabinets.reduce(x => {\r\n cabinetHeight = Math.max(cabinetHeight, x.size?.height ?? 0)\r\n return x; \r\n });\r\n let lifter = getProduct(repo, p.lifter);\r\n let toolboard = getProduct(repo, p.panel);\r\n let calculatedHeight = 0;\r\n if(toolboard !== undefined) {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n } else if(part?.isBaseModule) {\r\n calculatedHeight = cabinetHeight + (p.isLifted ? (lifter?.size?.height ?? 0) : 0) + 38 //38 is a magic number defining the height of the tabletop;\r\n } else {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n }\r\n\r\n if (!part || !part.size) return size;\r\n size.width = Math.max(part.size.depth, size.width);\r\n size.height = Math.max(calculatedHeight, size.height);\r\n size.depth += (cabinet && cabinet.size && cabinet.size.width > part.size.width) ? cabinet.size.width : part.size.width;\r\n return size;\r\n }, size);\r\n return size;\r\n}\r\n\r\nexport const getCustomSize = (configuration: ConfigurationState, repo: RepoState) =>\r\n{\r\n const size: Size = {\r\n width: 0,\r\n width2: 0,\r\n height: 0,\r\n depth: 0\r\n };\r\n /* if corner is enabled, client wants depth of cabinets not depth of used area*/\r\n let maxDepth = 0;\r\n let hasCabinet = false;\r\n if (configuration.corner)\r\n {\r\n let part = getProduct(repo, configuration.corner.base)\r\n \r\n if (part !== undefined && part.size)\r\n {\r\n const length = part.size.width;\r\n size.width = length;\r\n size.depth = length;\r\n size.height = part.size.height;\r\n }\r\n }\r\n \r\n configuration.left.reduce((size, p) =>\r\n {\r\n let part = getProduct(repo, p.base);let cabinet = getProduct(repo, p.cabinet);\r\n let cabinetHeight = 0;\r\n repo.basecabinets.reduce(x => {\r\n cabinetHeight = Math.max(cabinetHeight, x.size?.height ?? 0)\r\n return x; \r\n });\r\n let lifter = getProduct(repo, p.lifter);\r\n let toolboard = getProduct(repo, p.panel);\r\n let calculatedHeight = 0;\r\n \r\n if(toolboard !== undefined) {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n } else if(part?.isBaseModule) {\r\n calculatedHeight = cabinetHeight + (p.isLifted ? (lifter?.size?.height ?? 0) : 0) + 38 //38 is a magic number defining the height of the tabletop;\r\n } else {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n }\r\n\r\n if (!part || !part.size) return size;\r\n size.depth = Math.max(part.size.depth, size.depth);\r\n size.height = Math.max(calculatedHeight, size.height);\r\n size.width += (cabinet && cabinet.size && cabinet.size.width > part.size.width) ? cabinet.size.width : part.size.width;\r\n if(!p.tabletop) hasCabinet = true;\r\n if(part.size.depth > maxDepth)\r\n {\r\n maxDepth = part.size.depth;\r\n }\r\n return size;\r\n }, size);\r\n\r\n configuration.right.reduce((size, p) =>\r\n {\r\n let part = getProduct(repo, p.base);\r\n let cabinet = getProduct(repo, p.cabinet);\r\n let cabinetHeight = 0;\r\n repo.basecabinets.reduce(x => {\r\n cabinetHeight = Math.max(cabinetHeight, x.size?.height ?? 0)\r\n return x; \r\n });\r\n let lifter = getProduct(repo, p.lifter);\r\n let toolboard = getProduct(repo, p.panel);\r\n let calculatedHeight = 0;\r\n if(toolboard !== undefined) {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n } else if(part?.isBaseModule) {\r\n calculatedHeight = cabinetHeight + (p.isLifted ? (lifter?.size?.height ?? 0) : 0) + 38 //38 is a magic number defining the height of the tabletop;\r\n } else {\r\n calculatedHeight = part?.size?.height ?? 0;\r\n }\r\n\r\n if (!part || !part.size) return size;\r\n size.width = Math.max(part.size.depth, size.width);\r\n size.height = Math.max(calculatedHeight, size.height);\r\n size.depth += (cabinet && cabinet.size && cabinet.size.width > part.size.width) ? cabinet.size.width : part.size.width;\r\n if(part.size.depth > maxDepth)\r\n {\r\n maxDepth = part.size.depth;\r\n }\r\n if(!p.tabletop) hasCabinet = true;\r\n\r\n return size;\r\n }, size);\r\n\r\n /* if no cabinets, cupboareds or panels are found, show height for base cabinet */\r\n if(!configuration.defaultCupboards && !configuration.defaultPanels && !hasCabinet && !configuration.defaultLifter)\r\n {\r\n /* TODO fetch from base cabinet from repo */\r\n size.height = 948; //base cabinet height + tabletop height?\r\n }\r\n\r\n /* client wanted width to be width x width when corner is added */\r\n if(configuration.corner)\r\n {\r\n return {...size, width2: size.depth, depth: maxDepth};\r\n }\r\n\r\n\r\n return size;\r\n}","//import nodemailer from 'nodemailer';\r\n//import * as React from 'react';\r\n//import {BillingDocument} from \"./BillingDocument\";\r\nimport './MailHTMLStyle.css';\r\nimport { Cart } from '../../typings/cart';\r\nimport { ConfigurationState } from 'typings/configuration';\r\n//import ReactPDF from '@react-pdf/renderer';\r\nimport { siteUrl, shareUrl, GetProductLineURl } from '../../utils/utils';\r\n\r\nimport { getPrice, getItemPrice } from 'helpers/priceHelper';\r\nimport { RepoState } from 'typings/repo';\r\nimport { getProduct } from 'state/repo';\r\nimport { getConfigurationProducts } from 'helpers/configurationHelper';\r\n\r\n//import router from 'tobedefined';\r\n\r\ninterface Props\r\n{\r\n configuration: ConfigurationState, //Order,\r\n repo: RepoState,\r\n cart: Cart\r\n}\r\n\r\n/*let smtpTransport = nodemailer.createTransport({\r\n service: 'localhost',\r\n auth: {\r\n user: '',\r\n pass: ''\r\n }\r\n});*/\r\n\r\n\r\n/*let smtpTransport = nodemailer.createTransport({\r\n service: 'mail.smtp2go.com',\r\n auth: {\r\n user: 'flex1one-configurator',\r\n pass: 'aHczeXc3NDUzNnUw'\r\n }\r\n});*/\r\n\r\nconst getCurrency = (cur: string, repo:RepoState) =>\r\n{\r\n return repo.currency.find(c => c.currency === cur)?.format ?? '{0}';\r\n}\r\n\r\nexport const setMailOptionsAndSend = (props: Props) =>\r\n{\r\n //const stream = ReactPDF.renderToStream()\r\n \r\n /*\r\n var mailOptions = {\r\n from: 'flex-test@heyday.dk',\r\n to: props.cart.customer.email,\r\n subject: 'Flex1One Configuration Request For ',\r\n html:`\r\n
\r\n \"Flex1One\r\n
\r\n
\r\n

Good day ${props.cart.customer.firstname + ' ' + props.cart.customer.lastname}

\r\n
\r\n
\r\n \"Configuration\r\n
\r\n
\r\n

Your Flex1One Configuration

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n \r\n \r\n \r\n }\r\n \r\n
Reference:Link:Code:Date:
{props.cart.ref}Open configuration in browser.Not sure what is.{props.order.date}
\r\n
\r\n
\r\n

List price (without VAT)

\r\n

Total:

\r\n

(Detailed order summary in attached PDF)

\r\n
\r\n
\r\n

Your information:

\r\n

${props.cart.customer.firstname + ' ' + props.cart.customer.lastname}

\r\n

${props.cart.customer.address}

\r\n

E-mail: ${props.cart.customer.email}

\r\n

Phone: ${props.cart.customer.phone}

\r\n
\r\n `,\r\n attachments: [\r\n {\r\n filename: props.order.ordernumber + '.pdf',\r\n path: __dirname + '/'+ props.order.ordernumber + '.pdf',\r\n cid: props.order.ordernumber+'.pdf',\r\n content: '' // Might want to do a buffer instead of storing all billing documents on server.\r\n }\r\n ]\r\n }*/\r\n //console.log(mailOptions);\r\n /*smtpTransport.sendMail(mailOptions, function(error, info){\r\n if(error){\r\n console.error('Error sending mail with billing document, errorcode: ', error);\r\n }\r\n else{\r\n console.log('Sent email: ', info.response);\r\n }\r\n })*/\r\n\r\n}\r\n\r\nexport const sendShareMail = (email: string, key: string, type: \"SHARE\" | \"SAVE\") =>\r\n{\r\n const send = {\r\n id: key,\r\n email: email,\r\n type: type\r\n }\r\n fetch(`${siteUrl}/Mail/SaveMail`, {\r\n method: 'POST',\r\n //mode: 'cors',\r\n //cache: 'no-cache',\r\n //credentials: 'same-origin', \r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(send)\r\n })\r\n .then(response => response.json())\r\n .then(data =>\r\n {\r\n if(data === \"success\")\r\n {\r\n return \"success\";\r\n }\r\n return \"error\";\r\n });\r\n}\r\n \r\nexport const sendMail = (props:Props) =>\r\n{\r\n var style = \"font-family: Arial;\";\r\n var tableStyle = style;\r\n var tableStyleRight = style + \"text-align: right; padding-right: 20px;\";\r\n var cart = props.cart;\r\n var customer = cart.customer;\r\n var trans = props.repo.translations;\r\n const html = `\r\n
\r\n \"Flex1One\r\n
\r\n
\r\n

${trans.DEAR} ${customer.firstname + ' ' + customer.lastname}

\r\n
\r\n
\r\n \"Configuration\r\n
\r\n
\r\n

${trans.YOUR_FLEXLINE}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
${trans.REFERENCE_NR}:${trans.LINK}:${trans.DATE}:
${cart.id}${trans.OPEN_CONFIG}${cart.date.getDate()}/${cart.date.getMonth()+1}/${cart.date.getFullYear()}
\r\n
\r\n
\r\n

${trans.TOTAL_EX_MVA}

\r\n

${trans.TOTAL}: ${getCurrency(cart.currency, props.repo).replace('{0}', getPrice(props.configuration, props.repo, cart.currency, props.repo.langCode, cart.accessories, cart.additional))}

\r\n

(${trans.DETAILED_PDF})

\r\n
\r\n ${props.cart.customer.flexlineuser ? `\r\n \r\n
\r\n

${trans.FLEXLINE_PARTNER}

\r\n

${trans.SELLER_NAME}: ${customer.seller}

\r\n

${trans.ORDER}: ${customer.order}

\r\n

${trans.DEALER}: ${customer.dealer}

\r\n
\r\n \r\n ` : \"\"}\r\n \r\n
\r\n

${trans.YOUR_INFORMATION}:

\r\n

${customer.firstname + ' ' + customer.lastname}

\r\n

${customer.address}

\r\n

${customer.zip} ${customer.city} \r\n
${customer.country} \r\n

\r\n

${trans.EMAIL}: ${customer.email}

\r\n

${trans.PHONE}: ${customer.phone}

\r\n

${trans.COMMENT}: ${customer.comment}

\r\n
\r\n \r\n `;\r\n \r\n const products = getConfigurationProducts(props.configuration, props.repo);\r\n const accessories = cart.accessories;\r\n const additional = cart.additional;\r\n let items = \"\";\r\n Object.keys(products).map((key, i) => {\r\n const product = getProduct(props.repo, key);\r\n if (!product) return null;\r\n items += `\r\n ${product.id}\r\n ${product.title ? product.title : \"\"}\r\n ${products[key]}\r\n ${getItemPrice(product, cart.currency, props.repo.langCode, products[key])} \r\n `;\r\n });\r\n if(accessories)\r\n {\r\n Object.keys(accessories).map((key, i) => {\r\n const product = getProduct(props.repo, key);\r\n const val = accessories ? accessories[key] : 0;\r\n if (!product) return null;\r\n if (val === 0) return null; \r\n items += `\r\n ${product.id}\r\n ${product.title ? product.title : \"\"}\r\n ${val}\r\n ${getItemPrice(product, cart.currency, props.repo.langCode, products[key])} \r\n `;\r\n })\r\n } \r\n if(additional)\r\n {\r\n Object.keys(additional).map((key, i) => {\r\n const product = getProduct(props.repo, key);\r\n const val = additional ? additional[key] : 0;\r\n if (!product) return null;\r\n if (val === 0) return null; \r\n items += `\r\n ${product.id}\r\n ${product.title ? product.title : \"\"}\r\n ${val}\r\n ${getItemPrice(product, cart.currency, props.repo.langCode, products[key])} \r\n `;\r\n })\r\n }\r\n \r\n const receipt = `\r\n
\r\n \"Flex1One\r\n
\r\n
\r\n

${trans.DEAR} ${customer.firstname + ' ' + customer.lastname}

\r\n
\r\n
\r\n \"Configuration\r\n
\r\n
\r\n

${trans.YOUR_FLEXLINE}

\r\n
\r\n Ref nr: ${cart.id}
\r\n Date: ${cart.date.getDate()}/${cart.date.getMonth()+1}/${cart.date.getFullYear()} \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ${items}\r\n
${trans.PRODUCT_ID}:${trans.DESCRIPTION}:${trans.AMOUNT}:${trans.SUB_TOTAL}:
\r\n
\r\n
\r\n

${trans.TOTAL_EX_MVA}

\r\n

${trans.TOTAL}: ${getCurrency(cart.currency, props.repo).replace('{0}', getPrice(props.configuration, props.repo, cart.currency, props.repo.langCode))}

\r\n
\r\n ${props.cart.customer.flexlineuser ? `\r\n \r\n
\r\n

${trans.FLEXLINE_PARTNER}

\r\n

${trans.SELLER_NAME}: ${customer.seller}

\r\n

${trans.ORDER}: ${customer.order}

\r\n

${trans.DEALER}: ${customer.dealer}

\r\n
\r\n \r\n ` : \"\"}\r\n
\r\n

${trans.YOUR_INFORMATION}:

\r\n

${customer.firstname + ' ' + customer.lastname}

\r\n

${customer.address}

\r\n

${customer.zip} ${customer.city} \r\n
${customer.country} \r\n

\r\n

${trans.EMAIL}: ${customer.email}

\r\n

${trans.PHONE}: ${customer.phone}

\r\n
\r\n`;\r\n\r\n const order = {\r\n id: props.cart.id,\r\n email: customer.email + ',' + \"salg@FLEX1ONE.dk\",\r\n html: html,\r\n receipt: receipt,\r\n subject: trans.FLEXLINE,\r\n image: cart.configimg \r\n }\r\n fetch(`${siteUrl}/Mail/SendMail`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(order)\r\n })\r\n .then(response => response.json())\r\n .then(data =>\r\n {\r\n if(data === \"success\")\r\n {\r\n return \"success\";\r\n }\r\n return \"error\";\r\n });\r\n return \"error0\";\r\n}\r\n","import { Action, Dispatch } from 'redux';\r\nimport { Dictionary } from '../../typings/repo';\r\nimport { Module, ConfigurationState, Template } from 'typings/configuration';\r\nimport { Side, PartType } from 'typings/globals';\r\nimport { templateToConfiguration } from 'state/templates';\r\nimport { api } from \"../../api/Api\";\r\nimport { setCartAccessoryAdditional, saveConfigurationAction } from 'state/cart/actions';\r\nimport { validateEmail } from 'utils/utils';\r\nimport { sendShareMail } from 'components/billing/CheckoutMail.old';\r\nimport { setLanguage } from '../repo/actions';\r\n\r\nexport const replaceAt = (module: Module, side: Side, index: number = 0) => ({ type: \"REPLACE_AT\", module, side, index });\r\ninterface ReplaceAtAction extends Action<\"REPLACE_AT\">\r\n{\r\n index: number;\r\n side: Side;\r\n module: Module;\r\n}\r\n\r\nexport const setPart = (part_type: PartType, moduleId: string, model?: string) => ({ type: \"SET_PART\", part_type, model, moduleId });\r\ninterface SetPartAction extends Action<\"SET_PART\">\r\n{\r\n moduleId: string;\r\n model?: string;\r\n part_type: PartType;\r\n}\r\n\r\nexport const setAllParts = (part_type: PartType, model?: string, cornerModel?: string) => ({ type: \"SET_ALL_PARTS\", part_type, model, cornerModel });\r\ninterface SetAllPartAction extends Action<\"SET_ALL_PARTS\">\r\n{\r\n cornerModel?: string;\r\n model?: string;\r\n part_type: PartType;\r\n}\r\n\r\nexport const saveConfiguration = (project: string, email: string, configuration: ConfigurationState, accessories?: Dictionary, additional?: Dictionary) => async (dispatch: Dispatch) =>\r\n{\r\n try\r\n {\r\n dispatch(saveConfigurationAction(undefined));\r\n let storageId = await api.configurationApi.saveConfiguration({project, configuration, accessories, additional});\r\n dispatch(saveConfigurationAction(storageId));\r\n if(validateEmail(email))\r\n {\r\n sendShareMail(email, storageId, \"SAVE\");\r\n }\r\n }\r\n catch (ex)\r\n {\r\n }\r\n};\r\n\r\nexport const loadConfiguration = (lang: string, storageId: string) => async (dispatch: Dispatch) =>\r\n{\r\n try\r\n {\r\n let template = await api.configurationApi.loadConfiguration(storageId);\r\n if(template){\r\n const configAction: SetConfigurationAction = {\r\n type: \"SET_CONFIGURATION\",\r\n state: template.configuration\r\n };\r\n // dispatch(setLanguage(lang, template.project === \"hd\"));\r\n dispatch({ type: template.project});\r\n dispatch(configAction);\r\n dispatch(setCartAccessoryAdditional(template.accessories,template.additional));\r\n }\r\n }\r\n catch (ex)\r\n {\r\n }\r\n};\r\n\r\nexport const setToTemplate = (template: Template) => setConfiguration(templateToConfiguration(template))\r\nexport const setConfiguration = (state: ConfigurationState) => ({ type: \"SET_CONFIGURATION\", state });\r\ninterface SetConfigurationAction extends Action<\"SET_CONFIGURATION\">\r\n{\r\n state: ConfigurationState;\r\n}\r\n\r\nexport const selectModule = (moduleId?: string) => ({ type: \"SELECT_MODULE\", moduleId });\r\ninterface SelectModuleAction extends Action<\"SELECT_MODULE\">\r\n{\r\n moduleId?: string;\r\n}\r\n\r\nexport type ConfigurationAction = ReplaceAtAction | SetConfigurationAction | SetPartAction | SelectModuleAction | SetAllPartAction","import { Product, RepoState, Dictionary } from 'typings/repo';\r\nimport { ConfigurationState } from 'typings/configuration';\r\nimport { getConfigurationProducts } from 'helpers/configurationHelper';\r\nimport { getProduct } from 'state/repo';\r\n\r\nexport const getPrice = (configuration: ConfigurationState, repo: RepoState, currency: string, lang: string, extra1?: Dictionary, extra2?: Dictionary) => \r\n{\r\n var parts = getConfigurationProducts(configuration, repo);\r\n var price = getPartsPrice(parts, repo, currency);\r\n if(extra1) price += getPartsPrice(extra1, repo, currency);\r\n if(extra2) price += getPartsPrice(extra2, repo, currency);\r\n return price.toLocaleString(lang);\r\n}\r\n\r\nfunction getPartsPrice(parts: Dictionary, repo: RepoState, currency: string){\r\n return Object.keys(parts).reduce((price, id) => { \r\n const product = getProduct(repo, id);\r\n if(product == null) return price;\r\n return price + (product.prices[currency] ? product.prices[currency] * parts[id] : 0);\r\n } ,0);\r\n}\r\n\r\nexport const getItemPrice = (product: Product | Product, currency: string, lang: string, amount: number = 1) => \r\n{\r\n return (product.prices[currency] ? (product.prices[currency]*amount).toLocaleString(lang) : 0) + \",-\";\r\n}\r\n\r\nexport const getCurrency = (cur: string, repo:RepoState) =>\r\n{\r\n return repo.currency.find(c => c.currency === cur)?.format ?? '{0}';\r\n}\r\n\r\nexport const getItemsCount = (repo:RepoState, products: Dictionary, accessories?: Dictionary, additional?: Dictionary) => \r\n{\r\n let total = 0;\r\n if(products) Object.keys(products).map(key => total += products[key]);\r\n if(accessories) Object.keys(accessories).map(key => total += accessories[key]);\r\n if(additional) Object.keys(additional).map(key => total += additional[key]); \r\n\r\n return total;\r\n}","import styled from \"styled-components\";\r\nimport { PrimaryColor, BorderColor } from 'global.styles';\r\n\r\nexport const RadioStyle = styled.div`\r\npadding: 9px 0px;\r\n// border-bottom: 1px solid rgba(0,0,0,.1);\r\n//clear: both;\r\ndisplay: flex;\r\nalign-items: center;\r\nlabel{\r\n float: left;\r\n clear: left;\r\n line-height: 30px;\r\n cursor: pointer;\r\n}\r\nposition: relative;\r\nlabel{\r\n width: calc(100% - 22px);\r\n display: flex;\r\n}\r\ninput{\r\n cursor: pointer;\r\n float:right;\r\n -moz-appearance: none;\r\n width: 8px;\r\n height: 8px;\r\n margin-left: 10px;\r\n &:after{\r\n content: \"\";\r\n position: absolute;\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 20px;\r\n background: white;\r\n border: 2px solid ${BorderColor};\r\n margin-left: -5px;\r\n margin-top: -1px;\r\n transition: all .1s linear;\r\n margin-top: -7px;\r\n }\r\n &:checked:after{\r\n border-color: ${PrimaryColor};\r\n border-width: 6px;\r\n width: 10px;\r\n height: 10px;\r\n }\r\n &:disabled{\r\n opacity: .4;\r\n }\r\n\r\n\r\n &::-ms-check {\r\n border: 4px solid ${BorderColor};\r\n color: transparent;\r\n opacity: 1;\r\n width: 10px;\r\n height: 10px;\r\n }\r\n\r\n &:checked::-ms-check {\r\n border: 4px solid ${PrimaryColor};\r\n //color: green;\r\n opacity: 1;\r\n }\r\n \r\n}\r\nspan, div > span{\r\n font-size: 15px;\r\n}\r\nh4, h5, h6{\r\n margin: 0;\r\n \r\n}\r\nh4{\r\n line-height: 1em;\r\n}\r\nimg{\r\n animation: .5s showImage both;\r\n animation-delay: .3s;\r\n}\r\n\r\n&.cart{\r\n label h4{\r\n font-weight: normal;\r\n font-size: 14px;\r\n }\r\n}\r\n\r\n@keyframes showImage{\r\n 0%{\r\n opacity: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n }\r\n}\r\n`;\r\n","import * as React from \"react\";\r\nimport { RadioStyle } from './Radio.style';\r\n\r\n\r\ninterface Props{\r\n options?: string[][];\r\n id?: number | string;\r\n group: string;\r\n checked?: boolean;\r\n value: string;\r\n disabled?: boolean;\r\n onChange?: (e:string) => void;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\n\r\n\r\nconst Radio:React.FC = (props) =>\r\n{\r\n const change = (e:React.SyntheticEvent) =>\r\n {\r\n if(props.onChange)\r\n { \r\n props.onChange(e.currentTarget.value);\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n\r\n\r\n}\r\n\r\nexport default Radio;","import { ConfigurationAction } from \"./actions\";\r\nimport { Material } from '../repo';\r\nimport { ConfigurationState, Module } from 'typings/configuration';\r\nimport { PartType } from 'typings/globals';\r\nimport { validateState } from 'helpers/configurationHelper';\r\nimport { RepoState } from \"../../typings/repo\";\r\n\r\nconst initialConfiguration: ConfigurationState = {\r\n left: [],\r\n right: [],\r\n defaultTabletop: Material.Multiplex,\r\n defaultCupboards: true,\r\n defaultLifter: false,\r\n defaultLifterModel: \"\",\r\n defaultLights: false,\r\n defaultPanels: true\r\n};\r\n\r\nconst configurationReducer = (state = initialConfiguration, repo: RepoState, action: ConfigurationAction): ConfigurationState =>\r\n{\r\n switch (action.type)\r\n {\r\n case \"REPLACE_AT\":\r\n switch (action.side)\r\n {\r\n case \"LEFT\": state.left[action.index] = action.module; break;\r\n case \"CORNER\": state.corner = action.module; break;\r\n case \"RIGHT\": state.right[action.index] = action.module; break;\r\n }\r\n break;\r\n case \"SET_CONFIGURATION\":\r\n state = action.state;\r\n break;\r\n case \"SET_PART\":\r\n let module = getModule(state, action.moduleId);\r\n if (module == null) break;\r\n setPart(state, repo, module, action.part_type, action.model);\r\n if(action.part_type === \"TABLETOP\" && action.model) {\r\n state.defaultTabletop = action.model as Material;\r\n }\r\n break;\r\n case \"SET_ALL_PARTS\":\r\n state.left.forEach(m => setPart(state, repo, m, action.part_type, action.model));\r\n state.right.forEach(m => setPart(state, repo, m, action.part_type, action.model));\r\n if (state.corner)\r\n {\r\n setPart(state, repo, state.corner, action.part_type, action.cornerModel);\r\n }\r\n switch(action.part_type){\r\n case \"LIGHT\": state.defaultLights = action.model !== undefined; break;\r\n case \"LIFTER\": state.defaultLifter = action.model !== undefined; break;\r\n case \"LIFTERMODEL\": state.defaultLifterModel = action.model !== undefined ? action.model : \"\"; break;\r\n case \"PANEL\": state.defaultPanels = action.model !== undefined; break;\r\n case \"CUPBOARD\": state.defaultCupboards = action.model !== undefined; break;\r\n case \"TABLETOP\": state.defaultTabletop = action.model as Material; break;\r\n case \"TABLETOP\": state.defaultTabletop = action.model as Material; break;\r\n }\r\n break;\r\n case \"SELECT_MODULE\":\r\n state.selected = action.moduleId;\r\n break;\r\n }\r\n validateState(repo, state);\r\n \r\n return {...state};\r\n}\r\n\r\nconst setPart = (configuration: ConfigurationState, repo: RepoState, module: Module, part_type: PartType, modelId?: string) =>\r\n{\r\n if (modelId === undefined) {\r\n switch (part_type) {\r\n case \"CUPBOARD\": module.cupboard = undefined; module.light = false; break;\r\n case \"CABINET\": module.cabinet = undefined; break;\r\n case \"PANEL\": module.cupboard = undefined; module.light = false; module.panel = undefined; break;\r\n case \"LIGHT\": module.light = false; break;\r\n case \"LIFTER\": module.isLifted = false; break;\r\n case \"LIFTERMODEL\": module.isLifted = false; break;\r\n }\r\n return;\r\n }\r\n var model = repo.allProducts[modelId];\r\n var base = repo.allProducts[module.base];\r\n switch (part_type)\r\n {\r\n case \"BASE\": {\r\n if (model.isBaseModule) {\r\n module.cabinet = module.cabinet || repo.basecabinets.find(c => c.isCorner === model.isCorner)?.id;\r\n module.cupboard = configuration.defaultCupboards ? repo.cupboards.find(c => c.isCorner === model.isCorner)?.id : undefined;\r\n module.panel = configuration.defaultPanels ? repo.toolboards.find(c => c.isCorner === model.isCorner)?.id : undefined;\r\n module.light = configuration.defaultLights;\r\n } else {\r\n module.cabinet = undefined;\r\n module.cupboard = undefined;\r\n module.light = false;\r\n module.panel = undefined;\r\n }\r\n module.base = modelId;\r\n } \r\n break;\r\n case \"CUPBOARD\":{ \r\n module.cupboard = modelId;\r\n if (module.cupboard) {\r\n module.panel = repo.toolboards.find(t => t.isCorner === base.isCorner)?.id;\r\n module.light = configuration.defaultLights;\r\n }\r\n } break;\r\n case \"CABINET\": {\r\n module.cabinet = modelId;\r\n \r\n \r\n } break;\r\n case \"PANEL\": \r\n {\r\n module.panel = modelId;\r\n module.cupboard = !repo.allProducts[module.panel]?.isCorner ? module.cupboard : undefined;\r\n module.light = module.cupboard !== undefined && module.light;\r\n }\r\n break;\r\n case \"TABLETOP\": module.tabletop = modelId as Material | undefined; break;\r\n case \"LIGHT\": \r\n {\r\n if(module.cupboard){\r\n module.light = modelId !== undefined; \r\n }\r\n }\r\n break;\r\n case \"LIFTER\": \r\n {\r\n module.isLifted = modelId !== undefined; \r\n }\r\n case \"LIFTERMODEL\": \r\n {\r\n module.lifter = modelId !== undefined ? modelId : undefined; \r\n }\r\n break;\r\n }\r\n}\r\n\r\nexport const getModule = (configuration: ConfigurationState, moduleId?: string): Module | undefined =>\r\n{\r\n return getModuleList(configuration).find(m => m.id === moduleId);\r\n}\r\n\r\n// returns modules in order from left to right\r\nexport const getModuleList = (configuration: ConfigurationState): Module[] =>\r\n{\r\n return configuration.left.slice().reverse().concat(configuration.corner ? [configuration.corner] : []).concat(configuration.right);\r\n}\r\n\r\nexport default configurationReducer;","import { RepoState, Product, Tool } from '../typings/repo';\r\n\r\nexport const getBaseCabinet = (repo: RepoState, id:string):Product =>\r\n{\r\n /* apply ruleset so check if product can be chosen */\r\n const cab = repo.basecabinets.filter(x => x.id === id);\r\n return cab[0];\r\n}\r\n\r\nexport const getModules = (repo: RepoState, corner:boolean, includeFull: boolean):Product[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n return repo.basemodules.filter(x => (corner === (x.isCorner || false)) && ((!corner ? includeFull ? true : x.id === \"0144-GM\" : true) && !x.isLifter));\r\n}\r\n\r\nexport const getCabinets = (repo: RepoState, corner:boolean, includeCarts: boolean, includeCartsXL: boolean = false, isLifted: boolean = false):Product[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n return repo.basecabinets.filter(x => corner === x.isCorner && (includeCarts || !x.isCart) && (includeCartsXL || x.id !== \"0144-TGC1307WB\") && (!isLifted || x.id !== \"0244-TSB1300\"))\r\n}\r\n\r\nexport const getCupboards = (repo: RepoState, corner?:boolean):Product[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n return repo.cupboards.filter(x => corner ? x.isCorner : !x.isCorner)\r\n}\r\n\r\nexport const getTabletop = (repo: RepoState, corner?:boolean):Product[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n return repo.tabletop.filter(x => corner ? x.isCorner : !x.isCorner)\r\n}\r\n\r\nexport const getToolboards = (repo: RepoState, corner: boolean = false, isLifted: boolean = false):Product[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n \r\n return repo.toolboards.filter(x => (corner ? x.isCorner : !x.isCorner) && (isLifted ? (x.id !== \"0147-WGB1324K-B\" && x.id !== \"0144-WGB1324K\" ) : true))\r\n}\r\n\r\nexport interface Group {\r\n id: string;\r\n title: string;\r\n items: Product[]\r\n}\r\n\r\nexport const getStep3 = (repo: RepoState):Group[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n return Object.keys(repo.step3).map(k => ({id:k,...repo.step3[k]}));\r\n}\r\n\r\nexport const getStep3Item = (repo: RepoState, id?:string):Product | undefined =>\r\n{\r\n var groups = Object.values(repo.step3);\r\n for(var value in groups) {\r\n var tools = Object.values(groups[value].items);\r\n for(var item in tools) {\r\n if(tools[item].id === id) return tools[item];\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const getStep4 = (repo: RepoState):Group[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n let additional = [];\r\n const arr = Object.values(repo.step4);\r\n const keys = Object.keys(repo.step4);\r\n for(var i in arr)\r\n {\r\n const obj = {\r\n id: keys[i],\r\n ...arr[i]\r\n }\r\n additional.push(obj);\r\n } \r\n return additional as Group[];\r\n}\r\n\r\nexport const getStep3List = (repo: RepoState, id: string):Group[] =>\r\n{ \r\n /* apply ruleset so check if product can be chosen */\r\n let accessories = [];\r\n const arr = Object.values(repo.step3);\r\n const keys = Object.keys(repo.step3);\r\n for(var i in arr)\r\n {\r\n const obj = {\r\n id: keys[i],\r\n ...arr[i]\r\n }\r\n accessories.push(obj);\r\n }\r\n return accessories as Group[];\r\n}\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { Product } from 'typings/repo';\r\nimport { PartType } from 'typings/globals';\r\nimport Radio from \"../../elements/Radio\";\r\nimport { getImage } from 'utils/utils';\r\n\r\ninterface Props\r\n{\r\n title: string;\r\n list: Product[];\r\n checkedId?: string;\r\n type: PartType;\r\n onSetPart: (type: PartType, partId?: string) => void;\r\n onShowPreview: (url?: string) => void;\r\n noProduct?: string;\r\n}\r\n\r\nconst DetailList = (props: Props) =>\r\n{\r\n return (\r\n
\r\n
\r\n {props.title}\r\n {props.noProduct ? ( props.onSetPart(props.type, undefined)} checked={props.checkedId === undefined} id={\"wc-1\"} key={\"wc-1\"} value=\"0\">\r\n
\r\n

{props.noProduct}

\r\n
\r\n
)\r\n : null}\r\n {props.list.map((product, index) =>\r\n props.onSetPart(props.type, product.id)} checked={props.checkedId === product.id} id={\"wc\" + index} key={\"wc\" + index} value={product.id}>\r\n props.onShowPreview(product.imageUrl)} width=\"60\" key={\"i\" + index} height=\"60\" alt=\"test\" style={{ marginRight: \"10px\", minWidth: \"60px\" }} />\r\n
\r\n
{product.id}
\r\n

{product.title}

\r\n

{product.subtitle}

\r\n
\r\n
)}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default DetailList;","import * as React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { getCabinets, getToolboards, getCupboards, getModules } from \"../../../services/repo\";\r\nimport IconButton from \"../../elements/IconButton\";\r\nimport { RootState } from \"state/state\";\r\nimport { showPreview } from \"state/cart/actions\";\r\nimport { getImage } from \"../../../utils/utils\";\r\nimport { Product, RepoState } from 'typings/repo';\r\nimport { replaceAt, setPart } from 'state/configuration/actions';\r\nimport { getModule } from 'state/configuration';\r\nimport { PartType } from 'typings/globals';\r\nimport DetailList from './DetailList';\r\nimport { ConfigurationState } from \"typings/configuration\";\r\nimport { XLCart } from \"helpers/configurationHelper\";\r\n\r\ninterface Props\r\n{\r\n currentModule?: Product;\r\n}\r\n\r\nexport const IsNeighborCabinetNotBase = (repo: RepoState, configuration: ConfigurationState, selected: string) => {\r\n let index = configuration.left.findIndex(x => x.id == selected);\r\n let configurationSide = configuration.left;\r\n if(index === -1) {\r\n index = configuration.right.findIndex(x => x.id == selected);\r\n configurationSide = configuration.right;\r\n } \r\n let base = repo.basemodules.find(x => x.isBaseModule);\r\n if(index !== -1) {\r\n if(index > 0 ) {\r\n const element = configurationSide[index -1];\r\n if(element.base === base?.id) \r\n { \r\n \r\n return true;\r\n }\r\n } \r\n if(index < configurationSide.length -1) {\r\n const element = configurationSide[index + 1];\r\n if( element.base === base?.id) {\r\n \r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport const IsNeighborCabinetEmpty = (repo: RepoState, configuration: ConfigurationState, selected: string, remove: boolean = false) => {\r\n let index = configuration.left.findIndex(x => x.id == selected);\r\n let configurationSide = configuration.left;\r\n if(index === -1) {\r\n index = configuration.right.findIndex(x => x.id == selected);\r\n configurationSide = configuration.right;\r\n } \r\n let base = repo.basemodules.find(x => x.isBaseModule);\r\n if(index !== -1) {\r\n if(index > 0 ) {\r\n const element = configurationSide[index -1];\r\n if(element.cabinet === undefined) \r\n { \r\n if(remove && element.base === base?.id) {\r\n configurationSide.splice(index-1,1);\r\n }\r\n return index -1;\r\n }\r\n } \r\n if(index < configurationSide.length -1) {\r\n const element = configurationSide[index + 1];\r\n if(element.cabinet === undefined ) {\r\n if(remove && element.base === base?.id) {\r\n configurationSide.splice(index+1,1);\r\n }\r\n return index +1;\r\n }\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nexport const IsNeighborCabinetEmptyLaminate = (configuration: ConfigurationState, selected: string, remove: boolean = false) => {\r\n let index = configuration.left.findIndex(x => x.id == selected);\r\n let configurationSide = configuration.left;\r\n if(index === -1) { \r\n index = configuration.right.findIndex(x => x.id == selected);\r\n configurationSide = configuration.right;\r\n } \r\n if(index !== -1) {\r\n if(index > 1 ) {\r\n const element = configurationSide[index -1];\r\n if(element?.cabinet === undefined) {\r\n if(remove) {\r\n configurationSide.splice(index-1,1);\r\n }\r\n const neighborElement = configurationSide[index - 2] \r\n if(neighborElement?.cabinet === undefined) {\r\n if(remove) {\r\n configurationSide.splice(index-2,1);\r\n }\r\n return index - 2;\r\n } else if(index < configurationSide.length - 1){\r\n const otherNeighborElement = configurationSide[index + 1];\r\n if(otherNeighborElement?.cabinet === undefined) {\r\n if(remove) {\r\n configurationSide.splice(index+1,1);\r\n }\r\n return index+1;\r\n }\r\n }\r\n }\r\n } \r\n if(index < configurationSide.length -2) {\r\n const element = configurationSide[index + 1];\r\n if(element?.cabinet === undefined) {\r\n if(remove) {\r\n configurationSide.splice(index+1,1);\r\n }\r\n const neighborElement = configurationSide[index +2] \r\n if(neighborElement?.cabinet === undefined) {\r\n if(remove) {\r\n configurationSide.splice(index+2,1);\r\n }\r\n return index +2;\r\n } else if(index > 1){\r\n const otherNeighborElement = configurationSide[index - 1];\r\n if(otherNeighborElement?.cabinet === undefined) {\r\n if(remove) {\r\n configurationSide.splice(index-1,1);\r\n }\r\n return index-1;\r\n }\r\n }\r\n \r\n }\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nconst Details = (props: Props) =>\r\n{\r\n const dispatch = useDispatch();\r\n const state = useSelector((state: RootState) => state);\r\n\r\n const selected = getModule(state.configuration, state.configuration.selected);\r\n const isCorner = state.configuration.corner?.id === state.configuration.selected;\r\n const tokens = state.repo.translations;\r\n const modules = getModules(state.repo, isCorner, selected?.canFull || false);\r\n\r\n const canXLCabinet = selected?.cabinet === \"0244-TSB1300\" || selected?.cabinet === \"0144-TGC1307WB\" || (selected?.cabinet === undefined && IsNeighborCabinetEmpty(state.repo, state.configuration, state.configuration.selected ?? \"\") !== -1);\r\n let canEmpty = true;\r\n if(selected?.tabletop !== \"Laminate\") {\r\n if(IsNeighborCabinetEmpty(state.repo, state.configuration, state.configuration.selected ?? \"\") !== -1) {\r\n canEmpty = false;\r\n }\r\n } else {\r\n if(IsNeighborCabinetEmptyLaminate(state.configuration, state.configuration.selected ?? \"\") !== -1) {\r\n canEmpty = false;\r\n }\r\n }\r\n\r\n const cabinets = getCabinets(state.repo, isCorner, selected?.canCart || false, canXLCabinet, state.configuration.defaultLifter);\r\n const cupboards = selected?.canCupboard ? getCupboards(state.repo, isCorner) : [];\r\n const panels = getToolboards(state.repo, isCorner, state.configuration.defaultLifter);\r\n const isFullCabinet = !state.repo.basemodules.find(m => m.id === selected?.base)?.isBaseModule;\r\n if (selected == null) return null;\r\n\r\n const onSetPart = (type: PartType, partId?: string) =>\r\n {\r\n if (selected) dispatch(setPart(type, selected.id, partId));\r\n\r\n if(partId == XLCart ) {\r\n //remove empty cabinet -> if it exists. \r\n \r\n let idx = IsNeighborCabinetEmpty(state.repo, state.configuration, state.configuration.selected ?? \"\", true);\r\n\r\n }\r\n }\r\n\r\n const onShowPreview = (url?: string) =>\r\n {\r\n if (url) dispatch(showPreview(getImage(url, \"LARGE\")));\r\n }\r\n\r\n return (\r\n
\r\n {/*\r\n
{tokens.TYPE}
\r\n
\r\n
toggleDropdown(!dropdown)}>{state.repo.basemodules.filter(x => x.id === selected.base)[0].title}
\r\n {modules.map((x, i) => {\r\n return {\r\n dispatch(setPart(\"BASE\", selected.id, x.id));\r\n toggleDropdown(false)\r\n }}>\r\n
\r\n {x.id} onShowPreview(x.imageUrl)} src={getImage(x.imageUrl, \"THUMBNAIL\")} />\r\n {x.id}
\r\n {x.title} \r\n
\r\n
\r\n
\r\n })}\r\n
\r\n dispatch(selectModule(undefined))} />
\r\n
*/}\r\n \r\n {!isFullCabinet ?
\r\n \r\n \r\n \r\n
: null}\r\n {!isCorner ? : null}\r\n
\r\n );\r\n}\r\n\r\nexport default Details;\r\n","export class BaseApi\r\n{\r\n private fetch?: (input: RequestInfo, init?: RequestInit) => Promise;\r\n\r\n constructor(fetch?: (input: RequestInfo, init?: RequestInit) => Promise)\r\n {\r\n this.fetch = fetch;\r\n }\r\n\r\n public httpGet(url: string): Promise\r\n {\r\n return this.http(\"GET\", url);\r\n }\r\n\r\n public httpPost(url: string, body?: any): Promise\r\n {\r\n return this.http(\"POST\", url, body);\r\n }\r\n\r\n public httpPut(url: string, body?: any): Promise\r\n {\r\n return this.http(\"PUT\", url, body);\r\n }\r\n\r\n public httpDelete(url: string): Promise\r\n {\r\n return this.http(\"DELETE\", url);\r\n }\r\n\r\n private http(method: string, url: string, body?: any): Promise\r\n {\r\n if (this.fetch)\r\n {\r\n return (\r\n this.fetch(url, {\r\n method,\r\n headers: { \"Accept\": \"application/json\" },\r\n body: body ? JSON.stringify(body) : undefined,\r\n }).then(res => res.ok ? res.json() : Promise.reject(res.status))\r\n );\r\n }\r\n\r\n return (\r\n fetch(url, {\r\n method,\r\n headers: { \"Accept\": \"application/json\" },\r\n body: body ? JSON.stringify(body) : undefined,\r\n }).then(res => res.ok ? res.json() : Promise.reject(res.status))\r\n );\r\n }\r\n}","import { BaseApi } from \"./BaseApi\";\r\nimport { StorageTemplate } from \"../typings/configuration\"\r\n\r\nexport class ConfigurationApi\r\n{\r\n private httpClient: BaseApi;\r\n \r\n constructor(httpClient: BaseApi)\r\n {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n public loadConfiguration(id: string): Promise {\r\n return this.httpClient.httpGet('/api/configuration/load/' + id);\r\n }\r\n\r\n public saveConfiguration(configuration: StorageTemplate): Promise {\r\n return this.httpClient.httpPost('/api/configuration/save/', configuration);\r\n }\r\n}\r\n\r\n","import { BaseApi } from \"./BaseApi\";\r\n\r\nexport class MailApi\r\n{\r\n private httpClient: BaseApi;\r\n \r\n constructor(httpClient: BaseApi)\r\n {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n public sendMail(obj: any): Promise {\r\n return this.httpClient.httpPost(`/Mail/SendMail`, obj);\r\n }\r\n}\r\n\r\n","import { BaseApi } from \"./BaseApi\";\r\nimport { ConfigurationApi } from \"./ConfigurationApi\";\r\nimport { MailApi } from \"./MailApi\";\r\n\r\nconst configurationApi = new ConfigurationApi(new BaseApi());\r\nconst mailApi = new MailApi(new BaseApi());\r\n\r\nclass Api\r\n{\r\n get configurationApi() { return configurationApi; }\r\n get mailApi() { return mailApi; }\r\n}\r\n\r\nexport const api = new Api();\r\n\r\nexport const createApi = (fetch: any) => ({\r\n configurationApi: new ConfigurationApi(new BaseApi(fetch)),\r\n mailApi: new MailApi(new BaseApi(fetch))\r\n});","import { Action } from 'redux';\r\nimport templatesGrey from 'state/repository-data/grey/template-setups-grey.json';\r\nimport templatesBlack from 'state/repository-data/black/template-setups-black.json';\r\nimport templatesHD from 'state/repository-data/hd/template-setups-hd.json';\r\nimport { TemplateState, ConfigurationState, Template } from 'typings/configuration';\r\nimport uuidv1 from \"uuid/v1\";\r\nimport { Material } from 'state/repo';\r\nimport { getModuleList } from 'state/configuration';\r\n\r\nconst initialRepo: TemplateState = templatesGrey;\r\n\r\nconst templateReducer = (state = initialRepo, action: Action): TemplateState =>\r\n{\r\n switch (action.type)\r\n {\r\n case \"hd\": return templatesHD as TemplateState;\r\n case \"grey\": return templatesGrey as TemplateState;\r\n case \"black\": return templatesBlack as TemplateState\r\n default:\r\n break;\r\n }\r\n return state;\r\n}\r\n\r\nexport const templateToConfiguration = (template: Template): ConfigurationState =>\r\n{\r\n var templates = { left: template.left.map(m => ({ ...m, id: uuidv1(), canCart: false, canFull: false, canCupboard: false, })), \r\n corner: template.corner ? {...template.corner, id: uuidv1(), canCart: false, canFull: false, canCupboard: false, defaultLifterModel: \"\" } : undefined, \r\n right: template.right ? template.right.map(m => ({ ...m, id: uuidv1(), canCart: false, canFull: false, canCupboard: false })) : [], \r\n defaultTabletop: Material.Multiplex, defaultCupboards: false, defaultLights: false, defaultPanels: false, defaultLifter: false, defaultLifterModel: \"\" };\r\n var modules = getModuleList(templates);\r\n templates.defaultCupboards = modules.find(m => m.cupboard) !== undefined;\r\n templates.defaultLights = modules.find(m => m.light) !== undefined;\r\n templates.defaultPanels = modules.find(m => m.panel) !== undefined;\r\n templates.defaultTabletop = modules.find(m => m.tabletop)?.tabletop || Material.Multiplex;\r\n\r\n return templates;\r\n}\r\n\r\nexport default templateReducer;","module.exports = __webpack_public_path__ + \"static/media/background.8365591c.jpg\";","module.exports = __webpack_public_path__ + \"static/media/no-image.d5ea5959.svg\";","module.exports = __webpack_public_path__ + \"static/media/flexline_logo.bfa34772.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_logo_no.5f7206e8.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_logo_de.f1b81959.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_logo_en.fea5589d.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_logo_se.dbcef23a.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_logo_ee.d7fa1b86.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_hd_logo.5b434df6.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_hd_logo_no.9372d91d.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_hd_logo_de.35047b4b.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_hd_logo_en.b4bfc9ef.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_hd_logo_se.faf8785e.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_hd_logo_ee.1dcf72ac.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_black_logo.46d9c5b0.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_black_logo_no.64f1a644.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_black_logo_de.52334552.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_black_logo_en.e0fd8976.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_black_logo_se.0848d5b4.png\";","module.exports = __webpack_public_path__ + \"static/media/flexline_black_logo_ee.ef3d2970.png\";","module.exports = __webpack_public_path__ + \"static/media/heavy_logo.b36fa6e7.svg\";","module.exports = __webpack_public_path__ + \"static/media/background-heavy.5ad047fd.jpg\";","module.exports = __webpack_public_path__ + \"static/media/background-black-tint.8a877438.jpg\";","module.exports = __webpack_public_path__ + \"static/media/template1.894e4cdb.png\";","module.exports = __webpack_public_path__ + \"static/media/template2.8aac96ff.png\";","module.exports = __webpack_public_path__ + \"static/media/template3.699538c2.png\";","module.exports = __webpack_public_path__ + \"static/media/template4.ad297c82.png\";","module.exports = __webpack_public_path__ + \"static/media/template5.d038b0ad.png\";","module.exports = __webpack_public_path__ + \"static/media/template-hd1.af979935.png\";","module.exports = __webpack_public_path__ + \"static/media/template-hd2.ad52f23f.png\";","module.exports = __webpack_public_path__ + \"static/media/template-hd3.dc8fd0b9.png\";","module.exports = __webpack_public_path__ + \"static/media/template-hd4.126e170b.png\";","module.exports = __webpack_public_path__ + \"static/media/template-black-2040.4c256813.png\";","module.exports = __webpack_public_path__ + \"static/media/template-black-2955.72e1a875.png\";","module.exports = __webpack_public_path__ + \"static/media/template-black-5230.7ee9f947.png\";","var map = {\n\t\"./black/repository-black-da.json\": 90,\n\t\"./black/repository-black-de.json\": 91,\n\t\"./black/repository-black-ee.json\": 92,\n\t\"./black/repository-black-en.json\": 93,\n\t\"./black/repository-black-no.json\": 94,\n\t\"./black/repository-black-se.json\": 95,\n\t\"./black/template-setups-black.json\": 26,\n\t\"./grey/repository-grey-da.json\": 96,\n\t\"./grey/repository-grey-de.json\": 97,\n\t\"./grey/repository-grey-ee.json\": 98,\n\t\"./grey/repository-grey-en.json\": 19,\n\t\"./grey/repository-grey-no.json\": 99,\n\t\"./grey/repository-grey-se.json\": 100,\n\t\"./grey/template-setups-grey.json\": 25,\n\t\"./hd/repository-hd-da.json\": 101,\n\t\"./hd/repository-hd-de.json\": 102,\n\t\"./hd/repository-hd-ee.json\": 103,\n\t\"./hd/repository-hd-en.json\": 104,\n\t\"./hd/repository-hd-no.json\": 105,\n\t\"./hd/repository-hd-se.json\": 106,\n\t\"./hd/template-setups-hd.json\": 27\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 89;","import styled from \"styled-components\";\r\nimport { PrimaryColor } from 'global.styles';\r\n\r\nexport const StyledButton = styled.button`\r\npadding: 10px 30px;\r\npadding-left: 10px;\r\nbackground: ${PrimaryColor};\r\ncolor: white;\r\nborder-radius: 30px;\r\nborder: none;\r\nuser-select: none;\r\ncursor: pointer;\r\noutline: none;\r\n\r\ndisplay: flex;\r\nalign-items: center;\r\n\r\nsvg{\r\n color: white;\r\n fill: white;\r\n margin-right: 10px;\r\n width: 22px;\r\n height: 22px;\r\n}\r\n&.large{\r\n svg{\r\n width: 32px;\r\n height: 32px; \r\n }\r\n}\r\n&.alternate{\r\n background: transparent;\r\n color: black;\r\n svg{\r\n fill: black;\r\n }\r\n &.close{\r\n svg{\r\n stroke: white;\r\n stroke-width: 4px;\r\n }\r\n }\r\n}\r\n&.reverse{\r\n flex-direction: row-reverse;\r\n svg{\r\n margin-right: 0px;\r\n margin-left: 10px; \r\n }\r\n}\r\n&.empty{\r\n padding: 10px 10px;\r\n padding-right: 0px;\r\n}\r\n\r\n&.close:not(.alternate){\r\n background: transparent;\r\n padding-top: 0;\r\n svg{\r\n fill: ${PrimaryColor};\r\n width: 20px;\r\n height: 20px;\r\n stroke: white;\r\n stroke-width: 4px;\r\n margin-right: 0;\r\n }\r\n border-radius: 0;\r\n}\r\n\r\n&.size-style{\r\n span:last-child{\r\n width: 100px;\r\n }\r\n}\r\n`;","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgCog = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"cog\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.181 19.070c-1.679-2.908-0.669-6.634 2.255-8.328l-3.145-5.447c-0.898 0.527-1.943 0.829-3.058 0.829-3.361 0-6.085-2.742-6.085-6.125h-6.289c0.008 1.044-0.252 2.103-0.811 3.070-1.679 2.908-5.411 3.897-8.339 2.211l-3.144 5.447c0.905 0.515 1.689 1.268 2.246 2.234 1.676 2.903 0.672 6.623-2.241 8.319l3.145 5.447c0.895-0.522 1.935-0.82 3.044-0.82 3.35 0 6.067 2.725 6.084 6.092h6.289c-0.003-1.034 0.259-2.080 0.811-3.038 1.676-2.903 5.399-3.894 8.325-2.219l3.145-5.447c-0.899-0.515-1.678-1.266-2.232-2.226zM16 22.479c-3.578 0-6.479-2.901-6.479-6.479s2.901-6.479 6.479-6.479c3.578 0 6.479 2.901 6.479 6.479s-2.901 6.479-6.479 6.479z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCog, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/cog.1e911705.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgSearch = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"search\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.008 27.231l-7.58-6.447c-0.784-0.705-1.622-1.029-2.299-0.998 1.789-2.096 2.87-4.815 2.87-7.787 0-6.627-5.373-12-12-12s-12 5.373-12 12 5.373 12 12 12c2.972 0 5.691-1.081 7.787-2.87-0.031 0.677 0.293 1.515 0.998 2.299l6.447 7.58c1.104 1.226 2.907 1.33 4.007 0.23s0.997-2.903-0.23-4.007zM12 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgSearch, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/search.cb164fd3.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgEarth = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"earth\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM16 30c-1.967 0-3.84-0.407-5.538-1.139l7.286-8.197c0.163-0.183 0.253-0.419 0.253-0.664v-3c0-0.552-0.448-1-1-1-3.531 0-7.256-3.671-7.293-3.707-0.188-0.188-0.442-0.293-0.707-0.293h-4c-0.552 0-1 0.448-1 1v6c0 0.379 0.214 0.725 0.553 0.894l3.447 1.724v5.871c-3.627-2.53-6-6.732-6-11.489 0-2.147 0.484-4.181 1.348-6h3.652c0.265 0 0.52-0.105 0.707-0.293l4-4c0.188-0.188 0.293-0.442 0.293-0.707v-2.419c1.268-0.377 2.61-0.581 4-0.581 2.2 0 4.281 0.508 6.134 1.412-0.13 0.109-0.256 0.224-0.376 0.345-1.133 1.133-1.757 2.64-1.757 4.243s0.624 3.109 1.757 4.243c1.139 1.139 2.663 1.758 4.239 1.758 0.099 0 0.198-0.002 0.297-0.007 0.432 1.619 1.211 5.833-0.263 11.635-0.014 0.055-0.022 0.109-0.026 0.163-2.541 2.596-6.084 4.208-10.004 4.208z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgEarth, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/earth.1bdf1e54.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgCross = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"cross\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.708 25.708c-0-0-0-0-0-0l-9.708-9.708 9.708-9.708c0-0 0-0 0-0 0.105-0.105 0.18-0.227 0.229-0.357 0.133-0.356 0.057-0.771-0.229-1.057l-4.586-4.586c-0.286-0.286-0.702-0.361-1.057-0.229-0.13 0.048-0.252 0.124-0.357 0.228 0 0-0 0-0 0l-9.708 9.708-9.708-9.708c-0-0-0-0-0-0-0.105-0.104-0.227-0.18-0.357-0.228-0.356-0.133-0.771-0.057-1.057 0.229l-4.586 4.586c-0.286 0.286-0.361 0.702-0.229 1.057 0.049 0.13 0.124 0.252 0.229 0.357 0 0 0 0 0 0l9.708 9.708-9.708 9.708c-0 0-0 0-0 0-0.104 0.105-0.18 0.227-0.229 0.357-0.133 0.355-0.057 0.771 0.229 1.057l4.586 4.586c0.286 0.286 0.702 0.361 1.057 0.229 0.13-0.049 0.252-0.124 0.357-0.229 0-0 0-0 0-0l9.708-9.708 9.708 9.708c0 0 0 0 0 0 0.105 0.105 0.227 0.18 0.357 0.229 0.356 0.133 0.771 0.057 1.057-0.229l4.586-4.586c0.286-0.286 0.362-0.702 0.229-1.057-0.049-0.13-0.124-0.252-0.229-0.357z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCross, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/cross.f8424cd6.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgPlus = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"plus\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31 12h-11v-11c0-0.552-0.448-1-1-1h-6c-0.552 0-1 0.448-1 1v11h-11c-0.552 0-1 0.448-1 1v6c0 0.552 0.448 1 1 1h11v11c0 0.552 0.448 1 1 1h6c0.552 0 1-0.448 1-1v-11h11c0.552 0 1-0.448 1-1v-6c0-0.552-0.448-1-1-1z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgPlus, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/plus.7dd9c54b.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgShare2 = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"share2\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27 22c-1.411 0-2.685 0.586-3.594 1.526l-13.469-6.734c0.041-0.258 0.063-0.522 0.063-0.791s-0.022-0.534-0.063-0.791l13.469-6.734c0.909 0.94 2.183 1.526 3.594 1.526 2.761 0 5-2.239 5-5s-2.239-5-5-5-5 2.239-5 5c0 0.269 0.022 0.534 0.063 0.791l-13.469 6.734c-0.909-0.94-2.183-1.526-3.594-1.526-2.761 0-5 2.239-5 5s2.239 5 5 5c1.411 0 2.685-0.586 3.594-1.526l13.469 6.734c-0.041 0.258-0.063 0.522-0.063 0.791 0 2.761 2.239 5 5 5s5-2.239 5-5c0-2.761-2.239-5-5-5z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgShare2, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/share2.92567dde.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgFloppyDisk = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"floppy-disk\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28 0h-28v32h32v-28l-4-4zM16 4h4v8h-4v-8zM28 28h-24v-24h2v10h18v-10h2.343l1.657 1.657v22.343z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgFloppyDisk, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/floppy-disk.97cd922a.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgDots = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", {\n id: \"title840\"\n }, \"list2\")) : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: \"title840\"\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m 12,28 c 0,2.209 1.791,4 4,4 2.209,0 4,-1.791 4,-4 0,-2.209 -1.791,-4 -4,-4 -2.209,0 -4,1.791 -4,4 z m 0,-12 c 0,2.209 1.791,4 4,4 2.209,0 4,-1.791 4,-4 0,-2.209 -1.791,-4 -4,-4 -2.209,0 -4,1.791 -4,4 z M 12,4 c 0,2.209 1.791,4 4,4 2.209,0 4,-1.791 4,-4 0,-2.209 -1.791,-4 -4,-4 -2.209,0 -4,1.791 -4,4 z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgDots, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/dots.2a433fc5.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgArrowLeft = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n id: \"svg831\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", {\n id: \"title827\"\n }, \"arrow-left2\")) : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: \"title827\"\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 18.137192,27.488801 8.1371917,17.488802 c -0.781,-0.781 -0.781,-2.047 0,-2.828 L 18.137192,4.6608018 c 0.781,-0.781 2.047,-0.781 2.828,0 0.781,0.781 0.781,2.047 0,2.828 l -6.586,6.5860002 c -2.50134,2.50134 -2.338755,1.661245 0,4 l 6.586,6.585999 c 0.39,0.39 0.586,0.902 0.586,1.414 0,0.512 -0.195,1.024 -0.586,1.414 -0.781,0.781 -2.047,0.781 -2.828,0 z\",\n id: \"path829-4\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgArrowLeft, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/arrow-left.94468ddb.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgArrowRight = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n id: \"svg896\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", {\n id: \"title892\"\n }, \"arrow-right2\")) : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: \"title892\"\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"path829-4\",\n d: \"m 13.763234,27.418487 10.000001,-9.999999 c 0.781,-0.781 0.781,-2.047 0,-2.828 L 13.763234,4.5904868 c -0.781,-0.781 -2.047,-0.781 -2.828,0 -0.781,0.781 -0.781,2.047 0,2.828 l 6.586,6.5860012 c 2.50134,2.50134 2.338755,1.661245 0,4 l -6.586,6.585999 c -0.39,0.39 -0.586,0.902 -0.586,1.414 0,0.512 0.195,1.024 0.586,1.414 0.781,0.781 2.047,0.781 2.828,0 z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgArrowRight, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/arrow-right.09cfe6dd.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgUpload = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"upload3\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15 22h-15v8h30v-8h-15zM28 26h-4v-2h4v2zM7 10l8-8 8 8h-5v10h-6v-10z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgUpload, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/upload.e282ad03.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgInfo = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"info\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14 9.5c0-0.825 0.675-1.5 1.5-1.5h1c0.825 0 1.5 0.675 1.5 1.5v1c0 0.825-0.675 1.5-1.5 1.5h-1c-0.825 0-1.5-0.675-1.5-1.5v-1z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 24h-8v-2h2v-6h-2v-2h6v8h2z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM16 29c-7.18 0-13-5.82-13-13s5.82-13 13-13 13 5.82 13 13-5.82 13-13 13z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgInfo, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/info.456f91e8.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgDatabase = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"database\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgDatabase, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/database.39bbba95.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgCart = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"cart\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 29c0 1.657-1.343 3-3 3s-3-1.343-3-3c0-1.657 1.343-3 3-3s3 1.343 3 3z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32 29c0 1.657-1.343 3-3 3s-3-1.343-3-3c0-1.657 1.343-3 3-3s3 1.343 3 3z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32 16v-12h-24c0-1.105-0.895-2-2-2h-6v2h4l1.502 12.877c-0.915 0.733-1.502 1.859-1.502 3.123 0 2.209 1.791 4 4 4h24v-2h-24c-1.105 0-2-0.895-2-2 0-0.007 0-0.014 0-0.020l26-3.98z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCart, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/cart.98cee91b.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgSpinner8 = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"spinner8\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 32c-4.274 0-8.292-1.664-11.314-4.686s-4.686-7.040-4.686-11.314c0-3.026 0.849-5.973 2.456-8.522 1.563-2.478 3.771-4.48 6.386-5.791l1.344 2.682c-2.126 1.065-3.922 2.693-5.192 4.708-1.305 2.069-1.994 4.462-1.994 6.922 0 7.168 5.832 13 13 13s13-5.832 13-13c0-2.459-0.69-4.853-1.994-6.922-1.271-2.015-3.066-3.643-5.192-4.708l1.344-2.682c2.615 1.31 4.824 3.313 6.386 5.791 1.607 2.549 2.456 5.495 2.456 8.522 0 4.274-1.664 8.292-4.686 11.314s-7.040 4.686-11.314 4.686z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgSpinner8, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/spinner8.2c4a1b26.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgDoubleArrows = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", {\n id: \"title827\"\n }, \"text-height\")) : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: \"title827\"\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m 17,24 h 4 l -5,6 -5,-6 h 4 V 8 h -4 l 5,-6 5,6 h -4 z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgDoubleArrows, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/double-arrows.70cc8987.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgArrowDown = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n id: \"svg831\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", {\n id: \"title827\"\n }, \"arrow-left2\")) : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: \"title827\"\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m 4.6288426,12.285536 9.9999984,10.000001 c 0.781,0.781 2.047,0.781 2.828,0 l 10,-10.000001 c 0.781,-0.781 0.781,-2.047 0,-2.8279995 -0.781,-0.781 -2.047,-0.781 -2.828,0 l -6.586,6.5859995 c -2.50134,2.50134 -1.661245,2.338755 -4,0 L 7.4568426,9.4575365 c -0.39,-0.39 -0.902,-0.586 -1.414,-0.586 -0.512,0 -1.024,0.195 -1.414,0.586 -0.781,0.7809995 -0.781,2.0469995 0,2.8279995 z\",\n id: \"path829-4\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgArrowDown, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/arrow-down.64e8d466.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgCrop = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"crop\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 8l6-6-2-2-6 6h-14v-6h-4v6h-6v4h6v16h16v6h4v-6h6v-4h-6v-14zM10 10h10l-10 10v-10zM12 22l10-10v10h-10z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCrop, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/crop.81f711d1.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgLightbulb = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 64 64\",\n xmlSpace: \"preserve\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 2\n },\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.85,50.578L23.85,50.577C23.857,48.021 22.831,45.567 21.009,43.777C17.976,40.816 16.264,36.752 16.264,32.514C16.264,24.05 23.092,17.023 31.552,16.78C31.553,16.78 31.553,16.78 31.553,16.78C31.701,16.776 31.848,16.774 31.996,16.774C40.631,16.774 47.736,23.879 47.736,32.514C47.736,36.767 46.012,40.843 42.961,43.806C41.155,45.576 40.141,48.004 40.15,50.533L40.15,50.536L40.15,50.536C40.15,50.636 40.137,50.726 40.115,50.806C39.876,52.445 38.45,53.72 36.75,53.72L27.25,53.72C25.578,53.72 24.172,52.487 23.898,50.889C23.868,50.798 23.85,50.695 23.85,50.578ZM38.232,50.316C38.279,47.349 39.495,44.515 41.618,42.434C41.619,42.433 41.62,42.432 41.621,42.431C44.302,39.83 45.816,36.249 45.816,32.514C45.816,24.933 39.578,18.694 31.996,18.694C31.867,18.694 31.737,18.696 31.607,18.7L31.607,18.7C24.179,18.913 18.184,25.082 18.184,32.514C18.184,36.235 19.688,39.803 22.351,42.403C22.351,42.404 22.352,42.404 22.353,42.405C24.46,44.475 25.681,47.28 25.765,50.224L25.767,50.244C25.768,50.255 25.769,50.267 25.769,50.279L25.77,50.314L25.77,50.314L25.77,50.321C25.77,51.132 26.438,51.8 27.25,51.8L36.75,51.8C37.562,51.8 38.23,51.132 38.23,50.321L38.23,50.316L38.23,50.316L38.23,50.314L38.232,50.316Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 3\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.57,31.53C22.57,27.059 26.249,23.38 30.72,23.38C31.25,23.38 31.68,22.95 31.68,22.42C31.68,21.89 31.25,21.46 30.72,21.46C25.196,21.46 20.65,26.006 20.65,31.53C20.65,32.06 21.08,32.49 21.61,32.49C22.14,32.49 22.57,32.06 22.57,31.53Z\",\n style: {\n fill: \"rgb(252,177,49)\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.82,57.12L37.18,57.12C37.71,57.12 38.14,56.69 38.14,56.16C38.14,55.63 37.71,55.2 37.18,55.2L26.82,55.2C26.29,55.2 25.86,55.63 25.86,56.16C25.86,56.69 26.29,57.12 26.82,57.12Z\",\n style: {\n fill: \"rgb(252,177,49)\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.67,60.22L35.33,60.22C35.86,60.22 36.29,59.79 36.29,59.26C36.29,58.73 35.86,58.3 35.33,58.3L28.67,58.3C28.14,58.3 27.71,58.73 27.71,59.26C27.71,59.79 28.14,60.22 28.67,60.22Z\",\n style: {\n fill: \"rgb(252,177,49)\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.19,63.45L33.81,63.45C34.34,63.45 34.77,63.02 34.77,62.49C34.77,61.96 34.34,61.53 33.81,61.53L30.19,61.53C29.66,61.53 29.23,61.96 29.23,62.49C29.23,63.02 29.66,63.45 30.19,63.45Z\",\n style: {\n fill: \"rgb(252,177,49)\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.96,9.29L32.96,1.51C32.96,0.98 32.53,0.55 32,0.55C31.47,0.55 31.04,0.98 31.04,1.51L31.04,9.29C31.04,9.82 31.47,10.25 32,10.25C32.53,10.25 32.96,9.82 32.96,9.29Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.459,15.331L10.959,9.831C10.584,9.457 9.976,9.457 9.601,9.831C9.227,10.206 9.227,10.814 9.601,11.189L15.101,16.689C15.476,17.063 16.084,17.063 16.459,16.689C16.833,16.314 16.833,15.706 16.459,15.331Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.459,15.331L10.959,9.831C10.584,9.457 9.976,9.457 9.601,9.831C9.227,10.206 9.227,10.814 9.601,11.189L15.101,16.689C15.476,17.063 16.084,17.063 16.459,16.689C16.833,16.314 16.833,15.706 16.459,15.331Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.07,31.27L1.28,31.27C0.75,31.27 0.32,31.7 0.32,32.23C0.32,32.76 0.75,33.19 1.28,33.19L9.07,33.19C9.6,33.19 10.03,32.76 10.03,32.23C10.03,31.7 9.6,31.27 9.07,31.27Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.93,33.19L62.72,33.19C63.25,33.19 63.68,32.76 63.68,32.23C63.68,31.7 63.25,31.27 62.72,31.27L54.93,31.27C54.4,31.27 53.97,31.7 53.97,32.23C53.97,32.76 54.4,33.19 54.93,33.19Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M48.899,16.689L54.399,11.189C54.773,10.814 54.773,10.206 54.399,9.831C54.024,9.457 53.416,9.457 53.041,9.831L47.541,15.331C47.167,15.706 47.167,16.314 47.541,16.689C47.916,17.063 48.524,17.063 48.899,16.689Z\",\n style: {\n fill: \"rgb(252,177,49)\",\n stroke: \"rgb(252,177,49)\",\n strokeWidth: 4\n }\n }));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgLightbulb, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/lightbulb.ebfee821.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgPhone = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"phone\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22 20c-2 2-2 4-4 4s-4-2-6-4-4-4-4-6 2-2 4-4-4-8-6-8-6 6-6 6c0 4 4.109 12.109 8 16s12 8 16 8c0 0 6-4 6-6s-6-8-8-6z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgPhone, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/phone.fb53e74d.svg\";\nexport { ForwardRef as ReactComponent };","var _title, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgMail = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"mail_outline\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 11.016l8.016-5.016h-16.031zM20.016 18v-9.984l-8.016 4.969-8.016-4.969v9.984h16.031zM20.016 3.984q0.797 0 1.383 0.609t0.586 1.406v12q0 0.797-0.586 1.406t-1.383 0.609h-16.031q-0.797 0-1.383-0.609t-0.586-1.406v-12q0-0.797 0.586-1.406t1.383-0.609h16.031z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgMail, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/mail.940e3775.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgType = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"16.423288mm\",\n height: \"16.423288mm\",\n viewBox: \"0 0 16.423288 16.423288\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"g\", {\n id: \"layer1\",\n transform: \"translate(0.01161994,-5.7730377e-4)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"rect991-2\",\n style: {\n fontVariationSettings: \"normal\",\n vectorEffect: \"none\",\n fill: \"#fcb131\",\n fillOpacity: 1,\n stroke: \"#000000\",\n strokeWidth: 0,\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeMiterlimit: 4,\n strokeDasharray: \"none\",\n strokeDashoffset: 0,\n strokeOpacity: 1,\n paintOrder: \"stroke markers fill\",\n stopColor: \"#000000\"\n },\n d: \"M 34.398438,0 V 62.072266 H 62.072266 V 0 Z m 5.078124,6.9589844 H 56.996094 V 55.109375 c -5.83948,-4e-6 -11.680052,0 -17.519532,0 0,-16.050361 -3e-6,-32.100027 0,-48.1503906 z\",\n transform: \"matrix(0.26458333,0,0,0.26458333,-0.01161994,5.7730377e-4)\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"rect991-1\",\n style: {\n fill: \"#fcb131\",\n stroke: \"#000000\",\n strokeWidth: 0,\n paintOrder: \"stroke markers fill\"\n },\n d: \"M 0.05859375,0.01953125 V 15.021484 H 27.736328 V 0.01953125 Z M 6.7109375,4.9648438 H 21.083984 V 10.076172 H 6.7109375 Z\",\n transform: \"matrix(0.26458333,0,0,0.26458333,-0.01161994,5.7730377e-4)\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"rect991-8-1\",\n style: {\n fill: \"#fcb131\",\n fillOpacity: 1,\n stroke: \"#000000\",\n strokeWidth: 0,\n paintOrder: \"stroke markers fill\"\n },\n d: \"M 0,33.353516 V 62.023438 H 27.742188 V 33.353516 Z m 6.1582031,5.550781 H 21.583984 v 6.791015 H 6.1582031 Z m 0,10.791015 H 21.583984 v 6.777344 H 6.1582031 Z\",\n transform: \"matrix(0.26458333,0,0,0.26458333,-0.01161994,5.7730377e-4)\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgType, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/type.f7e27a38.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2, _g3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgBurgerMenu = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 24 24\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 2\n },\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(3.21517,0,0,0.195402,-4.95983,4.04277)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 2.155,\n y: 3.907,\n width: 6.233,\n height: 16.186\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(3.21517,0,0,0.195402,-4.95983,9.60478)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 2.155,\n y: 3.907,\n width: 6.233,\n height: 16.186\n }))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(3.21517,0,0,0.195402,-4.95983,15.1668)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 2.155,\n y: 3.907,\n width: 6.233,\n height: 16.186\n }))));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgBurgerMenu, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/burger-menu.6820e88d.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from \"react\";\r\n\r\nimport {ReactComponent as Cog} from \"../../icons/cog.svg\";\r\nimport {ReactComponent as Search} from \"../../icons/search.svg\";\r\nimport {ReactComponent as Globe} from \"../../icons/earth.svg\";\r\nimport {ReactComponent as Close} from \"../../icons/cross.svg\";\r\nimport {ReactComponent as Plus} from \"../../icons/plus.svg\";\r\nimport {ReactComponent as Share} from \"../../icons/share2.svg\";\r\nimport {ReactComponent as Save} from \"../../icons/floppy-disk.svg\";\r\nimport {ReactComponent as Dots} from \"../../icons/dots.svg\";\r\nimport {ReactComponent as ArrowLeft} from \"../../icons/arrow-left.svg\";\r\nimport {ReactComponent as ArrowRight} from \"../../icons/arrow-right.svg\";\r\nimport {ReactComponent as Upload} from \"../../icons/upload.svg\";\r\nimport {ReactComponent as Info} from \"../../icons/info.svg\";\r\nimport {ReactComponent as Currency} from \"../../icons/database.svg\";\r\nimport {ReactComponent as Cart} from \"../../icons/cart.svg\";\r\nimport {ReactComponent as Spinner} from \"../../icons/spinner8.svg\";\r\nimport {ReactComponent as DoubleArrow} from \"../../icons/double-arrows.svg\";\r\nimport {ReactComponent as ArrowDown} from \"../../icons/arrow-down.svg\";\r\nimport {ReactComponent as Crop } from \"../../icons/crop.svg\";\r\nimport {ReactComponent as Bulb } from \"../../icons/lightbulb.svg\";\r\nimport {ReactComponent as Phone } from \"../../icons/phone.svg\";\r\nimport {ReactComponent as Mail } from \"../../icons/mail.svg\";\r\nimport {ReactComponent as Type } from \"../../icons/type.svg\";\r\nimport {ReactComponent as Burger } from \"../../icons/burger-menu.svg\";\r\n\r\nexport type ICON_TYPE = \"cog\" | \"search\" | \"globe\" | \"close\" | \"save\" | \"share\" | \"plus\" | \"dots\" | \"upload\" | \"arrow-left\" | \"arrow-right\" | \"arrow-down\" |\"double-arrows\" | \"info\" | \"currency\" \r\n| \"cart\" | \"spinner\" | \"crop\" | \"bulb\" | \"phone\" | \"mail\" | \"type\" | \"burger\"; \r\n\r\ninterface Props{\r\n name: ICON_TYPE;\r\n}\r\n\r\n\r\nconst RenderIcon = (props:Props) =>\r\n{\r\n\r\n const getIcon = () =>\r\n {\r\n switch(props.name)\r\n {\r\n case \"cog\": \r\n return ;\r\n case \"search\": \r\n return ;\r\n case \"globe\": \r\n return ;\r\n case \"close\":\r\n return ;\r\n case \"plus\":\r\n return ;\r\n case \"save\":\r\n return ;\r\n case \"share\":\r\n return ;\r\n case \"dots\":\r\n return ;\r\n case \"upload\":\r\n return ; \r\n case \"arrow-left\":\r\n return ; \r\n case \"arrow-right\":\r\n return ; \r\n case \"double-arrows\":\r\n return ;\r\n case \"info\":\r\n return ;\r\n case \"currency\":\r\n return ;\r\n case \"cart\":\r\n return ;\r\n case \"spinner\":\r\n return ; \r\n case \"arrow-down\":\r\n return ; \r\n case \"crop\":\r\n return ; \r\n case \"bulb\":\r\n return ; \r\n case \"phone\":\r\n return ; \r\n case \"mail\":\r\n return ; \r\n case \"type\":\r\n return ; \r\n case \"burger\":\r\n return ; \r\n default: \r\n return null;\r\n }\r\n }\r\n\r\n\r\n return getIcon();\r\n}\r\n\r\nexport default RenderIcon;","import * as React from \"react\";\r\nimport {StyledButton} from \"./IconButton.style\";\r\nimport {ICON_TYPE} from \"./Icon\";\r\nimport Icon from \"./Icon\";\r\n\r\n\r\n\r\ninterface Props{\r\n additional?: JSX.Element;\r\n title?: string;\r\n icon?: ICON_TYPE;\r\n onClick: (e:React.MouseEvent) => void;\r\n className?: string;\r\n tooltip? : string;\r\n type?: string;\r\n href?: string;\r\n}\r\n\r\nconst IconButton = (props:Props) =>\r\n{\r\n return ( \r\n \r\n {props.icon ? : null }{props.title}\r\n {props.additional}\r\n \r\n );\r\n \r\n\r\n}\r\n\r\nexport default IconButton;","import styled from \"styled-components\";\r\n\r\n\r\nexport const StyledLogo = styled.div`\r\n user-select: none;\r\n h5{\r\n color: #FCB131;\r\n font-size: 25px;\r\n font-weight: bold;\r\n letter-spacing: 3px;\r\n margin: 0;\r\n margin-top: 17px;\r\n margin-left: 30px; \r\n }\r\n\r\n h6{\r\n color: #000;\r\n font-size: 7px;\r\n font-weight: bold;\r\n letter-spacing: 1px;\r\n margin: 0;\r\n margin-left: 29px;\r\n text-transform: uppercase;\r\n }\r\n\r\n p{\r\n margin: 0;\r\n font-size: 13px;\r\n }\r\n strong{\r\n font-size: 26px;\r\n }\r\n\r\n &.large{\r\n h5{\r\n font-size: 7em;\r\n }\r\n h6{\r\n font-size: 1.5em;\r\n }\r\n @media(max-width: 562px){\r\n h5{\r\n font-size: 3em;\r\n }\r\n h6{\r\n font-size: 1em;\r\n }\r\n }\r\n img{\r\n width: 40vh;\r\n }\r\n }\r\n\r\n &.white{\r\n h6{\r\n color: white;\r\n }\r\n }\r\n &:not(.large){\r\n position: relative;\r\n height: 70px;\r\n img{\r\n max-width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n /* top: 0; */\r\n /* bottom: 0; */\r\n padding: 10px;\r\n box-sizing: border-box;\r\n }\r\n }\r\n`; ","import * as React from \"react\";\r\nimport { StyledLogo } from \"./Logo.style\";\r\n\r\ninterface Props{\r\n className?: string;\r\n src?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst Logo = (props:Props) => \r\n{\r\n return \r\n {props.src ? \"logo\" : null}\r\n \r\n}\r\n\r\nexport default Logo;\r\n\r\n\r\n\r\n","import styled from \"styled-components\";\r\nimport { PrimaryColor } from 'global.styles';\r\n\r\n\r\nexport const StyledMenu = styled.div`\r\nposition: relative;\r\nheight: 100%;\r\nh4{\r\n margin: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n height: 100%;\r\n cursor: pointer; \r\n user-select: none;\r\n}\r\nsvg{\r\n width: 16px;\r\n height: 16px;\r\n}\r\n> div{\r\n width: auto;\r\n position: absolute;\r\n top: 100%;\r\n z-index: 99;\r\n background: white;\r\n padding: 10px 25px;\r\n box-sizing: border-box;\r\n left: 0;\r\n border: 1px solid rgba(0,0,0,.2);\r\n border-top: 0;\r\n animation: showMenu .3s linear;\r\n overflow: hidden;\r\n //max-height: 0;\r\n\r\n > *{\r\n cursor:pointer;\r\n &:hover{\r\n &:before{\r\n content: \"\";\r\n width: 2px;\r\n height: 16px;\r\n position: absolute;\r\n left: 0;\r\n z-index: 100;\r\n background: ${PrimaryColor};\r\n animation: showIndicator .5s both;\r\n }\r\n }\r\n }\r\n}\r\n> div > div{\r\n padding: 10px 13px;\r\n}\r\n&.bordered{\r\n border: 1px solid rgba(0,0,0,.2);\r\n border-top: 0;\r\n}\r\n&.header-menu{\r\n float: right;\r\n /*width: 300px;\r\n margin-left: auto;*/\r\n text-transform: uppercase;\r\n padding: 10px 30px 10px 10px;\r\n box-sizing: border-box;\r\n span{\r\n margin-right: 15px;\r\n margin-left: 10px;\r\n font-size: .88em;\r\n }\r\n}\r\n@keyframes showMenu{\r\n 0%{\r\n opacity: 0;\r\n max-height: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n max-height: 300px;\r\n }\r\n}\r\n&.left{\r\n h4{\r\n justify-content: flex-start;\r\n }\r\n > div{\r\n left: 0;\r\n }\r\n}\r\n&.right{\r\n h4{\r\n justify-content: flex-end;\r\n }\r\n > div{\r\n left: auto;\r\n right: 0;\r\n }\r\n}\r\n&.white{\r\n h4{\r\n color: white;\r\n }\r\n svg{\r\n fill: white;\r\n }\r\n}\r\n&.reversed{\r\n h4{\r\n flex-direction: row-reverse;\r\n \r\n }\r\n}\r\n@keyframes showIndicator{\r\n 0%{\r\n opacity: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n }\r\n}\r\n`;","import * as React from \"react\";\r\nimport Icon, { ICON_TYPE } from \"../elements/Icon\";\r\nimport { StyledMenu } from \"./MenuDropDown.style\";\r\n\r\ntype alignment = \"left\" | \"right\" | void;\r\n\r\ninterface Props{\r\n title?: string;\r\n icon?: ICON_TYPE;\r\n align?: alignment;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\n\r\n\r\n\r\nconst MenuDropDown:React.FC = (props) =>\r\n{\r\n\r\n const [showMenu, toggleMenu] = React.useState(false);\r\n\r\n const showHideMenu = (e:MouseEvent) =>\r\n {\r\n toggleMenu(false);\r\n }\r\n\r\n React.useEffect(() =>\r\n {\r\n if(showMenu)\r\n {\r\n window.addEventListener(\"click\",showHideMenu); \r\n }\r\n return () =>\r\n {\r\n window.removeEventListener(\"click\",showHideMenu);\r\n }\r\n },[showMenu]);\r\n\r\n return (\r\n \r\n

toggleMenu(!showMenu)}>{props.title ? {props.title} : null } {props.icon ? : null }

\r\n {showMenu ?
\r\n {props.children}\r\n
: null }\r\n
\r\n );\r\n}\r\n\r\nexport default MenuDropDown","import { Action } from 'redux'\r\nimport { RepoState } from '../../typings/repo';\r\nimport { getProductLine } from 'utils/utils';\r\nimport { useEffect } from 'react';\r\n\r\ninterface SetRepoAction extends Action<\"SET_REPO\">\r\n{\r\n repo: RepoState;\r\n}\r\n\r\nexport const setLanguage = (lang: string) => {\r\n const productLine = getProductLine();\r\n let repo;\r\n try {\r\n repo = require(`../repository-data/${productLine}/repository-${productLine}-${lang}.json`);\r\n } catch (e) {\r\n console.log(e)\r\n repo = require(`../repository-data/grey/repository-grey-en.json`);\r\n }\r\n\r\n return { type: \"SET_REPO\", repo }\r\n}\r\n\r\n// Extend all repository action interfaces\r\nexport interface RepoAction extends SetRepoAction { }","import styled from \"styled-components\";\r\nimport { PrimaryColor, SecondaryColor } from 'global.styles';\r\n\r\nexport const StyledHeader = styled.header`\r\n.logo{\r\n width: 300px;\r\n text-align: center;\r\n cursor: pointer;\r\n h5, h6{\r\n margin-left: 0;\r\n }\r\n}\r\n.toggle-settings{\r\n display: none;\r\n} \r\n \r\n \r\n&:before{\r\n content: \"\";\r\n width: 300px;\r\n height: 50px;\r\n background: ${SecondaryColor};\r\n position: absolute;\r\n left: 0;\r\n z-index: -1;\r\n height: 70px;\r\n}\r\n@media(max-width: 769px){\r\n .logo{\r\n width: calc(50% - 22px);\r\n margin-left: 42px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: ${SecondaryColor};\r\n img{\r\n max-width: 66%;\r\n height: auto;\r\n object-fit: cover;\r\n padding: 10px;\r\n box-sizing: border-box;\r\n margin-right: 22px;\r\n }\r\n } \r\n \r\n .toggle-settings{\r\n display: block;\r\n height: 70px;\r\n border-radius: 0;\r\n position: absolute;\r\n left: 0;\r\n background: transparent;\r\n } \r\n &:before{\r\n width: 50%;\r\n }\r\n\r\n .header-price{\r\n width: calc(50% - 20px);\r\n .header-info{\r\n margin-left: 0;\r\n padding: 19px;\r\n width: 100%;\r\n p{\r\n }\r\n strong{\r\n display: block;\r\n font-size: 17px;\r\n text-align: left;\r\n }\r\n }\r\n\r\n & + .active{\r\n display: block;\r\n height: calc(100vh - 70px);\r\n width: 90%;\r\n padding: 20px 0px 0px 20px;\r\n\r\n &:after{\r\n content: \"\";\r\n display: block;\r\n background: linear-gradient(-90deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.12) 100%);\r\n height: 100%;\r\n position: absolute;\r\n z-index: 4;\r\n top: 0px;\r\n right: -8px;\r\n left: auto; \r\n width: 8px;\r\n\r\n }\r\n > div{\r\n float: none;\r\n height: auto;\r\n h4{\r\n\r\n span{\r\n margin-right: auto !important;\r\n }\r\n \r\n }\r\n &.header-menu{\r\n > div{\r\n position: relative;\r\n border: none;\r\n p{\r\n text-align: left;\r\n font-size: 14px;\r\n } \r\n }\r\n }\r\n } \r\n \r\n & + .toggle-settings{\r\n background: ${PrimaryColor};\r\n }\r\n }\r\n }\r\n\r\n button span:last-child{\r\n font-size: 14px;\r\n }\r\n\r\n .header-menu{\r\n height: 40px;\r\n h4{\r\n padding: 0;\r\n } \r\n } \r\n} \r\n\r\n.header-menu{\r\n > div{\r\n button, a{\r\n padding-left: 0;\r\n padding-right: 0;\r\n span{\r\n margin: 0;\r\n font-size: 1em;\r\n }\r\n }\r\n }\r\n}\r\n\r\n@media(max-width: 1024px){\r\n .header-menu{\r\n height: 40px;\r\n h4{\r\n padding: 0;\r\n }\r\n }\r\n}\r\n\r\n@media(min-width: 769px) and (max-width: 1024px){\r\n .header-menu{\r\n h4 + div{\r\n margin-top: 14px;\r\n }\r\n }\r\n}\r\n&:after{\r\n content: \"\";\r\n display: block;\r\n background: linear-gradient(0deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.12) 100%);\r\n height: 8px;\r\n position: absolute;\r\n z-index: 4;\r\n top: 70px;\r\n right: 0;\r\n left: 0px;\r\n animation: .5s showShadow both;\r\n animation-delay: .5s;\r\n}\r\n\r\n@keyframes showShadow{\r\n 0%{\r\n opacity: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n }\r\n}\r\n.pr-0{\r\n padding-right: 0;\r\n}\r\n`;\r\n\r\nexport const PriceStyle = styled.div`\r\n\r\n.header-button{\r\n line-height: 6px;\r\n}\r\n\r\n.header-button + div{\r\n border-left: 1px solid rgba(0,0,0,.1);\r\n margin-left: 20px;\r\n padding: 15px;\r\n padding-left: 20px;\r\n box-sizing: border-box;\r\n p{\r\n margin: 0;\r\n font-size: 13px;\r\n }\r\n strong{\r\n font-size: 26px;\r\n span{\r\n font-size: 9px;\r\n margin-right: 3px;\r\n }\r\n }\r\n}\r\n.header-info{\r\n p{\r\n display: flex;\r\n align-items: center;\r\n svg{\r\n margin-left: 5px;\r\n width: 16px;\r\n height: 16px;\r\n cursor: pointer;\r\n &:hover{\r\n & + .header-info__tooltip{\r\n opacity: 1;\r\n }\r\n }\r\n } \r\n }\r\n}\r\n\r\n.header-info__tooltip{\r\n display: block;\r\n position: absolute;\r\n right: 10px;\r\n top: 35px;\r\n background: white;\r\n padding: 15px;\r\n z-index: 99;\r\n box-shadow: 0px 3px 6px 0px rgba(0,0,0,.4);\r\n opacity: 0;\r\n transition: all .4s linear;\r\n}\r\n`;\r\n\r\nexport const Buttons = styled.div`\r\ndisplay: flex;\r\nalign-items: center;\r\njustify-content: flex-end;\r\nheight: 100%;\r\nbutton{\r\n text-transform: uppercase;\r\n font-weight: bold;\r\n}\r\nsvg{\r\n fill: ${PrimaryColor} !important;\r\n width: 16px;\r\n height: 16px;\r\n}\r\n@media(max-width: 769px){\r\n display: none;\r\n width: 100%;\r\n position: absolute; \r\n top: 70px;\r\n background: white;\r\n height: 57px;\r\n \r\n &.active{\r\n display: flex;\r\n }\r\n & + div{\r\n position: absolute;\r\n right: 0;\r\n }\r\n}\r\n@media(min-width: 769px) and (max-width: 1024px){\r\n span:nth-child(2), h4 span{\r\n display: none;\r\n }\r\n}\r\n\r\n@media(min-width: 1024px) and (max-width: 1300px){\r\n > div, > button{\r\n flex-direction: column;\r\n padding: 10px !important;\r\n svg{\r\n margin-right: 0;\r\n } \r\n span:nth-child(2){\r\n margin-top: 5px;\r\n } \r\n h4{\r\n flex-direction: column-reverse !important;\r\n justify-content: flex-end !important;\r\n padding: 10px;\r\n padding-top: 8px;\r\n span{\r\n margin: 0 !important;\r\n margin-top: 5px !important;\r\n }\r\n }\r\n }\r\n\r\n \r\n}\r\n`;\r\n","import ReactGA from \"react-ga\";\r\n\r\nexport const UA_ID:string = \"UA-12900889-4\"; \r\n\r\ntype CategoryType = \"FRONTPAGE\" | \"STEP\" | \"NAVIGATION\" | \"COOKIE\" | \"CART\";\r\n\r\n\r\nexport const TrackEvent = (category:CategoryType, action:string, label?:string) => {\r\n const obj = {\r\n category: category,\r\n action: action\r\n }\r\n if(label){\r\n const obj2 = {\r\n category: category,\r\n action: action,\r\n label: label\r\n }\r\n ReactGA.event(obj2);\r\n //console.log(obj2);\r\n }else{\r\n ReactGA.event(obj);\r\n //console.log(obj);\r\n\r\n }\r\n\r\n };","import * as React from \"react\";\r\nimport IconButton from \"../elements/IconButton\";\r\nimport Logo from \"./Welcome/Logo\";\r\nimport Icon from \"../elements/Icon\";\r\nimport Menu from \"../elements/MenuDropDown\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { RootState } from \"state/state\";\r\nimport { setCurrency } from \"state/cart/actions\";\r\nimport { setLanguage } from \"state/repo/actions\";\r\nimport { getPrice } from \"helpers/priceHelper\";\r\nimport { StyledHeader, PriceStyle, Buttons } from \"./Header.style\";\r\nimport { TrackEvent } from \"../../helpers/Tracking\";\r\nimport { getLogo } from \"../../utils/utils\";\r\n\r\ninterface Props {\r\n showPopup: () => void;\r\n showSave: () => void;\r\n showProject: () => void;\r\n showShare: () => void;\r\n showReset: () => void;\r\n showProductLine: () => void;\r\n currentProductLine: (e: string) => void;\r\n}\r\n\r\nconst Header = (props: Props) => {\r\n const [toggle, updateSetting] = React.useState(false);\r\n const state = useSelector((state: RootState) => state);\r\n const { configuration, cart, repo } = state;\r\n const tokens = repo.translations;\r\n const dispatch = useDispatch();\r\n\r\n const getCurrency = (cur: string) => {\r\n return repo.currency.find((c) => c.currency === cur)?.format ?? \"{0}\";\r\n };\r\n const r = React.createRef();\r\n React.useEffect(() => {\r\n if (r.current) {\r\n r.current.addEventListener(\"touchmove\", function (e) {\r\n e.preventDefault();\r\n });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {\r\n TrackEvent(\"NAVIGATION\", \"reset\");\r\n props.showProject();\r\n }}\r\n />\r\n \r\n
\r\n
\r\n
\r\n

{tokens.TOTAL_EX_MVA}

\r\n \r\n {getCurrency(cart.currency).replace(\r\n \"{0}\",\r\n getPrice(\r\n configuration,\r\n repo,\r\n cart.currency,\r\n state.repo.langCode,\r\n state.cart.accessories,\r\n state.cart.additional\r\n )\r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n props.showProject();\r\n TrackEvent(\"NAVIGATION\", \"new-project\");\r\n }}\r\n title={tokens.NEW_PROJECT}\r\n />\r\n \r\n {\r\n TrackEvent(\r\n \"NAVIGATION\",\r\n \"changed-product-line\",\r\n tokens.PRODUCT_NAME\r\n );\r\n //if(state.cart.productLine === tokens.PRODUCT_NAME.replace(\" \", \"\")) return;\r\n props.currentProductLine(\"FLEXLINE_GREY\");\r\n props.showProductLine();\r\n }}\r\n >\r\n {tokens.PRODUCT_NAME}\r\n

\r\n {\r\n TrackEvent(\r\n \"NAVIGATION\",\r\n \"changed-product-line\",\r\n tokens.PRODUCT_NAME_BLACK\r\n );\r\n //if(state.cart.productLine === tokens.PRODUCT_NAME.replace(\" \", \"\")) return;\r\n props.currentProductLine(\"FLEXLINE_BLACK\");\r\n props.showProductLine();\r\n }}\r\n >\r\n {tokens.PRODUCT_NAME_BLACK}\r\n

\r\n {\r\n TrackEvent(\r\n \"NAVIGATION\",\r\n \"changed-product-line\",\r\n tokens.PRODUCT_NAME_HEAVY_DUTY\r\n );\r\n //if(state.cart.productLine === tokens.PRODUCT_NAME_HEAVY_DUTY.replace(\" \", \"\")) return;\r\n props.currentProductLine(\"HEAVY_DUTY\");\r\n props.showProductLine();\r\n }}\r\n >\r\n {tokens.PRODUCT_NAME_HEAVY_DUTY}\r\n

\r\n \r\n\r\n {\r\n props.showSave();\r\n TrackEvent(\"NAVIGATION\", \"save\");\r\n }}\r\n title={tokens.SAVE}\r\n />\r\n \r\n {state.repo.languages.map((lang) => (\r\n {\r\n dispatch(setLanguage(lang.code));\r\n dispatch(setCurrency(lang.defaultCurrency));\r\n TrackEvent(\"NAVIGATION\", \"set-language\", lang.code);\r\n }}\r\n >\r\n {lang.name}\r\n

\r\n ))}\r\n \r\n \r\n {state.repo.currency.map((cur) => (\r\n {\r\n dispatch(setCurrency(cur.currency));\r\n TrackEvent(\"NAVIGATION\", \"set-currency\", cur.currency);\r\n }}\r\n >\r\n {cur.currency}\r\n

\r\n ))}\r\n \r\n {\r\n props.showShare();\r\n TrackEvent(\"NAVIGATION\", \"share\");\r\n }}\r\n title={tokens.SHARE}\r\n />\r\n \r\n {\r\n TrackEvent(\"NAVIGATION\", \"contact\", \"phone\");\r\n window.location.href = \"tel:\" + tokens.INFO_PHONE;\r\n }}\r\n title={tokens.INFO_PHONE}\r\n />\r\n {\r\n TrackEvent(\"NAVIGATION\", \"contact\", \"email\");\r\n window.location.href = \"mailto:\" + tokens.INFO_MAIL;\r\n }}\r\n title={tokens.INFO_MAIL}\r\n />\r\n \r\n
\r\n updateSetting(!toggle)}\r\n />\r\n {/*\r\n alert(\"bøh\")} />\r\n props.showSave()} />\r\n alert(\"bøh\")} />\r\n */}\r\n
\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import styled from \"styled-components\";\r\nimport {SecondaryColor, TertiaryColor, BackgroundColor, PrimaryColor} from 'global.styles';\r\n\r\n\r\nexport const PanelStyle = styled.div` \r\n background: white;\r\n transition: all .3s ease-in-out;\r\n .panel__content{\r\n background: white;\r\n color: black;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n //-webkit-overflow-scrolling: auto;\r\n max-height: 0;\r\n text-align: left;\r\n transition: all .3s ease-in-out;\r\n box-sizing: border-box;\r\n min-height: 0;\r\n > div:not(.no-border):not(:last-child){\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n }\r\n \r\n }\r\n h2{\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 20px 30px;\r\n font-size: 16px;\r\n text-align: left;\r\n span:first-child{\r\n opacity: .4; \r\n min-width: 16px;\r\n margin-right: 13px; \r\n }\r\n span{\r\n // text-transform: capitalize;\r\n pointer-events: none;\r\n user-select: none;\r\n }\r\n background: ${SecondaryColor};\r\n color: ${BackgroundColor};\r\n border-left: 2px solid transparent;\r\n border-bottom: 1px solid ${TertiaryColor};\r\n border-bottom: 1px solid ${TertiaryColor};\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n svg{\r\n opacity: .4; \r\n fill: ${BackgroundColor};\r\n margin-left: -4px;\r\n margin-right: 17px;\r\n width: 16px;\r\n height: 16px;\r\n\r\n }\r\n }\r\n span{\r\n font-size: 15px;\r\n }\r\n .single-text{\r\n margin: 0;\r\n line-height: 16px;\r\n padding: 0px 0px; \r\n }\r\n &.active{\r\n h2{\r\n border-left: 2px solid ${PrimaryColor};\r\n color: ${PrimaryColor};\r\n span{\r\n opacity: 1; \r\n }\r\n svg{\r\n opacity: 1;\r\n fill: ${PrimaryColor};\r\n }\r\n }\r\n .panel__content{\r\n max-height: 1000px;\r\n }\r\n }\r\n .tabs{\r\n display:none;\r\n }\r\n h3{\r\n font-size: 1em;\r\n }\r\n @media(max-width: 769px){\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n /* max-height: 70px !important; */\r\n /* min-height: 70px !important; */\r\n top: 70px;\r\n background: transparent;\r\n &.active{\r\n z-index: 1;\r\n h2{\r\n background: ${PrimaryColor};\r\n color: white;\r\n svg{\r\n fill: white !important;\r\n \r\n }\r\n }\r\n }\r\n h2{\r\n width: 20vw;\r\n margin-top: -70px;\r\n span:nth-child(1){\r\n margin-left: auto;\r\n margin-right: auto; \r\n min-width: auto; \r\n }\r\n span:nth-child(2){\r\n display: none;\r\n }\r\n svg{\r\n margin-left: auto; \r\n margin-right: auto;\r\n }\r\n\r\n }\r\n .panel_content{\r\n\r\n }\r\n .tabs{\r\n display:flex;\r\n }\r\n }\r\n\r\n .product-details{\r\n hr{\r\n border: 1px solid #E5E5E5;\r\n }\r\n > div:first-child > div:first-child hr{\r\n display: none;\r\n }\r\n }\r\n`;","import * as React from \"react\";\r\nimport { PanelStyle } from \"./Panel.style\";\r\nimport { ICON_TYPE } from \"../../elements/Icon\";\r\nimport Icon from \"../../elements/Icon\";\r\n\r\ninterface Props{\r\n active?: boolean;\r\n title: string;\r\n id: number;\r\n onClick: () => void;\r\n total: number;\r\n padding?: number;\r\n icon?: ICON_TYPE;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst Panel : React.FC = (props) =>\r\n{\r\n const style = {\r\n minHeight: props.active ? `calc(100vh - ${(props.total+1) * 57}px - 70px - 60px)`: \"0px\",\r\n maxHeight: props.active ? `calc(100vh - ${(props.total+1) * 57}px - 70px - 60px)`: \"0px\",\r\n padding: props.padding && props.active ? props.padding + \"px\": \"0\"\r\n }\r\n const r = React.createRef(); \r\n React.useEffect(() => {\r\n \r\n if(r.current)\r\n {\r\n r.current.addEventListener(\"touchmove\", function(e){ e.preventDefault()});\r\n } \r\n },[r]);\r\n\r\n return (\r\n \r\n

{props.icon ? : {props.id}}{props.title}

\r\n
\r\n {props.children}\r\n
\r\n
\r\n );\r\n\r\n\r\n}\r\n\r\nexport default Panel;","import styled from \"styled-components\";\r\nimport { PrimaryColor, BorderColor } from 'global.styles';\r\n\r\n\r\nexport const RangeStyle = styled.div`\r\npadding: 20px 25px;\r\ntransition: opacity .2s linear;\r\nh3{ \r\n display: flex;\r\n font-weight: bold;\r\n margin: 0;\r\n margin-bottom: 5px;\r\n span:nth-child(2){\r\n margin-left: auto;\r\n color: ${PrimaryColor};\r\n }\r\n}\r\ndiv > input{\r\n width: 100%;\r\n opacity: 1;\r\n cursor: pointer;\r\n &:before{\r\n content: \"\";\r\n display: none;\r\n background: ${PrimaryColor};\r\n border-radius: 30px; \r\n width: 20px;\r\n height: 20px;\r\n \r\n }\r\n opacity: 0;\r\n\r\n}\r\n.slider{\r\n &:after{\r\n content: \"\";\r\n display: block;\r\n height: 3px;\r\n width: inherit;\r\n background: ${BorderColor};\r\n width: 100%;\r\n margin-top: 9px;\r\n position: absolute;\r\n pointer-events: none;\r\n }\r\n}\r\n.slider-track{\r\n position: absolute;\r\n background: ${PrimaryColor};\r\n width: 71%;\r\n height: 3px;\r\n pointer-events: none;\r\n margin-top: 9px;\r\n z-index: 2;\r\n}\r\n.slider .slider-thumb{\r\n position: absolute;\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 20px;\r\n margin-left: -10px;\r\n background: ${PrimaryColor};\r\n pointer-events: none;\r\n z-index: 2;\r\n}\r\n> div{\r\n display: flex;\r\n position: relative; \r\n span{\r\n color: ${BorderColor};\r\n } \r\n span:nth-child(2){\r\n margin-left: auto;\r\n }\r\n}\r\n&.disabled{\r\n opacity: .3;\r\n pointer-events: none;\r\n}\r\n\r\n.iosfix{\r\n display: none;\r\n\r\n width: 100%;\r\n box-sizing: border-box;\r\n transform: translateY(100%);\r\n z-index: 3;\r\n height: 40px;\r\n margin-top: -40px; \r\n opacity: 0;\r\n > div{\r\n border: 1px solid teal;\r\n flex: 1;\r\n }\r\n}\r\n\r\n@supports (-webkit-touch-callout: none) {\r\n .iosfix{\r\n display: flex; \r\n }\r\n}\r\n`;","import * as React from \"react\";\r\nimport { RangeStyle } from \"./Range.style\";\r\n\r\ninterface Props\r\n{\r\n start: number;\r\n total: number;\r\n title: string;\r\n step: number;\r\n value: number;\r\n disabled?: boolean;\r\n onChange: (e: number) => void;\r\n};\r\n\r\n\r\n\r\nconst Slider = (props: Props) =>\r\n{\r\n const [change, updateChange] = React.useState(props.value);\r\n const [moved, updateMove] = React.useState(false);\r\n const changeNumber = (e: React.ChangeEvent) => \r\n {\r\n if (matchMedia('(hover:none)').matches) {\r\n // Device has touch\r\n updateChange(parseInt(e.target.value)); \r\n }\r\n else\r\n {\r\n //updateChange(parseInt(e.target.value));\r\n props.onChange(parseInt(e.target.value));\r\n }\r\n //props.onChange(parseInt(e.target.value));\r\n }\r\n React.useEffect(() => \r\n {\r\n updateChange(props.value)\r\n }\r\n ,[props.value]);\r\n const percent = (change - props.start) / (props.total - props.start) * 100;\r\n const slideIt = (e: React.TouchEvent) =>\r\n {\r\n props.onChange(change);\r\n }\r\n const setIt = (e: React.MouseEvent) =>\r\n {\r\n props.onChange(change);\r\n }\r\n const iosFallback = () =>\r\n {\r\n let arr = [];\r\n for(let i = 0; i < props.total + 1; i++)\r\n {\r\n const num = i;\r\n arr.push(
{ \r\n if(!moved)\r\n {\r\n updateChange(num); \r\n props.onChange(num); \r\n } \r\n }}>{num}
);\r\n }\r\n return arr;\r\n }\r\n const onSlide = (e:React.TouchEvent) =>\r\n {\r\n const divElement:HTMLDivElement = e.touches[0].target as HTMLDivElement;\r\n const parent:HTMLDivElement = divElement.parentElement as HTMLDivElement;\r\n const width = parent.offsetLeft + parent.clientWidth;\r\n const p = Math.round((e.touches[0].clientX / width) * 100);\r\n const currentCount = Math.floor((props.total / 100) * p); \r\n updateMove(true); \r\n if(currentCount < 0){\r\n updateChange(0);\r\n }else if(currentCount > props.total)\r\n {\r\n updateChange(props.total);\r\n\r\n }else{\r\n updateChange(currentCount);\r\n }\r\n }\r\n const onTouchUp = (e:React.TouchEvent) =>\r\n {\r\n if(moved)\r\n {\r\n props.onChange(change);\r\n }\r\n updateMove(false); \r\n }\r\n\r\n return (\r\n \r\n

{props.title}{change}

\r\n
\r\n {iosFallback()}\r\n
\r\n
\r\n
\r\n
10 ? 20 : (change * 2)}px` }}>
\r\n \r\n
\r\n
\r\n {props.start}{props.total}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Slider;","import styled from \"styled-components\";\r\nimport { BorderColor , BackgroundColor, PrimaryColor} from 'global.styles';\r\n\r\nexport const ToggleStyle = styled.div`\r\n \r\nh3{\r\n margin: 0;\r\n}\r\ninput{\r\n display: none;\r\n}\r\nlabel{\r\n background: ${BorderColor};\r\n border-radius: 20px;\r\n display: inline-block;\r\n position: relative;\r\n padding: 3px;\r\n width: 32px;\r\n user-select: none;\r\n cursor: pointer;\r\n transition: all .1s linear;\r\n\r\n &:after{\r\n content: \"\";\r\n display: block;\r\n border-radius: 20px;\r\n background:${BackgroundColor};\r\n width: 14px;\r\n height:14px;\r\n transition: all .5s linear;\r\n }\r\n}\r\ninput:checked + label{\r\n background: ${PrimaryColor};\r\n}\r\n\r\ninput:checked + label:after{\r\n margin-left: auto;\r\n\r\n}\r\n> div{\r\n display: flex;\r\n align-items: center;\r\n}\r\nspan{\r\n margin-right: auto;\r\n}\r\npadding: 20px 25px;\r\n//border-bottom: 1px solid rgba(0,0,0,.1);\r\n\r\n&.disabled{\r\n opacity: .5;\r\n}\r\n`;","import * as React from \"react\";\r\nimport { ToggleStyle } from './Toggle.style';\r\n\r\ninterface Props{\r\n title?: string;\r\n checked?: boolean;\r\n onChange?: (e:boolean) => void;\r\n id?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nconst Toggle = (props:Props) =>\r\n{\r\n const change = (e:React.SyntheticEvent) =>\r\n {\r\n if(props.onChange)\r\n {\r\n props.onChange(e.currentTarget.checked);\r\n }\r\n }\r\n const id = \"toggle-\" + props.id;\r\n return (\r\n \r\n
\r\n {props.title} \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Toggle;","import * as React from \"react\";\r\n\r\nimport styled from \"styled-components\";\r\nimport { PrimaryColor } from \"../../global.styles\";\r\nconst StyledButton = styled.button`\r\n padding: 10px 30px;\r\n background: ${PrimaryColor};\r\n color: white;\r\n border-radius: 30px;\r\n border: none;\r\n user-select: none;\r\n cursor: pointer;\r\n outline: none;\r\n &:disabled{\r\n opacity: .5;\r\n }\r\n`;\r\n\r\n\r\nexport const StyledLink = styled.a`\r\n padding: 10px 30px;\r\n background: ${PrimaryColor};\r\n color: white;\r\n border-radius: 30px;\r\n border: none;\r\n text-decoration: none; \r\n`;\r\n\r\ninterface Props{\r\n children?: React.ReactChildren;\r\n title?: string | JSX.Element;\r\n onClick: () => void;\r\n className? : string;\r\n disabled?: boolean;\r\n}\r\n\r\nconst Button = (props:Props) =>\r\n{\r\n return (\r\n {props.title}\r\n );\r\n}\r\n\r\nexport default Button;","import styled from \"styled-components\";\r\nimport { TertiaryColor, OffColor } from 'global.styles';\r\n\r\nexport const StyledStep = styled.div`\r\ndisplay: flex;\r\nalign-items: center;\r\nmargin: 5px 0;\r\n> *:nth-last-child(2){\r\n margin-right: auto !important;\r\n}\r\nborder-bottom: 1px solid rgba(0,0,0,0.05);\r\n.steppers{\r\n display: flex;\r\n max-width: 108px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n input{\r\n //font-family: \"Arial\";\r\n max-width: 44px;\r\n min-width: 44px;\r\n -webkit-appearance: none;\r\n -moz-appearance: textfield;\r\n margin-left: 0;\r\n margin-right: 0;\r\n }\r\n button{\r\n width: 108px;\r\n span{\r\n line-height: 15px;\r\n align-items: center;\r\n font-size: 12px; \r\n }\r\n }\r\n span{\r\n font-size: 15px;\r\n }\r\n}\r\n\r\n.product-item{ \r\n cursor: pointer;\r\n h6{\r\n margin: 0;\r\n margin-bottom: 8px;\r\n }\r\n h4{\r\n margin: 0;\r\n margin-bottom: 10px\r\n }\r\n p{\r\n margin: 0;\r\n font-size: 14px;\r\n padding-right: 20px;\r\n }\r\n}\r\n\r\n.stepper-holder{\r\n display: flex;\r\n flex-direction: column;\r\n .price{\r\n display: flex;\r\n font-size: 13px;\r\n margin-top: 10px;\r\n span{\r\n display: inline-block;\r\n &:first-child{\r\n margin-right: auto;\r\n padding-right: 5px;\r\n }\r\n }\r\n }\r\n}\r\n&:not(.preview-stepper){\r\n @media(max-width: 769px){\r\n display: grid;\r\n grid-template-areas:\r\n \"image content\"\r\n \"price price\";\r\n grid-template-columns: 100px 1fr;\r\n padding-bottom: 10px;\r\n margin-bottom: 10px;\r\n > img{\r\n align-self: flex-start;\r\n }\r\n .product-item{\r\n grid-area: content;\r\n }\r\n .stepper-holder{\r\n display: grid;\r\n grid-template-areas:\r\n \"amount\"\r\n \"price\";\r\n grid-template-columns: 1fr;\r\n grid-area: price;\r\n padding-top: 10px;\r\n \r\n .steppers{\r\n grid-area: amount;\r\n margin-right: 0px;\r\n margin-left: auto;\r\n margin-bottom: 10px;\r\n max-width: 90px;\r\n .left{\r\n //padding-right: 0;\r\n }\r\n .right{\r\n //padding-right: 0;\r\n }\r\n input{\r\n min-width: 18px;\r\n max-width: 18px;\r\n }\r\n } \r\n \r\n .price{\r\n grid-area: price;\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n span:first-child{\r\n margin-right: 10px;\r\n margin-left: auto;\r\n }\r\n }\r\n }\r\n\r\n }\r\n}\r\n@media(max-width: 769px){\r\n &.preview-stepper{\r\n display: grid;\r\n grid-template-areas:\r\n \"title close\"\r\n \"title amount\";\r\n grid-template-columns: 1fr;\r\n grid-gap: 20px 10px;\r\n border-bottom: none;\r\n > div:not(.stepper-holder){\r\n grid-area: title;\r\n align-self: flex-start;\r\n h6{\r\n margin-top: 0;\r\n }\r\n }\r\n .stepper-holder{\r\n grid-area: amount;\r\n padding-top: 15px;\r\n align-items: flex-end;\r\n .steppers{\r\n margin-right: 0;\r\n max-width: 90px;\r\n input{\r\n min-width: 18px;\r\n max-width: 18px;\r\n }\r\n } \r\n .price{\r\n margin-top: 5px;\r\n }\r\n }\r\n & + button.close{\r\n border-left: none;\r\n align-items: flex-start;\r\n position: absolute;\r\n right: 0;\r\n top: 14px;\r\n padding-top: 0;\r\n }\r\n } \r\n}\r\n`;\r\n\r\nexport const StyledButton = styled.button`\r\nborder: 2px solid ${TertiaryColor};\r\nbackground: ${TertiaryColor};\r\ncolor: white;\r\noutline: none;\r\nline-height: 20px;\r\noutline: none;\r\n&.left{\r\n border-radius: 20px 0 0 20px;\r\n margin-right: auto;\r\n cursor: pointer;\r\n padding: 1px 10px;\r\n &[disabled]{\r\n border: 2px solid ${OffColor};\r\n border-right-color: ${TertiaryColor};\r\n background: ${OffColor};\r\n }\r\n}\r\n\r\n&.right{\r\n border-radius: 0px 20px 20px 0px;\r\n margin-left: auto;\r\n padding: 1px 10px;\r\n cursor: pointer;\r\n &[disabled]{\r\n border: 2px solid ${OffColor};\r\n border-left-color: ${TertiaryColor};\r\n background: ${OffColor};\r\n }\r\n}\r\nspan{\r\n font-family: monospace;\r\n display: flex;\r\n height: 21px;\r\n align-items: flex-start;\r\n}\r\n`;\r\n\r\nexport const StyledInput = styled.input`\r\nborder: 2px solid ${TertiaryColor};\r\nborder-left: none;\r\nborder-right: none;\r\ntext-align: center;\r\nline-height: 20px;\r\n`;","import * as React from \"react\";\r\nimport { StyledStep, StyledButton, StyledInput} from \"./Stepper.style\";\r\n\r\ninterface DisplayPrice{\r\n text: string;\r\n price: string;\r\n}\r\n\r\ninterface Props{\r\n max: number;\r\n title?: string;\r\n step?: number;\r\n value?: number;\r\n id?: string;\r\n onChange?: (e:number) => void;\r\n showPrice?: DisplayPrice;\r\n className?: string;\r\n children?: React.ReactNode;\r\n};\r\n\r\ninterface State{\r\n current: number;\r\n}\r\n\r\n\r\nconst Stepper:React.FC = (props) =>\r\n{\r\n const [current, updateCurrent] = React.useState(props.value ? props.value : 0);\r\n const refSelect = React.createRef();\r\n\r\n const change = (e:React.SyntheticEvent) =>\r\n {\r\n const val = parseInt(e.currentTarget.value);\r\n updateCurrent(val);\r\n if(props.onChange)\r\n {\r\n if(isNaN(val))\r\n {\r\n props.onChange(0);\r\n } \r\n else\r\n {\r\n props.onChange(val);\r\n } \r\n }\r\n }\r\n \r\n const decrease = () =>\r\n {\r\n if(current > 0){\r\n const val = current - (props.step ? props.step : 1);\r\n updateCurrent(val);\r\n if(props.onChange)\r\n {\r\n props.onChange(val);\r\n }\r\n }else{\r\n updateCurrent(0);\r\n if(props.onChange)\r\n {\r\n props.onChange(0);\r\n }\r\n }\r\n\r\n }\r\n\r\n const increase = () =>\r\n {\r\n if(current < props.max){\r\n const val = current + (props.step ? props.step : 1);\r\n updateCurrent(val);\r\n if(props.onChange)\r\n {\r\n props.onChange(val);\r\n }\r\n }\r\n }\r\n const setSelect = () =>\r\n {\r\n if(refSelect.current)\r\n {\r\n refSelect.current.selectionStart = 99;\r\n }\r\n }\r\n\r\n return \r\n {props.title ?

{props.title}

: null}\r\n {props.children}\r\n
\r\n
\r\n -\r\n \r\n = props.max ? true : false} className=\"right\" onClick={increase}>+\r\n
\r\n {props.showPrice ?
\r\n \r\n {props.showPrice.text}: \r\n \r\n \r\n {props.showPrice.price}\r\n \r\n
: null}\r\n
\r\n
;\r\n\r\n};\r\n\r\n\r\nexport default Stepper;\r\n","import styled from \"styled-components\";\r\nimport { BackgroundColor } from 'global.styles';\r\n\r\nexport const StyledContent = styled.div`\r\nposition: absolute;\r\nwidth: calc(100vw - 300px);\r\nheight: calc(100vh - 70px);\r\nleft: 300px;\r\ntop: 70px;\r\nbackground: ${BackgroundColor};\r\nz-index: 3;\r\ncolor: black;\r\ntext-align: left;\r\nanimation: .1s showContent ease-in both;\r\nanimation-delay: .35s;\r\ntransform-origin: top left;\r\noverflow-y: auto;\r\n//-webkit-overflow-scrolling: auto;\r\n&.large:after,&.medium:after,&.small:after{\r\n content: \"\";\r\n position: fixed;\r\n background: rgba(0,0,0,.5);\r\n height: calc(100vh - 70px);\r\n width: 100vw;\r\n right: 0px;\r\n top: 70px;\r\n pointer-events: none;\r\n}\r\n&.large{\r\n width: calc(80vw - 300px); \r\n &:after{\r\n width: 20vw; \r\n }\r\n}\r\n&.medium{\r\n width: calc(50vw - 300px); \r\n &:after{\r\n width: 50vw;\r\n }\r\n}\r\n&.small{\r\n width: calc(30vw - 300px); \r\n &:after{\r\n width: 70vw;\r\n }\r\n}\r\n\r\n@keyframes showContent{\r\n 0%{\r\n opacity: 0;\r\n //transform: scaleX(.9);\r\n }\r\n 100%{\r\n opacity: 1;\r\n //transform: scaleX(1);\r\n }\r\n}\r\n\r\n@media(max-width: 769px){\r\n width: 100% !important;\r\n left: 0;\r\n top: 172px;\r\n display: none;\r\n &:after{\r\n display:none;\r\n }\r\n &.tabbed{\r\n display: block;\r\n }\r\n .cart-config-image{\r\n display: none;\r\n }\r\n \r\n}\r\n.toggle-btn{\r\n padding-left: 30px;\r\n font-size: 15px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n cursor: pointer;\r\n user-select: none;\r\n span{\r\n text-decoration: underline;\r\n }\r\n}\r\n\r\n\r\n`;","import * as React from \"react\";\r\nimport { StyledContent } from \"./Content.style\";\r\nexport type CONTENT_SIZE = \"large\" | \"medium\" | \"small\" | void;\r\n\r\ninterface Props\r\n{\r\n size?: CONTENT_SIZE;\r\n tabbed?: boolean;\r\n style?: React.CSSProperties;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst Content: React.FC = (props) =>\r\n{\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nexport default Content;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { SecondaryBackgroundColor, BackgroundColor } from \"../../../global.styles\";\r\n\r\ninterface Props{\r\n changedTab?: (e:number) => void;\r\n items?: string[];\r\n current?: number;\r\n}\r\n\r\nconst StyledTabs = styled.div`\r\n background: ${SecondaryBackgroundColor};\r\n display: flex;\r\n height: 35px;\r\n padding: 10px 10px 0 10px;\r\n > div{\r\n background: ${BackgroundColor};\r\n padding: 15px 20px;\r\n margin: 0 5px;\r\n display: flex;\r\n align-items: center;\r\n opacity: .5;\r\n cursor: pointer;\r\n transition: all .1s linear;\r\n &.active{\r\n opacity: 1;\r\n background: ${BackgroundColor};\r\n }\r\n user-select: none;\r\n }\r\n \r\n`;\r\n\r\nconst Tabs = (props:Props) =>\r\n{\r\n const setTab = (e:number) => (evt:React.SyntheticEvent) =>\r\n {\r\n if(props.changedTab)\r\n {\r\n props.changedTab(e);\r\n }\r\n }\r\n const r = React.createRef(); \r\n React.useEffect(() => {\r\n \r\n if(r.current)\r\n {\r\n r.current.addEventListener(\"touchmove\", function(e){ e.preventDefault()});\r\n } \r\n return () => {\r\n if(r.current)\r\n {\r\n r.current.removeEventListener(\"touchmove\", function(e){ e.preventDefault()}); \r\n }\r\n }\r\n });\r\n\r\n return (\r\n \r\n {props.items ? props.items.map((e, index) =>
{e}
) : null}\r\n
\r\n );\r\n}\r\n\r\n\r\nexport default Tabs;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\nimport Icon from \"../../elements/Icon\";\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from 'state/state';\r\n\r\ninterface Props{\r\n onSearch?: (e:string) => void;\r\n}\r\n\r\nconst StyledSearch = styled.div`\r\n display: flex;\r\n padding: 0px 10px;\r\n border: 1px solid #84888C;\r\n background: white;\r\n align-items: center; \r\n svg{\r\n width: 20px;\r\n height: 20px;\r\n fill: #84888C;\r\n }\r\n input{\r\n width: 100%;\r\n border: none;\r\n outline: none;\r\n @media (hover: none) and (max-width: 769px){\r\n font-size: 16px !important;\r\n }\r\n }\r\n`;\r\n\r\n\r\nconst Search = (props:Props) =>\r\n{\r\n const state = useSelector((state: RootState) => state);\r\n const tokens = state.repo.translations;\r\n const changedSearch = (e:React.ChangeEvent) =>\r\n {\r\n if(props.onSearch)\r\n {\r\n props.onSearch(e.target.value);\r\n }\r\n };\r\n\r\n return \r\n \r\n \r\n ;\r\n}\r\n\r\nexport default Search;","import styled from \"styled-components\";\r\nimport {PrimaryColor, SecondaryColor} from 'global.styles';\r\n\r\nexport const StyledSidebarNav = styled.div`\r\nheight: 60px;\r\ndisplay: flex;\r\nbutton{\r\n border-radius: 0;\r\n text-transform: uppercase;\r\n font-weight: bold;\r\n margin: 0;\r\n &:first-child{\r\n justify-content: center;\r\n padding: 10px;\r\n width: 70px;\r\n background: #5C656D;\r\n svg{\r\n fill: ${PrimaryColor};\r\n margin-right: 0;\r\n }\r\n }\r\n &:last-child{\r\n flex: 1;\r\n }\r\n}\r\n\r\n@media(max-width: 769px){\r\n display:none;\r\n}\r\n`;\r\n\r\nexport const StyledSidebar = styled.div`\r\n@media(max-width: 769px){\r\n > div:nth-child(2) h2{\r\n margin-left: 20vw;\r\n }\r\n > div:nth-child(3) h2{\r\n margin-left: 40vw;\r\n }\r\n > div:nth-child(4) h2{\r\n margin-left: 60vw;\r\n }\r\n > div:nth-child(5) h2{\r\n margin-left: 80vw;\r\n }\r\n height: 58px;\r\n &.active{\r\n height: auto;\r\n }\r\n\r\n}\r\n&.toggled{\r\n //animation: none;\r\n //transform: translate(-100%);\r\n //display: none;\r\n left: -100%;\r\n}\r\n.constraint-notification{\r\n background: red;\r\n position: fixed;\r\n z-index: 98;\r\n color: white;\r\n text-align: center;\r\n top: 50%;\r\n padding: 20px;\r\n left: 50%;\r\n width: 20%;\r\n height: auto;\r\n display: flex;\r\n box-sizing: border-box;\r\n align-items: center;\r\n animation .5s showConstraint both;\r\n transform: translate(-50%, -50%);\r\n line-height: 20px;\r\n @media(max-width: 769px){\r\n width: 90%;\r\n };\r\n flex-direction: column;\r\n p{\r\n margin: 0;\r\n line-height: 15px;\r\n }\r\n button{\r\n position: absolute;\r\n right: 10px;\r\n top: 10px;\r\n border-radius: 0;\r\n svg{\r\n fill: white !important;\r\n stroke: transparent !important;\r\n width: 12px !important;\r\n height: 12px !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.product-details{\r\n position: relative;\r\n animation: showDetails .2s ease-out;\r\n > button{\r\n position: absolute;\r\n right: 10px;\r\n margin-top: -20px;\r\n }\r\n}\r\n\r\n.checkout--mobile{\r\n //width: 100%;\r\n display: none;\r\n /*position: fixed;\r\n top: calc(100vh - 104px);\r\n z-index: 2;\r\n left: 0;\r\n border-radius: 0;\r\n display: none;\r\n animation: showCheckout .5s ease-in;*/\r\n color: white;\r\n background: #F6AD30;\r\n padding: 10px 20px;\r\n text-align: center;\r\n margin-top: 10px;\r\n}\r\n\r\n\r\n//hide sidebar when loading\r\n&:before{\r\n content: \"\";\r\n position: absolute;\r\n width: 300px;\r\n height: 100%;\r\n background: white;\r\n left: 0;\r\n top: 0;\r\n z-index: 6;\r\n animation: hideLoadOverlay 1s both;\r\n}\r\n\r\n.terms-holder{\r\n display: flex;\r\n align-items: flex-start;\r\n margin-top: 10px;\r\n > div{\r\n margin-top: 0;\r\n }\r\n a{\r\n font-size: 14px;\r\n color: black;\r\n }\r\n}\r\n\r\n.cart-separator{\r\n border: none;\r\n height: 1px;\r\n background: ${PrimaryColor};\r\n margin: 15px 0;\r\n}\r\n\r\n@keyframes hideLoadOverlay{\r\n 0%{\r\n display: block;\r\n left: 0;\r\n }\r\n 99%{\r\n display: block;\r\n left: 0;\r\n }\r\n 100%{\r\n left: -100%;\r\n visibility: hidden;\r\n }\r\n\r\n}\r\n\r\n@keyframes showConstraint{\r\n 0%{\r\n opacity: 0;\r\n transform: scale(.9) translate(-50%, -50%);\r\n }\r\n 100%{\r\n opacity: 1;\r\n transform: scale(1) translate(-50%, -50%);\r\n }\r\n}\r\n\r\n@keyframes showCheckout{\r\n 0%{\r\n top: calc(100vh);\r\n }\r\n 100%{\r\n top: calc(100vh - 104px);\r\n }\r\n}\r\n\r\n@media(max-width: 769px){\r\n .checkout--mobile{\r\n display: block;\r\n }\r\n}\r\n\r\n@keyframes showDetails{\r\n 0%{\r\n opacity: 0;\r\n margin-top: 100px;\r\n }\r\n 100%{\r\n opacity: 1;\r\n margin-top: 0px;\r\n }\r\n}\r\n`;\r\n\r\nexport const SidebarToggle = styled.div`\r\n position: absolute;\r\n top: 70px;\r\n left: 300px;\r\n background: transparent;\r\n border-radius: unset;\r\n border-left: 28px solid #5C656D;\r\n border-top: 28px solid #5C656D;\r\n border-right: 28px solid transparent;\r\n border-bottom: 28px solid transparent;\r\n animation: .3s slideToggleIn ease-out both;\r\n animation-delay: .8s;\r\n z-index: 1;\r\n display: none;\r\n button.empty{\r\n background: transparent;\r\n border-radius: unset;\r\n height: 27px;\r\n width: 27px;\r\n position: absolute;\r\n top: -23px;\r\n left: -22px;\r\n padding: 0;\r\n svg{\r\n transition: transform .2s ease-in-out;\r\n width: 17px;\r\n height: 17px;\r\n }\r\n }\r\n\r\n @keyframes slideToggleIn{\r\n 0%{\r\n opacity: 0;\r\n top: 17px;\r\n }\r\n 10%{\r\n opacity: 1;\r\n }\r\n 100%{\r\n top: 70px;\r\n }\r\n }\r\n &.active{\r\n left: 0;\r\n button span svg{\r\n transform: rotate(180deg);\r\n }\r\n }\r\n\r\n @media(min-width: 769px){\r\n &:not(.mobile-toggle){\r\n display: block;\r\n }\r\n }\r\n`;\r\n\r\nexport const HideContent = styled.div`\r\n position: absolute;\r\n top: 70px;\r\n //background: teal;\r\n width: calc(100% - 300px);\r\n z-index: 2;\r\n left: 300px;\r\n height: calc(100vh - 70px);\r\n`;","import styled from \"styled-components\";\r\n\r\nexport const CartItemHeader = styled.h4`\r\n padding: 8px 30px;\r\n background: lightgrey;\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n font-size: .9em;\r\n font-weight: normal;\r\n &.header--status{\r\n display: flex;\r\n span:first-child{\r\n margin-right: auto;\r\n }\r\n span.total-amount{\r\n min-width: 90px;\r\n text-align: right;\r\n margin-left: 10px;\r\n }\r\n }\r\n`;\r\n\r\nexport const CartItemStyle = styled.div`\r\n display: flex;\r\n align-items: center;\r\n border-bottom: 1px solid rgba(0,0,0,0.05);\r\n margin: 5px 0;\r\n .desc{\r\n margin-right: auto;\r\n h6{\r\n margin: 0;\r\n margin-bottom: 8px;\r\n }\r\n h4{\r\n margin: 0;\r\n margin-bottom: 10px\r\n }\r\n p{\r\n margin: 0;\r\n font-size: 14px;\r\n }\r\n }\r\n\r\n .price{\r\n margin-left: 10px;\r\n font-size: .9em;\r\n min-width: 90px;\r\n text-align: right;\r\n }\r\n .amount{\r\n font-size: .9em;\r\n }\r\n &:last-child{\r\n border-bottom :none;\r\n } \r\n .cart-total-amount{\r\n padding: 10px 10px;\r\n border-top: 1px solid rgba(0,0,0,.05);\r\n width: 100%;\r\n text-align: right;\r\n span{\r\n display: block;\r\n font-size: 12px;\r\n }\r\n strong{\r\n font-size: 20px;\r\n margin-top: 5px;\r\n display: block;\r\n }\r\n }\r\n`;\r\n\r\nexport const SidebarPreviewHeader = styled.div`\r\n font-size: .9em;\r\n > div:nth-child(1){\r\n display: flex;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n > div{\r\n width: 100%;\r\n padding: 10px 20px;\r\n > div{\r\n h6, h4{\r\n margin: 5px 0;\r\n //color: teal;\r\n \r\n } \r\n } \r\n }\r\n > button{\r\n border-left: 1px solid rgba(0,0,0,.5);\r\n border-radius: 0;\r\n padding-left: 18px;\r\n padding-right: 10px;\r\n opacity: .2;\r\n } \r\n }\r\n > div:nth-child(2){\r\n padding: 10px 20px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n background: rgba(0,0,0,.03);\r\n }\r\n span, strong{\r\n font-size: .9em;\r\n line-height: 1.4em;\r\n &.bullet{\r\n margin-right: 5px;\r\n font-size: 1.4em;\r\n }\r\n }\r\n strong{\r\n margin-right: 10px;\r\n }\r\n\r\n \r\n`;\r\n\r\nexport const SidebarPreviewContainer = styled.div`\r\n padding: 10px;\r\n text-align: center;\r\n background: white;\r\n margin: 20px;\r\n border: 1px solid lightgrey;\r\n min-height: 300px;\r\n\r\n img{\r\n cursor: zoom-in;\r\n }\r\n`;","//import nodemailer from 'nodemailer';\r\n//import * as React from 'react';\r\n//import {BillingDocument} from \"./BillingDocument\";\r\nimport \"./MailHTMLStyle.css\";\r\nimport { Cart } from \"../../typings/cart\";\r\nimport { ConfigurationState } from \"typings/configuration\";\r\n//import ReactPDF from '@react-pdf/renderer';\r\nimport { siteUrl, shareUrl, getLogo, GetProductLineURl } from \"../../utils/utils\";\r\n\r\nimport { getPrice, getItemPrice } from \"helpers/priceHelper\";\r\nimport { RepoState, Dictionary, Product } from \"typings/repo\";\r\nimport { getProduct } from \"state/repo\";\r\nimport { getConfigurationProducts } from \"helpers/configurationHelper\";\r\nimport { Order } from \"typings/email\";\r\nimport { getProductLine } from \"utils/utils\";\r\n\r\n\r\n//import router from 'tobedefined';\r\n\r\ninterface Props {\r\n configuration: ConfigurationState; //Order,\r\n repo: RepoState;\r\n cart: Cart;\r\n}\r\n\r\nconst getCurrency = (cur: string, repo: RepoState) => {\r\n return repo.currency.find((c) => c.currency === cur)?.format ?? \"{0}\";\r\n};\r\n\r\nexport const sendShareMail = (\r\n props: Props,\r\n email: string,\r\n sender?: string,\r\n senderEmail?: string,\r\n message?: string\r\n) => {\r\n var cart = props.cart;\r\n var trans = props.repo.translations;\r\n\r\n const sendOrderFlexSpy = {\r\n id: props.cart.id,\r\n email: \"math@flex1one.dk,mial@flex1one.dk,jnie@flex1one.dk\",\r\n html: getShareEmail(props, email, sender, senderEmail, message, true),\r\n subject: \"GEMT \" + trans.FLEXLINE,\r\n image: cart.configimg,\r\n bcc: null,\r\n };\r\n\r\n const sendOrder = {\r\n id: props.cart.id,\r\n email: senderEmail ? email + \",\" + senderEmail : email,\r\n html: getShareEmail(props, email, sender, senderEmail, message, false),\r\n subject: trans.FLEXLINE,\r\n image: cart.configimg,\r\n bcc: null,\r\n };\r\n\r\n postMail(sendOrder);\r\n postMail(sendOrderFlexSpy);\r\n};\r\n\r\nexport const sendMail = (props: Props) => {\r\n var cart = props.cart;\r\n var customer = cart.customer;\r\n var trans = props.repo.translations;\r\n\r\n const customerOrder = {\r\n id: props.cart.id,\r\n email: customer.dealerEmail ? customer.dealerEmail : customer.email,\r\n bcc: \"marketing@flex1one.dk\",\r\n html: getCustomerEmail(props),\r\n subject: trans.FLEXLINE,\r\n image: cart.configimg,\r\n };\r\n\r\n const internalOrder = {\r\n id: props.cart.id,\r\n email: \"salg@FLEX1ONE.dk\",\r\n bcc: \"marketing@flex1one.dk\",\r\n html: getInternalHtml(props),\r\n subject: trans.FLEXLINE,\r\n image: cart.configimg,\r\n };\r\n\r\n postMail(customerOrder);\r\n postMail(internalOrder);\r\n};\r\n\r\nconst postMail = (order: Order) => {\r\n fetch(`${siteUrl}/Mail/SendMail`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(order),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n if (data === \"success\") {\r\n return \"success\";\r\n }\r\n return \"error\";\r\n });\r\n return \"error0\";\r\n};\r\n\r\nconst getShareLogo = (langCode: string) => {\r\n let productLine = getProductLine();\r\n if (langCode && productLine) {\r\n return `flexline_${productLine}_logo_${langCode}.png`;\r\n }\r\n};\r\n\r\nconst getCustomerEmail = (props: Props) => {\r\n var style = \"font-family: Tahoma, Helvetica, sans-serif;\";\r\n var cart = props.cart;\r\n var customer = cart.customer;\r\n var trans = props.repo.translations;\r\n var customerName = customer.seller\r\n ? customer.seller\r\n : customer.firstname + \" \" + customer.lastname;\r\n\r\n let productLine = getProductLine();\r\n const getProductNameTrans = () => {\r\n if (productLine === \"grey\") {\r\n return trans.PRODUCT_NAME;\r\n } else if (productLine === \"hd\") {\r\n return trans.PRODUCT_NAME_HEAVY_DUTY;\r\n } else if (productLine === \"black\") {\r\n return trans.PRODUCT_NAME_BLACK;\r\n }\r\n };\r\n\r\n const getProductLinkTrans = () => {\r\n if (productLine === \"grey\") {\r\n return trans.OPEN_LINK;\r\n } else if (productLine === \"hd\") {\r\n return trans.OPEN_LINK_HD;\r\n } else if (productLine === \"black\") {\r\n return trans.OPEN_LINK_BLACK;\r\n }\r\n };\r\n\r\n const productNameTrans = getProductNameTrans();\r\n const productLinkTrans = getProductLinkTrans();\r\n\r\n const html = `\r\n
\r\n \"Configuration\r\n
\r\n

${\r\n trans.YOUR_FLEXLINE\r\n }

\r\n

${\r\n trans.REFERENCE_NR\r\n }: ${cart.id}       \r\n ${trans.DATE}: ${cart.date.getDate()}/${\r\n cart.date.getMonth() + 1\r\n }/${cart.date.getFullYear()}

\r\n
\r\n

${\r\n trans.DEAR\r\n } ${customerName}

\r\n
\r\n
\r\n

${\r\n customer.dealer ? trans.DEALER_THANKS : trans.REQUEST_THANKS\r\n }

\r\n
\r\n
\r\n

${\r\n trans.OPEN_CONFIG\r\n } ${productLinkTrans}

\r\n
\r\n
\r\n \"${productNameTrans}\r\n
\r\n`;\r\n\r\n return html;\r\n};\r\n\r\nconst getShareEmail = (\r\n props: Props,\r\n email?: string,\r\n senderName?: string,\r\n senderEmail?: string,\r\n message?: string,\r\n copy?: boolean\r\n) => {\r\n var style = \"font-family: Tahoma, Helvetica, sans-serif;\";\r\n var cart = props.cart;\r\n var customer = cart.customer;\r\n var trans = props.repo.translations;\r\n\r\n var hasSender = senderEmail !== undefined && senderEmail.length > 0;\r\n let productLine = getProductLine();\r\n const getProductNameTrans = () => {\r\n let trans = props.repo.translations;\r\n if (productLine === \"grey\") {\r\n return trans.PRODUCT_NAME;\r\n } else if (productLine === \"hd\") {\r\n return trans.PRODUCT_NAME_HEAVY_DUTY;\r\n } else if (productLine === \"black\") {\r\n return trans.PRODUCT_NAME_BLACK;\r\n }\r\n };\r\n\r\n const getProductLinkTrans = () => {\r\n if (productLine === \"grey\") {\r\n return trans.OPEN_LINK;\r\n } else if (productLine === \"hd\") {\r\n return trans.OPEN_LINK_HD;\r\n } else if (productLine === \"black\") {\r\n return trans.OPEN_LINK_BLACK;\r\n }\r\n };\r\n\r\n const productNameTrans = getProductNameTrans();\r\n const productLinkTrans = getProductLinkTrans();\r\n\r\n const html = `\r\n ${\r\n copy\r\n ? `

GEMT AF : ${senderEmail ?? email}

`\r\n : \"\"\r\n }\r\n
\r\n \"Configuration\r\n
\r\n ${\r\n !hasSender\r\n ? `

${trans.YOUR_FLEXLINE}

`\r\n : \"\"\r\n }\r\n ${\r\n hasSender\r\n ? `

${trans.SHARE_FLEXLINE_TITLE}

`\r\n : \"\"\r\n }\r\n\r\n ${\r\n !hasSender\r\n ? `
\r\n

${trans.FLEXLINE}

\r\n
`\r\n : \"\"\r\n }\r\n ${\r\n !hasSender\r\n ? `
\r\n

${trans.SHARE_THANKS}

\r\n
`\r\n : \"\"\r\n }\r\n ${\r\n hasSender\r\n ? `
\r\n

${trans.SHARE_GREET}

\r\n

${senderName} har delt en FLEXLINE konfiguration med dig.


\r\n

${message}


\r\n

${trans.SHARE_OPEN_CONFIG} ${trans.SHARE_OPEN_LINK}

\r\n

Denne konfiguration blev delt af ${senderEmail}

\r\n \r\n
`\r\n : \"\"\r\n }\r\n ${\r\n !hasSender\r\n ? `

${trans.OPEN_CONFIG} ${productLinkTrans}

`\r\n : \"\"\r\n }\r\n \r\n
\r\n \"${productNameTrans}\r\n
\r\n`;\r\n\r\n return html;\r\n};\r\n\r\nconst getInternalHtml = (props: Props) => {\r\n var style = \"font-family: Tahoma, Helvetica, sans-serif;\";\r\n var cart = props.cart;\r\n var customer = cart.customer;\r\n var trans = props.repo.translations;\r\n\r\n const html = `\r\n
\r\n \"Configuration\r\n
\r\n

${\r\n trans.YOUR_FLEXLINE\r\n }

\r\n\r\n
\r\n

Reference nr.: ${\r\n cart.id\r\n }       Dato: ${cart.date.getDate()}/${\r\n cart.date.getMonth() + 1\r\n }/${cart.date.getFullYear()}

\r\n
\r\n
\r\n

Husk at sende en ordrebekræftelse til kunden.

\r\n
\r\n\r\n

SE FLEXLINE ${GetProductLineURl()} KONFIGURATIONEN

\r\n\r\n
\r\n

Stykliste

\r\n ${itemsToHtml(props)}\r\n
\r\n\r\n
\r\n ${\r\n props.cart.customer.dealerEmail\r\n ? `\r\n
\r\n

FLEXLINE forhandler information

\r\n

${customer.dealerFirmname}

\r\n

${trans.SELLER_NAME}: ${customer.seller}

\r\n

${customer.dealerAddress}

\r\n

${customer.dealerDepartment}

\r\n

${customer.dealerZip} ${customer.dealerCity}\r\n
${customer.dealerCountry}\r\n

\r\n

${trans.EMAIL}: ${customer.dealerEmail}

\r\n

${trans.PHONE}: ${customer.dealerPhone}

\r\n

${trans.COMMENT}: ${customer.dealerComment}

\r\n\r\n

Type: ${customer.order}

\r\n
\r\n\r\n `\r\n : \"\"\r\n }\r\n\r\n
\r\n

Kundeinformation:

\r\n

${customer.firmname}

\r\n

${customer.firstname + \" \" + customer.lastname}

\r\n

${customer.address}

\r\n

${customer.zip} ${customer.city}\r\n
${customer.country}\r\n

\r\n

${trans.EMAIL}: ${customer.email}

\r\n

${trans.PHONE}: ${customer.phone}

\r\n

${trans.COMMENT}: ${customer.comment}

\r\n

${trans.DEALER}: ${customer.dealer}

\r\n
\r\n
\r\n ${\r\n customer.delivery &&\r\n `

Leveres til: ${customer.delivery}

`\r\n }\r\n\r\n\r\n`;\r\n return html;\r\n};\r\n\r\nconst itemsToHtml = (props: Props) => {\r\n var style = \"font-family: Tahoma, Helvetica, sans-serif;\";\r\n var cart = props.cart;\r\n const products = getConfigurationProducts(props.configuration, props.repo);\r\n const accessories: Dictionary = cart.accessories;\r\n const additional: Dictionary = cart.additional;\r\n let items = \"\";\r\n if (products) {\r\n items += loopThroughProductElements(\r\n products,\r\n props.repo,\r\n cart,\r\n props.repo.langCode\r\n );\r\n }\r\n if (accessories) {\r\n items += loopThroughProductElements(\r\n accessories,\r\n props.repo,\r\n cart,\r\n props.repo.langCode\r\n );\r\n }\r\n if (additional) {\r\n items += loopThroughProductElements(\r\n additional,\r\n props.repo,\r\n cart,\r\n props.repo.langCode\r\n );\r\n }\r\n\r\n return `\r\n \r\n \r\n \r\n \r\n \r\n \r\n ${items}\r\n \r\n \r\n \r\n
Varenr:Varenavn:Antal:Pris:

\r\n ${\r\n props.repo.translations.TOTAL_EX_MVA\r\n }
\r\n ${\r\n props.repo.translations.TOTAL\r\n }: ${getCurrency(cart.currency, props.repo).replace(\r\n \"{0}\",\r\n getPrice(\r\n props.configuration,\r\n props.repo,\r\n cart.currency,\r\n props.repo.langCode,\r\n cart.accessories,\r\n cart.additional\r\n )\r\n )}\r\n
`;\r\n};\r\n\r\nconst loopThroughProductElements = (\r\n dictionary: any,\r\n repo: any,\r\n cart: Cart,\r\n langCode: string\r\n) => {\r\n let items = \"\";\r\n Object.keys(dictionary).map((key, i) => {\r\n const product = getProduct(repo, key);\r\n const quantity = dictionary ? dictionary[key] : 0;\r\n if (!product) return null;\r\n if (quantity === 0) return null;\r\n items += writeSingleItem(product, cart.currency, langCode, quantity);\r\n });\r\n\r\n return items;\r\n};\r\n\r\nconst writeSingleItem = (\r\n product: Product,\r\n currency: string,\r\n langCode: string,\r\n quantity: number\r\n) => {\r\n var style =\r\n \"font-family: Tahoma, Helvetica, sans-serif; border-bottom: 1px solid black; padding: 5px 0;\";\r\n var tableStyle = style;\r\n var tableStyleRight = style + \"text-align: right; \";\r\n const item = `\r\n \r\n ${product.id}\r\n ${\r\n product.title ? product.title : \"\"\r\n }\r\n ${quantity}\r\n ${getItemPrice(\r\n product,\r\n currency,\r\n langCode,\r\n quantity\r\n )}\r\n `;\r\n\r\n return item;\r\n};\r\n\r\nconst flex1OneInformation = (trans: any, style: string) => {\r\n return `
\r\n

\r\n ${trans.INFO_FLEXONE}
\r\n ${trans.INFO_ADDRESS}
\r\n ${trans.INFO_CITY}
\r\n ${trans.INFO_PHONE}
\r\n ${trans.INFO_MAIL}

\r\n
`;\r\n};\r\n","import styled from \"styled-components\";\r\nimport { SecondaryColor } from 'global.styles';\r\n\r\nexport const StyledList = styled.div`\r\npadding-top: 10px;\r\nposition: relative;\r\nselect{\r\n padding: 10px 10px;\r\n display: block;\r\n width: 100%;\r\n outline: none;\r\n border: 1px solid #84888C;\r\n padding-right: 30px;\r\n cursor: pointer;\r\n background-clip: padding-box !important;\r\n box-shadow: none;\r\n background: white;\r\n option{\r\n font-family: 'Montserrat', sans-serif;\r\n font-size: 11px;\r\n /* prevent zoom on ios input fields*/\r\n \r\n }\r\n //prevent ios zoom\r\n @media(max-width: 769px) and (hover: none){\r\n font-size: 16px !important;\r\n }\r\n\r\n}\r\nlabel{\r\n margin-bottom: 5px; \r\n display: block; \r\n span{\r\n color: red;\r\n margin-left: 5px;\r\n }\r\n}\r\n&:after{\r\n content: \"\";\r\n width: 10px;\r\n height: 10px;\r\n display: block;\r\n position: absolute;\r\n right: 15px;\r\n top: 50%;\r\n margin-top: -5px;\r\n border-bottom: 2px solid ${SecondaryColor};\r\n border-right: 2px solid ${SecondaryColor};\r\n transform: rotate(45deg);\r\n pointer-events: none;\r\n}\r\n&:before{\r\n content: \"\";\r\n width: 24px;\r\n height: 20px;\r\n display: block;\r\n position: absolute;\r\n right: 12px;\r\n top: 50%;\r\n margin-top: -6px;\r\n background: linear-gradient(90deg, transparent 0%, white 37%);\r\n pointer-events: none;\r\n @media(hover: none){\r\n background: white;\r\n }\r\n}\r\n&.no-border{\r\n select{\r\n border: none;\r\n background: transparent;\r\n }\r\n}\r\n&.titled{\r\n &:before{\r\n top: 100%;\r\n margin-top: -28px;\r\n }\r\n &:after{\r\n top: 100%;\r\n margin-top: -28px;\r\n }\r\n}\r\n&.white{\r\n select{\r\n color: white;\r\n }\r\n select:focus{\r\n color: black;\r\n }\r\n &:after{\r\n border-bottom-color: white;\r\n border-right-color: white;\r\n }\r\n\r\n}\r\n\r\n@media(max-width: 769px){\r\n &:before{\r\n display: none;\r\n }\r\n}\r\n\r\nselect[disabled]:hover + .message{\r\n display: flex;\r\n}\r\n\r\n.message{\r\n position: absolute;\r\n bottom: 0;\r\n background: linear-gradient(180deg,rgba(255,255,255,.1) 7%,rgba(255,255,255,.95) 50%);\r\n //padding: 10px;\r\n z-index: 1;\r\n display: none;\r\n font-size: 14px;\r\n user-select: none;\r\n animation: showM .2s linear;\r\n pointer-events: none;\r\n top: 0;\r\n align-items: flex-end;\r\n width: 100%;\r\n color: red;\r\n box-sizing: border-box;\r\n} \r\n\r\n@media(max-width: 768px){\r\n .message{\r\n display: flex; \r\n padding-bottom: 10px;\r\n }\r\n}\r\n\r\n@keyframes showM{\r\n 0%{\r\n opacity: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n }\r\n}\r\n`;","import * as React from \"react\";\r\nimport { StyledList } from \"./DropDown.style\";\r\n\r\nexport interface Option{\r\n text: string;\r\n value: string;\r\n}\r\n\r\ninterface Props{\r\n className?: string;\r\n title?: string;\r\n options? : Option[];\r\n selected?: string;\r\n id?: string;\r\n selector?: string;\r\n disabled?: boolean;\r\n message?: string;\r\n required?: boolean;\r\n onChange?: (e:string) => void;\r\n}\r\n\r\n\r\n\r\n\r\nconst DropDown = (props:Props) =>\r\n{\r\n const selectRef = React.createRef();\r\n const change = (e:React.SyntheticEvent) =>\r\n {\r\n if(props.onChange)\r\n {\r\n props.onChange(e.currentTarget.value);\r\n } \r\n }\r\n\r\n React.useEffect(() =>{\r\n if(props.selected && selectRef.current)\r\n {\r\n if(props.options)\r\n { \r\n if(props.selector) \r\n {\r\n let i = 0;\r\n props.options.map((x, index) => { if(x.value === props.selected){ i = index } return null;});\r\n selectRef.current.selectedIndex = i + 1;\r\n }\r\n else\r\n {\r\n let i = 0;\r\n props.options.map((x, index) => { if(x.value === props.selected){ i = index } return null;});\r\n selectRef.current.selectedIndex = i; \r\n }\r\n }\r\n }\r\n },[props.selected, props.options, selectRef]);\r\n const preventIosScrollJump = (e:React.FocusEvent) =>\r\n {\r\n if (matchMedia('(hover:none) and (orientation:portrait)').matches) {\r\n window?.scrollTo(0,0);\r\n document.querySelector(\".sidebar\")?.scrollTo(0,0) \r\n }\r\n }\r\n return (\r\n \r\n {props.title ? : null} \r\n \r\n {props.disabled ?
{props.message}
: null}\r\n
\r\n )\r\n} \r\n\r\n\r\nexport default DropDown;","import styled from \"styled-components\";\r\n\r\n\r\nexport const StyledText = styled.div`\r\nposition: relative;\r\npadding-top: 20px;\r\nlabel{\r\n position: absolute;\r\n left: 0;\r\n pointer-events: none;\r\n top: 50%;\r\n margin-top: 3px;\r\n margin-left: 10px;\r\n transition: all .1s linear;\r\n user-select: none;\r\n font-size: 14px;\r\n &.changed{\r\n top: 10%;\r\n margin-top: 0;\r\n font-size: 10px;\r\n }\r\n span{\r\n color: red;\r\n }\r\n\r\n &.required{\r\n color: red; \r\n }\r\n}\r\n\r\ninput{\r\n width: 100%;\r\n box-sizing: border-box;\r\n outline: none;\r\n &:focus{\r\n & + label{\r\n top: 10%;\r\n margin-top: 0;\r\n font-size: 10px;\r\n }\r\n }\r\n &[type=number]{\r\n padding: 10px 10px;\r\n border: 1px solid #84888C;\r\n }\r\n /* prevent zoom on ios input fields*/\r\n @media(max-width: 769px) and (hover: none){\r\n font-size: 16px !important;\r\n }\r\n \r\n}\r\n\r\n&.error input{\r\n border-color: red;\r\n}\r\n`;","import * as React from \"react\";\r\nimport { StyledText } from './Textfield.style';\r\n\r\ninterface Props{\r\n title?: string;\r\n value? : string;\r\n required?: boolean;\r\n type?: string;\r\n min?: number;\r\n pattern?: string;\r\n errorMessage?: string;\r\n id?: string;\r\n onChange?: (e:string) => void;\r\n}\r\n\r\nconst TextField = (props:Props) =>\r\n{\r\n const [changed, updateChange] = React.useState(props.value ? true : false);\r\n\r\n const changeInput = (e:React.SyntheticEvent) =>\r\n {\r\n if(e.currentTarget.value.length > 0)\r\n {\r\n updateChange(true);\r\n }\r\n else\r\n {\r\n updateChange(false);\r\n }\r\n if(props.onChange)\r\n {\r\n props.onChange(e.currentTarget.value);\r\n }\r\n }\r\n \r\n const getPattern = () =>\r\n {\r\n if(props.pattern)\r\n {\r\n return props.pattern;\r\n }\r\n switch(props.type)\r\n {\r\n case \"email\": \r\n return \"[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$\";\r\n }\r\n }\r\n const preventIosScrollJump = (e:React.FocusEvent) =>\r\n {\r\n if (matchMedia('(hover:none) and (orientation:portrait)').matches) {\r\n window?.scrollTo(0,0);\r\n document.querySelector(\".sidebar\")?.scrollTo(0,0)\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default TextField;","import styled from \"styled-components\";\r\nimport { PrimaryColor } from 'global.styles';\r\n\r\nexport const StyledCheckbox = styled.div`\r\nmargin-top: 10px;\r\ninput{\r\n margin: 0;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n position: relative;\r\n &:after{\r\n content: \"\";\r\n display: block;\r\n width: 20px;\r\n height: 20px;\r\n background: white;\r\n border: 1px solid black;\r\n pointer-events: none;\r\n }\r\n \r\n &:checked{\r\n &:before{\r\n content: \"\";\r\n width: 5px;\r\n height: 11px;\r\n display: block;\r\n position: absolute;\r\n border-right: 3px solid ${PrimaryColor};\r\n border-bottom: 3px solid ${PrimaryColor};\r\n transform: ;\r\n margin-left: 7px;\r\n margin-top: 3px;\r\n animation: .3s showMark both;\r\n\r\n }\r\n &:after{\r\n //background: teal;\r\n }\r\n }\r\n}\r\n\r\nspan{\r\n color: red;\r\n}\r\n\r\nlabel{\r\n display: block;\r\n padding-left: 33px;\r\n margin-top: -23px;\r\n font-size: 14px;\r\n line-height: 18px;\r\n}\r\n@keyframes showMark{\r\n 0%{\r\n transform: scale(0) rotate(25deg);\r\n }\r\n 100%{\r\n transform: scale(1) rotate(45deg);\r\n }\r\n}\r\n`;","import * as React from \"react\";\r\nimport {StyledCheckbox } from \"./Checkbox.style\";\r\ninterface Props{\r\n\r\n checked?: boolean; \r\n required?: boolean;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst Checkbox:React.FC = (props) =>\r\n{\r\n\r\n const [checked, updateChecked] = React.useState(props.checked ? props.checked : false);\r\n\r\n\r\n return \r\n updateChecked(!checked)} />\r\n \r\n \r\n}\r\n\r\n\r\nexport default Checkbox;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\ninterface Props{\r\n\r\n columns?: number;\r\n padding?: string;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst StyledRow = styled.div`\r\n display: flex; \r\n border: none !important;\r\n &.columns--2{\r\n > *:first-child{\r\n margin-right: 4px;\r\n width: 100%;\r\n }\r\n > *:last-child{\r\n margin-left: 4px;\r\n width: 100%;\r\n }\r\n }\r\n &.columns--3{\r\n > *:first-child{\r\n margin-right: 2px;\r\n }\r\n > *:nth-child(2){\r\n margin-left: 2px;\r\n margin-right: 2px;\r\n }\r\n > *:last-child{\r\n margin-left: 2px;\r\n }\r\n }\r\n\r\n &.no-padding > div{\r\n padding: 0;\r\n width: 100%;\r\n }\r\n &.centered{\r\n justify-content: center;\r\n }\r\n &.small-margin{\r\n margin-top: 20px;\r\n }\r\n`;\r\n\r\nconst Row:React.FC = (props) =>\r\n{\r\n return \r\n {props.children}\r\n \r\n ;\r\n}\r\n\r\nexport default Row;","\r\n\r\nexport const updateUser = (value:string, field:string) => {\r\n return {\r\n type: \"UPDATE_USER\",\r\n payload: {value, field}\r\n }\r\n}\r\n\r\n\r\nexport const clearCartUser = () =>\r\n{\r\n return {\r\n type: \"CLEAR_USER\"\r\n } \r\n}","import * as React from \"react\";\r\nimport Panel from \"../Panel\";\r\nimport Toggle from \"components/elements/Toggle\";\r\nimport Radio from \"components/elements/Radio\";\r\nimport DropDown from \"components/elements/DropDown\";\r\nimport TextField from \"components/elements/TextField\";\r\nimport Checkbox from \"components/elements/Checkbox\";\r\nimport Tabs from \"components/layout/Sidebar/Tabs\";\r\nimport Row from \"components/layout/Sidebar/Row\";\r\nimport { updateUser } from \"state/user/actions\";\r\nimport { TrackEvent } from \"helpers/Tracking\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { Tokens } from 'typings/translation';\r\nimport { Dealer, Dictionary } from 'typings/repo';\r\nimport { UserState } from 'state/user';\r\nimport { PAGES } from 'typings/cart';\r\nimport {Option} from 'components/elements/DropDown';\r\ninterface Props\r\n{\r\n tokens: Tokens;\r\n dealers: Dealer[]\r\n countries: Dictionary;\r\n user: UserState;\r\n langCode: string;\r\n formSuccess: boolean;\r\n panel: number;\r\n total: number;\r\n activeMenuTab: number;\r\n cartForm: React.RefObject;\r\n updateMenuTab: (id: number) => void;\r\n updatePage: (id: number, page: PAGES) => void;\r\n previousTab: () => void;\r\n nextTab: () => void;\r\n checkOut: () => void;\r\n}\r\n\r\nconst SidebarCart: React.FC = (props) =>\r\n{\r\n const [flexlineuser, updateFlexline] = React.useState(false);\r\n const [flexlineuserCustomer, updateFlexlineCustomer] = React.useState(false);\r\n const [flexlineuserCustomer2, updateFlexlineCustomer2] = React.useState(false);\r\n const [dealerChosen, setChosenDealer] = React.useState(false);\r\n const dispatch = useDispatch();\r\n\r\n const sortCountries = () =>\r\n {\r\n return Object.keys(props.countries).sort((a, b) => new Intl.Collator(\"da\").compare(props.countries[a], props.countries[b]));\r\n }\r\n /* TODO, get countrycode form updated repo that has country codes*/\r\n const countryMatch = [{\r\n countryCode: \"DK\",\r\n country: \"Denmark\"\r\n },\r\n {\r\n countryCode: \"N\",\r\n country: \"Norway\"\r\n },\r\n {\r\n countryCode: \"SE\",\r\n country: \"Sweden\"\r\n },\r\n {\r\n countryCode: \"IS\",\r\n country: \"Iceland\"\r\n },\r\n {\r\n countryCode: \"NL\",\r\n country: \"Netherlands\"\r\n },\r\n {\r\n countryCode: \"BE\",\r\n country: \"Belgium\"\r\n },\r\n {\r\n countryCode: \"LU\",\r\n country: \"Luxembourg\"\r\n },\r\n {\r\n countryCode: \"DE\",\r\n country: \"Germany\"\r\n },\r\n {\r\n countryCode: \"EE\",\r\n country: \"Estonia\"\r\n }];\r\n\r\n const renderFlexlineUser = () =>\r\n {\r\n const {dealerFirmname, dealerDepartment, seller, dealerEmail, dealerPhone, dealerAddress, dealerZip, dealerCity} = props.user;\r\n\r\n return (\r\n
\r\n {renderFlexlineUserTrigger()}\r\n
\r\n {props.tokens.DEALER_INFORMATION}\r\n dispatch(updateUser(e, \"dealerFirmname\"))} value={dealerFirmname}/>\r\n dispatch(updateUser(e, \"dealerDepartment\"))} value={dealerDepartment}/>\r\n dispatch(updateUser(e, \"seller\"))} value={seller}/>\r\n \r\n dispatch(updateUser(e, \"dealerEmail\"))} value={dealerEmail}/>\r\n dispatch(updateUser(e, \"dealerPhone\"))} value={dealerPhone}/>\r\n \r\n dispatch(updateUser(e, \"dealerAddress\"))} value={dealerAddress}/>\r\n \r\n dispatch(updateUser(e, \"dealerZip\"))} value={dealerZip}/>\r\n dispatch(updateUser(e, \"dealerCity\"))} value={dealerCity}/>\r\n \r\n { dispatch(updateUser(e, \"dealerCountry\"))}\r\n //options={Object.keys(state.repo.countries).sort().map(c => ({ text: state.repo.countries[c], value: state.repo.countries[c] }))} />}\r\n required={true}\r\n selector={props.tokens.CHOOSE_COUNTRY}\r\n options={sortCountries().map(c => ({ text: props.countries[c], value: c }))} />}\r\n dispatch(updateUser(e, \"dealerComment\"))} />\r\n
\r\n\r\n dispatch(updateUser(e, \"order\"))}>\r\n
\r\n

{props.tokens.DEALER_SALE}

\r\n
\r\n
\r\n {dispatch(updateUser(e, \"order\"))}}>\r\n
\r\n

{props.tokens.DEALER_ORDER}

\r\n
\r\n
\r\n
\r\n *{props.tokens.DEALER_ADDRESS}

\r\n { dispatch(updateUser(e, \"delivery\")); updateFlexlineCustomer2(false) }}>\r\n
\r\n

{props.tokens.DEALER_DELIVERY}

\r\n
\r\n
\r\n { dispatch(updateUser(e, \"delivery\")); updateFlexlineCustomer2(true) }}>\r\n
\r\n

{props.tokens.CUSTOMER_DELIVERY}

\r\n
\r\n
\r\n {/*props.dealers?.length !== 0 ? dispatch(updateUser(e, \"dealer\"))}\r\n options={props.dealers.map(e => { return { text: e.name, value: e.name } })} /> : null*/}\r\n
\r\n
\r\n\r\n \r\n { updateFlexlineCustomer(!flexlineuserCustomer); TrackEvent(\"CART\", \"flexline-partner-customer\", (!flexlineuserCustomer).toString()); }} title={props.tokens.CUSTOMER_INFORMATIONS} />\r\n \r\n {renderDealerCustomerInformation()}\r\n
\r\n );\r\n }\r\n\r\n const renderDealerCustomerInformation = () =>\r\n {\r\n if (flexlineuserCustomer || flexlineuserCustomer2)\r\n {\r\n return (\r\n
\r\n {renderUserInformation()}\r\n
\r\n );\r\n }\r\n }\r\n\r\n const renderDealerDropdown = () =>\r\n {\r\n if (props.dealers && props.dealers.length > 1)\r\n {\r\n const dealers:Option[] = [];\r\n const current = countryMatch.filter(x => x.country === props.user.country);\r\n const currentCountryCode = current.length > 0 ? current[0].countryCode : \"\";\r\n props.dealers.filter(x => x.country === currentCountryCode).map((e) => {\r\n dealers.push({ text: e.name, value: e.name });\r\n })\r\n if(dealers.length === 0)\r\n {\r\n const DEFAULT_DEALER = props.dealers.filter(x => x.country === \"DEFAULT\");\r\n if(DEFAULT_DEALER)\r\n {\r\n dealers.push({text: DEFAULT_DEALER[0].name, value: DEFAULT_DEALER[0].name})\r\n }\r\n }\r\n return (\r\n {dispatch(updateUser(e, \"dealer\")); setChosenDealer(true); }}\r\n options={dealers.map(e => {\r\n return { text: e.text, value: e.value }\r\n })} />\r\n );\r\n }\r\n }\r\n\r\n const renderUserInformation = () =>\r\n { const { firmname, firstname, lastname, email, phone, address, zip, city, comment } = props.user;\r\n\r\n return (\r\n
\r\n dispatch(updateUser(e, \"firmname\"))} value={firmname} />\r\n \r\n dispatch(updateUser(e, \"firstname\"))}\r\n errorMessage={\"Please enter valid text\"} value={firstname} />\r\n dispatch(updateUser(e, \"lastname\"))} value={lastname} />\r\n \r\n \r\n dispatch(updateUser(e, \"email\"))} value={email} />\r\n dispatch(updateUser(e, \"phone\"))} value={phone} />\r\n \r\n dispatch(updateUser(e, \"address\"))} value={address} />\r\n \r\n dispatch(updateUser(e, \"zip\"))} value={zip} />\r\n dispatch(updateUser(e, \"city\"))} value={city} />\r\n \r\n dispatch(updateUser(e, \"comment\"))} value={comment} />\r\n {dispatch(updateUser(e, \"country\")); setChosenDealer(false);}}\r\n options={sortCountries().map(c => ({ text: props.countries[c], value: c }))} />\r\n
\r\n );\r\n }\r\n\r\n const renderDefaultUser = () =>\r\n {\r\n return (\r\n
\r\n {renderUserInformation()}\r\n {renderDealerDropdown()}\r\n
\r\n {renderFlexlineUserTrigger()}\r\n
\r\n );\r\n }\r\n\r\n const renderFlexlineUserTrigger = () =>\r\n {\r\n return (\r\n \r\n { updateFlexline(!flexlineuser); \r\n TrackEvent(\"CART\", \"flexline-partner\", (!flexlineuser).toString()); \r\n document.querySelector(\".panel.active .panel__content\")?.scrollTo(0,50);\r\n }} title={props.tokens.FLEXLINE_PARTNER} />\r\n \r\n );\r\n }\r\n\r\n const renderCartUserInformation = () =>\r\n {\r\n if (flexlineuser)\r\n {\r\n return renderFlexlineUser();\r\n }\r\n return renderDefaultUser();\r\n }\r\n\r\n return (\r\n
\r\n props.updatePage(4, \"CART\")} padding={0}>\r\n\r\n props.updateMenuTab(e)} current={props.activeMenuTab} items={[props.tokens.BASKET, props.tokens.BASKET_CONTENT_MOBILE]} />\r\n {!props.formSuccess ?\r\n
\r\n
false} ref={props.cartForm}>\r\n

{props.tokens.BASKET_CONTENT}

\r\n {renderCartUserInformation()}\r\n
\r\n \r\n {props.panel === 4 ? <>
\r\n
{props.checkOut(); return false;}}>{!props.formSuccess ? props.tokens.CHECKOUT : \"\"}
: null}\r\n\r\n
\r\n
:

{dealerChosen ? props.tokens.DEALER_THANKS : props.tokens.REQUEST_THANKS}

}\r\n\r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default SidebarCart;","import * as React from \"react\";\r\nimport { CartItemHeader, CartItemStyle } from \"../Product.style\";\r\nimport Content from \"../Content\";\r\nimport { getConfigurationProducts } from \"helpers/configurationHelper\";\r\nimport { Tokens } from \"typings/translation\";\r\nimport { getImage } from \"utils/utils\";\r\nimport {\r\n getItemsCount,\r\n getCurrency,\r\n getPrice,\r\n getItemPrice,\r\n} from \"helpers/priceHelper\";\r\nimport { getProduct } from \"state/repo\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { showPreview } from \"state/cart/actions\";\r\nimport { CartState } from \"state/cart\";\r\nimport { RepoState, Size, Dictionary, Product } from \"typings/repo\";\r\nimport { ConfigurationState } from \"typings/configuration\";\r\n\r\ninterface Props {\r\n cart: CartState;\r\n repo: RepoState;\r\n configuration: ConfigurationState;\r\n activeTab: number;\r\n activeMenuTab: number;\r\n tokens: Tokens;\r\n togglePageContent: string;\r\n size: Size;\r\n}\r\n\r\nconst CartPage: React.FC = (props) => {\r\n const {\r\n tokens,\r\n cart,\r\n configuration,\r\n repo,\r\n activeTab,\r\n activeMenuTab,\r\n togglePageContent,\r\n size,\r\n } = props;\r\n const products = getConfigurationProducts(configuration, repo);\r\n const dispatch = useDispatch();\r\n const [partslist, togglePartsList] = React.useState(false);\r\n const renderImage = () => {\r\n const imgString = `data:image/png;base64, ${cart.configimg}`;\r\n return (\r\n \r\n );\r\n };\r\n\r\n const renderTotalPrice = () => {\r\n return (\r\n \r\n
\r\n {tokens.TOTAL_EX_MVA}\r\n \r\n {getCurrency(cart.currency, repo).replace(\r\n \"{0}\",\r\n getPrice(\r\n configuration,\r\n repo,\r\n cart.currency,\r\n repo.langCode,\r\n cart.accessories,\r\n cart.additional\r\n )\r\n )}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n const buildCartItem = (\r\n product: Product,\r\n price: string,\r\n amount: number,\r\n keyPrefix: string,\r\n key: string\r\n ) => {\r\n if (product) {\r\n return (\r\n \r\n \r\n dispatch(showPreview(getImage(product.imageUrl, \"MEDIUM\")))\r\n }\r\n />\r\n
\r\n
{product.id}
\r\n

{product.title}

\r\n \r\n {}\r\n

\r\n
\r\n
{amount}
\r\n
{price}
\r\n
\r\n );\r\n }\r\n };\r\n\r\n const renderCartLines = (\r\n keyPrefix: string,\r\n elements?: Dictionary\r\n ) => {\r\n if (elements) {\r\n const productArray = Object.keys(elements).map((key) => {\r\n const product = getProduct(repo, key);\r\n if (product && products[key] !== 0) {\r\n const amount = elements[key];\r\n const price = getItemPrice(\r\n product,\r\n cart.currency,\r\n repo.langCode,\r\n amount\r\n );\r\n return { product, key, price, amount };\r\n }\r\n return null;\r\n });\r\n\r\n // Sort the array alphabetic based on product.title\r\n productArray.sort((a, b) => {\r\n if (a && b && a.product.id && b.product.id) {\r\n const idA = a.product.id.toLowerCase();\r\n const idB = b.product.id.toLowerCase();\r\n if (idA < idB) return -1;\r\n if (idA > idB) return 1;\r\n return 0;\r\n }\r\n return 0;\r\n });\r\n\r\n // Mapping sorted array\r\n return (\r\n
\r\n {productArray.map((item) => {\r\n if (item) {\r\n return buildCartItem(\r\n item.product,\r\n item.price,\r\n item.amount,\r\n keyPrefix,\r\n item.key\r\n );\r\n }\r\n return null;\r\n })}\r\n
\r\n );\r\n }\r\n };\r\n\r\n const renderCartPage = () => {\r\n if (cart.page === \"CART\" && togglePageContent !== \"CART\") {\r\n return (\r\n \r\n {renderImage()}\r\n {tokens.YOUR_CONFIGURATION}\r\n togglePartsList(!partslist)}\r\n >\r\n \r\n {partslist ? tokens.HIDE_PARTS_LIST : tokens.SHOW_PARTS_LIST}\r\n \r\n \r\n {partslist ? renderCartLines(\"a\", products) : null}\r\n {cart.accessories && Object.keys(cart.accessories).length > 0 ? (\r\n {tokens.ACCESSORIES}\r\n ) : null}\r\n {renderCartLines(\"b\", cart.accessories)}\r\n {cart.additional && Object.keys(cart.additional).length > 0 ? (\r\n {tokens.ADDITIONAL}\r\n ) : null}\r\n {renderCartLines(\"c\", cart.additional)}\r\n {renderTotalPrice()}\r\n \r\n );\r\n }\r\n };\r\n\r\n return <>{renderCartPage()};\r\n};\r\n\r\nexport default CartPage;\r\n","import React, { useEffect } from \"react\";\r\nimport IconButton from 'components/elements/IconButton';\r\n\r\ninterface Props\r\n{\r\n warningMessage: string;\r\n condition: boolean;\r\n}\r\n\r\nconst Warning : React.FC = (props) =>\r\n{\r\n const [shouldShow, setShouldShow] = React.useState(false);\r\n\r\n useEffect(() => {\r\n if (!shouldShow && props.condition)\r\n {\r\n setShouldShow(true)\r\n }\r\n },[props.condition]);\r\n\r\n const renderWarning = () =>\r\n {\r\n if (shouldShow)\r\n {\r\n return (
\r\n

{props.warningMessage}

\r\n setShouldShow(false)} className=\"close\" icon=\"close\" />\r\n
);\r\n }\r\n return null;\r\n }\r\n\r\n return renderWarning();\r\n}\r\n\r\nexport default Warning;","import * as React from \"react\";\r\nimport Panel from \"./Panel\";\r\nimport Slider from \"components/elements/Slider\";\r\nimport Toggle from \"components/elements/Toggle\";\r\nimport Radio from \"components/elements/Radio\";\r\nimport Button from \"components/elements/Button\";\r\nimport Stepper from \"components/elements/Stepper\";\r\nimport Content from \"./Content\";\r\nimport Tabs from \"./Tabs\";\r\nimport Search from \"../Controls/Search\";\r\nimport IconButton from \"components/elements/IconButton\";\r\nimport { StyledSidebarNav, StyledSidebar, HideContent } from \"./Sidebar.style\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { RootState } from \"state/state\";\r\nimport { PAGES, Cart } from \"typings/cart\";\r\nimport {\r\n changePage,\r\n showPreview,\r\n showSidebarPreview,\r\n closeSidebarPreview,\r\n updateCartAccessory,\r\n updateCartAdditional,\r\n changePageHideNotification,\r\n changeModuleHideNotification,\r\n setCamera,\r\n addCartImage,\r\n closePreview,\r\n updateSidebarPreview,\r\n} from \"state/cart/actions\";\r\nimport { SidebarPreviewContainer, SidebarPreviewHeader } from \"./Product.style\";\r\nimport { getStep3, getStep4 } from \"services/repo\";\r\nimport { getImage, isMobile } from \"utils/utils\";\r\nimport Details from \"./Details\";\r\nimport { Product, RepoState } from \"typings/repo\";\r\nimport { getProduct, Material, searchProduct } from \"state/repo\";\r\nimport {\r\n setAllParts,\r\n selectModule,\r\n setConfiguration,\r\n} from \"state/configuration/actions\";\r\nimport { getItemPrice } from \"helpers/priceHelper\";\r\nimport {\r\n getConfigurationProducts,\r\n getSize,\r\n changeModuleSize,\r\n getCustomSize,\r\n allowAllTableTops,\r\n} from \"helpers/configurationHelper\";\r\nimport { TrackEvent } from \"helpers/Tracking\";\r\nimport { sendMail } from \"components/billing/CheckoutMail\";\r\nimport { api } from \"api/Api\";\r\nimport SidebarCart from \"./components/SidebarCart\";\r\nimport CartPage from \"./components/CartPage\";\r\nimport Warning from \"./components/Warning\";\r\nimport { clearCartUser } from \"state/user/actions\";\r\nimport { Module } from \"typings/configuration\";\r\nimport { getProductLine } from \"utils/utils\";\r\n\r\ninterface Props {\r\n setMobile?: (e: boolean) => void;\r\n toggle?: boolean;\r\n}\r\n\r\nconst Sidebar = (props: Props) => {\r\n const state = useSelector((state: RootState) => state);\r\n const configuration = state.configuration;\r\n const tokens = state.repo.translations;\r\n const [panel, updatePanel] = React.useState(0);\r\n const total = 4;\r\n const [accessoriesSearch, setAccessoriesSearch] = React.useState(\"\");\r\n const [additionalSearch, setAdditionalSearch] = React.useState(\"\");\r\n const [activeTab, updateTab] = React.useState(0);\r\n\r\n const [activeMenuTab, updateMenuTab] = React.useState(0);\r\n\r\n const [isWidthOverConstraint, setIsWidthOverConstraint] =\r\n React.useState(false);\r\n\r\n const [currentAccessory, updateAccessory] = React.useState(\"handingHooks\");\r\n const getAccessories = getStep3(state.repo);\r\n const [currentAdditional, updateAdditional] = React.useState(\"workshopCarts\");\r\n const getAdditional = getStep4(state.repo);\r\n const dispatch = useDispatch();\r\n const dealers = state.repo.dealers;\r\n const hasPanels = configuration.defaultPanels;\r\n const hasCupboards = configuration.defaultCupboards;\r\n const hasLighting = configuration.defaultLights;\r\n const allowLifter =\r\n state.repo.project === \"black\" ||\r\n (state.repo.project == \"grey\" && !state.configuration.corner);\r\n const hasLifter = configuration.defaultLifter;\r\n const lifter = state.repo.basemodules.find((x) => x.isLifter);\r\n\r\n const products = getConfigurationProducts(state.configuration, state.repo);\r\n const pages = [\"SIZES\", \"MODULES\", \"ACCESSORIES\", \"ADDITIONAL\", \"CART\"];\r\n const [togglePageContent, updateToggleContent] = React.useState(\"\");\r\n const cartForm = React.createRef();\r\n const size = getSize(configuration, state.repo);\r\n const customSize = getCustomSize(configuration, state.repo);\r\n const [formSuccess, updateFormSuccess] = React.useState(false);\r\n const preview = state.cart.sidebar_preview;\r\n const productLine = getProductLine();\r\n\r\n React.useEffect(() => {\r\n if (configuration.selected) {\r\n updatePanel(1);\r\n }\r\n\r\n if (props.setMobile) {\r\n panel === -1 ? props.setMobile(true) : props.setMobile(false);\r\n }\r\n }, [configuration.selected, panel, props]);\r\n\r\n const previousTab = () => {\r\n if (panel > 0) {\r\n const pageId = panel - 1;\r\n const pageName: PAGES = pages[pageId] as PAGES;\r\n updatePanel(pageId);\r\n updatePage(pageId, pageName);\r\n TrackEvent(\"STEP\", \"previous\", pageName);\r\n }\r\n updateFormSuccess(false);\r\n };\r\n\r\n const nextTab = () => {\r\n if (panel < total) {\r\n const pageId = panel + 1;\r\n const pageName: PAGES = pages[pageId] as PAGES;\r\n updatePanel(pageId);\r\n updatePage(pageId, pageName);\r\n TrackEvent(\"STEP\", \"next\", pageName);\r\n }\r\n updateFormSuccess(false);\r\n };\r\n\r\n const setPanel = (id: number) => {\r\n if (panel === id) {\r\n updatePanel(-1);\r\n } else {\r\n updatePanel(id);\r\n }\r\n };\r\n\r\n const updatePage = (id: number, page: PAGES) => {\r\n if (\r\n id === panel &&\r\n (page === \"ACCESSORIES\" || page === \"ADDITIONAL\" || page === \"CART\") &&\r\n !isMobile()\r\n ) {\r\n if (togglePageContent === page) {\r\n updateToggleContent(\"\");\r\n } else {\r\n updateToggleContent(page);\r\n }\r\n } else {\r\n setPanel(id);\r\n updateToggleContent(\"\");\r\n }\r\n\r\n if (state.cart.page === \"MODULES\" && !state.cart.notified) {\r\n dispatch(changePageHideNotification(page));\r\n } else if (state.cart.page === \"MODULES\" && state.cart.notified_module) {\r\n dispatch(changeModuleHideNotification(page));\r\n } else {\r\n dispatch(changePage(page));\r\n }\r\n if (state.configuration.selected) {\r\n dispatch(selectModule(undefined));\r\n }\r\n if (preview) {\r\n dispatch(closeSidebarPreview());\r\n }\r\n TrackEvent(\"STEP\", \"tab\", page.toString());\r\n updateTab(0);\r\n updateMenuTab(0);\r\n updateFormSuccess(false);\r\n };\r\n\r\n const togglePanels = (repo: RepoState, set: boolean) => {\r\n dispatch(\r\n setAllParts(\r\n \"PANEL\",\r\n set ? repo.toolboards.find((t) => !t.isCorner)?.id : undefined,\r\n set ? repo.toolboards.find((t) => t.isCorner)?.id : undefined\r\n )\r\n );\r\n };\r\n\r\n const toggleCupboards = (repo: RepoState, set: boolean) => {\r\n dispatch(\r\n setAllParts(\r\n \"CUPBOARD\",\r\n set ? repo.cupboards.find((t) => !t.isCorner)?.id : undefined,\r\n set ? repo.cupboards.find((t) => t.isCorner)?.id : undefined\r\n )\r\n );\r\n };\r\n\r\n const toggleLighting = (repo: RepoState, set: boolean) => {\r\n dispatch(\r\n setAllParts(\"LIGHT\", set ? \"TRUE\" : undefined, set ? \"TRUE\" : undefined)\r\n );\r\n };\r\n\r\n const toggleLifter = (repo: RepoState, set: boolean) => {\r\n var lifterModel = repo.basemodules.find((x) => x.isLifter)?.id;\r\n dispatch(\r\n setAllParts(\"LIFTER\", set ? \"TRUE\" : undefined, set ? \"TRUE\" : undefined)\r\n );\r\n dispatch(\r\n setAllParts(\r\n \"LIFTERMODEL\",\r\n set ? lifterModel : undefined,\r\n set ? lifterModel : undefined\r\n )\r\n );\r\n };\r\n\r\n const checkOut = async () => {\r\n if (cartForm.current?.checkValidity()) {\r\n TrackEvent(\"CART\", \"checkout\", \"success\");\r\n let storageId = await api.configurationApi.saveConfiguration({\r\n project: state.repo.project,\r\n configuration: state.configuration,\r\n accessories: state.cart.accessories,\r\n additional: state.cart.additional,\r\n });\r\n const cartOrder: Cart = {\r\n id: storageId,\r\n customer: { ...state.user },\r\n date: new Date(),\r\n configimg: state.cart.configimg,\r\n currency: state.cart.currency,\r\n language: state.repo.langCode,\r\n additional: state.cart.additional,\r\n accessories: state.cart.accessories,\r\n };\r\n sendMail({\r\n configuration: state.configuration,\r\n repo: state.repo,\r\n cart: cartOrder,\r\n });\r\n updateFormSuccess(true);\r\n dispatch(clearCartUser());\r\n //dispatch(addCartImage(\"\"));\r\n } else {\r\n cartForm.current?.reportValidity();\r\n }\r\n };\r\n\r\n const checkSize = () => {\r\n if (state.cart.constraint && isWidthOverConstraint) {\r\n const size = getSize(state.configuration, state.repo);\r\n const condition = size.width > state.cart.constraint.width;\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n React.useEffect(() => {\r\n if (size.width && state.cart.constraint && state.cart.constraint.width) {\r\n if (size.width > state.cart.constraint.width) {\r\n setIsWidthOverConstraint(true);\r\n } else {\r\n setIsWidthOverConstraint(false);\r\n }\r\n }\r\n }, [size.width]);\r\n\r\n React.useEffect(() => {\r\n if (preview) {\r\n if (state.cart.productType === \"ACCESSORIES\") {\r\n const product = getAccessories\r\n .map((x) => x.items.filter((y) => y.id === preview.id))\r\n .flat();\r\n if (product.length > 0) {\r\n dispatch(updateSidebarPreview(product[0]));\r\n }\r\n }\r\n if (state.cart.productType === \"ADDITIONAL\") {\r\n const product = getAdditional\r\n .map((x) => x.items.filter((y) => y.id === preview.id))\r\n .flat();\r\n if (product.length > 0) {\r\n dispatch(updateSidebarPreview(product[0]));\r\n }\r\n }\r\n }\r\n }, [state.repo.langCode]);\r\n\r\n const changeSize = (left: number, corner: boolean, right: number) => {\r\n dispatch(changeModuleSize(state.repo, configuration, left, corner, right));\r\n dispatch(setCamera(state.configuration.corner ? \"OVERVIEW\" : \"LEFT\"));\r\n };\r\n\r\n const getTableTopImage = (\r\n material: Material,\r\n format: \"THUMBNAIL\" | \"LARGE\"\r\n ) => {\r\n const type = material.toString();\r\n return getImage(\r\n state.repo.tabletop.filter((x) => x.material === type)[0]?.imageUrl,\r\n format\r\n );\r\n };\r\n\r\n const getTableTopText = (material: Material) => {\r\n const type = material.toString();\r\n return state.repo.tabletop.filter((x) => x.material === type)[0]?.subtitle;\r\n };\r\n const modulesLength = (repo: RepoState, modules: Module[]) => {\r\n if (modules.length <= 1) return modules.length;\r\n return modules\r\n .map((m) =>\r\n repo.basecabinets.find((c) => c.id === m.cabinet)?.isDouble\r\n ? 2\r\n : (1 as number)\r\n )\r\n .reduce((a, b) => a + b);\r\n };\r\n\r\n const disabledLifter = (): boolean => {\r\n if (\r\n state.configuration.left.find(\r\n (x) => x.panel == \"0144-WGB1324K\" || x.panel == \"0147-WGB1324K-B\"\r\n )\r\n ) {\r\n return true;\r\n }\r\n if (\r\n state.configuration.right.find(\r\n (x) => x.panel == \"0144-WGB1324K\" || x.panel == \"0147-WGB1324K-B\"\r\n )\r\n ) {\r\n return true;\r\n }\r\n if (\r\n state.configuration.left.find(\r\n (x) => x.cabinet == \"0244-TSB1300\"\r\n )\r\n ) {\r\n return true;\r\n }\r\n if (\r\n state.configuration.right.find(\r\n (x) => x.cabinet == \"0244-TSB1300\"\r\n )\r\n ) {\r\n return true;\r\n }\r\n if (state.configuration.corner) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const previewUpdate = (id: string, count: number) => {\r\n const product = getProduct(state.repo, id);\r\n if (product) {\r\n switch (state.cart.productType) {\r\n case \"ACCESSORIES\":\r\n dispatch(updateCartAccessory(product.id, count));\r\n break;\r\n\r\n case \"ADDITIONAL\":\r\n dispatch(updateCartAdditional(product.id, count));\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const getPreviewInitalValue = (): number => {\r\n const product = getProduct(state.repo, preview?.id);\r\n if (product) {\r\n switch (state.cart.productType) {\r\n case \"ACCESSORIES\":\r\n if (state.cart.accessories && state.cart.accessories[product.id]) {\r\n return state.cart.accessories[product.id];\r\n }\r\n case \"ADDITIONAL\":\r\n if (state.cart.additional && state.cart.additional[product.id]) {\r\n return state.cart.additional[product.id];\r\n }\r\n }\r\n }\r\n return 0;\r\n };\r\n const resetScroll = () => {\r\n document.querySelector(\".panel.active .panel__content\")?.scrollTo(0, 0);\r\n };\r\n return (\r\n <>\r\n \r\n updatePage(0, \"SIZES\")}\r\n >\r\n \r\n changeSize(\r\n e,\r\n configuration.corner != null,\r\n modulesLength(state.repo, configuration.right)\r\n )\r\n }\r\n />\r\n {state.repo.basemodules.find((m) => m.isCorner) !== undefined ? (\r\n <>\r\n

\r\n {tokens.CORNER}\r\n

\r\n \r\n changeSize(\r\n modulesLength(state.repo, configuration.left),\r\n e,\r\n e ? 1 : 0\r\n )\r\n }\r\n disabled={state.configuration.defaultLifter}\r\n />\r\n \r\n changeSize(\r\n modulesLength(state.repo, configuration.left),\r\n true,\r\n e\r\n )\r\n }\r\n />\r\n \r\n ) : null}\r\n

\r\n {tokens.SETTINGS}\r\n

\r\n toggleCupboards(state.repo, e)}\r\n />\r\n togglePanels(state.repo, e)}\r\n disabled={hasCupboards}\r\n />\r\n {\r\n toggleLighting(state.repo, !hasLighting);\r\n }}\r\n title={tokens.INCLUDE_LIGHTING}\r\n disabled={!hasCupboards}\r\n />\r\n
\r\n {!allowLifter ? (\r\n <>\r\n ) : (\r\n {\r\n toggleLifter(state.repo, !hasLifter);\r\n }}\r\n title={lifter?.title}\r\n disabled={disabledLifter()}\r\n />\r\n )}\r\n
\r\n \r\n {tokens.MATERIALS}\r\n \r\n
\r\n {Array.from(\r\n new Set(state.repo.tabletop.map((t) => t.material))\r\n ).map((material) => (\r\n dispatch(setAllParts(\"TABLETOP\", e, e))}\r\n >\r\n \r\n dispatch(showPreview(getTableTopImage(material, \"LARGE\")))\r\n }\r\n src={getTableTopImage(material, \"THUMBNAIL\")}\r\n width=\"60\"\r\n style={{\r\n marginRight: \"10px\",\r\n border: \"1px solid rgba(0,0,0,.1)\",\r\n }}\r\n />\r\n

{getTableTopText(material)}

\r\n \r\n ))}\r\n
\r\n \r\n\r\n updatePage(1, \"MODULES\")}\r\n >\r\n {!state.configuration.selected ||\r\n state.configuration.selected === \"NONE\" ? (\r\n <>\r\n
\r\n

\r\n {tokens.MODULES_SELECT_HELP_TEXT}\r\n

\r\n
\r\n \r\n ) : (\r\n
\r\n )}\r\n
\r\n \r\n\r\n updatePage(2, \"ACCESSORIES\")}\r\n >\r\n {\r\n updateMenuTab(e);\r\n dispatch(closeSidebarPreview());\r\n if (e === 0) {\r\n updateTab(0);\r\n }\r\n }}\r\n current={activeMenuTab}\r\n items={[\r\n tokens.ACCESSORIES,\r\n `Results (${\r\n getAccessories.filter((x) => x.id === currentAccessory)[0]\r\n ?.items.length\r\n })`,\r\n ]}\r\n />\r\n

\r\n {tokens.ACCESSORIES_DESC}\r\n

\r\n
\r\n {getAccessories\r\n .filter((a) => a.items.length > 0)\r\n .map((e, index) => (\r\n {\r\n updateAccessory(e.id);\r\n updateToggleContent(\"\");\r\n updateMenuTab(1);\r\n resetScroll();\r\n dispatch(closeSidebarPreview());\r\n updateTab(0);\r\n }}\r\n id={\"g\" + index}\r\n key={\"g\" + index}\r\n value={e.id}\r\n >\r\n {\r\n updateToggleContent(\"\");\r\n dispatch(closeSidebarPreview());\r\n }}\r\n >\r\n

{e.title}

\r\n
\r\n \r\n ))}\r\n \r\n \r\n\r\n {productLine !== \"black\" ? (\r\n updatePage(3, \"ADDITIONAL\")}\r\n >\r\n {\r\n updateMenuTab(e);\r\n dispatch(closeSidebarPreview());\r\n if (e === 0) {\r\n updateTab(0);\r\n }\r\n }}\r\n current={activeMenuTab}\r\n items={[\r\n tokens.ADDITIONAL,\r\n `Results (${\r\n getAdditional.filter((x) => x.id === currentAdditional)[0]\r\n ?.items.length\r\n })`,\r\n ]}\r\n />\r\n

\r\n {tokens.ADDITIONAL_DESC}\r\n

\r\n
\r\n {getAdditional.map((e, index) => (\r\n {\r\n updateAdditional(e.id);\r\n updateToggleContent(\"\");\r\n updateMenuTab(1);\r\n resetScroll();\r\n dispatch(closeSidebarPreview());\r\n updateTab(0);\r\n }}\r\n id={\"ag\" + index}\r\n key={\"ag\" + index}\r\n value={e.id}\r\n >\r\n {\r\n updateToggleContent(\"\");\r\n dispatch(closeSidebarPreview());\r\n }}\r\n >\r\n

{e.title}

\r\n
\r\n \r\n ))}\r\n \r\n \r\n ) : null}\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n {checkSize()}\r\n \r\n\r\n {preview ? (\r\n \r\n \r\n
\r\n previewUpdate(preview.id, step)}\r\n showPrice={{\r\n text: tokens.PRICE,\r\n price: getItemPrice(\r\n preview,\r\n state.cart.currency,\r\n state.repo.langCode\r\n ),\r\n }}\r\n >\r\n
\r\n
{preview.id}
\r\n

{preview.title}

\r\n
\r\n \r\n dispatch(closeSidebarPreview())}\r\n />\r\n
\r\n
\r\n {preview.size ? (\r\n <>\r\n {tokens.DIMENSIONS}: \r\n \r\n {preview.size.width} x {preview.size.height} x{\" \"}\r\n {preview.size.depth} {tokens.UNITS}\r\n \r\n \r\n ) : null}\r\n •\"),\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {\r\n if (preview && preview.imageUrl) {\r\n dispatch(showPreview(getImage(preview.imageUrl, \"LARGE\")));\r\n }\r\n }}\r\n />\r\n \r\n
\r\n ) : null}\r\n\r\n {state.cart.page === \"ACCESSORIES\" &&\r\n togglePageContent !== \"ACCESSORIES\" &&\r\n !configuration.selected ? (\r\n \r\n updateTab(e)}\r\n current={activeTab}\r\n items={[\r\n tokens.ALL,\r\n `${tokens.MINE} (${\r\n state.cart.accessories\r\n ? Object.keys(state.cart.accessories).reduce(\r\n (a, b) =>\r\n a +\r\n (state.cart.accessories\r\n ? state.cart.accessories[b]\r\n : 0),\r\n 0\r\n )\r\n : 0\r\n })`,\r\n ]}\r\n />\r\n {activeTab === 0 ? (\r\n <>\r\n \r\n \r\n {state.repo.step3[currentAccessory]?.items\r\n .filter((p) => searchProduct(accessoriesSearch, p))\r\n .map((e: Product, ei) => {\r\n const val =\r\n state.cart.accessories && state.cart.accessories[e.id]\r\n ? state.cart.accessories[e.id]\r\n : 0;\r\n return (\r\n \r\n dispatch(updateCartAccessory(e.id, step))\r\n }\r\n >\r\n \r\n dispatch(showSidebarPreview(e, \"ACCESSORIES\"))\r\n }\r\n />\r\n \r\n dispatch(showSidebarPreview(e, \"ACCESSORIES\"))\r\n }\r\n >\r\n
{e.id}
\r\n

{e.title}

\r\n \r\n {}\r\n

\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n ) : (\r\n
\r\n {state.cart.accessories\r\n ? Object.keys(state.cart.accessories).map((id, ei) => {\r\n const item = getProduct(state.repo, id);\r\n const val = state.cart.accessories\r\n ? state.cart.accessories[id]\r\n : 0;\r\n return item ? (\r\n \r\n dispatch(updateCartAccessory(id, step))\r\n }\r\n showPrice={{\r\n text: tokens.PRICE,\r\n price: getItemPrice(\r\n item,\r\n state.cart.currency,\r\n state.repo.langCode\r\n ),\r\n }}\r\n >\r\n \r\n dispatch(showSidebarPreview(item, \"ACCESSORIES\"))\r\n }\r\n />\r\n \r\n dispatch(showSidebarPreview(item, \"ACCESSORIES\"))\r\n }\r\n >\r\n
{item.id}
\r\n

{item.title}

\r\n \r\n {}\r\n

\r\n
\r\n \r\n ) : null;\r\n })\r\n : null}\r\n \r\n )}\r\n \r\n ) : null}\r\n {state.cart.page === \"ADDITIONAL\" &&\r\n togglePageContent !== \"ADDITIONAL\" &&\r\n !configuration.selected ? (\r\n \r\n updateTab(e)}\r\n current={activeTab}\r\n items={[\r\n tokens.ALL,\r\n `${tokens.MINE} (${\r\n state.cart.additional\r\n ? Object.keys(state.cart.additional).reduce(\r\n (a, b) =>\r\n a +\r\n (state.cart.additional ? state.cart.additional[b] : 0),\r\n 0\r\n )\r\n : 0\r\n })`,\r\n ]}\r\n />\r\n {activeTab === 0 ? (\r\n <>\r\n {\" \"}\r\n \r\n
\r\n {state.repo.step4[currentAdditional]?.items\r\n .filter((p) => searchProduct(additionalSearch, p))\r\n .map((e: Product, ei) => {\r\n const val =\r\n state.cart.additional && state.cart.additional[e.id]\r\n ? state.cart.additional[e.id]\r\n : 0;\r\n return (\r\n \r\n dispatch(updateCartAdditional(e.id, step))\r\n }\r\n showPrice={{\r\n text: tokens.PRICE,\r\n price: getItemPrice(\r\n e,\r\n state.cart.currency,\r\n state.repo.langCode\r\n ),\r\n }}\r\n >\r\n \r\n dispatch(showSidebarPreview(e, \"ADDITIONAL\"))\r\n }\r\n />\r\n \r\n dispatch(showSidebarPreview(e, \"ADDITIONAL\"))\r\n }\r\n >\r\n
{e.id}
\r\n

{e.title}

\r\n \r\n {}\r\n

\r\n
\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : (\r\n
\r\n {state.cart.additional\r\n ? Object.keys(state.cart.additional).map((id, ei) => {\r\n const item = getProduct(state.repo, id);\r\n const val = state.cart.additional\r\n ? state.cart.additional[id]\r\n : 0;\r\n return item ? (\r\n \r\n dispatch(updateCartAdditional(id, step))\r\n }\r\n showPrice={{\r\n text: tokens.PRICE,\r\n price: getItemPrice(\r\n item,\r\n state.cart.currency,\r\n state.repo.langCode\r\n ),\r\n }}\r\n >\r\n \r\n dispatch(showSidebarPreview(item, \"ADDITIONAL\"))\r\n }\r\n />\r\n \r\n dispatch(showSidebarPreview(item, \"ADDITIONAL\"))\r\n }\r\n >\r\n
{item.id}
\r\n

{item.title}

\r\n \r\n {}\r\n

\r\n
\r\n \r\n ) : null;\r\n })\r\n : null}\r\n \r\n )}\r\n \r\n ) : null}\r\n \r\n {(state.cart.page === \"ACCESSORIES\" ||\r\n state.cart.page === \"ADDITIONAL\" ||\r\n state.cart.page === \"CART\") &&\r\n togglePageContent === \"\" ? (\r\n {\r\n updateToggleContent(state.cart.page);\r\n dispatch(closeSidebarPreview());\r\n }}\r\n />\r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default Sidebar;\r\n","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport Icon from \"../../elements/Icon\";\r\nimport { Tokens } from \"typings/translation\";\r\n\r\ninterface Props{\r\n width: number;\r\n width2?: number;\r\n height: number;\r\n depth: number;\r\n tokens: Tokens;\r\n}\r\n\r\nconst StyledSize = styled.div`\r\n position: absolute; \r\n text-align: right;\r\n right: 20px;\r\n top: 15px;\r\n z-index: 1;\r\n p{\r\n font-size: 14px;\r\n margin: 10px 0px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n //text-shadow: 0px 2px rgba(0,0,0,.4);\r\n color: black;\r\n svg{\r\n width: 16px;\r\n height: 16px;\r\n margin-left: 5px;\r\n fill: black;\r\n }\r\n &.horizontal svg{\r\n transform: rotate(90deg);\r\n }\r\n &.diagonal svg{\r\n transform: rotate(45deg);\r\n }\r\n }\r\n @media(max-width: 769px){\r\n\r\n right: 5px;\r\n //top: 15px;\r\n //bottom: auto;\r\n position: absolute !important;\r\n p{\r\n font-size: 12px;\r\n margin: 5px;\r\n &:last-child{\r\n margin-bottom: 0;\r\n }\r\n }\r\n }\r\n @media(max-width: 769px) {\r\n p{\r\n text-shadow: 0px 1px 1px rgba(255,255,255,.5);\r\n color: black;\r\n font-weight: 700; \r\n }\r\n svg{\r\n fill: black !important;\r\n }\r\n \r\n display: flex;\r\n left: 0;\r\n width: 100%\r\n > p:first-child{\r\n margin-left: auto;\r\n }\r\n > p:last-child{\r\n margin-right: auto;\r\n }\r\n p.vertical{\r\n border-left: 1px solid rgba(0,0,0,.9);\r\n border-right: 1px solid rgba(0,0,0,.9);\r\n padding-left: 5px;\r\n padding-right: 5px;\r\n margin-left: 0;\r\n margin-right: 0;\r\n }\r\n p{\r\n margin-top: 0 !important;\r\n margin-bottom: 0;\r\n }\r\n svg{\r\n display: none;\r\n }\r\n }\r\n`;\r\n\r\nconst Size = (props:Props) =>\r\n{\r\n return \r\n

{props.tokens.WIDTH_SHORT} {props.width} {props.width2 !== 0 ? \"x \" + props.width2 + \" \" : \"\"}{props.tokens.UNITS}

\r\n

{props.tokens.HEIGHT_SHORT} {props.height} {props.tokens.UNITS}

\r\n

{props.tokens.DEPTH_SHORT} {props.depth} {props.tokens.UNITS}

\r\n
;\r\n}\r\n\r\nexport default Size;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { SecondaryBackgroundColor } from \"../../../global.styles\";\r\nimport { Tokens } from \"typings/translation\";\r\nimport { ConfigurationState } from 'typings/configuration';\r\nimport { CAMERAORIENTATION } from 'typings/globals';\r\nimport { setCamera } from 'state/cart/actions';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nconst StyledPan = styled.div`\r\n background: ${SecondaryBackgroundColor};\r\n background: lightgrey;\r\n display: flex;\r\n border-radius: 20px;\r\n padding: 5px;\r\n position: absolute;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n bottom: 20px;\r\n z-index: 1;\r\n > button{\r\n outline: none;\r\n cursor: pointer;\r\n border: none;\r\n background: transparent;\r\n padding: 5px 14px;\r\n border-radius: 20px;\r\n transition: background .2s linear;\r\n &.active{\r\n background: white;\r\n }\r\n &:disabled{\r\n opacity: .5;\r\n cursor: no-drop;\r\n }\r\n } \r\n @media(max-width: 769px){\r\n left: 10px;\r\n bottom: 10px;\r\n transform: none;\r\n }\r\n`;\r\n\r\ninterface Props\r\n{\r\n tokens: Tokens;\r\n configuration: ConfigurationState;\r\n currentCamera: string;\r\n}\r\n\r\nconst Pan = (props: Props) =>\r\n{\r\n const dispatch = useDispatch();\r\n\r\n const updateView = (e: CAMERAORIENTATION) =>\r\n {\r\n dispatch(setCamera(e));\r\n }\r\n \r\n return \r\n \r\n \r\n \r\n ;\r\n}\r\n\r\nexport default Pan;\r\n","import styled from \"styled-components\";\r\n\r\nexport const ConfiguratorStyle = styled.div`\r\n\r\nposition: relative;\r\n/*&:before{\r\n content: \"\";\r\n display: block;\r\n background: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,.1) 100%);\r\n height: 8px;\r\n width: 100%;\r\n position: absolute;\r\n z-index: 1;\r\n}*/\r\n\r\nimg{\r\n max-width: 100%;\r\n}\r\n#data{\r\n position: absolute;\r\n bottom: 0;\r\n z-index: 2;\r\n left: 0px;\r\n textarea{\r\n height: 134px;\r\n width: 211px;\r\n }\r\n}\r\n\r\ncanvas {\r\n @media(min-width: 770px) {\r\n width: calc(100vw - 300px) !important;\r\n height: calc(100vh - 70px) !important;\r\n\r\n } \r\n}\r\n\r\ncanvas {\r\n @media(max-width: 769px) {\r\n width: 100% !important;\r\n height: 100% !important;\r\n }\r\n}\r\n\r\n&.toggled{\r\n left: -300px;\r\n overflow: hidden;\r\n width: calc(100% + 300px);\r\n\r\n @media(min-width: 769px){\r\n #__ReactUnityWebGL_1__{\r\n width: calc(100vw) !important;\r\n }\r\n }\r\n}\r\n\r\n\r\n.notification{\r\n position: absolute;\r\n top: 30px;\r\n background: rgba(255,255,255,.7);\r\n left: 30px;\r\n width: 200px;\r\n height: 100px;\r\n z-index: 2;\r\n animation: showNotification .5s both;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n\r\n > button{\r\n position: absolute;\r\n right: 5px;\r\n top: 5px;\r\n padding: 5px;\r\n svg{\r\n margin-right: auto;\r\n width: 8px;\r\n height: 8px;\r\n }\r\n } \r\n svg{\r\n stroke: rgba(255,255,255,.11);\r\n width: 12px !important;\r\n height: 12px !important;\r\n stroke-width: 5px;\r\n }\r\n\r\n @media(max-width: 769px){\r\n span.notify--desktop{\r\n display: none; \r\n } \r\n }\r\n @media(min-width: 769px){\r\n span.notify--mobile{\r\n display: none;\r\n } \r\n font-size: 14px;\r\n }\r\n}\r\n\r\n@keyframes showNotification{\r\n 0%{\r\n opacity: 0;\r\n transform: scale(.5);\r\n }\r\n 100%{\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n}\r\n\r\n#__ReactUnityWebGL_1__{\r\n animation: showConfigurator .5s both;\r\n animation-delay: .5s;\r\n}\r\n@keyframes showConfigurator{\r\n 0%{\r\n opacity: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n }\r\n}\r\n`;\r\n\r\n\r\n\r\nexport const HeavyLogo = styled.img`\r\n position: absolute;\r\n left: 56px;\r\n top: 17px;\r\n z-index: 1;\r\n height: 50px;\r\n\r\n @media(max-width: 768px){\r\n left: 9px;\r\n top: 38px;\r\n height: 30px;\r\n }\r\n`;","import * as React from \"react\";\r\nimport SizeComponent from \"../Controls/Size\";\r\nimport Pan from \"../Controls/Pan\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { RootState } from \"../../../state/state\";\r\nimport { UnityModule, UnityList } from \"../../../typings/unity\";\r\nimport { closePreloader, addCartImage, changePageHideNotification, changeModuleHideNotification, changeModuleShowNotification, setCamera, changeSizeHideNotification } from \"../../../state/cart/actions\";\r\nimport { Size } from 'typings/repo';\r\nimport { Module } from 'typings/configuration';\r\nimport { selectModule } from '../../../state/configuration/actions';\r\nimport { ConfiguratorStyle, HeavyLogo } from \"./Configurator.style\";\r\nimport { getCustomSize } from 'helpers/configurationHelper';\r\nimport IconButton from 'components/elements/IconButton';\r\nimport { CAMERAORIENTATION } from 'typings/globals';\r\nimport heavylogo from '../../../icons/heavy_logo.svg';\r\nimport Unity, { UnityContext } from \"react-unity-webgl\";\r\n\r\ninterface Props {\r\n toggle?: boolean;\r\n}\r\nconst unityVersion = \"unity3\";//document.createElement('canvas').getContext('webgl2') ? \"unity\" : \"unity\"; // Can be setup to give different versions\r\nconst unityContext = new UnityContext({\r\n loaderUrl: `/${unityVersion}/Build/${unityVersion}.loader.js`,\r\n dataUrl: `/${unityVersion}/Build/${unityVersion}.data`,\r\n frameworkUrl: `/${unityVersion}/Build/${unityVersion}.framework.js`,\r\n codeUrl: `/${unityVersion}/Build/${unityVersion}.wasm`,\r\n});\r\n\r\nconst unitySend = (method: string, obj: string | undefined = undefined) => {\r\n unityContext.send(\r\n \"RunScript\",\r\n method,\r\n obj\r\n );\r\n}\r\n\r\nexport const takeScreenshot = () => {\r\n unitySend(\"TakeScreenshot\");\r\n}\r\nconst Configurator = (props: Props) => {\r\n const state = useSelector((state: RootState) => state);\r\n const configuration = state.configuration;\r\n const repo = state.repo;\r\n const tokens = state.repo.translations;\r\n const dispatch = useDispatch();\r\n const size: Size = getCustomSize(state.configuration, repo);\r\n\r\n unityContext.on(\"Hover\", (id: any) => {\r\n // console.log(\"Hover \" + id);\r\n //dispatch(hoverModule(id));\r\n });\r\n\r\n unityContext.on(\"Select\", (id: any) => {\r\n setLastSelected(id);\r\n dispatch(selectModule(id));\r\n\r\n if (state.cart.page === \"MODULES\" && !state.cart.notified_module && id !== \"\" && !state.cart.notified_module_dismissed) {\r\n dispatch(changeModuleShowNotification(\"MODULES\"));\r\n }\r\n\r\n if (state.cart.page === \"MODULES\" && state.cart.notified_module && id === \"\") {\r\n dispatch(changeModuleHideNotification(\"MODULES\"));\r\n }\r\n\r\n if (!state.cart.notified) {\r\n dispatch(changePageHideNotification(\"MODULES\"))\r\n }\r\n });\r\n\r\n unityContext.on(\"ScreenshotTaken\", (b64: string) => {\r\n dispatch(addCartImage(b64));\r\n\r\n const canvas = document.querySelector(\"canvas\") as HTMLCanvasElement;\r\n if (canvas) {\r\n canvas.width = canvas.width + 1;\r\n setTimeout(function () { canvas.width = canvas.width - 1; }, 10);\r\n }\r\n\r\n });\r\n\r\n unityContext.on(\"Loaded\", () => {\r\n console.log(\"Loaded\");\r\n updateModel(true);\r\n if (state.cart.preloader) {\r\n dispatch(closePreloader());\r\n }\r\n dispatch(setCamera(state.configuration.corner ? \"OVERVIEW\" : \"LEFT\"));\r\n unitySend(\"SetMobile\");\r\n });\r\n\r\n const getModule = (obj: Module): UnityModule => {\r\n return { ...obj, cabinet: state.repo.basemodules.find(m => m.id === obj.base)?.isBaseModule ? obj.cabinet : obj.base };\r\n }\r\n\r\n const [lastConfiguration, setLastConfiguration] = React.useState(\"\");\r\n const updateModel = (force: boolean = false) => {\r\n const data: UnityList = {\r\n left: configuration.left.map(x => getModule(x)),\r\n corner: configuration.corner ? getModule(configuration.corner) : undefined,\r\n right: configuration.right.map(x => getModule(x))\r\n }\r\n const json = JSON.stringify(data);\r\n if (!force && json === lastConfiguration) return;\r\n setLastConfiguration(json);\r\n //console.log(json);\r\n unitySend(\"SetModel\", json);\r\n takeScreenshot();\r\n }\r\n\r\n const [lastSelected, setLastSelected] = React.useState(\"\");\r\n const updateSelected = () => {\r\n if (configuration.selected === lastSelected) return;\r\n setLastSelected(configuration.selected);\r\n unitySend(\"Select\", configuration.selected || \"\");\r\n }\r\n\r\n React.useEffect(() => {\r\n if (!state.cart.preloader) {\r\n updateModel();\r\n updateSelected();\r\n }\r\n }, [configuration]);\r\n\r\n const [lastCamera, setLastCamera] = React.useState(\"OVERVIEW\");\r\n React.useEffect(() => {\r\n if (lastCamera === state.cart.camera) return;\r\n setLastCamera(state.cart.camera);\r\n unitySend(\"SetCamera\", state.cart.camera);\r\n }, [state.cart]);\r\n\r\n React.useEffect(() => {\r\n if (state.cart.page === \"MODULES\" && !state.cart.notified && configuration.left && configuration.left.length > 0) {\r\n setTimeout(() => {\r\n let id = configuration.left[0].id;\r\n unitySend(\"Select\", id);\r\n unitySend(\"Hover\", id);\r\n }, 500);\r\n }\r\n }, [state.cart.preloader, state.cart.notified, state.cart.page, dispatch]);\r\n const r = React.createRef();\r\n React.useEffect(() => {\r\n if (r.current) {\r\n r.current.addEventListener(\"touchmove\", function (e) { e.preventDefault() });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {state.cart.page === \"SIZES\" && state.cart.notified_sizes && !state.cart.notified_module_dismissed ?
\r\n dispatch(changeSizeHideNotification(\"SIZES\"))} className=\"close\" icon=\"close\" />\r\n {tokens.PANELS_HELP_TEXT}\r\n {tokens.PANELS_HELP_TEXT_MOBILE}\r\n
: null}\r\n {state.cart.page === \"MODULES\" && !state.cart.notified ?
\r\n dispatch(changePageHideNotification(\"MODULES\"))} className=\"close\" icon=\"close\" />{tokens.NOTIFICATION_MODULES}
: null}\r\n \r\n {state.repo.basemodules.find(m => m.isCorner) !== undefined ?\r\n : null}\r\n {state.cart.productLine === \"FLEXLINE_HEAVY_DUTY\" ? : null}\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Configurator;\r\n","import styled from \"styled-components\";\r\n\r\n\r\nexport const PopupStyle = styled.div`\r\nposition: fixed;\r\nwidth: 100vw;\r\nheight: 100vh;\r\n//opacity: 0;\r\nbackground: rgba(0,0,0,.4);\r\nleft: 0;\r\ntop: 0;\r\nz-index: 99;\r\nanimation: showIt .5s both;\r\nh2, h3, h4, h5{\r\n margin: 5px 0;\r\n\r\n}\r\nh2{\r\n font-size: 1em;\r\n}\r\n> div{\r\n padding: 20px;\r\n box-sizing: border-box;\r\n pointer-event: none;\r\n background: white;\r\n max-width: 600px;\r\n //height: 500px;\r\n transform: translate(calc(50vw - 50%), calc(50vh - 50%)); \r\n > button{\r\n margin-left: auto;\r\n }\r\n}\r\n\r\n&.active{\r\n > div{\r\n \r\n }\r\n}\r\n\r\n@keyframes showIt{\r\n 0%{ opacity: 0;} \r\n 100%{ opacity: 1;} \r\n}\r\n\r\n.share-form{\r\n \r\n\r\n\r\n > *:last-child{\r\n min-height: 80px;\r\n }\r\n}\r\n\r\n`;","import * as React from \"react\";\r\nimport { PopupStyle } from \"./Popup.style\";\r\nimport IconButton from \"../elements/IconButton\";\r\n\r\ninterface Props {\r\n show: boolean;\r\n onClick?: () => void;\r\n style?: React.CSSProperties;\r\n children?: React.ReactNode;\r\n};\r\n\r\n\r\n\r\nconst Popup: React.FC = (props) => {\r\n const toggle = () => {\r\n if (props.onClick) {\r\n props.onClick();\r\n }\r\n }\r\n\r\n return props.show ?\r\n \r\n
\r\n {props.onClick ? : null}\r\n {props.children}\r\n
\r\n
\r\n : null;\r\n\r\n\r\n}\r\n\r\nexport default Popup;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport MenuDropDown from \"../../elements/MenuDropDown\";\r\nimport { Tokens } from \"typings/translation\";\r\nimport { Language } from \"typings/repo\";\r\n\r\ninterface Props{\r\n changeLanguage?: (e:Language) => void;\r\n languages: Language[];\r\n current: string;\r\n tokens: Tokens;\r\n}\r\n\r\nconst StyledLanguage = styled.div`\r\n //position: absolute;\r\n\r\n top: 10px;\r\n right: 10px;\r\n\r\n > div{\r\n margin-top: 10px;\r\n }\r\n > p{\r\n text-align: center;\r\n padding: 0;\r\n margin: 0;\r\n color: rgba(255,255,255,.5);\r\n margin: 8px 0;\r\n font-size: .9em;\r\n }\r\n`;\r\n\r\nconst LanguageChooser = (props: Props) =>\r\n{\r\n const click = (lang:Language) =>\r\n {\r\n if(props.changeLanguage)\r\n { \r\n props.changeLanguage(lang);\r\n }\r\n }\r\n\r\n const getCurrent = () =>\r\n {\r\n return props.languages.find(lang => lang.code === props.current)?.name;\r\n }\r\n\r\n return (\r\n \r\n \r\n {/* temporarily disable DE and NO languages */ }\r\n {props.languages.map(lang => (

click(lang)}>{lang.name}

))}\r\n
\r\n

{getCurrent()}

\r\n
\r\n );\r\n}\r\n\r\nexport default LanguageChooser;","import styled from \"styled-components\";\r\nimport { PrimaryColor, BorderColor } from 'global.styles';\r\n\r\nexport const StyledPage = styled.div`\r\nwidth: 100vw;\r\nheight: 100vh;\r\ndisplay: flex;\r\nanimation: fadeIn .5s both;\r\nalign-items: center;\r\njustify-content: center;\r\nflex-direction: column;\r\ntext-align: center;\r\n//background-size: cover;\r\nbackground-size: 100% auto;\r\nbackground-position: center;\r\nbackground-repeat: no-repeat;\r\n\r\n@media(hover:none) and (max-width: 768px)\r\n{\r\n overflow-y: scroll;\r\n}\r\n&.landingpage{\r\n @media(max-width: 562px){\r\n justify-content: flex-start;\r\n\r\n .large img{\r\n width: 30vh;\r\n margin-top: 20px;\r\n }\r\n }\r\n}\r\n.configurations{\r\n //display: flex;\r\n margin-top: 4vh;\r\n display: grid;\r\n grid-template-columns: 1fr 1fr 1fr;\r\n grid-gap: 20px;\r\n @media(min-width: 562px){\r\n &.small{\r\n grid-template-columns: 1fr 1fr 1fr;\r\n } \r\n grid-gap: 10px;\r\n\r\n }\r\n button:not(.size){\r\n min-width: 160px;\r\n min-height: 160px;\r\n border-radius: 0;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: flex-start;\r\n span:last-child{\r\n font-size: 14px;\r\n line-height: 20px;\r\n }\r\n animation: fadeIn 1s both;\r\n //width: 100px; \r\n //height: 100px;\r\n padding: 0;\r\n border: 2px solid ${BorderColor};\r\n border-radius: 0;\r\n color: white;\r\n margin: 0px;\r\n svg{\r\n fill: ${PrimaryColor};\r\n margin: 0;\r\n margin-bottom: 20px;\r\n }\r\n\r\n >span:first-child{\r\n display: block;\r\n height: 32px;\r\n margin-top: 53px;\r\n }\r\n } \r\n \r\n @media(max-width: 562px){\r\n flex-direction: row;\r\n grid-template-columns: 1fr 1fr;\r\n grid-gap: 10px;\r\n button{\r\n //width: calc(100vw - 30px) !important;\r\n height: auto !important;\r\n min-width: unset !important;\r\n min-height: unset !important;\r\n padding: 20px 5px !important;\r\n flex-direction: column !important;\r\n margin-bottom: 10px !important;\r\n justify-content: center !important;\r\n svg{\r\n margin-bottom: 0px !important;\r\n margin-right: 10px !important;\r\n }\r\n > span:first-child{\r\n align-items: center !important;\r\n display: flex !important;\r\n margin-top: 0 !important;\r\n }\r\n }\r\n .size{\r\n left: calc(50% + 35px);\r\n padding: 0;\r\n width: 100%;\r\n }\r\n } \r\n}\r\n@keyframes fadeIn{\r\n 0%{\r\n opacity: 0;\r\n }\r\n 100%{\r\n opacity: 1;\r\n }\r\n}\r\n.templates{\r\n //color: white;\r\n text-align: left;\r\n width: 388px;\r\n margin-top: 3vh;\r\n button:not(.size){\r\n color: grey;\r\n padding-left: 0;\r\n padding-right: 0;\r\n width: 100%;\r\n border-top: 1px solid grey;\r\n border-radius: 0;\r\n svg{\r\n fill: grey;\r\n margin-left: auto;\r\n }\r\n &:last-child{\r\n border-bottom: 1px solid grey;\r\n font-size: 16px;\r\n } \r\n }\r\n &.left{\r\n h5{\r\n text-align: left !important; \r\n font-size: 16px;\r\n }\r\n button span:last-child{\r\n margin-right: auto;\r\n }\r\n }\r\n h4{\r\n justify-content: center;\r\n }\r\n\r\n h4 + div {\r\n left: 50%;\r\n transform: translateX(-50%);\r\n margin-top: 10px;\r\n @media(max-width: 562px){\r\n transform: translateX(-50%) translateY(calc(-100% - 40px));\r\n }\r\n }\r\n @media(max-width: 562px){\r\n width: 100%;\r\n margin-top: 3vh;\r\n padding: 0px 25px;\r\n box-sizing: border-box;\r\n }\r\n h5{\r\n margin-top: 0;\r\n color: white;\r\n text-align: center;\r\n }\r\n}\r\n\r\n.intro{\r\n color: white;\r\n max-width: 592px;\r\n text-align: center;\r\n margin-top: 4vh;\r\n padding: 20px;\r\n white-space: pre-line;\r\n @media(max-width: 562px){\r\n margin: 0;\r\n font-size: 12px;\r\n padding: 10px;\r\n }\r\n}\r\n\r\n.contact{\r\n margin-top: 20px;\r\n margin-bottom: 20px; \r\n svg{\r\n fill: ${PrimaryColor};\r\n margin: 0;\r\n margin-right: 10px;\r\n }\r\n a{\r\n display: flex;\r\n color: white;\r\n padding-right: 37px;\r\n font-size: 23px;\r\n align-items: center;\r\n font-weight: bold;\r\n }\r\n @media(max-width: 562px){\r\n margin: 0;\r\n }\r\n}\r\n\r\na{\r\n padding: 10px;\r\n color: #929292; \r\n text-decoration: none;\r\n font-size: 12px;\r\n &:hover{\r\n text-decoration: underline;\r\n } \r\n}\r\n.terms{\r\n margin-top: 20px;\r\n @media(max-width: 562px){\r\n margin-top: 0;\r\n }\r\n}\r\n\r\n.size{\r\n position: absolute;\r\n left: 50%;\r\n right: 0;\r\n width: auto;\r\n border-radius: 0;\r\n bottom: 0px;\r\n transform: translate(-50%);\r\n background: none;\r\n span:first-child{\r\n margin-left: 12px;\r\n svg{\r\n width: 12px; \r\n height: 12px;\r\n }\r\n }\r\n}\r\n\r\n`;","import * as React from \"react\";\r\nimport bg from \"images/background.jpg\";\r\nimport bg2 from \"images/background-heavy.jpg\";\r\nimport bg3 from \"images/background-black-tint.jpg\";\r\nimport Logo from \"./Logo\";\r\nimport IconButton from \"components/elements/IconButton\";\r\nimport Icon from \"components/elements/Icon\";\r\nimport Language from \"components/layout/Controls/Language\";\r\nimport { StyledPage } from \"./LandingPage.style\";\r\nimport { RootState } from \"state/state\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setCurrency } from \"state/cart/actions\";\r\nimport { setLanguage } from \"state/repo/actions\";\r\nimport { setToTemplate } from \"state/configuration/actions\";\r\nimport { setProductLine } from \"state/cart/actions\";\r\nimport Popup from \"components/dialogue/Popup\";\r\nimport template1 from \"images/template1.png\";\r\nimport template2 from \"images/template2.png\";\r\nimport template3 from \"images/template3.png\";\r\nimport template4 from \"images/template4.png\";\r\nimport template5 from \"images/template5.png\";\r\nimport templatehd1 from \"images/template-hd1.png\";\r\nimport templatehd2 from \"images/template-hd2.png\";\r\nimport templatehd3 from \"images/template-hd3.png\";\r\nimport templatehd4 from \"images/template-hd4.png\";\r\nimport templateBlack2040 from \"images/template-black-2040.png\";\r\nimport templateBlack2955 from \"images/template-black-2955.png\";\r\nimport templateBlack5230 from \"images/template-black-5230.png\";\r\nimport { TrackEvent } from \"helpers/Tracking\";\r\nimport { setDefaultModules } from \"helpers/configurationHelper\";\r\nimport { getLogo } from \"utils/utils\";\r\n\r\ninterface Props {\r\n onNavClick: () => void;\r\n onSizeClick: () => void;\r\n}\r\n\r\nconst LandingPage = (props: Props) => {\r\n const state = useSelector((state: RootState) => state);\r\n const tokens = state.repo.translations;\r\n const [templates, updateTemplates] = React.useState(false);\r\n const dispatch = useDispatch();\r\n React.useEffect(() => {\r\n if (window.location.href.indexOf(\"/HeavyDuty\") !== -1) {\r\n dispatch(setProductLine(\"FLEXLINE_HEAVY_DUTY\"));\r\n dispatch(setLanguage(state.repo.langCode));\r\n dispatch({ type: \"hd\" });\r\n } else if (window.location.href.indexOf(\"/FLEXLINE-BLACK\") !== -1) {\r\n dispatch(setProductLine(\"FLEXLINE_BLACK\"));\r\n dispatch(setLanguage(state.repo.langCode));\r\n dispatch({ type: \"black\" });\r\n } else if (window.location.href.indexOf(\"/FLEXLINE-GREY\") !== -1) {\r\n dispatch(setProductLine(\"FLEXLINE_GREY\"));\r\n dispatch(setLanguage(state.repo.langCode));\r\n dispatch({ type: \"grey\" });\r\n }\r\n }, [dispatch, state.repo.langCode, window.location.pathname]);\r\n\r\n React.useEffect(() => {\r\n window.onpopstate = () => {\r\n dispatch(setProductLine(\"\"));\r\n };\r\n }, [dispatch]);\r\n\r\n const getIntro = () => {\r\n if (state.cart.productLine === \"FLEXLINE_GREY\") {\r\n const text = tokens.FRONTPAGE_INTRO_FLEXLINE.split(\"\\n\").filter(\r\n (line) => line !== \"\"\r\n );\r\n return text.map((line, i) =>

{line}

);\r\n }\r\n if (state.cart.productLine === \"FLEXLINE_BLACK\") {\r\n const text = tokens.FRONTPAGE_INTRO_FLEXLINE_BLACK.split(\"\\n\").filter(\r\n (line) => line !== \"\"\r\n );\r\n return text.map((line, i) =>

{line}

);\r\n }\r\n if (state.cart.productLine === \"FLEXLINE_HEAVY_DUTY\") {\r\n const text = tokens.FRONTPAGE_INTRO_HEAVY.split(\"\\n\").filter(\r\n (line) => line !== \"\"\r\n );\r\n return text.map((line, i) =>

{line}

);\r\n }\r\n return tokens.FRONTPAGE_INTRO;\r\n };\r\n\r\n const getBackgroundImageUrl = () => {\r\n if (state.repo.project == \"Grey\") {\r\n return bg;\r\n } else if (state.repo.project === \"black\") {\r\n return bg3;\r\n } else if (state.repo.project === \"hd\") {\r\n return bg2;\r\n } else {\r\n return bg;\r\n }\r\n };\r\n\r\n // const handleBackClick = () => {\r\n // window.history.back();\r\n // // window.history.pushState('data', \"\", '/');\r\n // }\r\n\r\n return (\r\n \r\n \r\n
{getIntro()}
\r\n {state.cart.productLine === \"\" ? (\r\n
\r\n {\r\n dispatch(setProductLine(\"FLEXLINE_GREY\"));\r\n dispatch(setLanguage(state.repo.langCode));\r\n dispatch({ type: \"grey\" });\r\n //window.location.pathname = '/FLEXLINE';\r\n window.history.pushState(\"data\", \"\", \"/FLEXLINE-GREY\");\r\n TrackEvent(\"FRONTPAGE\", \"set-product-line\", \"FLEXLINE-GREY\");\r\n }}\r\n icon=\"plus\"\r\n title={tokens.PRODUCT_NAME}\r\n />\r\n {\r\n dispatch(setProductLine(\"FLEXLINE_HEAVY_DUTY\"));\r\n dispatch(setLanguage(state.repo.langCode));\r\n dispatch({ type: \"hd\" });\r\n //window.location.pathname = '/HeavyDuty';\r\n window.history.pushState(\"data\", \"\", \"/HeavyDuty\");\r\n TrackEvent(\r\n \"FRONTPAGE\",\r\n \"set-product-line\",\r\n \"FLEXLINE_HEAVY_DUTY\"\r\n );\r\n }}\r\n icon=\"plus\"\r\n title={tokens.PRODUCT_NAME_HEAVY_DUTY}\r\n />\r\n {\r\n dispatch(setProductLine(\"FLEXLINE_BLACK\"));\r\n dispatch(setLanguage(state.repo.langCode));\r\n dispatch({ type: \"black\" });\r\n window.history.pushState(\"data\", \"\", \"/FLEXLINE-BLACK\");\r\n TrackEvent(\"FRONTPAGE\", \"set-product-line\", \"FLEXLINE_BLACK\");\r\n }}\r\n icon=\"plus\"\r\n title=\"FLEXLINE BLACK\"\r\n />\r\n
\r\n ) : (\r\n
\r\n {\r\n dispatch(setDefaultModules(state.repo));\r\n props.onNavClick();\r\n TrackEvent(\"FRONTPAGE\", \"new-configuration\");\r\n }}\r\n icon=\"plus\"\r\n title={tokens.NEW_CONFIGURATION}\r\n />\r\n {\r\n props.onSizeClick();\r\n TrackEvent(\"FRONTPAGE\", \"add-constraint\");\r\n }}\r\n tooltip={tokens.CONSTRAINT_TEXT}\r\n icon=\"crop\"\r\n title={tokens.CONSTRAINT}\r\n />\r\n {\r\n updateTemplates(true);\r\n TrackEvent(\"FRONTPAGE\", \"templates\");\r\n }}\r\n tooltip={tokens.TEMPLATES}\r\n icon=\"bulb\"\r\n title={tokens.TEMPLATES}\r\n />\r\n
\r\n )}\r\n\r\n {/*
\r\n Til forsiden\r\n
*/}\r\n\r\n
\r\n {\r\n dispatch(setLanguage(e.code));\r\n dispatch(setCurrency(e.defaultCurrency));\r\n TrackEvent(\"FRONTPAGE\", \"set-language\", e.code);\r\n }}\r\n />\r\n
\r\n {/*
\r\n
{tokens.TEMPLATES}
\r\n { updateTemplates(true); TrackEvent(\"FRONTPAGE\",\"templates\"); }} />\r\n
*/}\r\n \r\n
\r\n \r\n TrackEvent(\"FRONTPAGE\", \"external-link\", \"privacy-policy\")\r\n }\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {tokens.PRIVACY_POLICY}\r\n \r\n
\r\n\r\n updateTemplates(!templates)}\r\n style={{ maxWidth: \"920px\" }}\r\n >\r\n

{tokens.TEMPLATES}

\r\n
\r\n
\r\n {Object.keys(state.templates.templates).map((key, index) => {\r\n let templateImage = \"\";\r\n //TODO width comes from template name, should probably comes from a better place so this is just temp.\r\n //image is just from index so far until we know more.\r\n const s = key.split(\" \");\r\n const w = s[s.length - 1];\r\n const d = w.split(\"/\");\r\n const txt = d.length > 1 ? `${d[0]}x${d[1]}` : w;\r\n switch (state.cart.productLine) {\r\n case \"FLEXLINE_GREY\":\r\n switch (index) {\r\n case 0:\r\n templateImage = template1;\r\n break;\r\n case 1:\r\n templateImage = template2;\r\n break;\r\n case 2:\r\n templateImage = template3;\r\n break;\r\n case 3:\r\n templateImage = template4;\r\n break;\r\n case 4:\r\n templateImage = template5;\r\n break;\r\n }\r\n break;\r\n case \"FLEXLINE_BLACK\":\r\n switch (index) {\r\n case 0:\r\n templateImage = templateBlack2040;\r\n break;\r\n case 1:\r\n templateImage = templateBlack2955;\r\n break;\r\n case 2:\r\n templateImage = templateBlack5230;\r\n break;\r\n }\r\n break;\r\n case \"FLEXLINE_HEAVY_DUTY\":\r\n switch (index) {\r\n case 0:\r\n templateImage = templatehd1;\r\n break;\r\n case 1:\r\n templateImage = templatehd2;\r\n break;\r\n case 2:\r\n templateImage = templatehd3;\r\n break;\r\n case 3:\r\n templateImage = templatehd4;\r\n break;\r\n }\r\n break;\r\n }\r\n\r\n return (\r\n {\r\n dispatch(setToTemplate(state.templates.templates[key]));\r\n updateTemplates(false);\r\n props.onNavClick();\r\n TrackEvent(\"FRONTPAGE\", \"templates\", key);\r\n }}\r\n >\r\n \r\n \r\n
\r\n
\r\n
{key}
\r\n
\r\n
\r\n \r\n {txt} {tokens.UNITS}\r\n
\r\n
\r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LandingPage;\r\n","import styled from \"styled-components\";\r\nimport { PrimaryColor } from 'global.styles';\r\n\r\nexport const StyledLoader = styled.div`\r\nposition: fixed;\r\nz-index: 99;\r\nbackground: #373E44;\r\nwidth: 100vw;\r\nheight: 100vh;\r\n//transition: opacity .2s linear;\r\npointer-events: none;\r\ndiv{\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n font-size: 4em;\r\n font-weight: bold;\r\n letter-spacing: 6px;\r\n color: ${PrimaryColor};\r\n animation: fadeInOut 2s linear both infinite;\r\n /*&:before{\r\n content: \"\";\r\n width: 100%;\r\n height: 100%;\r\n display: block;\r\n position: absolute;\r\n background: white;\r\n animation: loopLogo 2s ease-in-out both infinite;\r\n }*/\r\n}\r\n/*@keyframes fadeInOut{\r\n 0%{\r\n opacity: .2;\r\n }\r\n 50%{\r\n opacity: 1;\r\n }\r\n 100%{\r\n opacity: .2;\r\n }\r\n}\r\n@keyframes loopLogo{\r\n 0%{\r\n transform: translateX(0%);\r\n }\r\n 30%{\r\n transform: translateX(100%);\r\n }\r\n 70%{\r\n transform: translateX(100%);\r\n }\r\n 100%{\r\n transform: translateX(0%);\r\n }\r\n}*/\r\n\r\n&.active{\r\n opacity: 1;\r\n}\r\n&.in-active{\r\n opacity: 0;\r\n}\r\n`;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { PrimaryColor } from \"../../global.styles\";\r\nimport Icon from \"./Icon\";\r\n\r\ntype IconSize = \"small\" | \"large\";\r\ntype IconColor = \"primary\" | \"secondary\";\r\nconst StyledLoader = styled.div`\r\n svg{\r\n animation: loopIcon 1s linear both infinite;\r\n fill: ${PrimaryColor};\r\n }\r\n @keyframes loopIcon{\r\n 0%{\r\n transform: rotate(0);\r\n }\r\n 100%{\r\n transform: rotate(360deg);\r\n }\r\n }\r\n &.small{\r\n svg{\r\n width: 16px;\r\n height: 16px;\r\n }\r\n }\r\n &.secondary{\r\n svg{\r\n fill: white;\r\n }\r\n }\r\n`;\r\n\r\ninterface Props{\r\n size?: IconSize;\r\n color?: IconColor;\r\n}\r\n\r\nconst Loader = (props:Props) =>\r\n{\r\n\r\n return \r\n \r\n ;\r\n}\r\n\r\nexport default Loader;","import * as React from \"react\";\r\nimport {StyledLoader} from \"./Preloader.style\";\r\nimport Loader from \"../../elements/Loader\";\r\nimport { getLogo } from 'utils/utils';\r\n\r\ninterface Props{\r\n title?: string;\r\n active?: boolean;\r\n isdone?: boolean;\r\n langCode: string;\r\n productLine?: string;\r\n}\r\n\r\nconst Preloader = (props:Props) =>\r\n{\r\n const [done, updateDone] = React.useState(false);\r\n if(props.isdone){\r\n setTimeout(() => updateDone(true), 500);\r\n }\r\n \r\n return (\r\n \r\n
\r\n {/*{props.title}
*/}\r\n \r\n \r\n
\r\n
\r\n );\r\n \r\n}\r\n\r\n\r\nexport default Preloader;","import styled from \"styled-components\";\r\nimport { PrimaryColor } from 'global.styles';\r\n\r\n\r\nexport const StyledPreview = styled.div`\r\nanimation: showPreview .3s both;\r\nposition: fixed;\r\nleft: 0;\r\ntop: 0;\r\nwidth: 100vw;\r\nheight: 100vh;\r\nz-index: 99;\r\nbackground: rgba(0,0,0,.9);\r\n> button{\r\n margin-left: auto;\r\n margin-right: 10px;\r\n margin-top: 10px;\r\n}\r\n\r\n.close{\r\n background: none;\r\n}\r\nsvg{\r\n stroke: rgba(0,0,0,.9) !important;\r\n stroke-width: 4px;\r\n fill: ${PrimaryColor};\r\n}\r\n\r\n\r\n>div{\r\n animation: showPreviewImage .3s both;\r\n\r\n position: absolute;\r\n top: calc(50% - 45vh);\r\n left: calc(50% - 45vw);\r\n transform: translate(-50%,-50%);\r\n width: 90vw;\r\n height: 90vh;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n > img{\r\n object-fit: contain;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n}\r\n\r\n@keyframes showPreviewImage{\r\n 0%{\r\n opacity: 0;\r\n transform: scale(.5);\r\n }\r\n 100%{\r\n opacity: 1; \r\n transform: scale(1);\r\n }\r\n}\r\n\r\n@keyframes showPreview{\r\n 0%{\r\n opacity: 0; \r\n }\r\n 100%{\r\n opacity: 1; \r\n }\r\n}\r\n`;","import * as React from \"react\";\r\nimport { StyledPreview } from \"./Preview.style\";\r\nimport IconButton from \"../../elements/IconButton\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { closePreview } from \"../../../state/cart/actions\";\r\n\r\n\r\n\r\ninterface Props{\r\n src: string;\r\n}\r\n\r\nconst Preview = (props:Props) =>\r\n{\r\n const dispatch = useDispatch();\r\n\r\n return \r\n dispatch(closePreview())}/>\r\n
\r\n \"preview\"\r\n
\r\n
;\r\n}\r\n\r\nexport default Preview;","import * as React from \"react\";\r\nimport { StyledText } from './Textfield.style';\r\n\r\ninterface Props{\r\n title?: string;\r\n value? : string;\r\n required?: boolean;\r\n type?: string;\r\n min?: number;\r\n max?: number;\r\n onChange?: (e:string) => void;\r\n}\r\n\r\nconst NumberField = (props:Props) =>\r\n{\r\n const [changed, updateChange] = React.useState(props.value ? true : false);\r\n const [error, updateError] = React.useState(false);\r\n const changeInput = (e:React.SyntheticEvent) =>\r\n {\r\n if(e.currentTarget.value.length > 0)\r\n {\r\n updateChange(true);\r\n }\r\n else\r\n {\r\n updateChange(false);\r\n }\r\n if(props.onChange)\r\n {\r\n if(props.min && props.max)\r\n {\r\n const val = parseInt(e.currentTarget.value);\r\n if(val < props.min)\r\n {\r\n props.onChange(props.min.toString());\r\n updateError(true);\r\n }\r\n else if(val > props.max)\r\n {\r\n props.onChange(props.max.toString());\r\n updateError(true);\r\n }\r\n else\r\n {\r\n props.onChange(e.currentTarget.value); \r\n updateError(false);\r\n }\r\n }\r\n else\r\n {\r\n props.onChange(e.currentTarget.value); \r\n } \r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default NumberField;","import * as React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport IconButton from \"../elements/IconButton\";\r\nimport {TrackEvent} from \"../../helpers/Tracking\";\r\n\r\nconst StyledCookie = styled.div`\r\n position: fixed;\r\n left: 0;\r\n bottom: 0;\r\n background: rgba(255,255,255,.9);\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n z-index: 99;\r\n > a{\r\n margin-left: auto;\r\n margin-right: auto;\r\n font-size: 10px;\r\n }\r\n`;\r\n\r\ninterface Props{\r\n text?: string;\r\n}\r\n\r\nexport const Cookie = (props:Props) =>\r\n{\r\n const text:string = props.text ? props.text : \"\";\r\n const [didAccept, updateAccept] = React.useState(false);\r\n return (!didAccept ? \r\n \r\n {updateAccept(true); setCookie(); TrackEvent(\"COOKIE\",\"dismissed\");}}/>\r\n : null);\r\n}\r\n\r\n\r\nexport const checkCookie = ():boolean =>\r\n{\r\n if (document.cookie.split(';').filter((item) => item.includes('flex1one-configurator=1')).length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport const setCookie = () =>\r\n{\r\n if (document.cookie.replace(/(?:(?:^|.*;\\s*)flex1one-configurator\\s*=\\s*([^;]*).*$)|^.*$/, \"$1\") !== \"1\") {\r\n \r\n document.cookie = `flex1one-configurator=1; expires=Fri, 31 Dec ${new Date().getFullYear() + 1} 23:59:59 GMT`;\r\n }\r\n}","import React from 'react';\r\nimport { getImage } from './utils/utils';\r\nimport { RepoState, Product } from 'typings/repo';\r\nimport { getModuleInfo } from './state/repo';\r\nimport { Module } from 'typings/configuration';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { selectModule } from './state/configuration/actions';\r\nimport { RootState } from './state/state';\r\n\r\nconst IMAGE_SIZE = 60;\r\n\r\nconst ProductLine = (product: Product) =>\r\n{\r\n return (<>

{product.title}

\r\n {product.id});\r\n}\r\n\r\ninterface ModuleInfoViewProps\r\n{\r\n repo: RepoState;\r\n module: Module;\r\n}\r\n\r\nconst ModuleInfoView = (props: ModuleInfoViewProps) =>\r\n{\r\n const dispatch = useDispatch();\r\n const moduleInfo = getModuleInfo(props.repo, props.module);\r\n return
{ dispatch(selectModule(undefined)); setTimeout(() => dispatch(selectModule(moduleInfo.id)), 100) }}>\r\n {moduleInfo.base ? () : null}\r\n {moduleInfo.cupboard ? () : null}\r\n {moduleInfo.panel ? () : null}\r\n {moduleInfo.tabletop ? () : null}\r\n {moduleInfo.cabinet ? () : null}\r\n
\r\n}\r\nconst Debug = () =>\r\n{\r\n const state = useSelector((state: RootState) => state);\r\n const r = React.createRef(); \r\n React.useEffect(() => {\r\n if(r.current)\r\n {\r\n r.current.addEventListener(\"touchmove\", function(e){ e.preventDefault()});\r\n } \r\n },[]);\r\n \r\n return (
\r\n
\r\n
\r\n {state.configuration.left.map((e) => )}\r\n
\r\n
\r\n {state.configuration.corner ? : null}\r\n
\r\n
\r\n {state.configuration.right.map((e) => )}\r\n
\r\n
);\r\n}\r\n\r\nexport default Debug;","var _linearGradient;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgSizeDrawing = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"svg8\",\n viewBox: \"0 0 54.380447 39.141575\",\n height: \"39.141575mm\",\n width: \"54.380447mm\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"defs\", {\n id: \"defs2\"\n }, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"linearGradient3725\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n id: \"stop3721\",\n offset: 0,\n style: {\n stopColor: \"#000000\",\n stopOpacity: 1\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n id: \"stop3723\",\n offset: 1,\n style: {\n stopColor: \"#000000\",\n stopOpacity: 0\n }\n })), _linearGradient || (_linearGradient = /*#__PURE__*/React.createElement(\"linearGradient\", {\n gradientTransform: \"translate(-54.050595,-78.467858)\",\n gradientUnits: \"userSpaceOnUse\",\n y2: 112.35863,\n x2: 91.470238,\n y1: 100.98399,\n x1: 90.069824,\n id: \"linearGradient3727\",\n xlinkHref: \"#linearGradient3725\"\n }))), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.11736423,-0.06548906)\",\n id: \"layer1\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"path3713\",\n d: \"M -0.0621523,39.086845 36.019235,22.51613\",\n style: {\n fill: \"none\",\n stroke: \"#000000\",\n strokeWidth: \"0.26458332px\",\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeOpacity: 1\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path3715\",\n d: \"M 54.193565,33.741445 36.019233,22.51613\",\n style: {\n fill: \"none\",\n stroke: \"#000000\",\n strokeWidth: \"0.26458332px\",\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeOpacity: 1\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path3717\",\n d: \"M 36.019233,0.06548906 V 22.51613\",\n style: {\n fill: \"none\",\n stroke: \"#000000\",\n strokeWidth: \"0.26458332px\",\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeOpacity: 1\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path3719\",\n d: \"M 36.019233,22.516131 -0.0621523,39.086845 54.193565,33.741445 Z\",\n style: {\n opacity: 0.203,\n fill: \"url(#linearGradient3727)\",\n fillOpacity: 1,\n stroke: \"none\",\n strokeWidth: \"0.26458332px\",\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeOpacity: 1\n }\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgSizeDrawing, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/size-drawing.718a6fd4.svg\";\nexport { ForwardRef as ReactComponent };","import { useSelector } from \"react-redux\";\r\nimport { RootState } from './state/state';\r\nimport React from 'react';\r\nimport { Helmet } from \"react-helmet\";\r\n\r\nconst Head: React.FC = () =>\r\n{\r\n const state = useSelector((state: RootState) => state);\r\n const tokens = state.repo.translations;\r\n\r\n return (\r\n \r\n \r\n {tokens.PAGE_TITLE}\r\n \r\n );\r\n}\r\n\r\nexport default Head;","import React from \"react\";\r\nimport \"./App.css\";\r\nimport Header from \"./components/layout/Header\";\r\nimport Sidebar from \"./components/layout/Sidebar/Sidebar\";\r\nimport Configurator from \"./components/layout/Configurator/Configurator\";\r\n\r\nimport { sendShareMail } from \"./components/billing/CheckoutMail\";\r\nimport Popup from \"./components/dialogue/Popup\";\r\nimport LandingPage from \"./components/layout/Welcome/LandingPage\";\r\nimport Preloader from \"./components/layout/Configurator/Preloader\";\r\nimport Preview from \"./components/layout/Sidebar/Preview\";\r\nimport TextField from \"./components/elements/TextField\";\r\nimport NumberField from \"./components/elements/NumberField\";\r\nimport Button from \"./components/elements/Button\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { RootState } from \"./state/state\";\r\nimport { checkCookie, Cookie } from \"./components/dialogue/Cookie\";\r\nimport { getUrlConfiguration, validateEmail, DEBUG_MODE } from \"./utils/utils\";\r\nimport Loader from \"./components/elements/Loader\";\r\nimport { setLanguage } from \"./state/repo/actions\";\r\nimport Debug from \"./Debug\";\r\nimport { setCurrency, setConstraint } from \"state/cart/actions\";\r\nimport ReactGA from \"react-ga\";\r\nimport { UA_ID, TrackEvent } from \"./helpers/Tracking\";\r\nimport { shareUrl } from \"./utils/utils\";\r\nimport Row from \"components/layout/Sidebar/Row\";\r\nimport { ReactComponent as SizeDocument } from \"./icons/size-drawing.svg\";\r\nimport {\r\n saveConfiguration,\r\n loadConfiguration,\r\n} from \"state/configuration/actions\";\r\nimport { api } from \"api/Api\";\r\nimport { setModulesFromMeasurements } from \"helpers/configurationHelper\";\r\nimport { SidebarToggle } from \"components/layout/Sidebar/Sidebar.style\";\r\nimport IconButton from \"components/elements/IconButton\";\r\nimport { Cart } from \"typings/cart\";\r\nimport Head from \"Head\";\r\nimport { RepoState } from \"./typings/repo\";\r\n\r\nconst App: React.FC = () => {\r\n const [popup, updatePopup] = React.useState(false);\r\n const [save, updateSave] = React.useState(false);\r\n const [share, updateShare] = React.useState(false);\r\n const [project, updateProject] = React.useState(false);\r\n const [productLine, updateProductLine] = React.useState(false);\r\n const [currentProductLine, updateCurrentProductLine] = React.useState(\"\");\r\n const [productRedirect, updateProductRedirect] = React.useState(\"\");\r\n const [reset, updateReset] = React.useState(false);\r\n const [showMain, updateMain] = React.useState(false);\r\n const [mobileActive, updateMobileActive] = React.useState(false);\r\n const [showSize, updateSize] = React.useState({\r\n show: false,\r\n w: 1000,\r\n d: 1000,\r\n });\r\n const state = useSelector((state: RootState) => state);\r\n const dispatch = useDispatch();\r\n const debug = DEBUG_MODE;\r\n const tokens = state.repo.translations;\r\n const conf = getUrlConfiguration();\r\n const [loading, updateLoading] = React.useState(false);\r\n const [email, updateEmail] = React.useState(\"\");\r\n const [sent, updateSent] = React.useState(false);\r\n const [sentNotice, toggleSentNotice] = React.useState(false);\r\n const [shareNotice, toggleShareNotice] = React.useState(false);\r\n const [toggled, updateToggled] = React.useState(false);\r\n const [mobileToggled, updateMobileToggled] = React.useState(false);\r\n const [shareFields, updateShareFields] = React.useState({\r\n name: \"\",\r\n email: \"\",\r\n recipient: \"\",\r\n message: \"\",\r\n });\r\n\r\n const productLineUrl = window.location.pathname;\r\n\r\n React.useEffect(() => {\r\n //dev note. chrome and firefox has removed the option to write a custom text message for unload\r\n //initialize GA for event tracking\r\n ReactGA.initialize(UA_ID);\r\n }, [showMain, tokens.NOTIFICATION_EXIT]);\r\n\r\n React.useEffect(() => {\r\n // Change language to browser language on startup (save in cookie instead?)\r\n if (state.cart.currency !== \"\") return;\r\n const lang = conf\r\n ? conf.language\r\n : navigator.language.substring(0, 2).toLowerCase();\r\n const forceLang = getUrlConfiguration(true);\r\n if (!conf && forceLang?.language) {\r\n const action = setLanguage(forceLang.language);\r\n dispatch({\r\n type: forceLang?.project ? forceLang.project : \"grey\",\r\n });\r\n dispatch(action);\r\n const currency = (action.repo as RepoState).languages.find(\r\n (l) => l.code === action.repo.langCode\r\n );\r\n if (currency) {\r\n dispatch(setCurrency(currency.defaultCurrency));\r\n }\r\n } else {\r\n const action = setLanguage(lang);\r\n dispatch({\r\n type: forceLang?.project ? forceLang.project : \"grey\",\r\n });\r\n dispatch(action);\r\n const currency = (action.repo as RepoState).languages.find(\r\n (l) => l.code === action.repo.langCode\r\n );\r\n if (currency) {\r\n dispatch(setCurrency(currency.defaultCurrency));\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dispatch]);\r\n\r\n React.useEffect(() => {\r\n var path = window.location.pathname;\r\n path = path.substring(path.lastIndexOf(\"/\"));\r\n if (path.length === 12) {\r\n // length of id is 11, plus one for /\r\n if (\r\n window.location.href.indexOf(\"/HeavyDuty\") === -1 &&\r\n window.location.href.indexOf(\"/FLEXLINE-GREY\") === -1 &&\r\n window.location.href.indexOf(\"/FLEXLINE-BLACK\") === -1\r\n ) {\r\n window.location.assign(\r\n window.location.origin +\r\n \"/FLEXLINE-GREY\" +\r\n window.location.pathname +\r\n window.location.search\r\n );\r\n return;\r\n }\r\n path = path.substring(1);\r\n updateMain(true);\r\n dispatch(loadConfiguration(state.repo.langCode, path));\r\n }\r\n // load configuration from path\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dispatch]);\r\n\r\n React.useEffect(() => {\r\n const queryString = window.location.search;\r\n const urlParams = new URLSearchParams(queryString);\r\n const language = urlParams.get(\"lang\");\r\n const currency = urlParams.get(\"currency\");\r\n if (language) dispatch(setLanguage(language));\r\n if (currency) dispatch(setCurrency(currency));\r\n }, [dispatch, state.cart.productLine]);\r\n\r\n React.useEffect(() => {\r\n if (share) {\r\n dispatch(\r\n saveConfiguration(\r\n state.repo.project,\r\n \"\",\r\n state.configuration,\r\n state.cart.accessories,\r\n state.cart.additional\r\n )\r\n );\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [share, dispatch]);\r\n const showSent = () => {\r\n updateSent(true);\r\n toggleSentNotice(true);\r\n updateSave(false);\r\n setTimeout(() => {\r\n updateSent(false);\r\n toggleSentNotice(false);\r\n if (productRedirect !== \"\") {\r\n window.location.href = productRedirect;\r\n }\r\n }, 3000);\r\n };\r\n const showShared = () => {\r\n toggleShareNotice(true);\r\n setTimeout(() => {\r\n toggleShareNotice(false);\r\n }, 3000);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {state.cart.preview ? : null}\r\n \r\n
\r\n {tokens.SAVED_MESSAGE}\r\n
\r\n
\r\n {tokens.SHARED_MESSAGE}\r\n
\r\n updatePopup(!popup)} />\r\n \r\n

{tokens.RESET_CONFIRM}


\r\n