{"version":3,"sources":["helpers/routeHelper.ts","store/account/account.action-types.ts","store/account/account.actions.ts","types/application/response-code.types.ts","store/account/account.action-creators.ts","store/authentication/authentication.action-creators.ts","components/Header/Header.module.scss","assets/images/kingspan-logo.svg","config/config.ts","store/component-state/component-state.selectors.ts","store/component-state/component-state.actions.ts","store/component-state/component-state.action-types.ts","authentication/authProvider.ts","i18n.ts","components/Header/CultureSelect/useSupportedCultures.ts","helpers/memory-helper.ts","components/Header/CultureSelect/CultureSelect.mobile.tsx","components/Header/CultureSelect/CultureSelect.desktop.tsx","components/Header/CultureSelect/CultureSelect.tsx","components/Header/Navigation/Navigation.mobile.tsx","types/domain/navigation-item.types.ts","components/Header/Navigation/Navigation.tablet.tsx","components/Header/Navigation/Navigation.desktop.tsx","store/authentication/authentication.selectors.ts","store/account/account.selectors.ts","components/Header/Navigation/Navigation.tsx","components/Header/Header.tsx","types/domain/construction-data.types.ts","store/current-calculation-data/current-calculation-data.action-types.ts","store/current-calculation-data/current-calculation-data.actions.ts","store/current-calculation-data/current-calculation-data.reducer.ts","store/current-calculation-data/current-calculation-data.selectors.ts","helpers/calculation-response-helper.ts","store/current-calculation-data/current-calculation-data.action-creators.ts","components/Layout/ErrorBar.tsx","components/Footer/Address/Address.tsx","components/Footer/Contact/Contact.tsx","components/Footer/TechSupportBar/TechSupportBar.tsx","components/ChooseCountry/ChooseCountry.module.scss","common/links.ts","components/Footer/FooterLinks.tsx","components/Footer/Footer.tsx","components/Layout/Layout.module.scss","components/Layout/Layout.tsx","components/Layout/LayoutMinimal.tsx","store/construction-data/construction-data.action-types.ts","store/construction-data/construction-data.reducer.ts","store/component-state/component-state.reducer.ts","store/authentication/authentication.reducer.ts","store/account/account.reducer.ts","store/calculations/calculations.reducer.ts","store/news-item/news-item.reducer.ts","store/store.ts","store/calculations/calculations.action-types.ts","store/news-item/news-item.action-types.ts","theme/theme.module.scss","theme/theme.ts","store/construction-data/construction-data.selectors.ts","components/ConstructionTypeSelection/SignInDialog.tsx","components/ConstructionTypeSelection/ConstructionTypeSelection.tsx","store/news-item/news-item.actions.ts","store/news-item/news-item.selectors.ts","components/NewsItem/NewsItemBanner.module.scss","components/NewsItem/NewsItemBanner.tsx","store/news-item/news-item.action-creators.ts","components/CalculationProjectDetails/PerimeterAndArea/perimeter-area.types.ts","components/CalculationProjectDetails/PerimeterAndArea/PerimeterAndArea.module.scss","components/CalculationProjectDetails/PerimeterAndArea/PerimeterAndArea.tsx","components/CalculationProjectDetails/CalculationProjectDetails.tsx","components/CalculationLayer/MaterialDropDown.tsx","components/CalculationLayer/ThicknessSlider.tsx","components/CalculationLayer/NoSlider.tsx","components/CalculationLayer/MaterialParametersAux.tsx","components/CalculationLayer/MaterialParameters.tsx","components/CalculationLayer/AnchorParameters.tsx","components/CalculationLayer/AnchorPreCalculatedParameters.tsx","components/CalculationLayer/WoodPercentage.tsx","components/CalculationLayer/AirCavityThickness.tsx","components/CalculationLayer/AirCavity.tsx","components/Calculation/hyphenSuggestion.ts","components/Calculation/LayerName.tsx","components/CalculationLayer/CalculationLayer.tsx","components/FormatNumber/FormatNumber.tsx","components/RcValue/RcValue.tsx","components/Calculation/CalculationWizardControls.tsx","components/Calculation/Calculation.tsx","store/construction-data/construction-data.actions.ts","store/construction-data/construction-data.action-creators.ts","store/calculations/calculations.selectors.ts","components/EmailDialogs/EmailDialog.tsx","common/pdf.ts","store/calculations/calculations.action-creators.ts","store/calculations/calculations.actions.ts","components/CalculationResults/ThicknessBuildUp.tsx","components/CalculationResults/ThicknessComparison.tsx","components/CalculationResults/CalculationSummary.module.scss","components/CalculationResults/CalculationSummary.tsx","helpers/toast-helpers.ts","components/CalculationResults/CalculationResults.tsx","components/CalculationPage/CalculationStepper.module.scss","components/CalculationPage/CalculationStepper.tsx","components/CalculationPage/calculation-page.types.ts","components/CalculationPage/CalculationPage.tsx","store/component-state/component-state.action-creators.ts","components/ChooseCountry/ChooseCountry.tsx","components/App/CountryRoute.tsx","components/AccountDetails/PersonalInformation.tsx","components/AccountDetails/BusinessInformation.tsx","components/AccountDetails/AccountDetails.tsx","components/PasswordReset/PasswordReset.tsx","types/domain/calculation-data.types.ts","components/MyCalculations/MyCalculations.desktop.tsx","components/MyCalculations/MyCalculations.mobile.tsx","components/MyCalculations/MyCalculations.tsx","interceptors/interceptors.ts","components/App/CountriesProvider.tsx","components/App/App.tsx","index.tsx","isUnsupportedBrowser.ts"],"names":["buildRoute","store","relativeRoute","_a","_b","countryId","componentState","selectedCountry","buildRouteWithCountry","route","isEmpty","toLowerCase","startsWith","fetchUserSuccess","data","isNewUser","type","payload","user","ResponseCode","authenticationActionCreatorOverrides","console","log","debouncedFetchUser","debounce","async","dispatch","status","axios","withCredentials","CREATED","error","fetchUserFailure","fetchUser","AuthenticationActionCreators","loginSuccessful","AuthenticationActions","LoginSuccess","appConfig","setAppConfig","newAppConfig","getAppConfig","activeConstructionLayerSelector","constructionData","layers","activeConstructionTypeId","filter","l","constructionLayerId","activeConstructionLayerId","activeConstructionTypeIdSelector","activeConstructionTypeSelector","types","find","ct","id","countriesSelector","countries","isLoadingCountriesSelector","countrySelector","countryIdSelector","calculationResultLoadingStateSelector","isCalculationResultLoading","isLoadingSelector","isLoading","isLoadingConstructionTypesSelector","isLoadingConstructionTypes","errorSelector","calculationResultErrorSelector","calculationResultError","selectedCultureSelector","selectedCulture","downloadingCalculationIdSelector","downloadingCalculationId","getIsGtmContainerSet","isGtmContainerSet","projectConfigSelector","projectConfig","countiesSelector","counties","fieldDataSelector","fieldData","setActiveConstructionType","constructionType","setActiveConstructionLayer","setCountries","setSelectedCulture","setProjectConfig","config","setCounties","setFieldData","currentLocale","undefined","baseAuthConfig","auth","clientId","azureB2CConfig","postLogoutRedirectUri","window","location","origin","redirectUri","validateAuthority","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","getAuthority","policyName","authority","policies","buildAuthenticationParameters","extraQueryParameters","launchRedirectToPasswordReset","myMSALObj","UserAgentApplication","Object","assign","setTimeout","loginRedirect","toast","info","i18n","t","autoClose","checkAndRedirectIfIsForgotPasswordError","errorMessage","indexOf","err","authProviderInternal","authProviderFactory","MsalAuthProvider","scopes","loginType","useRedirectLoginType","LoginType","Redirect","Popup","tokenRefreshUri","registerErrorHandler","handleRedirectCallback","response","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","debug","react","useSuspense","wait","interpolation","escapeValue","supportedCulturesPerCountry","useSelector","supportedCultures","setSupportedCultures","useState","useDispatch","useEffect","newSupportedCultures","toUpperCase","culture","some","supportedCulture","language","changeLanguage","locale","authProvider","authParams","getAuthenticationParameters","setAuthenticationParameters","changeAuthProviderLocale","localStorage","setItem","setCulture","newCulture","CultureSelectMobile","props","useTranslation","handleCultureSelection","anchorElement","handleMenuButtonClick","handleClose","React","ListItem","button","onClick","ListItemIcon","Avatar","PublicIcon","ListItemText","primary","Menu","anchorEl","keepMounted","open","onClose","map","MenuItem","key","CultureSelectDesktop","Button","Grid","container","spacing","item","CultureSelect","useSupportedCultures","isTablet","useMediaQuery","theme","breakpoints","between","isMobile","down","setAnchorElement","event","currentTarget","useStyles","makeStyles","createStyles","signedInAvatar","color","palette","getContrastText","deepPurple","backgroundColor","drawerList","minWidth","link","textDecoration","NavigationMobile","isAuthenticated","navigationItems","handleSignInClick","handleSignOutClick","classes","drawerOpen","setDrawerOpen","Box","IconButton","MenuIcon","Drawer","anchor","className","List","dense","CloseIcon","navigationItem","show","RouterLink","to","icon","translationKey","ListItemAvatar","src","getInitials","secondary","getUserName","name","givenName","familyName","NavigationItemId","NavigationTablet","justify","alignItems","MY_ACCOUNT","Link","component","variant","signInLinkContainer","marginRight","signedInWelcome","NavigationDesktop","marginBottom","Divider","style","float","isAuthenticatedSelector","authenticationState","initialized","state","AuthenticationState","Authenticated","isAuthenticationInitialized","loggedInUserSelector","accountData","loggedInUser","uploadCompanyLogoSelector","uploadCompanyLogoState","isConfirmedGuestSelector","isConfirmedGuest","Navigation","navigationProps","NEW_CALCULATION","AddRoundedIcon","MY_CALCULATIONS","FolderIcon","AccountCircleIcon","login","logout","Header","styles","href","logo","alt","Category","LayerType","Complexity","ConstructionTypeAdditionalParameters","setThickness","thicknessMillimetres","isLinkedLayer","setAnchorDiameter","diameterOfAnchorsMillimetres","setAnchorAmountPerSquareMetre","numberOfAnchorsPerMetreSquare","setAnchorPenetration","anchorPenetrationDepthMillimetres","setNetAreaPerMetreSquare","netAreaOfAnchorsPerMetreSquareMillimetresSqrd","setWoodPercentage","percentage","initialState","calculationLayers","getCalculationLayerKey","toString","currentCalculationResultSelector","currentCalculationData","calculationResult","currentCalculationDataSelector","currentSelectedMaterialSelector","isLinkedMaterial","material","currentSelectedAirCavityGradingSelector","airCavityGrading","currentSelectedThicknessSelector","previousInsulationCalculationLayerSelector","_c","_d","_e","constructionLayers","insluationLayerIndexes","cl","index","layer","layerType","Insulation","layerId","length","currentAnchorPropertiesSelector","projectDetailsSelector","projectDetails","additionalParametersSelector","additionalParameters","__rest","s","e","p","prototype","hasOwnProperty","call","getOwnPropertySymbols","i","propertyIsEnumerable","mapApiResponseToCalculcation","calc","result","startDate","parseISO","createdOn","updatedOn","reduce","obj","getDefaultMaterial","materials","m","isDefaultLayerMaterial","getDefaultLinkedMaterial","parentMaterial","linkedMaterials","getDefaultAirCavityGrading","airCavityGradings","ac","isDefaultLayerAirCavityGrading","mapToCalculationLayers","mappingFunction","applyAutomaticBridgedInsulationAndAirCavityScenario","bridgedInsulationLayerId","isWithinBridgingFrame","bridgingLayerId","Bridging","bridgedAirCavityLayerId","AirCavity","insulationLayer","airLayer","availableGradings","noAirLayerGrading","a","airCavityGradingId","defaultAirCavityGradingId","g","forEach","defaultMaterial","defaultLinkedMaterial","defaultThicknessMillimetres","buildCalculationLayersFromSaved","calculation","_f","_g","_h","savedReferenceLayer","values","calculationLayer","materialId","WoodPercentage","woodPercentage","Anchors","defaultDiameterOfAnchorsMillimetres","defaultNumberOfAnchorsPerMetreSquare","defaultAnchorPenetrationMillimetres","AnchorsPreCalculated","siteArea","county","size","ribaStatus","buildingUse","postcode","linkedLayer","setAirCavityGrading","getState","setAirCavityGradingInternal","setMaterialParameter","debouncedDispatchCalculationAttempt","setMaterial","setMaterialInternal","optionalDispatch","currentValue","options","action","optionsForNumberOfAnchorsPerMetreSquare","optionsForDiameterOfAnchorsMillimetres","optionsForAnchorPenetrationMillimetres","nextAirLayer","getNextAirCavityLayer","constructionTypeId","airLayers","insulationLayerIndex","defaultGrading","value","complexity","Simple","Complex","bridgingLayer","airCavityLayer","setCalculatedLayerValue","dispatchCalculationAttempt","dispatchCalculationAttemptInternal","buildCalculationData","fetchCalculationResultsSuccess","AxiosError","isNaN","fetchCalculationResultsFailure","message","constructionTypeLayers","pseudoLayers","isPseudoLayer","woodPercentageLayerId","entries","kvp","calculationId","calculationAccessCode","clientTimestamp","Date","getTime","cultureOfUser","formatDate","areaMetresSquared","perimeterMetres","date","getFullYear","appendLeadingZero","getMonth","getDate","n","ErrorBar","warn","my","Alert","severity","address","fontStyle","Address","Typography","parse","text","Contact","label1","contactNumber1","label2","contactNumber2","padding","iconContainer","justifyContent","display","contactInfo","fontSize","typography","caption","paddingLeft","techSupportContainer","grey","techLink","TechSupportBar","xs","textAlign","MailIcon","PhoneIcon","getLinks","previouslySelectedCountryId","getItem","i18nextLng","defaultLinks","cookiePolicy","privacyPolicy","marketingConsent","termsAndConditions","footerLinks","links","linkDatas","i18nKey","defaultName","width","paddingBottom","linkData","sm","target","rel","Trans","CookieControl","title","up","h1","h2","h3","h6","paddedGrid","Footer","md","paddingTop","FooterLinks","Layout","children","script","document","createElement","body","appendChild","removeChild","Container","disableGutters","LayoutMinimal","getPreviouslySelectedCulture","navigator","initializing","Unauthenticated","calculations","deletingCalculations","middleware","thunk","createStore","combineReducers","componentStateReducer","constructionDataReducer","newState","cloneDeep","latestNames","nameLocalized","he","constructionTypeNameLocalized","currentCalculationDataReducer","airLayerThickness","Math","max","currentGrading","keys","authenticationReducer","Initializing","Initialized","AcquiredIdTokenSuccess","idToken","AcquiredAccessTokenSuccess","accessToken","AcquiredAccessTokenError","account","LoginError","AcquiredIdTokenError","LogoutSuccess","AuthenticatedStateChanged","accountReducer","gdprConsent","OK","ok","calculationsReducer","calcs","c","newsItem","content","composeWithDevTools","applyMiddleware","themeOptions","lg","xl","direction","mixins","toolbar","minHeight","overrides","common","black","white","main","themeStyles","light","dark","contrastText","A100","A200","A400","A700","contrastThreshold","tonalOffset","disabled","hint","divider","background","paper","default","active","hover","hoverOpacity","selected","disabledBackground","shadows","htmlFontSize","parseInt","fontFamily","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","fontWeight","lineHeight","letterSpacing","h4","h5","subtitle1","subtitle2","body1","body2","textTransform","overline","shape","borderRadius","transitions","easing","easeInOut","easeOut","easeIn","sharp","duration","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","zIndex","mobileStepper","speedDial","appBar","drawer","modal","snackbar","tooltip","createMuiTheme","constructionDataSelector","constructionTypesSelector","constructionCategoriesSelector","sort","b","category","localeCompare","self","constructionTypeNameSelector","root","margin","closeButton","position","right","top","fullWidthButton","marginTop","SignInDialog","isMobileView","useStore","reasons","closeWindow","cont","setIsConfirmedGuest","Dialog","fullWidth","maxWidth","DialogTitle","disableTypography","DialogContent","reason","ArrowRightIcon","DialogActions","AzureAD","provider","reduxStore","flexGrow","media","height","backgroundSize","backgroundPosition","ConstructionTypeSelection","history","useHistory","apiUrl","constructionTypes","categories","country","countryIdUpper","setOpen","selectedType","setSelectedType","resultType","calculationResultType","resultTypePlural","calculationStandardName","CircularProgress","Card","CardActionArea","selectedConstructionType","push","CardMedia","image","CardContent","gutterBottom","fetchNewsItemFailure","newsItemContentSelector","NewsItemBanner","fetchNewsItem","params","currentConstructionType","oldConstructionType","stopPropagation","url","AlertTitle","subject","PerimeterAreaConstants","defaultPerimeter","defaultArea","PerimeterAndArea","getHelperText","maxValue","gte","maxPerimeter","InputLabel","htmlFor","TextField","inputProps","inputMode","min","defaultMinimum","perimeter","gt","helperText","onChange","perimeterValue","Number","setPerimeter","updatePerimeter","maxArea","area","areaValue","setArea","updateArea","toFixed","formControl","CalculationProjectDetails","_j","handleContinue","activeConstructionType","constructionTypeName","projectName","setProjectName","setStartDate","countiesFiltered","countyName","setCountyName","sizes","fieldName","statuses","uses","siteAreas","fieldNames","includes","projectSize","setProjectSize","projectType","setProjectType","projectRibaStatus","setRIBAStatus","projectBuidingUse","setBuildingUse","projectPostcode","setPostcode","setSiteArea","onContinueClick","validate","isValid","setProjectDetails","setAdditionalParameters","mx","label","MuiPickersUtilsProvider","utils","DateFnsUtils","localeCode","locales","Locales","replace","substring","getLocale","KeyboardDatePicker","disableToolbar","format","inputVariant","FormControl","Select","labelId","code","FormHelperText","MaterialDropDown","currentSelectedMaterial","parentSelectedMaterial","useStyle","depthDropdownContainer","ThicknessSlider","labelKey","handleChange","selectedThickness","marks","defaultValue","units","isValueFixed","setValue","Slider","handleChangeInternal","newValue","onChangeCommitted","valueLabelDisplay","step","thicknesses","displayEmpty","mark","NoSlider","MaterialParametersAux","currentSelectedThickness","isFixedLayer","optionsForThicknessMillimetres","MaterialParameters","currentSelectedMatrial","AnchorParameters","_k","previousInsulationLayer","setOptionsForAnchorPenetrationMillimetres","o","defaultMarks","areaMarks","currentWoodPercentage","round","defaultWoodPercentage","AirCavityThickness","currentSelectedAcg","handleThicknessChange","softHyphenChar","String","fromCharCode","insertSuggestedHyphenation","layerName","split","word","slice","join","getText","insertSuggestedHyphenationIfRequired","userAgent","LayerName","renderControls","selectedMaterial","AnchorPreCalculatedParameters","CalculationLayer","layerTooltipText","Tooltip","enterTouchDelay","InfoIcon","renderLayerHeader","FormatNumber","toFormat","toLocaleString","minimumFractionDigits","maximumFractionDigits","wrapper","resultProgress","left","marginLeft","loadingClass","opacity","RcValue","resultValue","resultUnits","totalThicknessMillimetres","CalculationWizardControls","activeStepIndex","steps","handleBackClick","handleNextClick","startIcon","KeyboardArrowLeftIcon","renderLabel","endIcon","KeyboardArrowRightIcon","Calculation","handleNextStep","handlePreviousStep","hasSteps","fetchConstructionLayersForTypeSuccess","fetchConstructionLayersForTypeFailure","fetchConstructionLayersForType","refetch","headers","dataWithPseudoLayers","constructPseudoLayers","startNewCalculation","newCalculationStarted","defaultAirCavityGrading","fetchConstructionLayersForCalculation","copy","startCopyCalculation","copyCalculationStarted","startEditCalculation","editCalculationStarted","Error","pseudoLayer","calculationArraySelector","compareDesc","deletingCalculationsSelector","buttonWrapper","buttonProgress","checkboxLabel","checkbox","EmailDialog","handleSend","sending","guestEmail","setGuestEmail","sendingState","setSendingState","gdprConsentGiven","setGdprConsentChecked","directMarketingConsentLink","privacyPolicyLink","FormControlLabel","control","Checkbox","checked","defaults","components","anchorlinkMarketing","anchorlinkPrivacy","labelPlacement","fetchCalculation","fetchCalculationSuccess","mapApiResponseArrayToCalculcationObjectCollection","fetchCalculationFailure","downloadCalculation","emailAddress","downloadCalculationAttempt","downloadCalculationSuccess","downloadCalculationFailure","directDownloadCalculation","downloadPdfCalculationAttempt","responseType","filename","downloadPdf","blob","Blob","download","URL","createObjectURL","click","downloadPdfCalculationSuccess","downloadPdfCalculationFailure","materialName","buildUpContainer","buildUpMaterial","borderColor","buildUpMaterialInsulation","borderTopRightRadius","borderBottomRightRadius","buildUpMaterialInnerWall","borderTopLeftRadius","borderBottomLeftRadius","constructionThicknessBracket","thicknessLabel","kingSpan","ThicknessBuildUp","border","isKingspanProduct","layerThicknessPercentageNormalised","borderRight","borderLeft","borderBottom","totalConstructionThicknessMillimetres","tagLine","ThicknessComparison","thicknessComparison","sourceMaterialName","sourceTotalConstructionThicknessMillimetres","comparisonMaterialName","comparisonTotalConstructionThicknessMillimetres","layerThicknessSavingPercentage","summaryContainer","summary","panelsContainer","panel","verticalAlign","compliant","nonCompliant","CalculationSummary","results","resultLayer","constructionLayer","getAvailableMaterials","calculationLayerKey","x","isBengCompliant","align","CheckCircleIcon","CancelIcon","displayPdfDownloadToast","success","CalculationResults","handleBack","guestDialogOpen","setGuestDialogOpen","downloadingState","setDownloadingState","TagManager","dataLayer","isInitialised","current","handleDownloadClick","calculationName","handleDirectDownloadClick","hyphens","CalculationStepper","isTabletView","handleBreadcrumbStepChange","toNumber","Stepper","nonLinear","alternativeLabel","activeStep","Step","StepButton","StepLabel","StepIconComponent","StepIcon","SelectedIcon","CalculationStep","constructor","this","CalculationStage","CalculationPage","useParams","search","useLocation","constructionLayerSelector","calculationSelector","isCopy","setActiveStepIndex","setSteps","selectStep","stepToSelect","urlParts","calculationStage","setCalculationStage","INITIALIZING","layerSteps","finishStep","isResultsStep","searchParams","URLSearchParams","has","get","parseSearch","layerIndex","findIndex","CALCULATION","RESULTS","PROJECT_DETAILS","stepper","newStepIndex","ChooseCountry","kingspanLogo","localizedName","CountryRoute","match","useRouteMatch","isAnalyticalCookiesAccepted","getIsAnalyticalCookiesAccepted","cookieControl","cookies","cookie","trim","decodeURIComponent","getCookies","optionalCookies","JSON","AnalyticalCookies","setPreviouslySelectedCountryId","gtmTrackingIds","gtmTrackingId","tagManagerArgs","gtmId","initialiseGTMContainer","setSelectedCountry","closeOnClick","fetchProjectConfig","Route","PersonalInformation","phone","companyLogo","BusinessInformation","uploadSuccessful","companyLogoBase64","uploadCompanyLogo","file","fileName","files","formData","FormData","append","uploadCompanyLogoSuccess","BAD_REQUEST","uploadCompanyLogoBadRequest","errorCode","args","uploadCompanyLogoFailure","accept","companyName","streetAddress","city","postalCode","AccountDetails","PasswordReset","accountInfo","CalculationResultType","table","progressContainer","MyCalculationsDesktop","handleDeleteClick","isDeleting","isDownloading","isCalculationDownloading","only","TableContainer","Paper","Table","TableHead","TableRow","TableCell","RValue","TableBody","scope","FileCopyIcon","EditIcon","EmailIcon","GetAppIcon","DeleteIcon","nested","MyCalculationsMobile","displayableCalculations","setDisplayableCalculations","opens","setOpens","groupBy","acc","getProjectStartDate","subheader","ListSubheader","handleItemClick","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","disablePadding","ListItemSecondaryAction","edge","MyCalculations","isAuthInitialized","deletingCalculationsStore","deletingCalculationIds","setDeletingCalclationIds","deleteCalculationAttempt","deleteCalculationSuccess","deleteCalculationFailure","deleteCalculation","axiosDefault","baseURL","request","Promise","reject","getIdToken","rawIdToken","CountriesProvider","isLoadingCountries","showAllCountries","fetchConstructionTypesSuccess","fetchConstructionTypesFailure","fetchConstructionTypes","fetchConstructionTypeNamesSuccess","fetchConstructionTypeNames","Loader","App","registerReduxStore","interceptors","Provider","ThemeProvider","I18nextProvider","CssBaseline","Suspense","fallback","BrowserRouter","Switch","exact","path","forceLogin","render","Msal","ToastContainer","browser","cmp","version","isUnsupportedBrowser","detect","unsupportedBrowserBannerEl","getElementById","clientConfig","fetch","json","configData","ReactDOM"],"mappings":"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","file":"static/js/main.2c10e35b.js","sourcesContent":["import { isEmpty } from 'lodash';\nexport const buildRoute = (store, relativeRoute) => {\n var _a, _b;\n const countryId = (_b = (_a = store.componentState.selectedCountry) === null || _a === void 0 ? void 0 : _a.countryId) !== null && _b !== void 0 ? _b : '';\n return buildRouteWithCountry(countryId, relativeRoute);\n};\nexport const buildRouteWithCountry = (countryId, route) => {\n if (isEmpty(countryId)) {\n return '/';\n }\n return `/${countryId === null || countryId === void 0 ? void 0 : countryId.toLowerCase()}${route.startsWith('/') ? '' : '/'}${route}`;\n};\n","export const FETCH_USER_ATTEMPT = '[Account] Fetch User Attempt';\nexport const FETCH_USER_SUCCESS = '[Account] Fetch User Success';\nexport const FETCH_USER_FAILURE = '[Account] Fetch User Failure';\nexport const UPLOAD_COMPANY_LOGO_ATTEMPT = '[Account] Upload Company Logo Attempt';\nexport const UPLOAD_COMPANY_LOGO_SUCCESS = '[Account] Upload Company Logo Success';\nexport const UPLOAD_COMPANY_LOGO_BAD_REQUEST = '[Account] Upload Company Logo Bad Request';\nexport const UPLOAD_COMPANY_LOGO_FAILURE = '[Account] Upload Company Logo Attempt Failure';\nexport const GDPR_CONSENT_RESPONSE_SELECTED = '[Account] GDPR Consent response selected';\nexport const RECORD_GDPR_CONSENT_SUCCESS = '[Account] Record GDPR Consent response success';\nexport const RECORD_GDPR_CONSENT_FAILURE = '[Account] Record GDPR Consent response failure';\nexport const RECORD_GDPR_CONSENT_ATTEMPT = '[Account] Record GDPR Consent response attempt';\nexport const SET_IS_CONFIRMED_GUEST = '[Account] Set IsConfirmedGuest';\n","import { FETCH_USER_ATTEMPT, FETCH_USER_SUCCESS, FETCH_USER_FAILURE, UPLOAD_COMPANY_LOGO_ATTEMPT, UPLOAD_COMPANY_LOGO_SUCCESS, UPLOAD_COMPANY_LOGO_BAD_REQUEST, UPLOAD_COMPANY_LOGO_FAILURE, GDPR_CONSENT_RESPONSE_SELECTED, RECORD_GDPR_CONSENT_SUCCESS, RECORD_GDPR_CONSENT_FAILURE, RECORD_GDPR_CONSENT_ATTEMPT, SET_IS_CONFIRMED_GUEST } from './account.action-types';\nexport const fetchUserAttempt = () => ({\n type: FETCH_USER_ATTEMPT,\n});\nexport const fetchUserSuccess = (data, isNewUser = false) => ({\n type: FETCH_USER_SUCCESS,\n payload: { user: data, isNewUser },\n});\nexport const fetchUserFailure = (error) => ({\n type: FETCH_USER_FAILURE,\n error,\n});\nexport const recordGDPRConsentSuccess = () => ({\n type: RECORD_GDPR_CONSENT_SUCCESS\n});\nexport const recordGDPRConsentFailure = () => ({\n type: RECORD_GDPR_CONSENT_FAILURE\n});\nexport const recordGDPRConsentAttempt = () => ({\n type: RECORD_GDPR_CONSENT_ATTEMPT\n});\nexport const GDPRConsentResponse = (consent) => ({\n type: GDPR_CONSENT_RESPONSE_SELECTED,\n payload: consent,\n});\nexport const uploadCompanyLogoAttempt = () => ({\n type: UPLOAD_COMPANY_LOGO_ATTEMPT\n});\nexport const uploadCompanyLogoSuccess = (data) => ({\n type: UPLOAD_COMPANY_LOGO_SUCCESS,\n payload: data,\n});\nexport const uploadCompanyLogoBadRequest = (error) => ({\n type: UPLOAD_COMPANY_LOGO_BAD_REQUEST,\n error,\n});\nexport const uploadCompanyLogoFailure = (error) => ({\n type: UPLOAD_COMPANY_LOGO_FAILURE,\n error,\n});\nexport const setIsConfirmedGuest = (isConfirmedGuest) => ({\n type: SET_IS_CONFIRMED_GUEST,\n payload: isConfirmedGuest,\n});\n","export var ResponseCode;\n(function (ResponseCode) {\n ResponseCode[ResponseCode[\"BAD_REQUEST\"] = 400] = \"BAD_REQUEST\";\n ResponseCode[ResponseCode[\"OK\"] = 200] = \"OK\";\n ResponseCode[ResponseCode[\"CREATED\"] = 201] = \"CREATED\";\n})(ResponseCode || (ResponseCode = {}));\n;\n","import axios, { AxiosError } from 'axios';\nimport { fetchUserAttempt, fetchUserSuccess, fetchUserFailure, uploadCompanyLogoSuccess, uploadCompanyLogoBadRequest, uploadCompanyLogoFailure, uploadCompanyLogoAttempt, recordGDPRConsentSuccess, recordGDPRConsentFailure, recordGDPRConsentAttempt, } from './account.actions';\nimport { ResponseCode } from '../../types/application/response-code.types';\nexport const fetchUser = (accountInfo) => async (dispatch) => {\n dispatch(fetchUserAttempt());\n try {\n const { data, status } = await axios.post('/api/user', {}, {\n withCredentials: true,\n });\n const isNewUser = status === ResponseCode.CREATED;\n dispatch(fetchUserSuccess(data, isNewUser));\n }\n catch (error) {\n dispatch(fetchUserFailure(error));\n }\n};\nexport const recordGDPRConsent = (consentGiven) => async (dispatch) => {\n dispatch(recordGDPRConsentAttempt());\n try {\n const { data } = await axios.post('api/user/record-gdpr-consent', consentGiven, {\n withCredentials: true,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n dispatch(recordGDPRConsentSuccess());\n dispatch(fetchUserSuccess(data));\n }\n catch (error) {\n dispatch(recordGDPRConsentFailure());\n }\n};\nexport const uploadCompanyLogo = (file, fileName) => async (dispatch) => {\n var _a, _b;\n dispatch(uploadCompanyLogoAttempt());\n try {\n const formData = new FormData();\n const blob = new Blob([file], { type: 'image/jpeg' });\n formData.append('companyLogoImage', blob, fileName); // TODO: test this change a bit more\n const { data } = await axios.post('api/user/upload-company-logo', formData, {\n withCredentials: true,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n dispatch(uploadCompanyLogoSuccess(Object.assign({}, data)));\n dispatch(fetchUserSuccess(data));\n }\n catch (error) {\n if (error instanceof AxiosError) {\n // const { status, data } = error.response;\n const status = (_a = error.response) === null || _a === void 0 ? void 0 : _a.status;\n const data = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data;\n if (status === ResponseCode.BAD_REQUEST) {\n dispatch(uploadCompanyLogoBadRequest({\n errorCode: data.errorCode,\n args: data.args,\n message: data.message,\n }));\n return;\n }\n dispatch(uploadCompanyLogoFailure(error.response));\n }\n }\n};\n","import { AuthenticationActionCreators, AuthenticationActions } from 'react-aad-msal';\nimport { debounce } from 'lodash';\nimport { fetchUser } from '../account/account.action-creators';\nexport const authenticationActionCreatorOverrides = (store) => {\n console.log('authenticationActionCreatorOverrides Loaded');\n const debouncedFetchUser = debounce((data) => {\n console.log('debouncedFetchUser');\n fetchUser(data)(store.dispatch);\n }, 250);\n AuthenticationActionCreators.loginSuccessful = (data) => {\n console.log('onLoginSuccessful');\n debouncedFetchUser(data);\n return {\n payload: data,\n type: AuthenticationActions.LoginSuccess,\n };\n };\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"header\":\"Header_header__OKWO7\",\"logo\":\"Header_logo__shVBB\",\"myaccountMenuContainer\":\"Header_myaccount_menu_container__ExG8J\"};","export default __webpack_public_path__ + \"static/media/kingspan-logo.1e103ca9.svg\";","let appConfig = null;\nexport function setAppConfig(newAppConfig) {\n appConfig = newAppConfig;\n}\nexport function getAppConfig() {\n return appConfig;\n}\n","export const activeConstructionLayerSelector = (store) => { var _a, _b; return (_b = store.constructionData.layers[(_a = store.componentState.activeConstructionTypeId) !== null && _a !== void 0 ? _a : '']) === null || _b === void 0 ? void 0 : _b.filter(l => l.constructionLayerId === store.componentState.activeConstructionLayerId)[0]; };\nexport const activeConstructionTypeIdSelector = (store) => store.componentState.activeConstructionTypeId;\nexport const activeConstructionTypeSelector = (store) => store.constructionData.types.find(ct => ct.id === store.componentState.activeConstructionTypeId);\nexport const countriesSelector = (store) => { var _a; return (_a = store.componentState.countries) !== null && _a !== void 0 ? _a : []; };\nexport const isLoadingCountriesSelector = (store) => store.componentState.countries === null;\nexport const countrySelector = (store) => store.componentState.selectedCountry;\nexport const countryIdSelector = (store) => { var _a, _b; return ((_b = (_a = store.componentState.selectedCountry) === null || _a === void 0 ? void 0 : _a.countryId) !== null && _b !== void 0 ? _b : '').toLowerCase(); };\nexport const calculationResultLoadingStateSelector = (store) => store.componentState.isCalculationResultLoading;\nexport const isLoadingSelector = (store) => store.componentState.isLoading;\nexport const isLoadingConstructionTypesSelector = (store) => store.componentState.isLoadingConstructionTypes;\nexport const errorSelector = (store) => store.componentState.error;\nexport const calculationResultErrorSelector = (store) => store.componentState.calculationResultError;\nexport const selectedCultureSelector = (store) => store.componentState.selectedCulture;\nexport const downloadingCalculationIdSelector = (store) => store.componentState.downloadingCalculationId;\nexport const getIsGtmContainerSet = (store) => store.componentState.isGtmContainerSet;\nexport const projectConfigSelector = (store) => store.componentState.projectConfig;\nexport const countiesSelector = (store) => { var _a; return (_a = store.componentState.counties) !== null && _a !== void 0 ? _a : []; };\nexport const fieldDataSelector = (store) => { var _a; return (_a = store.componentState.fieldData) !== null && _a !== void 0 ? _a : []; };\n","import { SET_ACTIVE_CONSTRUCTION_LAYER, SET_ACTIVE_CONSTRUCTION_TYPE, SET_COUNTRIES, SET_SELECTED_COUNTRY, SET_SELECTED_CULTURE, SET_GTM_CONTAINER, SET_PROJECT_CONFIG, SET_COUNTIES, SET_FIELD_DATA } from './component-state.action-types';\nexport const setActiveConstructionType = (constructionType) => ({\n type: SET_ACTIVE_CONSTRUCTION_TYPE,\n payload: constructionType,\n});\nexport const setActiveConstructionLayer = (constructionLayerId) => ({\n type: SET_ACTIVE_CONSTRUCTION_LAYER,\n payload: constructionLayerId,\n});\nexport const setCountries = (countries) => ({\n type: SET_COUNTRIES,\n payload: countries,\n});\nexport const setSelectedCountry = (country) => ({\n type: SET_SELECTED_COUNTRY,\n payload: country,\n});\nexport const setSelectedCulture = (selectedCulture) => ({\n type: SET_SELECTED_CULTURE,\n payload: selectedCulture,\n});\nexport const setGTMContainer = () => ({\n type: SET_GTM_CONTAINER\n});\nexport const setProjectConfig = (config) => ({\n type: SET_PROJECT_CONFIG,\n payload: config\n});\nexport const setCounties = (counties) => ({\n type: SET_COUNTIES,\n payload: counties\n});\nexport const setFieldData = (fieldData) => ({\n type: SET_FIELD_DATA,\n payload: fieldData\n});\n","export const SET_ACTIVE_CONSTRUCTION_TYPE = '[Component State] Set Active Construction Type';\nexport const SET_ACTIVE_CONSTRUCTION_LAYER = '[Component State] Set Active Construction Layer';\nexport const SET_COUNTRIES = '[Component State] Set Countries';\nexport const SET_SELECTED_COUNTRY = '[Component State] Set Selected Country';\nexport const SET_SELECTED_CULTURE = '[Component State] Set Selected Culture';\nexport const SET_GTM_CONTAINER = '[Component State] Set GTM Container';\nexport const SET_PROJECT_CONFIG = '[Component State] Set Project Config';\nexport const SET_COUNTIES = '[Component State] Set Counties';\nexport const SET_FIELD_DATA = '[Component State] Set FieldData';\n","import { MsalAuthProvider, LoginType } from 'react-aad-msal';\nimport { UserAgentApplication } from 'msal';\nimport i18n from 'i18next';\nimport { toast } from 'react-toastify';\nimport { getAppConfig } from '../config/config';\nlet currentLocale = undefined;\nconst baseAuthConfig = () => {\n var _a, _b;\n return {\n auth: {\n clientId: (_b = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.azureB2CConfig.clientId) !== null && _b !== void 0 ? _b : '',\n postLogoutRedirectUri: window.location.origin,\n redirectUri: window.location.origin,\n validateAuthority: false,\n // After being redirected to the 'redirectUri' page, should user\n // be redirected back to the Url where their login originated from?\n navigateToLoginRequestUrl: false,\n },\n cache: {\n cacheLocation: 'sessionStorage',\n storeAuthStateInCookie: true\n }\n };\n};\nexport function getAuthority(policyName) {\n var _a, _b;\n return `${(_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.azureB2CConfig.authority}${(_b = getAppConfig()) === null || _b === void 0 ? void 0 : _b.azureB2CConfig.policies[policyName]}`;\n}\nexport function buildAuthenticationParameters(policyName) {\n return {\n authority: getAuthority(policyName),\n extraQueryParameters: {\n 'ui_locales': currentLocale || 'qps-ploc'\n }\n };\n}\nexport const signUpSignInAuthConfig = () => (Object.assign(Object.assign({}, baseAuthConfig()), { auth: Object.assign(Object.assign({}, baseAuthConfig().auth), { authority: getAuthority('signUpSignIn') }) }));\nexport const resetPasswordAuthConfig = () => (Object.assign(Object.assign({}, baseAuthConfig()), { auth: Object.assign(Object.assign({}, baseAuthConfig().auth), { authority: getAuthority('resetPassword'), redirectUri: window.location.origin + '/password-reset' }) }));\nexport const updateDetailsAuthConfig = () => (Object.assign(Object.assign({}, baseAuthConfig()), { auth: Object.assign(Object.assign({}, baseAuthConfig().auth), { authority: getAuthority('updateDetails'), redirectUri: window.location.origin + '/account-updated' }) }));\nexport const changeAuthProviderLocale = (locale) => {\n const authProvider = authProviderFactory();\n const authParams = authProvider.getAuthenticationParameters();\n authProvider.setAuthenticationParameters(Object.assign(Object.assign({}, authParams), { extraQueryParameters: Object.assign(Object.assign({}, authParams.extraQueryParameters), { 'ui_locales': locale }) }));\n console.info(`AuthProvider locale changed to: ${locale}`);\n currentLocale = locale;\n};\nexport const launchRedirectToPasswordReset = () => {\n const myMSALObj = new UserAgentApplication(resetPasswordAuthConfig());\n setTimeout(() => myMSALObj.loginRedirect(buildAuthenticationParameters('resetPassword')), 1000);\n toast.info(i18n.t('navigation-ui.redirecting-ellipsis'), { autoClose: 900 });\n};\nexport const checkAndRedirectIfIsForgotPasswordError = (error) => {\n if (error.errorMessage.indexOf('AADB2C90118') > -1) {\n try {\n launchRedirectToPasswordReset();\n }\n catch (err) {\n console.log(err);\n }\n }\n};\n// The auth provider should be a singleton. Best practice is to only have it ever instantiated once.\n// Avoid creating an instance inside the component it will be recreated on each render.\n// If two providers are created on the same page it will cause authentication errors.\nlet authProviderInternal;\nexport default function authProviderFactory() {\n var _a, _b;\n if (!authProviderInternal) {\n authProviderInternal = new MsalAuthProvider(signUpSignInAuthConfig(), {\n scopes: ['openid']\n }, {\n loginType: ((_b = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.azureB2CConfig) === null || _b === void 0 ? void 0 : _b.useRedirectLoginType) ? LoginType.Redirect : LoginType.Popup,\n // When a token is refreshed it will be done by loading a page in an iframe.\n // Rather than reloading the same page, we can point to an empty html file which will prevent\n // site resources from being loaded twice.\n tokenRefreshUri: window.location.origin + '/auth.html'\n });\n authProviderInternal.registerErrorHandler((error) => {\n if (error) {\n console.log('authProvider errorHandler error:', error);\n // Check for forgot password error\n checkAndRedirectIfIsForgotPasswordError(error);\n }\n });\n authProviderInternal.handleRedirectCallback((error, response) => {\n if (error) {\n console.log('authProvider handleRedirectCallback error:', error);\n // Check for forgot password error\n checkAndRedirectIfIsForgotPasswordError(error);\n }\n });\n }\n return authProviderInternal;\n}\n;\n","import i18n from 'i18next';\nimport Backend from 'i18next-http-backend/cjs';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\ni18n\n // load translation using http -> see /public/locales\n // learn more: https://github.com/i18next/i18next-http-backend\n .use(Backend)\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: 'en',\n debug: false,\n // TODO: Remove these once the tests are fixed with Suspense\n react: {\n useSuspense: false,\n wait: false,\n },\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n});\nexport default i18n;\n","import { useState, useEffect } from 'react';\nimport { getAppConfig } from '../../../config/config';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { countryIdSelector, selectedCultureSelector } from '../../../store/component-state/component-state.selectors';\nimport { setSelectedCulture } from '../../../store/component-state/component-state.actions';\nimport { changeAuthProviderLocale } from '../../../authentication/authProvider';\nimport { setPreviouslySelectedCulture } from '../../../helpers/memory-helper';\nimport i18n from '../../../i18n';\nimport { isEmpty } from 'lodash';\nexport default () => {\n var _a, _b;\n const supportedCulturesPerCountry = (_b = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.supportedCulturesPerCountry) !== null && _b !== void 0 ? _b : {};\n const countryId = useSelector(countryIdSelector);\n const selectedCulture = useSelector(selectedCultureSelector);\n const [supportedCultures, setSupportedCultures] = useState([]);\n const dispatch = useDispatch();\n // As the country changes, load all the supported cultures for that country from the appConfig.\n // Also, handle any change in selected culture, to keep the various other components in sync.\n // But also ensure the selected culture is supported, and if not change back to default of en-GB.\n useEffect(() => {\n var _a;\n if (isEmpty(countryId)) {\n return;\n }\n const newSupportedCultures = (_a = supportedCulturesPerCountry[countryId === null || countryId === void 0 ? void 0 : countryId.toUpperCase()]) !== null && _a !== void 0 ? _a : [];\n setSupportedCultures(newSupportedCultures);\n const isValidCulture = selectedCulture === 'en-GB' || newSupportedCultures.some(supportedCulture => supportedCulture === selectedCulture);\n if (!isValidCulture) {\n console.info(`Selected culture ${selectedCulture} is not valid for country ${countryId}, so changing it to en-GB...`);\n dispatch(setSelectedCulture('en-GB'));\n }\n else if (!isEmpty(selectedCulture) && i18n.language !== selectedCulture) {\n console.info(`Selected culture set to: ${selectedCulture}`);\n // Change the internationalisation language to use the selected culture\n i18n.changeLanguage(selectedCulture);\n // Change the authentication provider's locale to the selected culture\n changeAuthProviderLocale(selectedCulture);\n // Remember the selected culture, for when user's return back to the site.\n // Whether that is by an Azure B2C full page refresh, or the user visting again sometime in the future.\n setPreviouslySelectedCulture(selectedCulture);\n }\n }, [selectedCulture, supportedCulturesPerCountry, countryId, dispatch]);\n return {\n supportedCultures,\n culture: selectedCulture,\n setCulture: (newCulture) => dispatch(setSelectedCulture(newCulture)),\n };\n};\n","export const getPreviouslySelectedCountryId = () => {\n return window && window.localStorage\n ? window.localStorage.getItem('previouslySelectedCountryId') || ''\n : '';\n};\nexport const setPreviouslySelectedCountryId = (countryId) => {\n if (window && window.localStorage) {\n window.localStorage.setItem('previouslySelectedCountryId', countryId);\n }\n};\nexport const getPreviouslySelectedCulture = () => {\n const culture = window && window.localStorage\n ? window.localStorage.getItem('previouslySelectedCulture') || ''\n : '';\n return culture !== '' ? culture : null;\n};\nexport const setPreviouslySelectedCulture = (culture) => {\n if (window && window.localStorage) {\n window.localStorage.setItem('previouslySelectedCulture', culture);\n }\n};\n","import React from 'react';\nimport { ListItem, ListItemIcon, ListItemText, Menu, MenuItem, Avatar } from '@material-ui/core';\nimport PublicIcon from '@material-ui/icons/Public';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty } from 'lodash';\nexport default function CultureSelectMobile(props) {\n const { t } = useTranslation();\n const { culture, supportedCultures, handleCultureSelection, anchorElement, handleMenuButtonClick, handleClose, } = props;\n if (isEmpty(supportedCultures)) {\n return null;\n }\n return (React.createElement(React.Fragment, null,\n React.createElement(ListItem, { button: true, \"aria-controls\": \"culture-menu\", \"aria-haspopup\": \"true\", onClick: handleMenuButtonClick },\n React.createElement(ListItemIcon, null,\n React.createElement(Avatar, null,\n React.createElement(PublicIcon, null))),\n React.createElement(ListItemText, { primary: t(`navigation-ui.${culture}`) })),\n React.createElement(Menu, { id: \"culture-menu\", anchorEl: anchorElement, keepMounted: true, open: !isEmpty(anchorElement), onClose: handleClose }, supportedCultures.map(supportedCulture => React.createElement(MenuItem, { key: supportedCulture, onClick: () => handleCultureSelection(supportedCulture) }, t(`navigation-ui.${supportedCulture}`))))));\n}\n","import React from 'react';\nimport { Button, Menu, MenuItem, Grid } from '@material-ui/core';\nimport PublicIcon from '@material-ui/icons/Public';\nimport { isEmpty } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nexport default function CultureSelectDesktop(props) {\n const { t } = useTranslation();\n const { culture, supportedCultures, handleCultureSelection, anchorElement, handleMenuButtonClick, handleClose, } = props;\n if (isEmpty(supportedCultures)) {\n return null;\n }\n return (React.createElement(React.Fragment, null,\n React.createElement(Button, { \"aria-controls\": \"culture-menu\", \"aria-haspopup\": \"true\", onClick: handleMenuButtonClick },\n React.createElement(Grid, { container: true, spacing: 2, \"data-qa-id\": \"cultureSelect\" },\n React.createElement(Grid, { item: true }, t(`navigation-ui.${culture}`)),\n React.createElement(Grid, { item: true },\n React.createElement(PublicIcon, null)))),\n React.createElement(Menu, { id: \"culture-menu\", anchorEl: anchorElement, keepMounted: true, open: !isEmpty(anchorElement), onClose: handleClose }, supportedCultures.map(supportedCulture => React.createElement(MenuItem, { key: supportedCulture, onClick: () => handleCultureSelection(supportedCulture), \"data-qa-id\": `cultureSelectOption-${supportedCulture}` }, t(`navigation-ui.${supportedCulture}`))))));\n}\n","import React, { useState } from 'react';\nimport { useMediaQuery } from '@material-ui/core';\nimport useSupportedCultures from './useSupportedCultures';\nimport CultureSelectMobile from './CultureSelect.mobile';\nimport CultureSelectDesktop from './CultureSelect.desktop';\nexport default function CultureSelect() {\n const { supportedCultures, culture, setCulture } = useSupportedCultures();\n const isTablet = useMediaQuery((theme) => theme.breakpoints.between('xs', 'sm'));\n const isMobile = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const [anchorElement, setAnchorElement] = useState(null);\n const handleMenuButtonClick = (event) => {\n setAnchorElement(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorElement(null);\n };\n const handleCultureSelection = (culture) => {\n handleClose();\n setCulture(culture);\n };\n if (isMobile || isTablet) {\n return React.createElement(CultureSelectMobile, { culture: culture, supportedCultures: supportedCultures, handleCultureSelection: handleCultureSelection, anchorElement: anchorElement, handleMenuButtonClick: handleMenuButtonClick, handleClose: handleClose });\n }\n return React.createElement(CultureSelectDesktop, { culture: culture, supportedCultures: supportedCultures, handleCultureSelection: handleCultureSelection, anchorElement: anchorElement, handleMenuButtonClick: handleMenuButtonClick, handleClose: handleClose });\n}\n;\n","import React, { useState } from 'react';\nimport { Box, IconButton, Drawer, makeStyles, createStyles, List, ListItem, ListItemIcon, ListItemText, ListItemAvatar, Avatar } from '@material-ui/core';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { deepPurple } from '@material-ui/core/colors';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport CultureSelect from '../CultureSelect/CultureSelect';\nconst useStyles = makeStyles((theme) => (createStyles({\n signedInAvatar: {\n color: theme.palette.getContrastText(deepPurple[500]),\n backgroundColor: deepPurple[500],\n },\n drawerList: {\n minWidth: 240,\n },\n link: {\n color: 'inherit',\n textDecoration: 'inherit'\n },\n})));\nexport default function NavigationMobile(props) {\n const { isAuthenticated, user, navigationItems, handleSignInClick, handleSignOutClick } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n const [drawerOpen, setDrawerOpen] = useState(false);\n return (React.createElement(Box, null,\n React.createElement(IconButton, { onClick: () => setDrawerOpen(true) },\n React.createElement(MenuIcon, null)),\n React.createElement(Drawer, { anchor: \"right\", open: drawerOpen, onClose: () => setDrawerOpen(false) },\n React.createElement(Box, { className: classes.drawerList },\n React.createElement(List, { dense: false },\n React.createElement(ListItem, { button: true, onClick: () => setDrawerOpen(false) },\n React.createElement(ListItemIcon, null,\n React.createElement(CloseIcon, null)),\n React.createElement(ListItemText, { primary: t('navigation-ui.close') })),\n navigationItems.map(navigationItem => {\n if (navigationItem.show) {\n return (React.createElement(RouterLink, { key: navigationItem.id, to: navigationItem.route, className: classes.link, onClick: () => setDrawerOpen(false) },\n React.createElement(ListItem, { button: true },\n React.createElement(ListItemIcon, null,\n React.createElement(Avatar, null, navigationItem.icon())),\n React.createElement(ListItemText, { primary: t(navigationItem.translationKey) }))));\n }\n return null;\n }),\n React.createElement(CultureSelect, null),\n isAuthenticated\n ?\n React.createElement(ListItem, { button: true, onClick: handleSignOutClick },\n React.createElement(ListItemAvatar, null,\n React.createElement(Avatar, { src: \"not-valid.jpg\", className: classes.signedInAvatar }, getInitials(user))),\n React.createElement(ListItemText, { primary: t('navigation-ui.sign-out'), secondary: getUserName(user) }))\n :\n React.createElement(ListItem, { button: true, onClick: handleSignInClick },\n React.createElement(ListItemAvatar, null,\n React.createElement(Avatar, { src: \"not-valid.jpg\" })),\n React.createElement(ListItemText, { primary: t('navigation-ui.sign-in') })))))));\n}\nconst getInitials = (user) => {\n const name = getUserName(user);\n return name === '' ? name : name[0];\n};\nconst getUserName = (user) => {\n if (user === undefined) {\n return '';\n }\n return `${user.givenName} ${user.familyName}`;\n};\n","export var NavigationItemId;\n(function (NavigationItemId) {\n NavigationItemId[NavigationItemId[\"NEW_CALCULATION\"] = 0] = \"NEW_CALCULATION\";\n NavigationItemId[NavigationItemId[\"MY_CALCULATIONS\"] = 1] = \"MY_CALCULATIONS\";\n NavigationItemId[NavigationItemId[\"MY_ACCOUNT\"] = 2] = \"MY_ACCOUNT\";\n})(NavigationItemId || (NavigationItemId = {}));\n","import React, { useState } from 'react';\nimport { Box, IconButton, Drawer, makeStyles, createStyles, List, ListItem, ListItemIcon, ListItemText, ListItemAvatar, Avatar, Grid, Link } from '@material-ui/core';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { deepPurple } from '@material-ui/core/colors';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { NavigationItemId } from '../../../types/domain/navigation-item.types';\nimport CultureSelect from '../CultureSelect/CultureSelect';\nconst useStyles = makeStyles((theme) => (createStyles({\n signedInAvatar: {\n color: theme.palette.getContrastText(deepPurple[500]),\n backgroundColor: deepPurple[500],\n },\n drawerList: {\n minWidth: 240,\n },\n link: {\n color: 'inherit',\n textDecoration: 'inherit'\n },\n})));\nexport default function NavigationTablet(props) {\n const { isAuthenticated, user, navigationItems, handleSignInClick, handleSignOutClick } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n const [drawerOpen, setDrawerOpen] = useState(false);\n return (React.createElement(Box, null,\n React.createElement(Grid, { container: true, justify: \"space-between\", alignItems: \"center\", spacing: 3 },\n navigationItems.map(navigationItem => {\n // We want the My Account navigation item to go under the burger menu\n if (navigationItem.show && navigationItem.id !== NavigationItemId.MY_ACCOUNT) {\n return (React.createElement(Grid, { item: true, key: navigationItem.id },\n React.createElement(Link, { component: \"button\", variant: \"body2\" },\n React.createElement(RouterLink, { to: navigationItem.route, className: classes.link }, t(navigationItem.translationKey)))));\n }\n return null;\n }),\n React.createElement(Grid, { item: true },\n React.createElement(IconButton, { onClick: () => setDrawerOpen(true) },\n React.createElement(MenuIcon, null)),\n React.createElement(Drawer, { anchor: \"right\", open: drawerOpen, onClose: () => setDrawerOpen(false) },\n React.createElement(Box, { className: classes.drawerList },\n React.createElement(List, { dense: false },\n React.createElement(ListItem, { button: true, onClick: () => setDrawerOpen(false) },\n React.createElement(ListItemIcon, null,\n React.createElement(CloseIcon, null)),\n React.createElement(ListItemText, { primary: t('navigation-ui.close') })),\n navigationItems.map(navigationItem => {\n // We want the My Account navigation item to go under the burger menu\n if (navigationItem.show && navigationItem.id === NavigationItemId.MY_ACCOUNT) {\n return (React.createElement(RouterLink, { key: navigationItem.id, to: navigationItem.route, className: classes.link, onClick: () => setDrawerOpen(false) },\n React.createElement(ListItem, { button: true },\n React.createElement(ListItemIcon, null,\n React.createElement(Avatar, null, navigationItem.icon())),\n React.createElement(ListItemText, { primary: t(navigationItem.translationKey) }))));\n }\n return null;\n }),\n React.createElement(CultureSelect, null),\n isAuthenticated\n ?\n React.createElement(ListItem, { button: true, onClick: handleSignOutClick },\n React.createElement(ListItemAvatar, null,\n React.createElement(Avatar, { src: \"not-valid.jpg\", className: classes.signedInAvatar }, getInitials(user))),\n React.createElement(ListItemText, { primary: t('navigation-ui.sign-out'), secondary: getUserName(user) }))\n :\n React.createElement(ListItem, { button: true, onClick: handleSignInClick },\n React.createElement(ListItemAvatar, null,\n React.createElement(Avatar, { src: \"not-valid.jpg\" })),\n React.createElement(ListItemText, { primary: t('navigation-ui.sign-in') })))))))));\n}\nconst getInitials = (user) => {\n const name = getUserName(user);\n return name === '' ? name : name[0];\n};\nconst getUserName = (user) => {\n if (user === undefined) {\n return '';\n }\n return `${user.givenName} ${user.familyName}`;\n};\n","import React from 'react';\nimport { makeStyles, createStyles, Grid, Avatar, Link, Box, Divider } from '@material-ui/core';\nimport { deepPurple } from '@material-ui/core/colors';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport CultureSelect from '../CultureSelect/CultureSelect';\nconst useStyles = makeStyles((theme) => (createStyles({\n signInLinkContainer: {\n marginRight: theme.spacing(2),\n },\n signedInAvatar: {\n color: theme.palette.getContrastText(deepPurple[500]),\n backgroundColor: deepPurple[500],\n },\n signedInWelcome: {\n marginRight: theme.spacing(2),\n },\n link: {\n color: 'inherit',\n textDecoration: 'inherit'\n },\n})));\nexport default function NavigationDesktop(props) {\n const { isAuthenticated, user, navigationItems, handleSignInClick, handleSignOutClick } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n return (React.createElement(React.Fragment, null,\n React.createElement(Grid, { container: true, justify: \"flex-end\" },\n React.createElement(Grid, { item: true },\n React.createElement(Box, { marginBottom: 2 },\n React.createElement(CultureSelect, null),\n React.createElement(Divider, null)))),\n React.createElement(Grid, { container: true, justify: \"space-between\", alignItems: \"center\", spacing: 4 },\n navigationItems.map(navigationItem => {\n if (navigationItem.show) {\n return (React.createElement(Grid, { item: true, key: navigationItem.id, \"data-qa-id\": `${navigationItem.translationKey}-tab` },\n React.createElement(Link, { component: \"button\", variant: \"body2\" },\n React.createElement(RouterLink, { to: navigationItem.route, className: classes.link }, t(navigationItem.translationKey)))));\n }\n return null;\n }),\n React.createElement(Grid, { item: true }, isAuthenticated\n ? React.createElement(Grid, { item: true, container: true, alignItems: \"center\", onClick: handleSignOutClick },\n React.createElement(Grid, { className: classes.signedInWelcome },\n React.createElement(Box, { \"data-qa-id\": \"greeting\" },\n t('navigation-ui.welcome'),\n \", \",\n getUserName(user)),\n React.createElement(Box, { style: { float: 'right' } },\n React.createElement(Link, { component: \"button\", variant: \"body2\" }, t('navigation-ui.sign-out')))),\n React.createElement(Grid, null,\n React.createElement(Avatar, { src: \"not-valid.jpg\", className: classes.signedInAvatar }, getInitials(user))))\n : React.createElement(Grid, { item: true, container: true, alignItems: \"center\", onClick: handleSignInClick },\n React.createElement(Grid, { className: classes.signInLinkContainer },\n React.createElement(Link, { \"data-qa-id\": \"signInButton\", component: \"button\", variant: \"body2\" }, t('navigation-ui.sign-in'))),\n React.createElement(Grid, null,\n React.createElement(Avatar, { src: \"not-valid.jpg\" })))))));\n}\nconst getInitials = (user) => {\n const name = getUserName(user);\n return name === '' ? name : name[0];\n};\nconst getUserName = (user) => {\n if (user === undefined) {\n return '';\n }\n return `${user.givenName} ${user.familyName}`;\n};\n","import { AuthenticationState } from 'react-aad-msal';\nexport const isAuthenticatedSelector = (store) => store.authenticationState.initialized && store.authenticationState.state === AuthenticationState.Authenticated;\nexport const isAuthenticationInitialized = (store) => store.authenticationState.initialized;\nexport const aadAccountSelector = (store) => store.authenticationState.account;\n","export const loggedInUserSelector = (store) => store.accountData.loggedInUser;\nexport const uploadCompanyLogoSelector = (store) => store.accountData.uploadCompanyLogoState;\nexport const isNewUserSelector = (store) => store.accountData.isNewUser;\nexport const gdprConsentSelector = (store) => store.accountData.gdprConsent;\nexport const isConfirmedGuestSelector = (store) => store.accountData.isConfirmedGuest;\n","import React from 'react';\nimport { isEmpty } from 'lodash';\nimport NavigationMobile from './Navigation.mobile';\nimport NavigationTablet from './Navigation.tablet';\nimport NavigationDesktop from './Navigation.desktop';\nimport { useMediaQuery } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { isAuthenticatedSelector } from '../../../store/authentication/authentication.selectors';\nimport authProviderFactory from '../../../authentication/authProvider';\nimport { loggedInUserSelector } from '../../../store/account/account.selectors';\nimport { countryIdSelector } from '../../../store/component-state/component-state.selectors';\nimport AccountCircleIcon from '@material-ui/icons/AccountCircle';\nimport AddRoundedIcon from '@material-ui/icons/AddRounded';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport { buildRouteWithCountry } from '../../../helpers/routeHelper';\nimport { NavigationItemId } from '../../../types/domain/navigation-item.types';\nexport default function Navigation() {\n const isTablet = useMediaQuery((theme) => theme.breakpoints.between('xs', 'sm'));\n const isMobile = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const countryId = useSelector(countryIdSelector);\n const isAuthenticated = useSelector(isAuthenticatedSelector);\n const navigationProps = {\n isAuthenticated,\n user: useSelector(loggedInUserSelector),\n navigationItems: [\n {\n id: NavigationItemId.NEW_CALCULATION,\n route: buildRouteWithCountry(countryId, '/'),\n translationKey: 'navigation-ui.new-calculation',\n show: true,\n icon: () => React.createElement(AddRoundedIcon, null),\n },\n {\n id: NavigationItemId.MY_CALCULATIONS,\n route: buildRouteWithCountry(countryId, '/my-calculations'),\n translationKey: 'navigation-ui.my-calculations',\n show: isAuthenticated,\n icon: () => React.createElement(FolderIcon, null),\n },\n {\n id: NavigationItemId.MY_ACCOUNT,\n route: buildRouteWithCountry(countryId, '/account'),\n translationKey: 'navigation-ui.my-account',\n show: isAuthenticated,\n icon: () => React.createElement(AccountCircleIcon, null),\n }\n ],\n handleSignInClick: () => {\n authProviderFactory().login();\n },\n handleSignOutClick: () => {\n authProviderFactory().logout();\n },\n };\n if (isEmpty(countryId)) {\n return null;\n }\n if (isMobile) {\n return React.createElement(NavigationMobile, Object.assign({}, navigationProps));\n }\n if (isTablet) {\n return React.createElement(NavigationTablet, Object.assign({}, navigationProps));\n }\n return React.createElement(NavigationDesktop, Object.assign({}, navigationProps));\n}\n","import React from 'react';\nimport styles from './Header.module.scss';\nimport logo from '../../assets/images/kingspan-logo.svg';\nimport { Grid } from '@material-ui/core';\nimport Navigation from './Navigation/Navigation';\nexport function Header() {\n return (React.createElement(Grid, { container: true, justify: \"space-between\", alignItems: \"center\", className: styles.header },\n React.createElement(Grid, { item: true },\n React.createElement(\"a\", { href: '/' },\n React.createElement(\"img\", { src: logo, alt: \"Logo\", className: styles.logo }))),\n React.createElement(Grid, { item: true },\n React.createElement(Navigation, null))));\n}\n","export var Category;\n(function (Category) {\n Category[\"Floor\"] = \"Floor\";\n Category[\"Roof\"] = \"Roof\";\n Category[\"Wall\"] = \"Wall\";\n})(Category || (Category = {}));\nexport var LayerType;\n(function (LayerType) {\n LayerType[\"Other\"] = \"Other\";\n LayerType[\"Anchors\"] = \"Anchors\";\n LayerType[\"Insulation\"] = \"Insulation\";\n LayerType[\"AirCavity\"] = \"AirCavity\";\n LayerType[\"Bridging\"] = \"Bridging\";\n LayerType[\"AnchorsPreCalculated\"] = \"AnchorsPreCalculated\";\n LayerType[\"WoodPercentage\"] = \"WoodPercentage\";\n})(LayerType || (LayerType = {}));\nexport var Complexity;\n(function (Complexity) {\n Complexity[\"Simple\"] = \"Simple\";\n Complexity[\"Complex\"] = \"Complex\";\n})(Complexity || (Complexity = {}));\nexport var ConstructionTypeAdditionalParameters;\n(function (ConstructionTypeAdditionalParameters) {\n ConstructionTypeAdditionalParameters[\"PerimeterAndArea\"] = \"PerimeterAndArea\";\n})(ConstructionTypeAdditionalParameters || (ConstructionTypeAdditionalParameters = {}));\n","export const SET_PROJECT_DETAILS = 'SET_PROJECT_DETAILS';\nexport const SET_ADDITIONAL_PARAMETERS = 'SET_ADDITIONAL_PARAMETERS';\nexport const SET_MATERIAL = 'SET_MATERIAL';\nexport const SET_AIR_CAVITY_GRADING = 'SET_AIR_CAVITY_GRADING';\nexport const SET_THICKNESS = 'SET_THICKNESS';\nexport const SET_ANCHOR_PER_SQUARE_METRE = 'SET_ANCHOR_PER_SQUARE_METRE';\nexport const SET_ANCHOR_DIAMETER = 'SET_ANCHOR_DIAMETER';\nexport const SET_ANCHOR_PENETRATION = 'SET_ANCHOR_PENETRATION';\nexport const SET_NET_AREA_PER_METRE_SQUARE = '';\nexport const SET_WOOD_PERCENTAGE = 'SET_WOOD_PERCENTAGE';\nexport const SET_CALCULATED_LAYER_VALUE = 'SET_CALCULATED_LAYER_VALUE';\nexport const NEW_CALCULATION_STARTED = 'NEW_CALCULATION_STARTED';\nexport const EDIT_CALCULATION_STARTED = 'EDIT_CALCULATION_STARTED';\nexport const COPY_CALCULATION_STARTED = 'COPY_CALCULATION_STARTED';\nexport const CREATE_LINKED_LAYER = 'CREATE_LINKED_LAYER';\nexport const REMOVE_LINKED_LAYER = 'REMOVE_LINKED_LAYER';\nexport const CLEAR_CURRENT_CALCULATION = 'CLEAR_CURRENT_CALCULATION';\nexport const FETCH_CALCULATION_RESULTS_ATTEMPT = 'FETCH_CALCULATION_RESULTS_ATTEMPT';\nexport const FETCH_CALCULATION_RESULTS_SUCCESS = 'FETCH_CALCULATION_RESULTS_SUCCESS';\nexport const FETCH_CALCULATION_RESULTS_CLIENT_ERROR = 'FETCH_CALCULATION_RESULTS_CLIENT_ERROR';\nexport const FETCH_CALCULATION_RESULTS_FAILURE = 'FETCH_CALCULATION_RESULTS_FAILURE';\n","import { SET_MATERIAL, SET_THICKNESS, NEW_CALCULATION_STARTED, SET_ANCHOR_DIAMETER, SET_ANCHOR_PER_SQUARE_METRE, FETCH_CALCULATION_RESULTS_ATTEMPT, FETCH_CALCULATION_RESULTS_SUCCESS, FETCH_CALCULATION_RESULTS_CLIENT_ERROR, FETCH_CALCULATION_RESULTS_FAILURE, REMOVE_LINKED_LAYER, CREATE_LINKED_LAYER, SET_WOOD_PERCENTAGE, SET_CALCULATED_LAYER_VALUE, SET_ANCHOR_PENETRATION, SET_NET_AREA_PER_METRE_SQUARE, SET_PROJECT_DETAILS, SET_ADDITIONAL_PARAMETERS, EDIT_CALCULATION_STARTED, CLEAR_CURRENT_CALCULATION, COPY_CALCULATION_STARTED, SET_AIR_CAVITY_GRADING } from './current-calculation-data.action-types';\nexport const setProjectDetails = (projectDetails) => ({\n type: SET_PROJECT_DETAILS,\n payload: projectDetails,\n});\nexport const setAdditionalParameters = (additionalParameters) => ({\n type: SET_ADDITIONAL_PARAMETERS,\n payload: additionalParameters,\n});\nexport const setAirCavityGradingInternal = (airCavityGrading, constructionLayerId) => ({\n type: SET_AIR_CAVITY_GRADING,\n payload: {\n airCavityGrading,\n constructionLayerId,\n }\n});\nexport const setMaterialInternal = (material, constructionLayerId, isLinkedLayer) => ({\n type: SET_MATERIAL,\n payload: {\n material,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const setThickness = (thicknessMillimetres, constructionLayerId, isLinkedLayer) => ({\n type: SET_THICKNESS,\n payload: {\n thicknessMillimetres,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const newCalculationStarted = (layers, constructionTypeId) => ({\n type: NEW_CALCULATION_STARTED,\n payload: {\n calculationLayers: layers,\n constructionTypeId\n }\n});\nexport const editCalculationStarted = (calculationId, calculationAccessCode, layers, constructionTypeId, projectDetails, calculationResult, additionalParameters) => ({\n type: EDIT_CALCULATION_STARTED,\n payload: {\n calculationId,\n calculationAccessCode,\n calculationLayers: layers,\n constructionTypeId,\n projectDetails,\n calculationResult,\n additionalParameters\n }\n});\nexport const copyCalculationStarted = (layers, constructionTypeId, projectDetails, additionalParameters) => ({\n type: COPY_CALCULATION_STARTED,\n payload: {\n calculationLayers: layers,\n constructionTypeId,\n projectDetails,\n additionalParameters\n }\n});\nexport const createLinkedLayer = (calculationLayer) => ({\n type: CREATE_LINKED_LAYER,\n payload: {\n calculationLayer,\n }\n});\nexport const removeLinkedLayer = (constructionLayerId) => ({\n type: REMOVE_LINKED_LAYER,\n payload: {\n constructionLayerId,\n }\n});\nexport const setAnchorDiameter = (diameterOfAnchorsMillimetres, constructionLayerId, isLinkedLayer) => ({\n type: SET_ANCHOR_DIAMETER,\n payload: {\n diameterOfAnchorsMillimetres,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const setAnchorAmountPerSquareMetre = (numberOfAnchorsPerMetreSquare, constructionLayerId, isLinkedLayer) => ({\n type: SET_ANCHOR_PER_SQUARE_METRE,\n payload: {\n numberOfAnchorsPerMetreSquare,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const setAnchorPenetration = (anchorPenetrationDepthMillimetres, constructionLayerId, isLinkedLayer) => ({\n type: SET_ANCHOR_PENETRATION,\n payload: {\n anchorPenetrationDepthMillimetres,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const setNetAreaPerMetreSquare = (netAreaOfAnchorsPerMetreSquareMillimetresSqrd, constructionLayerId, isLinkedLayer) => ({\n type: SET_NET_AREA_PER_METRE_SQUARE,\n payload: {\n netAreaOfAnchorsPerMetreSquareMillimetresSqrd,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const setWoodPercentage = (percentage, constructionLayerId, isLinkedLayer) => ({\n type: SET_WOOD_PERCENTAGE,\n payload: {\n percentage,\n constructionLayerId,\n isLinkedLayer,\n }\n});\nexport const setCalculatedLayerValue = (bridgingLayer, insulationLayer, airCavityLayer) => ({\n type: SET_CALCULATED_LAYER_VALUE,\n payload: {\n bridgingLayer,\n insulationLayer,\n airCavityLayer,\n }\n});\nexport const clearCurrentCalculation = () => ({\n type: CLEAR_CURRENT_CALCULATION,\n});\nexport const fetchCalculationResultsAttempt = () => ({\n type: FETCH_CALCULATION_RESULTS_ATTEMPT,\n});\nexport const fetchCalculationResultsSuccess = (data) => ({\n type: FETCH_CALCULATION_RESULTS_SUCCESS,\n payload: data,\n});\nexport const fetchCalculationResultsFailure = (error) => ({\n type: FETCH_CALCULATION_RESULTS_FAILURE,\n error,\n});\nexport const fetchCalculationResultsClientError = () => ({\n type: FETCH_CALCULATION_RESULTS_CLIENT_ERROR,\n});\n","import * as actionTypes from './current-calculation-data.action-types';\nexport const initialState = {\n calculationLayers: {},\n};\nexport const currentCalculationDataReducer = (state = initialState, action) => {\n var _a, _b;\n switch (action.type) {\n case actionTypes.SET_PROJECT_DETAILS:\n return Object.assign(Object.assign({}, state), { projectDetails: action.payload });\n case actionTypes.SET_ADDITIONAL_PARAMETERS:\n return Object.assign(Object.assign({}, state), { additionalParameters: action.payload });\n case actionTypes.SET_AIR_CAVITY_GRADING:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, false)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId)]), { airCavityGrading: action.payload.airCavityGrading }) }) });\n case actionTypes.SET_MATERIAL:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId)]), { material: action.payload.material }) }) });\n case actionTypes.SET_THICKNESS:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]), { thicknessMillimetres: action.payload.thicknessMillimetres }) }) });\n case actionTypes.SET_ANCHOR_DIAMETER:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId)]), { diameterOfAnchorsMillimetres: action.payload.diameterOfAnchorsMillimetres }) }) });\n case actionTypes.SET_ANCHOR_PER_SQUARE_METRE:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]), { numberOfAnchorsPerMetreSquare: action.payload.numberOfAnchorsPerMetreSquare }) }) });\n case actionTypes.SET_ANCHOR_PENETRATION:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]), { anchorPenetrationDepthMillimetres: action.payload.anchorPenetrationDepthMillimetres }) }) });\n case actionTypes.SET_NET_AREA_PER_METRE_SQUARE:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]), { netAreaOfAnchorsPerMetreSquareMillimetresSqrd: action.payload.netAreaOfAnchorsPerMetreSquareMillimetresSqrd }) }) });\n case actionTypes.SET_WOOD_PERCENTAGE:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId, action.payload.isLinkedLayer)]), { thicknessMillimetres: action.payload.percentage }) }) });\n case actionTypes.SET_CALCULATED_LAYER_VALUE:\n const airLayerThickness = Math.max(0, (state.calculationLayers[getCalculationLayerKey(action.payload.bridgingLayer.constructionLayerId)].thicknessMillimetres)\n - (((_b = (_a = action.payload) === null || _a === void 0 ? void 0 : _a.insulationLayer) === null || _b === void 0 ? void 0 : _b.constructionLayerId) ? state.calculationLayers[getCalculationLayerKey(action.payload.insulationLayer.constructionLayerId)].thicknessMillimetres : 0));\n const noAirLayerGrading = action.payload.airCavityLayer.airCavityGradings.find(a => a.airCavityGradingId === 'no-air-layer');\n const currentGrading = state.calculationLayers[getCalculationLayerKey(action.payload.airCavityLayer.constructionLayerId)].airCavityGrading;\n const airCavityGrading = airLayerThickness <= 0\n ? noAirLayerGrading !== null && noAirLayerGrading !== void 0 ? noAirLayerGrading : currentGrading\n : (currentGrading === null || currentGrading === void 0 ? void 0 : currentGrading.airCavityGradingId) === (noAirLayerGrading === null || noAirLayerGrading === void 0 ? void 0 : noAirLayerGrading.airCavityGradingId)\n ? action.payload.airCavityLayer.airCavityGradings.find(a => { var _a; return a.airCavityGradingId === ((_a = state.calculationLayers[getCalculationLayerKey(action.payload.insulationLayer.constructionLayerId)].material) === null || _a === void 0 ? void 0 : _a.defaultAirCavityGradingId); })\n : currentGrading;\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.airCavityLayer.constructionLayerId)]: Object.assign(Object.assign({}, state.calculationLayers[getCalculationLayerKey(action.payload.airCavityLayer.constructionLayerId)]), { thicknessMillimetres: airLayerThickness, airCavityGrading: airCavityGrading }) }) });\n case actionTypes.CREATE_LINKED_LAYER:\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign(Object.assign({}, state.calculationLayers), { [getCalculationLayerKey(action.payload.calculationLayer.constructionLayerId, true)]: Object.assign({}, action.payload.calculationLayer) }) });\n case actionTypes.REMOVE_LINKED_LAYER:\n if (!state.calculationLayers[getCalculationLayerKey(action.payload.constructionLayerId, true)]) {\n return state;\n }\n const cl = Object.keys(state.calculationLayers)\n .filter(key => key !== getCalculationLayerKey(action.payload.constructionLayerId, true))\n .reduce((result, key) => (Object.assign(Object.assign({}, result), { [key]: state.calculationLayers[key] })), {});\n return Object.assign(Object.assign({}, state), { calculationLayers: Object.assign({}, cl) });\n case actionTypes.FETCH_CALCULATION_RESULTS_SUCCESS:\n return Object.assign(Object.assign({}, state), { calculationResult: action.payload.calculationResult, calculationId: action.payload.calculationId, calculationAccessCode: action.payload.calculationAccessCode });\n case actionTypes.NEW_CALCULATION_STARTED:\n return Object.assign(Object.assign({}, state), { calculationLayers: action.payload.calculationLayers });\n case actionTypes.EDIT_CALCULATION_STARTED:\n return Object.assign(Object.assign({}, state), { calculationLayers: action.payload.calculationLayers, calculationResult: action.payload.calculationResult, projectDetails: action.payload.projectDetails, additionalParameters: action.payload.additionalParameters, calculationAccessCode: action.payload.calculationAccessCode, calculationId: action.payload.calculationId });\n case actionTypes.COPY_CALCULATION_STARTED:\n return Object.assign(Object.assign({}, state), { calculationLayers: action.payload.calculationLayers, projectDetails: action.payload.projectDetails, additionalParameters: action.payload.additionalParameters });\n case actionTypes.CLEAR_CURRENT_CALCULATION:\n return initialState;\n default:\n return state;\n }\n};\n/* Might be a better place for this function */\nexport const getCalculationLayerKey = (constructionLayerId, isLinkedLayer = false) => constructionLayerId.toString() + (isLinkedLayer ? '.linked' : '');\n","import { LayerType } from '../../types/domain/construction-data.types';\nimport { getCalculationLayerKey } from './current-calculation-data.reducer';\nexport const currentCalculationResultSelector = (store) => store.currentCalculationData.calculationResult;\nexport const currentCalculationDataSelector = (store) => store.currentCalculationData;\nexport const currentSelectedMaterialSelector = (isLinkedMaterial) => (store) => { var _a; return (_a = store.currentCalculationData.calculationLayers[getCalculationLayerKey(store.componentState.activeConstructionLayerId, isLinkedMaterial)]) === null || _a === void 0 ? void 0 : _a.material; };\nexport const currentSelectedAirCavityGradingSelector = (store) => { var _a; return (_a = store.currentCalculationData.calculationLayers[getCalculationLayerKey(store.componentState.activeConstructionLayerId, false)]) === null || _a === void 0 ? void 0 : _a.airCavityGrading; };\nexport const currentSelectedThicknessSelector = (isLinkedMaterial) => (store) => { var _a; return (_a = store.currentCalculationData.calculationLayers[getCalculationLayerKey(store.componentState.activeConstructionLayerId, isLinkedMaterial)]) === null || _a === void 0 ? void 0 : _a.thicknessMillimetres; };\nexport const previousInsulationCalculationLayerSelector = (store) => {\n var _a, _b, _c, _d, _e;\n const constructionLayers = store.constructionData.layers[store.componentState.activeConstructionTypeId];\n const insluationLayerIndexes = constructionLayers\n .map((cl, index) => ({ layer: cl, index }))\n .filter(t => t.layer.layerType === LayerType.Insulation);\n let layerId = 0;\n if (insluationLayerIndexes.length === 1) {\n layerId = (_b = (_a = insluationLayerIndexes[0].layer) === null || _a === void 0 ? void 0 : _a.constructionLayerId) !== null && _b !== void 0 ? _b : 0;\n }\n else {\n layerId = (_e = (_d = (_c = insluationLayerIndexes\n .find(t => t.index < constructionLayers.indexOf(constructionLayers\n .filter(cl => cl.constructionLayerId === store.componentState.activeConstructionLayerId)[0]))) === null || _c === void 0 ? void 0 : _c.layer) === null || _d === void 0 ? void 0 : _d.constructionLayerId) !== null && _e !== void 0 ? _e : 0;\n }\n return store.currentCalculationData.calculationLayers[getCalculationLayerKey(layerId)];\n};\nexport const currentAnchorPropertiesSelector = (store) => {\n const layer = store.currentCalculationData.calculationLayers[getCalculationLayerKey(store.componentState.activeConstructionLayerId)];\n return {\n numberOfAnchorsPerMetreSquare: layer === null || layer === void 0 ? void 0 : layer.numberOfAnchorsPerMetreSquare,\n diameterOfAnchorsMillimetres: layer === null || layer === void 0 ? void 0 : layer.diameterOfAnchorsMillimetres,\n anchorPenetrationDepthMillimetres: layer === null || layer === void 0 ? void 0 : layer.anchorPenetrationDepthMillimetres,\n netAreaOfAnchorsPerMetreSquareMillimetresSqrd: layer === null || layer === void 0 ? void 0 : layer.netAreaOfAnchorsPerMetreSquareMillimetresSqrd,\n };\n};\nexport const projectDetailsSelector = (store) => store.currentCalculationData.projectDetails;\nexport const additionalParametersSelector = (store) => store.currentCalculationData.additionalParameters;\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { getCalculationLayerKey } from '../store/current-calculation-data/current-calculation-data.reducer';\nimport { parseISO } from 'date-fns';\nexport const mapApiResponseArrayToCalculcationObjectCollection = (data) => {\n if (data.length) {\n return data\n .map(mapApiResponseToCalculcation)\n .reduce((obj, item) => {\n return Object.assign(Object.assign({}, obj), { [item.calculationId]: item });\n }, {});\n }\n return {};\n};\nexport const mapApiResponseToCalculcation = (calc) => {\n const { calculationLayers, projectDetails } = calc, result = __rest(calc, [\"calculationLayers\", \"projectDetails\"]);\n return Object.assign(Object.assign({}, result), { projectDetails: Object.assign(Object.assign({}, projectDetails), { startDate: (projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.startDate) ? parseISO(projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.startDate.toString()) : undefined }), createdOn: parseISO(result.createdOn), updatedOn: parseISO(result.updatedOn), calculationLayers: calculationLayers.reduce((obj, item) => {\n var _a, _b;\n return Object.assign(Object.assign({}, obj), { [getCalculationLayerKey(item.constructionLayerId, (_b = (_a = item.material) === null || _a === void 0 ? void 0 : _a.isLinkedMaterial) !== null && _b !== void 0 ? _b : false)]: item });\n }, {}) });\n};\n","import axios, { AxiosError } from 'axios';\nimport { LayerType, Complexity } from '../../types/domain/construction-data.types';\nimport { newCalculationStarted, fetchCalculationResultsAttempt, fetchCalculationResultsSuccess, fetchCalculationResultsClientError, fetchCalculationResultsFailure, setMaterialInternal, setThickness, setAnchorDiameter, setAnchorAmountPerSquareMetre, createLinkedLayer, removeLinkedLayer, setCalculatedLayerValue, setAnchorPenetration, editCalculationStarted, copyCalculationStarted, setAirCavityGradingInternal, } from './current-calculation-data.actions';\nimport { selectedCultureSelector } from '../../store/component-state/component-state.selectors';\nimport { getCalculationLayerKey } from './current-calculation-data.reducer';\nimport { AuthenticationState } from 'react-aad-msal';\nimport { activeConstructionTypeSelector } from '../component-state/component-state.selectors';\nimport { additionalParametersSelector, projectDetailsSelector } from './current-calculation-data.selectors';\nimport { mapApiResponseToCalculcation } from '../../helpers/calculation-response-helper';\nimport { debounce } from 'lodash';\nconst getDefaultMaterial = (layer) => { var _a; return (_a = layer.materials.filter(m => m.isDefaultLayerMaterial)[0]) !== null && _a !== void 0 ? _a : layer.materials[0]; };\nconst getDefaultLinkedMaterial = (parentMaterial) => { var _a; return (_a = (parentMaterial && parentMaterial.linkedMaterials.filter(m => m.isDefaultLayerMaterial)[0])) !== null && _a !== void 0 ? _a : (parentMaterial && parentMaterial.linkedMaterials[0]); };\nconst getDefaultAirCavityGrading = (layer) => { var _a; return (_a = layer.airCavityGradings.filter(ac => ac.isDefaultLayerAirCavityGrading)[0]) !== null && _a !== void 0 ? _a : layer.airCavityGradings[0]; };\nconst applyAutomaticBridgedInsulationAndAirCavityScenario = (constructionLayers, calculationLayers) => {\n var _a, _b, _c, _d, _e;\n // In the scenario where there is a bridging layer, and a bridged insulation layer, and an air cavity layer,\n // then the air cavity layer needs its value setting automatically.\n const bridgedInsulationLayerId = (_a = constructionLayers.filter(cl => cl.layerType === LayerType.Insulation && cl.isWithinBridgingFrame)[0]) === null || _a === void 0 ? void 0 : _a.constructionLayerId;\n const bridgingLayerId = (_b = constructionLayers.filter(cl => cl.layerType === LayerType.Bridging)[0]) === null || _b === void 0 ? void 0 : _b.constructionLayerId;\n const bridgedAirCavityLayerId = (_c = constructionLayers.filter(cl => cl.layerType === LayerType.AirCavity && cl.isWithinBridgingFrame)[0]) === null || _c === void 0 ? void 0 : _c.constructionLayerId;\n if (bridgedInsulationLayerId && bridgingLayerId && bridgedAirCavityLayerId) {\n const insulationLayer = calculationLayers[getCalculationLayerKey(bridgedInsulationLayerId)];\n const airLayer = calculationLayers[getCalculationLayerKey(bridgedAirCavityLayerId)];\n const availableGradings = (_d = constructionLayers.find(cl => cl.constructionLayerId === airLayer.constructionLayerId)) === null || _d === void 0 ? void 0 : _d.airCavityGradings;\n airLayer.thicknessMillimetres = calculationLayers[getCalculationLayerKey(bridgingLayerId)].thicknessMillimetres - insulationLayer.thicknessMillimetres;\n if (airLayer.thicknessMillimetres === 0 && availableGradings) {\n const noAirLayerGrading = availableGradings.find(a => a.airCavityGradingId === 'no-air-layer');\n airLayer.airCavityGrading = noAirLayerGrading;\n }\n else if (((_e = insulationLayer.material) === null || _e === void 0 ? void 0 : _e.defaultAirCavityGradingId) && availableGradings) {\n airLayer.airCavityGrading = availableGradings.find(g => { var _a; return g.airCavityGradingId === ((_a = insulationLayer.material) === null || _a === void 0 ? void 0 : _a.defaultAirCavityGradingId); });\n }\n }\n};\nconst mapToCalculationLayers = (mappingFunction, constructionLayers) => {\n const calculationLayers = constructionLayers.map(mappingFunction).reduce((obj, item) => {\n return Object.assign(Object.assign({}, obj), { [getCalculationLayerKey(item.constructionLayerId)]: item });\n }, {});\n applyAutomaticBridgedInsulationAndAirCavityScenario(constructionLayers, calculationLayers);\n // Add in any linked layers for the default materials\n constructionLayers.forEach(cl => {\n const defaultMaterial = getDefaultMaterial(cl);\n const defaultLinkedMaterial = getDefaultLinkedMaterial(defaultMaterial);\n if (defaultLinkedMaterial) {\n calculationLayers[getCalculationLayerKey(cl.constructionLayerId, true)] = {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: defaultLinkedMaterial.defaultThicknessMillimetres,\n material: defaultLinkedMaterial,\n };\n }\n });\n return calculationLayers;\n};\nexport const startNewCalculation = (constructionTypeId, constructionLayers) => async (dispatch, getState) => {\n const calculationLayers = mapToCalculationLayers(cl => {\n var _a;\n const defaultMaterial = getDefaultMaterial(cl);\n const defaultAirCavityGrading = getDefaultAirCavityGrading(cl);\n switch (cl.layerType) {\n case LayerType.WoodPercentage:\n return {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: Math.round(((_a = getState().constructionData.types.filter(ct => ct.id === constructionTypeId)[0].defaultWoodPercentage) !== null && _a !== void 0 ? _a : 0.2) * 100),\n };\n case LayerType.Anchors:\n return {\n constructionLayerId: cl.constructionLayerId,\n material: defaultMaterial,\n diameterOfAnchorsMillimetres: defaultMaterial === null || defaultMaterial === void 0 ? void 0 : defaultMaterial.defaultDiameterOfAnchorsMillimetres,\n numberOfAnchorsPerMetreSquare: defaultMaterial === null || defaultMaterial === void 0 ? void 0 : defaultMaterial.defaultNumberOfAnchorsPerMetreSquare,\n anchorPenetrationDepthMillimetres: defaultMaterial === null || defaultMaterial === void 0 ? void 0 : defaultMaterial.defaultAnchorPenetrationMillimetres,\n };\n case LayerType.AnchorsPreCalculated:\n return {\n constructionLayerId: cl.constructionLayerId,\n material: defaultMaterial,\n netAreaOfAnchorsPerMetreSquareMillimetresSqrd: 50,\n };\n case LayerType.AirCavity:\n return {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: defaultAirCavityGrading === null || defaultAirCavityGrading === void 0 ? void 0 : defaultAirCavityGrading.defaultThicknessMillimetres,\n airCavityGrading: defaultAirCavityGrading,\n };\n default:\n return {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: defaultMaterial === null || defaultMaterial === void 0 ? void 0 : defaultMaterial.defaultThicknessMillimetres,\n material: defaultMaterial,\n };\n }\n }, constructionLayers);\n dispatch(newCalculationStarted(calculationLayers, constructionTypeId));\n};\nconst buildCalculationLayersFromSaved = (calculation, constructionLayers) => {\n const calculationLayers = mapToCalculationLayers(cl => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const savedReferenceLayer = Object.values(calculation.calculationLayers).find(calculationLayer => { var _a; return calculationLayer.constructionLayerId === cl.constructionLayerId && ((_a = calculationLayer.material) === null || _a === void 0 ? void 0 : _a.isLinkedMaterial) !== true; });\n const material = (_a = cl.materials.filter(m => { var _a; return m.materialId === ((_a = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.material) === null || _a === void 0 ? void 0 : _a.materialId); })[0]) !== null && _a !== void 0 ? _a : getDefaultMaterial(cl);\n const airCavityGrading = (_b = cl.airCavityGradings.filter(ac => { var _a; return ac.airCavityGradingId === ((_a = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.airCavityGrading) === null || _a === void 0 ? void 0 : _a.airCavityGradingId); })[0]) !== null && _b !== void 0 ? _b : getDefaultAirCavityGrading(cl);\n switch (cl.layerType) {\n case LayerType.WoodPercentage:\n return {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: ((_c = calculation.woodPercentage) !== null && _c !== void 0 ? _c : 0.2) * 100,\n };\n case LayerType.Anchors:\n return {\n constructionLayerId: cl.constructionLayerId,\n material: material,\n diameterOfAnchorsMillimetres: (_d = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.diameterOfAnchorsMillimetres) !== null && _d !== void 0 ? _d : material === null || material === void 0 ? void 0 : material.defaultDiameterOfAnchorsMillimetres,\n numberOfAnchorsPerMetreSquare: (_e = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.numberOfAnchorsPerMetreSquare) !== null && _e !== void 0 ? _e : material === null || material === void 0 ? void 0 : material.defaultNumberOfAnchorsPerMetreSquare,\n anchorPenetrationDepthMillimetres: (_f = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.anchorPenetrationDepthMillimetres) !== null && _f !== void 0 ? _f : material === null || material === void 0 ? void 0 : material.defaultAnchorPenetrationMillimetres,\n };\n case LayerType.AnchorsPreCalculated:\n return {\n constructionLayerId: cl.constructionLayerId,\n material: material,\n netAreaOfAnchorsPerMetreSquareMillimetresSqrd: (_g = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.netAreaOfAnchorsPerMetreSquareMillimetresSqrd) !== null && _g !== void 0 ? _g : 50,\n };\n case LayerType.AirCavity:\n return {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: airCavityGrading === null || airCavityGrading === void 0 ? void 0 : airCavityGrading.defaultThicknessMillimetres,\n airCavityGrading: airCavityGrading,\n };\n default:\n return {\n constructionLayerId: cl.constructionLayerId,\n thicknessMillimetres: (_h = savedReferenceLayer === null || savedReferenceLayer === void 0 ? void 0 : savedReferenceLayer.thicknessMillimetres) !== null && _h !== void 0 ? _h : material === null || material === void 0 ? void 0 : material.defaultThicknessMillimetres,\n material: material,\n };\n }\n }, constructionLayers);\n const projectDetails = {\n name: calculation.projectDetails.name,\n startDate: calculation.projectDetails.startDate,\n siteArea: calculation.projectDetails.siteArea,\n county: calculation.projectDetails.county,\n size: calculation.projectDetails.size,\n type: calculation.projectDetails.type,\n ribaStatus: calculation.projectDetails.ribaStatus,\n buildingUse: calculation.projectDetails.buildingUse,\n postcode: calculation.projectDetails.postcode,\n };\n // Include the linked layers in to the calculation (fixes bug that stops linked layers from being reloaded)\n Object.values(calculation.calculationLayers)\n .filter(calculationLayer => { var _a; return ((_a = calculationLayer.material) === null || _a === void 0 ? void 0 : _a.isLinkedMaterial) === true; })\n .forEach(linkedLayer => {\n calculationLayers[getCalculationLayerKey(linkedLayer.constructionLayerId, true)] = Object.assign({}, linkedLayer);\n });\n return {\n projectDetails,\n calculationLayers,\n };\n};\nexport const startEditCalculation = (calculation, constructionLayers) => async (dispatch) => {\n const { calculationLayers, projectDetails } = buildCalculationLayersFromSaved(calculation, constructionLayers);\n dispatch(editCalculationStarted(calculation.calculationId, calculation.calculationAccessCode, calculationLayers, calculation.constructionTypeId, projectDetails, calculation.calculationResult, calculation.additionalParameters));\n};\nexport const startCopyCalculation = (calculation, constructionLayers) => async (dispatch) => {\n const { calculationLayers, projectDetails } = buildCalculationLayersFromSaved(calculation, constructionLayers);\n dispatch(copyCalculationStarted(calculationLayers, calculation.constructionTypeId, projectDetails, calculation.additionalParameters));\n};\nexport const setAirCavityGrading = (layer, airCavityGrading) => async (dispatch, getState) => {\n var _a;\n dispatch(setAirCavityGradingInternal(airCavityGrading, layer.constructionLayerId));\n // This is the calulated layer for a complex construction type and doesn't need its thickness setting\n if (!layer.isWithinBridgingFrame) {\n setMaterialParameter(setThickness, layer, (_a = airCavityGrading.defaultThicknessMillimetres) !== null && _a !== void 0 ? _a : 0, false)(dispatch, getState);\n }\n await debouncedDispatchCalculationAttempt(dispatch, getState);\n};\nconst getNextAirCavityLayer = (layer, store) => {\n const constructionLayers = store.constructionData.layers[layer.constructionTypeId];\n const airLayers = constructionLayers.filter(l => l.layerType === LayerType.AirCavity);\n if (airLayers.length === 1) {\n return airLayers[0];\n }\n else if (airLayers.length > 1) {\n const insulationLayerIndex = constructionLayers.indexOf(layer);\n return constructionLayers.filter((l, i) => insulationLayerIndex < i && l.layerType === LayerType.AirCavity)[0];\n }\n return undefined;\n};\nexport const setMaterial = (layer, material) => async (dispatch, getState) => {\n const defaultLinkedMaterial = getDefaultLinkedMaterial(material);\n if (defaultLinkedMaterial) {\n dispatch(createLinkedLayer({\n constructionLayerId: layer.constructionLayerId,\n thicknessMillimetres: defaultLinkedMaterial.defaultThicknessMillimetres,\n material: defaultLinkedMaterial,\n }));\n }\n else if (!material.isLinkedMaterial) {\n dispatch(removeLinkedLayer(layer.constructionLayerId));\n }\n dispatch(setMaterialInternal(material, layer.constructionLayerId, material.isLinkedMaterial));\n switch (layer.layerType) {\n case LayerType.Anchors:\n const calculationLayer = getState().currentCalculationData.calculationLayers[layer.constructionLayerId.toString()];\n // We do an optional dispatch intentionally,\n // so that we keep the currently selected values for the anchor layer's parameters wherever possible.\n // The requirement is that \"Anchors & Fastening should not change amount, diameter or penetration when selecting different anchor materials\"\n const optionalDispatch = (currentValue, options, action) => {\n if ((options || []).indexOf(currentValue) === -1) {\n dispatch(action);\n }\n };\n optionalDispatch(calculationLayer === null || calculationLayer === void 0 ? void 0 : calculationLayer.numberOfAnchorsPerMetreSquare, material.optionsForNumberOfAnchorsPerMetreSquare, setAnchorAmountPerSquareMetre(material.defaultNumberOfAnchorsPerMetreSquare, layer.constructionLayerId, false));\n optionalDispatch(calculationLayer === null || calculationLayer === void 0 ? void 0 : calculationLayer.diameterOfAnchorsMillimetres, material.optionsForDiameterOfAnchorsMillimetres, setAnchorDiameter(material.defaultDiameterOfAnchorsMillimetres, layer.constructionLayerId, false));\n optionalDispatch(calculationLayer === null || calculationLayer === void 0 ? void 0 : calculationLayer.anchorPenetrationDepthMillimetres, material.optionsForAnchorPenetrationMillimetres, setAnchorPenetration(material.defaultAnchorPenetrationMillimetres, layer.constructionLayerId, false));\n break;\n default:\n if (layer.layerType === LayerType.AirCavity && layer.isWithinBridgingFrame) {\n // This is the calulated layer for a complex construction type and doesn't need its thickness setting\n break;\n }\n setMaterialParameter(setThickness, layer, material.defaultThicknessMillimetres, material.isLinkedMaterial)(dispatch, getState);\n if (layer.layerType === LayerType.Insulation && material.defaultAirCavityGradingId && !material.isLinkedMaterial) {\n const nextAirLayer = getNextAirCavityLayer(layer, getState());\n const defaultGrading = nextAirLayer === null || nextAirLayer === void 0 ? void 0 : nextAirLayer.airCavityGradings.find(ac => ac.airCavityGradingId === material.defaultAirCavityGradingId);\n if (nextAirLayer && defaultGrading) {\n setAirCavityGrading(nextAirLayer, defaultGrading)(dispatch, getState);\n }\n }\n break;\n }\n await debouncedDispatchCalculationAttempt(dispatch, getState);\n};\nexport const setMaterialParameter = (action, layer, value, isLinkedLayer) => async (dispatch, getState) => {\n const store = getState();\n const constructionType = activeConstructionTypeSelector(store);\n switch (constructionType === null || constructionType === void 0 ? void 0 : constructionType.complexity) {\n case Complexity.Simple:\n dispatch(action(value, layer.constructionLayerId, isLinkedLayer));\n break;\n case Complexity.Complex:\n dispatch(action(value, layer.constructionLayerId, isLinkedLayer));\n const layers = store.constructionData.layers[store.componentState.activeConstructionTypeId];\n if ((layer.layerType === LayerType.Bridging || layer.layerType === LayerType.Insulation) && layers.some(l => l.layerType === LayerType.AirCavity && l.isWithinBridgingFrame)) {\n dispatch(setCalculatedLayerValue(layers.filter(l => l.layerType === LayerType.Bridging)[0], layers.filter(l => l.layerType === LayerType.Insulation && l.isWithinBridgingFrame)[0], layers.filter(l => l.layerType === LayerType.AirCavity && l.isWithinBridgingFrame)[0]));\n }\n break;\n }\n await debouncedDispatchCalculationAttempt(dispatch, getState);\n};\nexport const dispatchCalculationAttempt = () => dispatchCalculationAttemptInternal;\nconst debouncedDispatchCalculationAttempt = debounce(async (dispatch, getState) => {\n await dispatchCalculationAttemptInternal(dispatch, getState);\n}, 250);\nconst dispatchCalculationAttemptInternal = async (dispatch, getState) => {\n var _a;\n const calculation = buildCalculationData(getState);\n if (!calculation || !calculation.layers || calculation.layers.length === 0) {\n // Do not dispatch the calculation if we're in a state where we have no layers yet, and therefore we're unable to build a calculation model.\n return;\n }\n dispatch(fetchCalculationResultsAttempt());\n try {\n const { authenticationState } = getState();\n const { data } = await axios.post('/api/calculation', calculation, {\n withCredentials: authenticationState.state === AuthenticationState.Authenticated,\n });\n dispatch(fetchCalculationResultsSuccess(mapApiResponseToCalculcation(data)));\n }\n catch (error) {\n if (error instanceof AxiosError) {\n // Only dispatch the failure if it is not a client error.\n // Note that we respond with 409 when simultaneous requests for the same calculation cause a concurrency error, when only one of the requests wins and the rest are essentially rejected.\n const isClientError = ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) && !isNaN(error.response.status) && error.response.status >= 400 && error.response.status < 500;\n if (isClientError) {\n dispatch(fetchCalculationResultsClientError());\n }\n else {\n dispatch(fetchCalculationResultsFailure(error === null || error === void 0 ? void 0 : error.message));\n }\n }\n }\n};\nconst buildCalculationData = (getState) => {\n var _a, _b, _c;\n const store = getState();\n const selectedCulture = selectedCultureSelector(store);\n const constructionType = activeConstructionTypeSelector(store);\n const constructionTypeLayers = store.constructionData.layers[(_a = constructionType === null || constructionType === void 0 ? void 0 : constructionType.id) !== null && _a !== void 0 ? _a : -1];\n if (!constructionTypeLayers || constructionTypeLayers.length === 0) {\n return null;\n }\n const pseudoLayers = constructionTypeLayers.filter(cl => cl.isPseudoLayer);\n let layers = store.currentCalculationData.calculationLayers;\n let woodPercentage = 0;\n if ((constructionType === null || constructionType === void 0 ? void 0 : constructionType.complexity) === Complexity.Complex && pseudoLayers.length > 0) {\n const woodPercentageLayerId = pseudoLayers.filter(cl => cl.layerType === LayerType.WoodPercentage)[0].constructionLayerId;\n //extract pseudo layer\n layers = Object.entries(store.currentCalculationData.calculationLayers).reduce((obj, kvp) => {\n const [key, value] = kvp;\n if (pseudoLayers.some(cl => cl.constructionLayerId === value.constructionLayerId)) {\n if (value.constructionLayerId === woodPercentageLayerId) {\n woodPercentage = value.thicknessMillimetres;\n }\n return obj;\n }\n return Object.assign(Object.assign({}, obj), { [key]: value });\n }, {});\n }\n const projectDetails = projectDetailsSelector(store);\n const additionalParameters = additionalParametersSelector(store);\n const calculation = {\n calculationId: store.currentCalculationData.calculationId,\n calculationAccessCode: store.currentCalculationData.calculationAccessCode,\n constructionTypeId: store.componentState.activeConstructionTypeId,\n countryId: (_c = (_b = store.componentState.selectedCountry) === null || _b === void 0 ? void 0 : _b.countryId) !== null && _c !== void 0 ? _c : '',\n woodPercentage: woodPercentage / 100,\n layers: Object.entries(layers).map(kvp => {\n var _a, _b;\n const [, value] = kvp;\n return {\n constructionLayerId: value.constructionLayerId,\n materialId: (_a = value.material) === null || _a === void 0 ? void 0 : _a.materialId,\n airCavityGradingId: (_b = value.airCavityGrading) === null || _b === void 0 ? void 0 : _b.airCavityGradingId,\n thicknessMillimetres: value.thicknessMillimetres,\n numberOfAnchorsPerMetreSquare: value.numberOfAnchorsPerMetreSquare,\n diameterOfAnchorsMillimetres: value.diameterOfAnchorsMillimetres,\n anchorPenetrationDepthMillimetres: value.anchorPenetrationDepthMillimetres,\n netAreaOfAnchorsPerMetreSquareMillimetresSqrd: value.netAreaOfAnchorsPerMetreSquareMillimetresSqrd,\n };\n }),\n clientTimestamp: new Date().getTime(),\n cultureOfUser: selectedCulture,\n projectDetails: {\n name: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.name,\n siteArea: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.siteArea,\n startDate: (projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.startDate) ? formatDate(projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.startDate) : '',\n county: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.county,\n size: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.size,\n type: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.type,\n ribaStatus: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.ribaStatus,\n buildingUse: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.buildingUse,\n postcode: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.postcode,\n },\n additionalParameters: {\n areaMetresSquared: additionalParameters === null || additionalParameters === void 0 ? void 0 : additionalParameters.areaMetresSquared,\n perimeterMetres: additionalParameters === null || additionalParameters === void 0 ? void 0 : additionalParameters.perimeterMetres,\n },\n };\n return calculation;\n};\nconst formatDate = (date) => {\n if (date === undefined) {\n return '';\n }\n return `${date.getFullYear()}-${appendLeadingZero(date.getMonth() + 1)}-${appendLeadingZero(date.getDate())}T00:00:00.000Z`;\n};\nconst appendLeadingZero = (n) => (n <= 9 ? '0' + n : n.toString());\n","import React, { useEffect } from 'react';\nimport { isEmpty } from 'lodash';\nimport { Box, Button } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { errorSelector, calculationResultErrorSelector } from '../../store/component-state/component-state.selectors';\nimport { dispatchCalculationAttempt } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nimport { useTranslation } from 'react-i18next';\nexport default function ErrorBar() {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const error = useSelector(errorSelector);\n const calculationResultError = useSelector(calculationResultErrorSelector);\n useEffect(() => {\n if (!isEmpty(error)) {\n console.warn('Unhandled error:', error);\n }\n }, [error]);\n useEffect(() => {\n if (!isEmpty(calculationResultError)) {\n console.warn('Unhandled calculation error:', calculationResultError);\n }\n }, [calculationResultError]);\n if (!isEmpty(error)) {\n return React.createElement(Box, { my: 2 },\n React.createElement(Alert, { severity: \"error\" }, t('error-banner.generic-error-label')));\n }\n if (!isEmpty(calculationResultError)) {\n return React.createElement(Box, { my: 2 },\n React.createElement(Alert, { severity: \"error\", action: React.createElement(Button, { color: \"inherit\", size: \"small\", onClick: () => dispatch(dispatchCalculationAttempt()) }, t('error-banner.refresh-button')) }, t('error-banner.calculation-result-error-label')));\n }\n return null;\n}\n","import { createStyles, makeStyles, Typography } from '@material-ui/core';\nimport parse from 'html-react-parser';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { countryIdSelector } from '../../../store/component-state/component-state.selectors';\nconst useStyles = makeStyles((theme) => createStyles({\n address: {\n fontStyle: 'normal',\n },\n}));\nexport function Address() {\n const { t } = useTranslation();\n const theme = useStyles();\n const countryId = useSelector(countryIdSelector);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"h6\" }, parse(t(`by-country.${countryId}.footer.address-label`)))),\n React.createElement(\"address\", { className: theme.address },\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"body1\" }, parse(t(`by-country.${countryId}.footer.address.line1`)))),\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"body1\" }, parse(t(`by-country.${countryId}.footer.address.line2`)))),\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"body1\" }, parse(t(`by-country.${countryId}.footer.address.line3`)))),\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"body1\" }, parse(t(`by-country.${countryId}.footer.address.line4`)))))));\n}\n","import { createStyles, makeStyles, Typography } from '@material-ui/core';\nimport parse from 'html-react-parser';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { countryIdSelector } from '../../../store/component-state/component-state.selectors';\nconst useStyles = makeStyles((theme) => createStyles({\n link: {\n color: theme.palette.text.primary,\n }\n}));\nexport function Contact() {\n const { t } = useTranslation();\n const theme = useStyles();\n const countryId = useSelector(countryIdSelector);\n const label1 = t(`by-country.${countryId}.footer.contacts.contact-number-1.label`);\n const contactNumber1 = t(`by-country.${countryId}.footer.contacts.contact-number-1.value`);\n const label2 = t(`by-country.${countryId}.footer.contacts.contact-number-2.label`);\n const contactNumber2 = t(`by-country.${countryId}.footer.contacts.contact-number-2.value`);\n return (React.createElement(React.Fragment, null,\n label1.length > 0 && contactNumber1.length > 0 &&\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"body1\" },\n parse(label1),\n \":\",\n React.createElement(\"br\", null),\n React.createElement(\"a\", { href: `tel:${contactNumber1}`, className: theme.link }, parse(t(`by-country.${countryId}.footer.contacts.contact-number-1.friendly`))))),\n label2.length > 0 && contactNumber2.length > 0 &&\n React.createElement(\"div\", null,\n React.createElement(Typography, { variant: \"body1\" },\n parse(label2),\n \":\",\n React.createElement(\"br\", null),\n React.createElement(\"a\", { href: `tel:${contactNumber2}`, className: theme.link }, parse(t(`by-country.${countryId}.footer.contacts.contact-number-2.friendly`)))))));\n}\n","import { Box, createStyles, Grid, makeStyles, Typography } from '@material-ui/core';\nimport MailIcon from '@material-ui/icons/Mail';\nimport PhoneIcon from '@material-ui/icons/Phone';\nimport parse from 'html-react-parser';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { countryIdSelector } from '../../../store/component-state/component-state.selectors';\nconst useStyles = makeStyles((theme) => createStyles({\n container: {\n padding: theme.spacing(1),\n },\n iconContainer: {\n justifyContent: 'center',\n display: 'flex',\n },\n contactInfo: {\n fontSize: theme.typography.caption.fontSize,\n paddingLeft: '5px',\n },\n techSupportContainer: {\n backgroundColor: theme.palette.grey[500],\n color: '#FFF',\n },\n techLink: {\n color: '#FFF',\n }\n}));\nexport function TechSupportBar() {\n const { t } = useTranslation();\n const theme = useStyles();\n const countryId = useSelector(countryIdSelector);\n return (React.createElement(React.Fragment, null, countryId &&\n React.createElement(\"div\", { className: theme.techSupportContainer },\n React.createElement(Grid, { className: theme.container, container: true, justify: \"space-evenly\", alignItems: \"center\" },\n React.createElement(Grid, { item: true, xs: 12, style: { textAlign: 'center' } },\n React.createElement(Box, { p: 1 },\n React.createElement(Typography, { variant: \"body1\" },\n parse(t(`by-country.${countryId}.footer.tech-support.blurb`)),\n \"\\u00A0\",\n React.createElement(\"a\", { href: t(`by-country.${countryId}.footer.tech-support.link-value`), className: theme.techLink }, parse(t(`by-country.${countryId}.footer.tech-support.link-friendly`)))))),\n React.createElement(Grid, { item: true },\n React.createElement(Grid, { container: true, justify: \"space-evenly\", alignItems: \"center\" },\n React.createElement(Grid, { item: true, className: theme.iconContainer },\n React.createElement(MailIcon, null)),\n React.createElement(Grid, { item: true },\n React.createElement(Typography, { className: theme.contactInfo },\n React.createElement(\"a\", { href: 'mailto:' + t(`by-country.${countryId}.footer.tech-support.email-value`), className: theme.techLink }, parse(t(`by-country.${countryId}.footer.tech-support.email-friendly`))))))),\n React.createElement(Grid, { item: true },\n React.createElement(Grid, { container: true, justify: \"space-evenly\", alignItems: \"center\" },\n React.createElement(Grid, { item: true, className: theme.iconContainer },\n React.createElement(PhoneIcon, null)),\n React.createElement(Grid, { item: true },\n React.createElement(Typography, { className: theme.contactInfo },\n React.createElement(\"a\", { href: 'tel:' + t(`by-country.${countryId}.footer.tech-support.phone-value`), className: theme.techLink }, parse(t(`by-country.${countryId}.footer.tech-support.phone-friendly`)))))))))));\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"title\":\"ChooseCountry_title__QnH7u\",\"prompt\":\"ChooseCountry_prompt__sqQmY\",\"footer\":\"ChooseCountry_footer__Obbta\",\"disclaimer\":\"ChooseCountry_disclaimer__xblSJ\",\"footerLinks\":\"ChooseCountry_footerLinks__VSjt1\",\"countryList\":\"ChooseCountry_countryList__yLxVa\",\"longName\":\"ChooseCountry_longName__pHplW\",\"flagEmoji\":\"ChooseCountry_flagEmoji__-+z+y\"};","export const getLinks = () => {\n const previouslySelectedCountryId = localStorage.getItem('previouslySelectedCountryId');\n const i18nextLng = localStorage.getItem('i18nextLng');\n const defaultLinks = {\n cookiePolicy: 'https://www.kingspan.com/gb/en/business-groups/kingspan-insulation/u-value-calculator-cookie-policy-and-control',\n privacyPolicy: 'https://www.kingspan.com/gb/en/business-groups/kingspan-insulation/u-value-calculator-website-privacy-notice',\n marketingConsent: 'https://www.kingspan.com/gb/en/business-groups/kingspan-insulation/u-value-calculator-direct-marketing-consent',\n termsAndConditions: 'https://www.kingspan.com/gb/en/business-groups/kingspan-insulation/u-value-calculator-terms-and-conditions-of-website-use',\n };\n switch (previouslySelectedCountryId) {\n case 'gb':\n return defaultLinks;\n case 'ie':\n return {\n cookiePolicy: 'https://www.kingspan.com/ie/en/business-groups-in-ireland/kingspan-insulation-boards/u-value-calculator-cookie-policy-and-control',\n privacyPolicy: 'https://www.kingspan.com/ie/en/business-groups-in-ireland/kingspan-insulation-boards/u-value-calculator-website-privacy-notice',\n marketingConsent: 'https://www.kingspan.com/ie/en/business-groups-in-ireland/kingspan-insulation-boards/u-value-calculator-direct-marketing-consent',\n termsAndConditions: 'https://www.kingspan.com/ie/en/business-groups-in-ireland/kingspan-insulation-boards/u-value-calculator-terms-and-conditions-of-website-use',\n };\n case 'be': {\n if (i18nextLng === 'nl-BE') {\n return {\n cookiePolicy: 'https://kingspan.com/be/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-cookiebeleid-en-beheer',\n privacyPolicy: 'https://kingspan.com/be/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-privacyverklaring-website',\n marketingConsent: 'https://kingspan.com/be/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-direct-marketing-toestemming',\n termsAndConditions: 'https://kingspan.com/be/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-algemene-voorwaarden-voor-gebruik-van-de-website',\n };\n }\n return {\n cookiePolicy: 'https://www.kingspan.com/be/fr/divisions/kingspaninsulation/u-value-calculator-politique-controle-sur-les-cookies',\n privacyPolicy: 'https://www.kingspan.com/be/fr/divisions/kingspaninsulation/u-value-calculator-politique-de-confidentialite-du-site-internet',\n marketingConsent: 'https://www.kingspan.com/be/fr/divisions/kingspaninsulation/u-value-calculator-engagements-de-kingspan-direct-marketing',\n termsAndConditions: 'https://www.kingspan.com/be/fr/divisions/kingspaninsulation/u-value-calculator-modalites-et-conditions-generales-dutilisation-du-site-internet',\n };\n }\n case 'nl':\n return {\n cookiePolicy: 'https://www.kingspan.com/nl/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-cookiebeleid-en-beheer',\n privacyPolicy: 'https://kingspan.com/nl/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-privacyverklaring-website',\n marketingConsent: 'https://www.kingspan.com/nl/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-direct-marketing-toestemming',\n termsAndConditions: 'https://kingspan.com/nl/nl/kingspan-divisies/kingspaninsulation/u-value-calculator-algemene-voorwaarden-voor-gebruik-van-de-website',\n };\n default:\n return defaultLinks;\n }\n};\n","import React from 'react';\nimport styles from '../ChooseCountry/ChooseCountry.module.scss';\nimport { Trans } from 'react-i18next';\nimport { Grid } from '@material-ui/core';\nimport { getLinks } from '../../common/links';\nexport default function footerLinks() {\n const links = getLinks();\n const linkDatas = [\n { link: links.cookiePolicy, i18nKey: 'choose-country.cookie-policy', defaultName: 'Cookie Policy & Control' },\n { link: links.privacyPolicy, i18nKey: 'choose-country.privacy-policy', defaultName: 'Website Privacy Policy' },\n { link: links.marketingConsent, i18nKey: 'choose-country.marketing-consent', defaultName: 'Direct Marketing Consent Notice' },\n { link: links.termsAndConditions, i18nKey: 'choose-country.terms-and-conditions', defaultName: 'Terms & Conditions of Website Use' },\n ];\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { style: { width: '100%', paddingBottom: '5px' } },\n React.createElement(\"div\", { style: { float: 'right' } }, \"\\u00A9 Kingspan Insulation\")),\n React.createElement(\"div\", { className: styles.footerLinks },\n React.createElement(Grid, { container: true, spacing: 2 },\n linkDatas.map((linkData, index) => (React.createElement(Grid, { item: true, xs: 12, sm: 6, key: index },\n React.createElement(\"a\", { href: linkData.link, target: \"_blank\", rel: \"noopener noreferrer \" },\n React.createElement(Trans, { i18nKey: linkData.i18nKey }, linkData.defaultName))))),\n React.createElement(Grid, { item: true, xs: 12, sm: 6 },\n React.createElement(\"a\", { href: \"#bottom\", onClick: () => CookieControl.open() }, \"Cookie Settings\"))))));\n}\n","import { Box, createStyles, Divider, Grid, makeStyles, Typography } from '@material-ui/core';\nimport parse from 'html-react-parser';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { countryIdSelector } from '../../store/component-state/component-state.selectors';\nimport { Address } from './Address/Address';\nimport { Contact } from './Contact/Contact';\nimport { TechSupportBar } from './TechSupportBar/TechSupportBar';\nimport FooterLinks from './FooterLinks';\nconst useStyles = makeStyles((theme) => createStyles({\n container: {\n padding: theme.spacing(1),\n },\n title: {\n [theme.breakpoints.up('md')]: {\n fontSize: theme.typography.h1.fontSize,\n },\n [theme.breakpoints.up('sm')]: {\n fontSize: theme.typography.h2.fontSize,\n },\n [theme.breakpoints.down('sm')]: {\n fontSize: theme.typography.h3.fontSize,\n },\n [theme.breakpoints.down('xs')]: {\n fontSize: theme.typography.h6.fontSize,\n },\n },\n paddedGrid: {\n [theme.breakpoints.up('md')]: {\n padding: 0,\n },\n [theme.breakpoints.down('md')]: {\n padding: theme.spacing(1),\n },\n },\n}));\nexport function Footer() {\n const { t } = useTranslation();\n const theme = useStyles();\n const countryId = useSelector(countryIdSelector);\n return (React.createElement(React.Fragment, null,\n React.createElement(TechSupportBar, null),\n React.createElement(Divider, null),\n countryId && (React.createElement(Grid, { className: theme.container, container: true, justify: \"space-evenly\", alignItems: \"center\" },\n React.createElement(Grid, { item: true, xs: 12, md: 6, className: theme.paddedGrid },\n React.createElement(Typography, { variant: \"h1\", className: theme.title }, parse(t(`by-country.${countryId}.footer.company`)))),\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 3, className: theme.paddedGrid },\n React.createElement(Address, null)),\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 3, className: theme.paddedGrid },\n React.createElement(Contact, null)))),\n React.createElement(Divider, null),\n React.createElement(Box, { p: 3, paddingTop: 1 },\n React.createElement(Typography, { variant: \"caption\" }, parse(t(`by-country.${countryId}.footer.disclaimer`)))),\n React.createElement(Divider, null),\n React.createElement(FooterLinks, null)));\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"page\":\"Layout_page__p6SrX\",\"content\":\"Layout_content__UOgH6\"};","import React, { useEffect } from 'react';\nimport { Container } from '@material-ui/core';\nimport { Header } from '../Header/Header';\nimport ErrorBar from './ErrorBar';\nimport { Footer } from '../Footer/Footer';\nimport styles from './Layout.module.scss';\nimport { useSelector } from 'react-redux';\nimport { countryIdSelector } from '../../store/component-state/component-state.selectors';\nexport function Layout({ children }) {\n const countryId = useSelector(countryIdSelector);\n useEffect(() => {\n if (countryId === 'nl') {\n const script = document.createElement('script');\n script.src = '/live-chat.js';\n document.body.appendChild(script);\n return () => {\n document.body.removeChild(script);\n };\n }\n }, [countryId]);\n return (React.createElement(Container, { disableGutters: true },\n React.createElement(\"div\", { className: styles.page },\n React.createElement(Container, null,\n React.createElement(Header, null),\n React.createElement(ErrorBar, null),\n React.createElement(\"div\", { \"data-qa-id\": \"pageContent\", className: styles.content }, children),\n React.createElement(Footer, null)))));\n}\n","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport styles from './Layout.module.scss';\nexport function LayoutMinimal({ children }) {\n return (React.createElement(Container, { disableGutters: true },\n React.createElement(\"div\", { className: styles.page },\n React.createElement(Container, null,\n React.createElement(\"div\", { \"data-qa-id\": \"pageContent\", className: styles.content }, children)))));\n}\n","export const FETCH_CONSTRUCTION_TYPES_ATTEMPT = '[Construction Data] Fetch Construction Types Attempt';\nexport const FETCH_CONSTRUCTION_TYPES_SUCCESS = '[Construction Data] Fetch Construction Types Success';\nexport const FETCH_CONSTRUCTION_TYPES_FAILURE = '[Construction Data] Fetch Construction Types Failure';\nexport const FETCH_CONSTRUCTION_TYPE_NAMES_SUCCESS = '[Construction Data] Fetch Construction Type Names Success';\nexport const FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_ATTEMPT = '[Construction Data] Fetch Construction Layers for Type Attempt';\nexport const FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_SUCCESS = '[Construction Data] Fetch Construction Layers for Type Success';\nexport const FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_FAILURE = '[Construction Data] Fetch Construction Layers for Type Failure';\n","import { cloneDeep } from 'lodash';\nimport * as he from 'he';\nimport * as actionTypes from './construction-data.action-types';\nexport const initialState = {\n types: [],\n layers: {}\n};\nexport const constructionDataReducer = (state = initialState, action) => {\n var _a, _b;\n switch (action.type) {\n case actionTypes.FETCH_CONSTRUCTION_TYPES_SUCCESS:\n return Object.assign(Object.assign({}, state), { types: action.payload });\n case actionTypes.FETCH_CONSTRUCTION_TYPE_NAMES_SUCCESS:\n {\n const newState = Object.assign(Object.assign({}, state), { types: cloneDeep((_a = state.types) !== null && _a !== void 0 ? _a : []) });\n // Build dictionary of the latest names where the key is the Construction Type ID\n const latestNames = {};\n action.payload.forEach(ct => latestNames[ct.id] = ct.nameLocalized);\n // Update the name of each Construction Type in our state, from the latest known names\n newState.types.forEach(ct => { var _a; return ct.nameLocalized = (_a = latestNames[ct.id]) !== null && _a !== void 0 ? _a : ct.nameLocalized; });\n return newState;\n }\n case actionTypes.FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_SUCCESS:\n {\n const newState = Object.assign(Object.assign({}, state), { types: cloneDeep((_b = state.types) !== null && _b !== void 0 ? _b : []), layers: Object.assign(Object.assign({}, state.layers), { [action.payload.constructionType]: action.payload.layers }) });\n const constructionType = newState.types.find(ct => ct.id === action.payload.constructionType);\n if (constructionType) {\n constructionType.nameLocalized = he.decode(action.payload.constructionTypeNameLocalized);\n }\n return newState;\n }\n default:\n return state;\n }\n};\n","var _a, _b;\nimport * as constructionDataActionTypes from '../construction-data/construction-data.action-types';\nimport * as componentStateActionTypes from './component-state.action-types';\nimport * as currentCalculationStateActionTypes from '../current-calculation-data/current-calculation-data.action-types';\nimport * as calculationStateActionTypes from '../calculations/calculations.action-types';\nimport { getPreviouslySelectedCulture } from '../../helpers/memory-helper';\nexport const initialState = {\n activeConstructionTypeId: '',\n activeConstructionLayerId: 0,\n countries: null,\n selectedCountry: null,\n isLoading: false,\n isLoadingConstructionTypes: false,\n isCalculationResultLoading: false,\n error: null,\n calculationResultError: null,\n selectedCulture: (_b = (_a = getPreviouslySelectedCulture()) !== null && _a !== void 0 ? _a : navigator.language) !== null && _b !== void 0 ? _b : 'en-GB',\n downloadingCalculationId: null,\n isGtmContainerSet: false,\n projectConfig: null,\n counties: null,\n fieldData: null\n};\nexport const componentStateReducer = (state = initialState, action) => {\n switch (action.type) {\n // Page Loading State\n case constructionDataActionTypes.FETCH_CONSTRUCTION_TYPES_ATTEMPT:\n return Object.assign(Object.assign({}, state), { isLoadingConstructionTypes: true, error: null });\n case constructionDataActionTypes.FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_ATTEMPT:\n case calculationStateActionTypes.FETCH_CALCULATIONS_ATTEMPT:\n return Object.assign(Object.assign({}, state), { isLoading: true, error: null });\n case constructionDataActionTypes.FETCH_CONSTRUCTION_TYPES_SUCCESS:\n case constructionDataActionTypes.FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_SUCCESS:\n case calculationStateActionTypes.FETCH_CALCULATIONS_SUCCESS:\n return Object.assign(Object.assign({}, state), { isLoading: false, isLoadingConstructionTypes: false });\n case constructionDataActionTypes.FETCH_CONSTRUCTION_TYPES_FAILURE:\n case constructionDataActionTypes.FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_FAILURE:\n case calculationStateActionTypes.FETCH_CALCULATIONS_FAILURE:\n return Object.assign(Object.assign({}, state), { isLoading: false, isLoadingConstructionTypes: false, error: action.error });\n // Component State\n case componentStateActionTypes.SET_GTM_CONTAINER:\n return Object.assign(Object.assign({}, state), { isGtmContainerSet: true });\n case componentStateActionTypes.SET_ACTIVE_CONSTRUCTION_TYPE:\n return Object.assign(Object.assign({}, state), { activeConstructionTypeId: action.payload });\n case componentStateActionTypes.SET_ACTIVE_CONSTRUCTION_LAYER:\n return Object.assign(Object.assign({}, state), { activeConstructionLayerId: action.payload });\n case componentStateActionTypes.SET_COUNTRIES:\n return Object.assign(Object.assign({}, state), { countries: action.payload });\n case componentStateActionTypes.SET_SELECTED_COUNTRY:\n return Object.assign(Object.assign({}, state), { selectedCountry: action.payload });\n case componentStateActionTypes.SET_PROJECT_CONFIG:\n return Object.assign(Object.assign({}, state), { projectConfig: action.payload });\n case componentStateActionTypes.SET_SELECTED_CULTURE:\n return Object.assign(Object.assign({}, state), { selectedCulture: action.payload });\n case componentStateActionTypes.SET_COUNTIES:\n return Object.assign(Object.assign({}, state), { counties: action.payload });\n case componentStateActionTypes.SET_FIELD_DATA:\n return Object.assign(Object.assign({}, state), { fieldData: action.payload });\n // Component State\n case currentCalculationStateActionTypes.FETCH_CALCULATION_RESULTS_ATTEMPT:\n return Object.assign(Object.assign({}, state), { isCalculationResultLoading: true, calculationResultError: null });\n case currentCalculationStateActionTypes.FETCH_CALCULATION_RESULTS_SUCCESS:\n case currentCalculationStateActionTypes.FETCH_CALCULATION_RESULTS_CLIENT_ERROR:\n return Object.assign(Object.assign({}, state), { isCalculationResultLoading: false });\n case currentCalculationStateActionTypes.FETCH_CALCULATION_RESULTS_FAILURE:\n return Object.assign(Object.assign({}, state), { isCalculationResultLoading: false, calculationResultError: action.error });\n // Calculcation Downloading State\n case calculationStateActionTypes.DOWNLOAD_CALCULATION_ATTEMPT:\n case calculationStateActionTypes.DOWNLOAD_PDF_CALCULATION_ATTEMPT:\n return Object.assign(Object.assign({}, state), { downloadingCalculationId: action.payload, error: null });\n case calculationStateActionTypes.DOWNLOAD_CALCULATION_SUCCESS:\n case calculationStateActionTypes.DOWNLOAD_PDF_CALCULATION_SUCCESS:\n return Object.assign(Object.assign({}, state), { downloadingCalculationId: null });\n case calculationStateActionTypes.DOWNLOAD_CALCULATION_FAILURE:\n case calculationStateActionTypes.DOWNLOAD_PDF_CALCULATION_FAILURE:\n return Object.assign(Object.assign({}, state), { downloadingCalculationId: null });\n default:\n return state;\n }\n};\n","import { AuthenticationActions, AuthenticationState } from 'react-aad-msal';\nconst initialState = {\n initializing: false,\n initialized: false,\n state: AuthenticationState.Unauthenticated\n};\nexport const authenticationReducer = (state = initialState, action) => {\n switch (action.type) {\n case AuthenticationActions.Initializing:\n return Object.assign(Object.assign({}, state), { initializing: true, initialized: false });\n case AuthenticationActions.Initialized:\n return Object.assign(Object.assign({}, state), { initializing: false, initialized: true });\n case AuthenticationActions.AcquiredIdTokenSuccess:\n return Object.assign(Object.assign({}, state), { idToken: action.payload });\n case AuthenticationActions.AcquiredAccessTokenSuccess:\n return Object.assign(Object.assign({}, state), { accessToken: action.payload });\n case AuthenticationActions.AcquiredAccessTokenError:\n return Object.assign(Object.assign({}, state), { accessToken: undefined });\n case AuthenticationActions.LoginSuccess:\n return Object.assign(Object.assign({}, state), { account: action.payload });\n case AuthenticationActions.LoginError:\n case AuthenticationActions.AcquiredIdTokenError:\n case AuthenticationActions.LogoutSuccess:\n return Object.assign(Object.assign({}, state), { idToken: undefined, accessToken: undefined, account: undefined });\n case AuthenticationActions.AuthenticatedStateChanged:\n return Object.assign(Object.assign({}, state), { state: action.payload });\n default:\n return state;\n }\n};\n","import * as actionTypes from './account.action-types';\nimport { ResponseCode } from '../../types/application/response-code.types';\nexport const initialState = {\n uploadCompanyLogoState: {\n isLoading: false\n }\n};\nexport const accountReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.FETCH_USER_SUCCESS:\n return Object.assign(Object.assign({}, state), { loggedInUser: action.payload.user, isNewUser: action.payload.isNewUser });\n case actionTypes.GDPR_CONSENT_RESPONSE_SELECTED:\n return Object.assign(Object.assign({}, state), { gdprConsent: action.payload });\n case actionTypes.UPLOAD_COMPANY_LOGO_ATTEMPT:\n return Object.assign(Object.assign({}, state), { uploadCompanyLogoState: {\n isLoading: true,\n error: null,\n } });\n case actionTypes.UPLOAD_COMPANY_LOGO_SUCCESS:\n return Object.assign(Object.assign({}, state), { uploadCompanyLogoState: {\n isLoading: false,\n response: {\n status: ResponseCode.OK,\n ok: action.payload,\n },\n } });\n case actionTypes.UPLOAD_COMPANY_LOGO_BAD_REQUEST:\n return Object.assign(Object.assign({}, state), { uploadCompanyLogoState: {\n isLoading: false,\n error: action.error,\n } });\n case actionTypes.UPLOAD_COMPANY_LOGO_FAILURE:\n return Object.assign(Object.assign({}, state), { uploadCompanyLogoState: {\n isLoading: false,\n error: action.error,\n } });\n case actionTypes.SET_IS_CONFIRMED_GUEST:\n return Object.assign(Object.assign({}, state), { isConfirmedGuest: action.payload });\n default:\n return state;\n }\n};\n","import * as actionTypes from './calculations.action-types';\nexport const initialState = {\n calculations: {},\n deletingCalculations: []\n};\nexport const calculationsReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.FETCH_CALCULATIONS_SUCCESS:\n return Object.assign(Object.assign({}, state), { calculations: Object.assign({}, action.payload) });\n case actionTypes.DELETE_CALCULATION_ATTEMPT:\n return Object.assign(Object.assign({}, state), { deletingCalculations: [\n ...state.deletingCalculations,\n action.payload,\n ] });\n case actionTypes.DELETE_CALCULATION_SUCCESS:\n const calcs = Object\n .values(state.calculations)\n .filter(c => c.calculationId !== action.payload)\n .reduce((obj, calc) => { return Object.assign(Object.assign({}, obj), { [calc.calculationId]: calc }); }, {});\n return {\n calculations: Object.assign({}, calcs),\n deletingCalculations: [\n ...(state.deletingCalculations.filter(c => c !== action.payload))\n ],\n };\n case actionTypes.DELETE_CALCULATION_FAILURE:\n return Object.assign(Object.assign({}, state), { deletingCalculations: [\n ...(state.deletingCalculations.filter(c => c !== action.payload))\n ] });\n default:\n return state;\n }\n};\n","import { FETCH_NEWS_ITEM_SUCCESS, FETCH_NEWS_ITEM_FAILURE, FETCH_NEWS_ITEM_ATTEMPT, CLEAR_NEWS_ITEM, } from './news-item.action-types';\nexport const initialState = {\n isLoading: false,\n error: null,\n};\nexport function newsItemReducer(state = initialState, action) {\n switch (action.type) {\n case FETCH_NEWS_ITEM_ATTEMPT:\n return Object.assign(Object.assign({}, initialState), { isLoading: true });\n case FETCH_NEWS_ITEM_SUCCESS:\n return Object.assign(Object.assign({}, initialState), { isLoading: false, content: action.payload });\n case FETCH_NEWS_ITEM_FAILURE:\n return Object.assign(Object.assign({}, initialState), { isLoading: false, error: action.error });\n case CLEAR_NEWS_ITEM:\n return Object.assign({}, initialState);\n default:\n return state;\n }\n}\n","import { createStore, applyMiddleware, combineReducers } from 'redux';\nimport thunk from 'redux-thunk';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport reduxImmutableStateInvariant from 'redux-immutable-state-invariant';\nimport { constructionDataReducer } from './construction-data/construction-data.reducer';\nimport { currentCalculationDataReducer } from './current-calculation-data/current-calculation-data.reducer';\nimport { componentStateReducer } from './component-state/component-state.reducer';\nimport { authenticationReducer } from './authentication/authentication.reducer';\nimport { accountReducer } from './account/account.reducer';\nimport { calculationsReducer } from './calculations/calculations.reducer';\nimport { newsItemReducer } from './news-item/news-item.reducer';\nconst middleware = [thunk];\nif (process.env.NODE_ENV !== 'production') {\n middleware.push(reduxImmutableStateInvariant());\n}\nexport const store = createStore(combineReducers({\n componentState: componentStateReducer,\n constructionData: constructionDataReducer,\n currentCalculationData: currentCalculationDataReducer,\n authenticationState: authenticationReducer,\n accountData: accountReducer,\n calculations: calculationsReducer,\n newsItem: newsItemReducer,\n}), composeWithDevTools(applyMiddleware(...middleware)));\n","export const FETCH_CALCULATIONS_ATTEMPT = '[Calculations] Fetch Calculcation Attempt';\nexport const FETCH_CALCULATIONS_SUCCESS = '[Calculations] Fetch Calculcation Success';\nexport const FETCH_CALCULATIONS_FAILURE = '[Calculations] Fetch Calculcation Failure';\nexport const DELETE_CALCULATION_ATTEMPT = '[Calculations] Delete Calculcation Attempt';\nexport const DELETE_CALCULATION_SUCCESS = '[Calculations] Delete Calculcation Success';\nexport const DELETE_CALCULATION_FAILURE = '[Calculations] Delete Calculcation Failure';\nexport const DOWNLOAD_CALCULATION_ATTEMPT = '[Calculations] Download Calculcation Attempt';\nexport const DOWNLOAD_CALCULATION_SUCCESS = '[Calculations] Download Calculcation Success';\nexport const DOWNLOAD_CALCULATION_FAILURE = '[Calculations] Download Calculcation Failure';\nexport const DOWNLOAD_PDF_CALCULATION_ATTEMPT = '[Calculations] Download PDF Calculcation Attempt';\nexport const DOWNLOAD_PDF_CALCULATION_SUCCESS = '[Calculations] Download PDF Calculcation Success';\nexport const DOWNLOAD_PDF_CALCULATION_FAILURE = '[Calculations] Download PDF Calculcation Failure';\n","export const FETCH_NEWS_ITEM_ATTEMPT = '[News Items] Fetch News Item Attempt';\nexport const FETCH_NEWS_ITEM_SUCCESS = '[News Items] Fetch News Item Success';\nexport const FETCH_NEWS_ITEM_FAILURE = '[News Items] Fetch News Item Failure';\nexport const FETCH_NEWS_ITEM_SKIPPED = '[News Items] Fetch News Item Skipped';\nexport const CLEAR_NEWS_ITEM = '[News Items] Clear News Item';\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\"};","import { createMuiTheme } from '@material-ui/core/styles';\nimport themeStyles from './theme.module.scss';\nimport './overrides.module.scss';\nconst themeOptions = {\n breakpoints: {\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n values: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n },\n },\n direction: 'ltr',\n mixins: {\n toolbar: {\n minHeight: 56,\n '@media (min-width:0px) and (orientation: landscape)': { minHeight: 48 },\n '@media (min-width:600px)': { minHeight: 64 },\n },\n },\n overrides: {},\n palette: {\n common: {\n black: '#000',\n white: '#fff',\n },\n type: 'light',\n primary: {\n main: themeStyles.colorSecondaryGreyDarkest,\n light: themeStyles.colorSecondaryGreyDarkest,\n dark: themeStyles.colorSecondaryGreyDarkest,\n contrastText: '#fff',\n },\n secondary: {\n main: themeStyles.colorHighlightGold,\n light: themeStyles.colorHighlightGold,\n dark: themeStyles.colorHighlightGold,\n contrastText: '#fff',\n },\n error: {\n light: themeStyles.colorError,\n main: themeStyles.colorError,\n dark: themeStyles.colorError,\n contrastText: '#fff',\n },\n grey: {\n '50': '#fafafa',\n '100': '#f5f5f5',\n '200': '#eeeeee',\n '300': '#e0e0e0',\n '400': '#bdbdbd',\n '500': '#9e9e9e',\n '600': '#757575',\n '700': '#616161',\n '800': '#424242',\n '900': '#212121',\n A100: '#d5d5d5',\n A200: '#aaaaaa',\n A400: '#303030',\n A700: '#616161',\n },\n contrastThreshold: 3,\n tonalOffset: 0.2,\n text: {\n primary: themeStyles.colorTextBase,\n secondary: 'rgba(0, 0, 0, 0.54)',\n disabled: 'rgba(0, 0, 0, 0.38)',\n hint: 'rgba(0, 0, 0, 0.38)',\n },\n divider: 'rgba(0, 0, 0, 0.12)',\n background: { paper: '#fff', default: themeStyles.colorSecondaryGreyLightest },\n action: {\n active: 'rgba(0, 0, 0, 0.54)',\n hover: 'rgba(0, 0, 0, 0.08)',\n hoverOpacity: 0.08,\n selected: 'rgba(0, 0, 0, 0.14)',\n disabled: 'rgba(0, 0, 0, 0.26)',\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n },\n },\n props: {},\n shadows: [\n 'none',\n '0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)',\n '0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)',\n '0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)',\n '0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)',\n '0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)',\n '0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)',\n '0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)',\n '0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)',\n '0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)',\n '0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)',\n '0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)',\n '0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)',\n '0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)',\n '0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)',\n '0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)',\n '0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)',\n '0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)',\n '0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)',\n '0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)',\n '0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)',\n '0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)',\n '0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)',\n '0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)',\n '0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)',\n ],\n typography: {\n htmlFontSize: parseInt(themeStyles.fontSizeBase),\n fontFamily: themeStyles.fontFamily,\n fontSize: parseInt(themeStyles.fontSizeBase),\n fontWeightLight: parseInt(themeStyles.fontWeightLight),\n fontWeightRegular: parseInt(themeStyles.fontWeightRegular),\n fontWeightMedium: parseInt(themeStyles.fontWeightMedium),\n fontWeightBold: parseInt(themeStyles.fontWeightBold),\n h1: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightLight),\n fontSize: themeStyles.fontSizeH1,\n lineHeight: 1,\n letterSpacing: themeStyles.headerLetterSpacing,\n },\n h2: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightLight),\n fontSize: themeStyles.fontSizeH2,\n lineHeight: 1,\n letterSpacing: themeStyles.headerLetterSpacing,\n },\n h3: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeH3,\n lineHeight: 1.04,\n letterSpacing: themeStyles.headerLetterSpacing,\n },\n h4: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeH4,\n lineHeight: 1.17,\n letterSpacing: '0px',\n },\n h5: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeH5,\n lineHeight: 1.33,\n letterSpacing: '0em',\n },\n h6: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightMedium),\n fontSize: themeStyles.fontSizeH6,\n lineHeight: 1.6,\n letterSpacing: '0px',\n },\n subtitle1: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeBase,\n lineHeight: 1.75,\n letterSpacing: '0px',\n },\n subtitle2: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightMedium),\n fontSize: themeStyles.fontSizeSmall,\n lineHeight: 1.57,\n letterSpacing: '0px',\n },\n body1: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeBase,\n lineHeight: 1.5,\n letterSpacing: '0px',\n },\n body2: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeBase,\n lineHeight: 1.5,\n letterSpacing: '0px',\n },\n button: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightMedium),\n fontSize: themeStyles.fontSizeSmall,\n lineHeight: 2,\n letterSpacing: '0px',\n textTransform: 'uppercase',\n },\n caption: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeSmall,\n lineHeight: 1.66,\n letterSpacing: '0px',\n },\n overline: {\n fontFamily: themeStyles.fontFamily,\n fontWeight: parseInt(themeStyles.fontWeightRegular),\n fontSize: themeStyles.fontSizeSmall,\n lineHeight: 2.66,\n letterSpacing: '0px',\n textTransform: 'uppercase',\n },\n },\n shape: {\n borderRadius: parseInt(themeStyles.borderRadius),\n },\n transitions: {\n easing: {\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)',\n },\n duration: {\n shortest: 150,\n shorter: 200,\n short: 250,\n standard: 300,\n complex: 375,\n enteringScreen: 225,\n leavingScreen: 195,\n },\n },\n zIndex: {\n mobileStepper: 1000,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500,\n },\n};\nexport const theme = createMuiTheme(themeOptions);\n","export const constructionDataSelector = (store) => store.constructionData;\nexport const constructionTypesSelector = (store) => constructionDataSelector(store).types;\nexport const isLoadingConstructionTypesSelector = (store) => store.componentState.isLoading;\nexport const constructionCategoriesSelector = (store) => {\n var _a, _b;\n return [...((_b = (_a = store.constructionData) === null || _a === void 0 ? void 0 : _a.types) !== null && _b !== void 0 ? _b : [])]\n .sort((a, b) => b.category.localeCompare(a.category))\n .map(ct => ct.category)\n .filter((value, index, self) => self.indexOf(value) === index);\n};\nexport const constructionLayerSelector = (constructionTypeId) => (store) => { var _a; return (_a = store.constructionData.layers[constructionTypeId]) !== null && _a !== void 0 ? _a : []; };\nexport const constructionTypeNameSelector = (constructionTypeId) => (store) => {\n var _a, _b;\n return (_b = (_a = constructionDataSelector(store).types\n .find(ct => ct.id === constructionTypeId)) === null || _a === void 0 ? void 0 : _a.nameLocalized) !== null && _b !== void 0 ? _b : constructionTypeId;\n};\n","import React from 'react';\nimport { Button, Dialog, DialogActions, DialogContent, List, ListItemText, ListItem, Box, DialogTitle, IconButton, createStyles, makeStyles, Typography, Grid, ListItemIcon, useMediaQuery, } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { Trans, useTranslation } from 'react-i18next';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport AzureAD from 'react-aad-msal';\nimport authProviderFactory from '../../authentication/authProvider';\nimport { useDispatch, useStore } from 'react-redux';\nimport { setIsConfirmedGuest } from '../../store/account/account.actions';\nconst useStyles = makeStyles((theme) => createStyles({\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n fullWidthButton: {\n width: '100%',\n marginBottom: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n}));\nexport default function SignInDialog(props) {\n const { open, handleClose } = props;\n const dispatch = useDispatch();\n const classes = useStyles();\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const store = useStore();\n const { t } = useTranslation();\n const reasons = [\n t('sign-in-dialog.reason-1'),\n t('sign-in-dialog.reason-2'),\n t('sign-in-dialog.reason-3'),\n ];\n const closeWindow = (cont, isConfirmedGuest) => {\n dispatch(setIsConfirmedGuest(isConfirmedGuest));\n handleClose(cont);\n };\n return (React.createElement(Dialog, { open: open, keepMounted: true, onClose: () => closeWindow(false, false), fullWidth: true, maxWidth: 'sm' },\n React.createElement(DialogTitle, { disableTypography: true },\n React.createElement(Box, { marginRight: 4 },\n React.createElement(Typography, { variant: \"h4\" },\n React.createElement(Trans, { i18nKey: \"sign-in-dialog.title\" }, \"Make your experience even better\"))),\n React.createElement(IconButton, { \"aria-label\": \"close\", className: classes.closeButton, onClick: () => closeWindow(false, false) },\n React.createElement(CloseIcon, null))),\n React.createElement(DialogContent, null,\n React.createElement(Box, null,\n React.createElement(Trans, { i18nKey: \"sign-in-dialog.sub-title\" }, \"Creating an account is easy and free.\")),\n React.createElement(List, null, reasons.map((reason, index) => (React.createElement(ListItem, { key: index },\n React.createElement(ListItemIcon, null,\n React.createElement(ArrowRightIcon, null)),\n React.createElement(ListItemText, { primary: reason })))))),\n React.createElement(DialogActions, null,\n React.createElement(Grid, { container: true, justify: \"flex-end\" },\n React.createElement(Grid, { item: true, xs: 12, sm: 'auto' },\n React.createElement(AzureAD, { provider: authProviderFactory(), reduxStore: store }, ({ login }) => {\n return (React.createElement(Button, { variant: \"contained\", color: \"primary\", className: isMobileView ? classes.fullWidthButton : '', onClick: () => { closeWindow(true, false); login(); } },\n React.createElement(Trans, { i18nKey: \"sign-in-dialog.signup-signin\" }, \"Sign In\")));\n })),\n React.createElement(Grid, { item: true, xs: 12, sm: 'auto' },\n React.createElement(Button, { onClick: () => closeWindow(true, true), className: isMobileView ? classes.fullWidthButton : '', color: \"primary\", \"data-qa-id\": \"guest-btn\" },\n React.createElement(Trans, { i18nKey: \"sign-in-dialog.guest-button\" }, \"Continue as guest\")))))));\n}\n","import React from 'react';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\nimport { useTranslation, Trans } from 'react-i18next';\nimport { Card, CardActionArea, CardContent, CircularProgress, Typography, CardMedia, Divider } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector, useStore } from 'react-redux';\nimport { constructionTypesSelector, constructionCategoriesSelector } from '../../store/construction-data/construction-data.selectors';\nimport './ConstructionTypeSelection.module.scss';\nimport { getAppConfig } from '../../config/config';\nimport { buildRoute } from '../../helpers/routeHelper';\nimport SignInDialog from './SignInDialog';\nimport { isAuthenticatedSelector } from '../../store/authentication/authentication.selectors';\nimport { setActiveConstructionType } from '../../store/component-state/component-state.actions';\nimport { countryIdSelector, countrySelector } from '../../store/component-state/component-state.selectors';\nimport { isLoadingConstructionTypesSelector } from '../../store/construction-data/construction-data.selectors';\nimport { isConfirmedGuestSelector } from '../../store/account/account.selectors';\nconst useStyles = makeStyles((theme) => createStyles({\n root: {\n flexGrow: 1,\n },\n media: {\n height: 270,\n backgroundSize: 'contain',\n backgroundPosition: 'center',\n },\n}));\nexport default function ConstructionTypeSelection() {\n var _a;\n const dispatch = useDispatch();\n const history = useHistory();\n const store = useStore().getState();\n const apiUrl = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.apiUrl;\n const constructionTypes = useSelector(constructionTypesSelector);\n const categories = useSelector(constructionCategoriesSelector);\n const country = useSelector(countrySelector);\n const countryId = useSelector(countryIdSelector).toLowerCase();\n const isLoadingConstructionTypes = useSelector(isLoadingConstructionTypesSelector);\n const countryIdUpper = countryId.toUpperCase();\n const isAuthenticated = useSelector(isAuthenticatedSelector);\n const isConfirmedGuest = useSelector(isConfirmedGuestSelector);\n const classes = useStyles();\n const [open, setOpen] = React.useState(false);\n const [selectedType, setSelectedType] = React.useState('');\n const { t } = useTranslation();\n const handleConstructionTypeSelection = (selectedConstructionType) => {\n if (!isAuthenticated && !isConfirmedGuest) {\n setOpen(true);\n setSelectedType(selectedConstructionType);\n }\n else {\n history.push(buildRoute(store, `/calculation/${selectedConstructionType}`));\n }\n };\n const handleSignInClose = (cont) => {\n setOpen(false);\n if (cont) {\n dispatch(setActiveConstructionType(selectedType));\n history.push(buildRoute(store, `/calculation/${selectedType}`));\n }\n };\n return (React.createElement(\"div\", null,\n React.createElement(Grid, { container: true },\n React.createElement(Grid, { item: true, xs: 12 },\n React.createElement(\"div\", { className: 'title', \"data-qa-id\": \"titleLabel\" }, t(`by-country.${countryId}.construction-type-selection-ui.title`, {\n resultType: t(`calculation-result-type.singular.${country === null || country === void 0 ? void 0 : country.calculationResultType}`),\n })),\n React.createElement(\"div\", { className: 'subTitle', \"data-qa-id\": \"subTitleLabel\" }, t(`by-country.${countryId}.construction-type-selection-ui.sub-title`, {\n resultTypePlural: t(`calculation-result-type.plural.${country === null || country === void 0 ? void 0 : country.calculationResultType}`),\n calculationStandardName: country === null || country === void 0 ? void 0 : country.calculationStandardName,\n })))),\n isLoadingConstructionTypes &&\n React.createElement(CircularProgress, { size: 50 }),\n categories.map((c, index) => (React.createElement(\"div\", { key: index },\n React.createElement(\"div\", { className: 'groupTitle' },\n React.createElement(Trans, { i18nKey: `construction-category.${c.toLowerCase()}` }, c)),\n React.createElement(Divider, null),\n React.createElement(\"br\", null),\n React.createElement(Grid, { container: true, spacing: 2 }, constructionTypes\n .filter(ct => ct.category === c)\n .map(ct => (React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 4, key: ct.id, \"data-qa-id\": `${ct.id}-card` },\n React.createElement(Card, null,\n React.createElement(CardActionArea, { onClick: () => { handleConstructionTypeSelection(ct.id); } },\n React.createElement(CardMedia, { className: classes.media, image: `${apiUrl}/content/build-up-images/${countryIdUpper}/${countryIdUpper}-${ct.id}.jpg`, title: ct.nameLocalized }),\n React.createElement(CardContent, null,\n React.createElement(Typography, { gutterBottom: true, variant: \"h5\", component: \"h2\", \"data-qa-id\": `${ct.id}-cardtext` }, ct.nameLocalized))))))))))),\n React.createElement(SignInDialog, { open: open, handleClose: handleSignInClose })));\n}\n","import { FETCH_NEWS_ITEM_SUCCESS, FETCH_NEWS_ITEM_FAILURE, FETCH_NEWS_ITEM_SKIPPED, FETCH_NEWS_ITEM_ATTEMPT, CLEAR_NEWS_ITEM, } from './news-item.action-types';\nexport const fetchNewsItemAttempt = () => ({\n type: FETCH_NEWS_ITEM_ATTEMPT,\n});\nexport const fetchNewsItemSuccess = (newsItem) => ({\n type: FETCH_NEWS_ITEM_SUCCESS,\n payload: newsItem\n});\nexport const fetchNewsItemFailure = (error) => ({\n type: FETCH_NEWS_ITEM_FAILURE,\n error: error,\n});\nexport const fetchNewsItemSkipped = () => ({\n type: FETCH_NEWS_ITEM_SKIPPED,\n});\nexport const clearNewsItem = () => ({\n type: CLEAR_NEWS_ITEM,\n});\n","export const newsItemContentSelector = (state) => state.newsItem.content;\nexport const isLoadingSelector = (state) => state.newsItem.isLoading;\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"newsItemBanner\":\"NewsItemBanner_newsItemBanner__1Fy2J\",\"newsItemBannerText\":\"NewsItemBanner_newsItemBannerText__QgFgF\"};","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fetchNewsItem } from '../../store/news-item/news-item.action-creators';\nimport { newsItemContentSelector, isLoadingSelector } from '../../store/news-item/news-item.selectors';\nimport { isAuthenticatedSelector } from '../../store/authentication/authentication.selectors';\nimport { clearNewsItem } from '../../store/news-item/news-item.actions';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport styles from './NewsItemBanner.module.scss';\nexport default function NewsItemBanner(props) {\n const dispatch = useDispatch();\n const { countryId, constructionType, language } = props;\n useEffect(() => {\n if (constructionType && countryId && language) {\n dispatch(fetchNewsItem(constructionType, countryId, language));\n }\n return function cleanup() {\n dispatch(clearNewsItem());\n };\n }, [dispatch, constructionType, countryId, language]);\n const isLoading = useSelector(isLoadingSelector);\n const newsItem = useSelector(newsItemContentSelector);\n const isAuthenticated = useSelector(isAuthenticatedSelector);\n const handleDismiss = (event) => {\n event.stopPropagation();\n dispatch(clearNewsItem());\n };\n return !isLoading && newsItem ? (React.createElement(Alert, { severity: \"info\", onClose: isAuthenticated ? handleDismiss : undefined, onClick: () => window.open(newsItem.url), className: styles.newsItemBanner },\n React.createElement(AlertTitle, { \"data-qa-id\": \"newsItemUrl\", className: styles.newsItemBannerText }, newsItem.subject))) : null;\n}\n","import axios from 'axios';\nimport { fetchNewsItemSuccess, fetchNewsItemFailure, fetchNewsItemSkipped, fetchNewsItemAttempt } from './news-item.actions';\nexport const fetchNewsItem = (constructionType, countryId, language) => async (dispatch, getState) => {\n dispatch(fetchNewsItemAttempt());\n try {\n const response = await axios.get('/api/NewsItems', { params: {\n countryId,\n constructionType: constructionType,\n language: language,\n } });\n if (getState().componentState.activeConstructionTypeId !== constructionType) {\n // Fixes React sequencing issue that resulted on news items from previous construction type to be displayed.\n console.info('Ignored old news item response', { currentConstructionType: getState().componentState.activeConstructionTypeId, oldConstructionType: constructionType });\n dispatch(fetchNewsItemSkipped());\n return;\n }\n if (response.status === 200) {\n dispatch(fetchNewsItemSuccess(response.data));\n }\n else if (response.status === 204) {\n dispatch(fetchNewsItemFailure('No matching news item was found'));\n }\n else {\n dispatch(fetchNewsItemFailure(`Unexpected status: ${response.status}`));\n }\n }\n catch (error) {\n dispatch(fetchNewsItemFailure((error !== null && error !== void 0 ? error : {}).toString()));\n }\n};\n","export class PerimeterAreaConstants {\n}\nPerimeterAreaConstants.defaultPerimeter = 7.00;\nPerimeterAreaConstants.defaultArea = 10.00;\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"paLabel\":\"PerimeterAndArea_paLabel__EFajS\",\"paLabelShort\":\"PerimeterAndArea_paLabelShort__vaCw6\",\"paTextFieldShort\":\"PerimeterAndArea_paTextFieldShort__lx0h2\",\"paUnits\":\"PerimeterAndArea_paUnits__vg9zr\",\"paRatio\":\"PerimeterAndArea_paRatio__B2WA9\"};","import { Box, Grid, InputLabel, TextField, Typography } from '@material-ui/core';\nimport { gt, gte } from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport styles from './PerimeterAndArea.module.scss';\nexport default function PerimeterAndArea(props) {\n const { t } = useTranslation();\n const maxPerimeter = 100000000;\n const maxArea = 100000000;\n const defaultMinimum = 1.00;\n function updatePerimeter(value) {\n let perimeterValue = Number(value);\n if (Number.isNaN(perimeterValue) || perimeterValue <= 0) {\n perimeterValue = defaultMinimum;\n }\n if (gt(perimeterValue, maxPerimeter)) {\n perimeterValue = maxPerimeter;\n }\n props.setPerimeter(perimeterValue);\n }\n function updateArea(value) {\n let areaValue = Number(value);\n if (Number.isNaN(areaValue) || areaValue <= 0) {\n areaValue = defaultMinimum;\n }\n if (gt(areaValue, maxArea)) {\n areaValue = maxArea;\n }\n props.setArea(areaValue);\n }\n function calcRatio() {\n if (props.area && props.perimeter) {\n return props.perimeter / props.area;\n }\n return 0;\n }\n function getHelperText(key, value, maxValue) {\n let helperText = gte(value, maxValue)\n ? t(`additional-parameters.perimeter-and-area.${key}-exceeds-max`, { maxPerimeter: maxPerimeter })\n : '';\n return helperText;\n }\n ;\n return (React.createElement(Grid, { container: true, alignItems: \"flex-start\" },\n React.createElement(Grid, { item: true, xs: 2 },\n React.createElement(InputLabel, { htmlFor: \"pa-perimeter\", className: styles.paLabel }, t('additional-parameters.perimeter-and-area.perimeter')),\n React.createElement(TextField, { id: \"pa-perimeter\", className: styles.paTextFieldShort, type: \"number\", inputProps: { inputMode: 'numeric', min: { defaultMinimum }, max: { maxPerimeter } }, value: props.perimeter, \"data-qa-id\": \"qa-pa-perimeter\", variant: \"outlined\", error: gt(props.perimeter, maxPerimeter), helperText: getHelperText('perimeter', props.perimeter, maxPerimeter), onChange: (event) => updatePerimeter(event.target.value) })),\n React.createElement(Grid, { item: true, xs: 1, className: styles.paUnits },\n React.createElement(Typography, null, t('additional-parameters.perimeter-and-area.perimeter-units'))),\n React.createElement(Grid, { item: true, xs: 2 },\n React.createElement(InputLabel, { htmlFor: \"pa-area\", className: `${styles.paLabel} ${styles.paLabelShort}` }, t('additional-parameters.perimeter-and-area.area')),\n React.createElement(TextField, { id: \"pa-area\", className: styles.paTextFieldShort, type: \"number\", inputProps: { inputMode: 'numeric', min: { defaultMinimum }, max: { maxArea } }, value: props.area, \"data-qa-id\": \"qa-pa-area\", variant: \"outlined\", error: gt(props.area, maxArea), helperText: getHelperText('area', props.area, maxArea), onChange: (event) => updateArea(event.target.value) })),\n React.createElement(Grid, { item: true, xs: 1, className: styles.paUnits },\n React.createElement(Typography, null, t('additional-parameters.perimeter-and-area.area-units'))),\n React.createElement(Grid, { item: true, xs: 4 },\n React.createElement(InputLabel, { htmlFor: \"pa-ratio\", className: `${styles.paLabel} ${styles.paLabelShort}` }, t('additional-parameters.perimeter-and-area.pa-ratio')),\n React.createElement(Box, { className: styles.paRatio },\n React.createElement(Typography, { id: \"pa-ratio\", \"data-qa-id\": \"qa-pa-ratio\" },\n \"= \",\n calcRatio().toFixed(3))))));\n}\n","import DateFnsUtils from '@date-io/date-fns';\nimport { Box, Button, CircularProgress, createStyles, FormControl, Grid, InputLabel, makeStyles, MenuItem, Select, TextField, useMediaQuery, FormHelperText } from '@material-ui/core';\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport 'date-fns';\nimport * as Locales from 'date-fns/locale';\nimport { isEmpty } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { getAppConfig } from '../../config/config';\nimport { buildRouteWithCountry } from '../../helpers/routeHelper';\nimport { activeConstructionTypeIdSelector, activeConstructionTypeSelector, countiesSelector, countryIdSelector, projectConfigSelector, selectedCultureSelector, fieldDataSelector } from '../../store/component-state/component-state.selectors';\nimport { constructionTypeNameSelector } from '../../store/construction-data/construction-data.selectors';\nimport { setAdditionalParameters, setProjectDetails } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport { additionalParametersSelector, projectDetailsSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { ConstructionTypeAdditionalParameters } from '../../types/domain/construction-data.types';\nimport NewsItemBanner from '../NewsItem/NewsItemBanner';\nimport { PerimeterAreaConstants } from './PerimeterAndArea/perimeter-area.types';\nimport PerimeterAndArea from './PerimeterAndArea/PerimeterAndArea';\nconst useStyles = makeStyles((theme) => createStyles({\n [theme.breakpoints.down('xs')]: {\n formControl: {\n width: '100%',\n }\n },\n [theme.breakpoints.up('sm')]: {\n formControl: {\n width: 320,\n }\n },\n [theme.breakpoints.up('md')]: {\n formControl: {\n width: 380,\n }\n },\n}));\nexport default function CalculationProjectDetails(props) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n const { handleContinue } = props;\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const classes = useStyles();\n const apiUrl = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.apiUrl;\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const constructionTypeId = useSelector(activeConstructionTypeIdSelector);\n const activeConstructionType = useSelector(activeConstructionTypeSelector);\n const constructionTypeName = useSelector(constructionTypeNameSelector(constructionTypeId));\n const countryId = useSelector(countryIdSelector);\n const language = useSelector(selectedCultureSelector);\n const projectDetails = useSelector(projectDetailsSelector);\n const projectConfig = useSelector(projectConfigSelector);\n const counties = useSelector(countiesSelector);\n const fieldData = useSelector(fieldDataSelector);\n const [projectName, setProjectName] = useState({ value: '', error: '' });\n const [startDate, setStartDate] = useState({ value: null, error: '' });\n const [area, setArea] = useState(PerimeterAreaConstants.defaultArea);\n const [perimeter, setPerimeter] = useState(PerimeterAreaConstants.defaultPerimeter);\n const additionalParameters = useSelector(additionalParametersSelector);\n const countiesFiltered = counties.filter((county) => {\n return county.countryId === (projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.country);\n });\n const [countyName, setCountyName] = useState({ value: '', error: '' });\n const sizes = fieldData.filter((fieldData) => {\n return fieldData.fieldName === 'ProjectSize';\n });\n const types = fieldData.filter((fieldData) => {\n return fieldData.fieldName === 'ProjectType';\n });\n const statuses = fieldData.filter((fieldData) => {\n return fieldData.fieldName === 'RIBAStatus';\n });\n const uses = fieldData.filter((fieldData) => {\n return fieldData.fieldName === 'BuildingUse';\n });\n const siteAreas = fieldData.filter((fieldData) => {\n var _a;\n if ((_a = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _a === void 0 ? void 0 : _a.includes('projectsitearea')) {\n return fieldData.fieldName === 'ProjectSiteArea';\n }\n else {\n return fieldData.fieldName === 'SiteArea';\n }\n });\n const [projectSize, setProjectSize] = useState({ value: '', error: '' });\n const [projectType, setProjectType] = useState({ value: '', error: '' });\n const [projectRibaStatus, setRIBAStatus] = useState({ value: '', error: '' });\n const [projectBuidingUse, setBuildingUse] = useState({ value: '', error: '' });\n const [projectPostcode, setPostcode] = useState({ value: '', error: '' });\n const [siteArea, setSiteArea] = useState({ value: '', error: '' });\n // Initialise values if they already exist in the store\n useEffect(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (projectDetails !== undefined) {\n setProjectName({ value: projectDetails.name, error: '' });\n setStartDate({ value: projectDetails.startDate, error: '' });\n if (((_a = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _a === void 0 ? void 0 : _a.includes('projectsitearea')) || ((_b = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _b === void 0 ? void 0 : _b.includes('sitearea'))) {\n setSiteArea({ value: projectDetails.siteArea, error: '' });\n }\n else {\n setSiteArea({ value: projectDetails.siteArea, error: '' });\n }\n if ((_c = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _c === void 0 ? void 0 : _c.includes('projectcounty')) {\n setCountyName({ value: projectDetails.county, error: '' });\n }\n else {\n setCountyName({ value: '', error: '' });\n }\n if ((_d = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _d === void 0 ? void 0 : _d.includes('projectsize')) {\n setProjectSize({ value: projectDetails.size, error: '' });\n }\n else {\n setProjectSize({ value: '', error: '' });\n }\n if ((_e = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _e === void 0 ? void 0 : _e.includes('projecttype')) {\n setProjectType({ value: projectDetails.type, error: '' });\n }\n else {\n setProjectType({ value: '', error: '' });\n }\n if ((_f = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _f === void 0 ? void 0 : _f.includes('ribastatus')) {\n setRIBAStatus({ value: projectDetails.ribaStatus, error: '' });\n }\n else {\n setRIBAStatus({ value: '', error: '' });\n }\n if ((_g = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _g === void 0 ? void 0 : _g.includes('buildinguse')) {\n setBuildingUse({ value: projectDetails.buildingUse, error: '' });\n }\n else {\n setBuildingUse({ value: '', error: '' });\n }\n if ((_h = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _h === void 0 ? void 0 : _h.includes('postcode')) {\n setPostcode({ value: projectDetails.postcode, error: '' });\n }\n else {\n setPostcode({ value: '', error: '' });\n }\n }\n }, [projectDetails, projectConfig]);\n useEffect(() => {\n var _a, _b;\n if (additionalParameters !== undefined) {\n setArea((_a = additionalParameters.areaMetresSquared) !== null && _a !== void 0 ? _a : PerimeterAreaConstants.defaultArea);\n setPerimeter((_b = additionalParameters.perimeterMetres) !== null && _b !== void 0 ? _b : PerimeterAreaConstants.defaultPerimeter);\n }\n }, [additionalParameters]);\n const onProjectNameChange = (event) => {\n setProjectName({\n value: event.target.value,\n error: '',\n });\n };\n const onSiteAreaChange = (event) => {\n setSiteArea({\n value: event.target.value,\n error: '',\n });\n };\n const onStartDateChange = (date) => {\n setStartDate({\n value: date,\n error: '',\n });\n };\n const onCountyChange = (event) => {\n setCountyName({\n value: event.target.value,\n error: '',\n });\n };\n const onProjectSizeChange = (event) => {\n setProjectSize({\n value: event.target.value,\n error: '',\n });\n };\n const onProjectTypeChange = (event) => {\n setProjectType({\n value: event.target.value,\n error: '',\n });\n };\n const onRIBAStatusChange = (event) => {\n setRIBAStatus({\n value: event.target.value,\n error: '',\n });\n };\n const onBuildingUseChange = (event) => {\n setBuildingUse({\n value: event.target.value,\n error: '',\n });\n };\n const onPostcodeChange = (event) => {\n setPostcode({\n value: event.target.value,\n error: '',\n });\n };\n const validate = () => {\n var _a, _b, _c, _d, _e, _f;\n let isValid = true;\n if (projectName.value === '') {\n isValid = false;\n setProjectName(Object.assign(Object.assign({}, projectName), { error: t('project-details-ui.project-name.error-empty') }));\n }\n if (projectName.value.length > 150) {\n isValid = false;\n setProjectName(Object.assign(Object.assign({}, projectName), { error: t('project-details-ui.project-name.error-too-long') }));\n }\n if (startDate.value === null) {\n isValid = false;\n setStartDate(Object.assign(Object.assign({}, startDate), { error: t('project-details-ui.start-date.error-empty') }));\n }\n if (projectPostcode.value.length > 150) {\n isValid = false;\n setPostcode(Object.assign(Object.assign({}, projectPostcode), { error: t('project-details-ui.postcode.error-too-long') }));\n }\n if ((_a = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _a === void 0 ? void 0 : _a.includes('projectcounty')) {\n if (countyName.value === '') {\n isValid = false;\n setCountyName(Object.assign(Object.assign({}, countyName), { error: t('project-details-ui.county.error-empty') }));\n }\n }\n if ((_b = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _b === void 0 ? void 0 : _b.includes('projectsitearea')) {\n if (siteArea.value === '') {\n isValid = false;\n setSiteArea(Object.assign(Object.assign({}, siteArea), { error: t('project-details-ui.site-area.error-empty') }));\n }\n }\n if ((_c = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _c === void 0 ? void 0 : _c.includes('projectsize')) {\n if (projectSize.value === '') {\n isValid = false;\n setProjectSize(Object.assign(Object.assign({}, projectSize), { error: t('project-details-ui.size.error-empty') }));\n }\n }\n if ((_d = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _d === void 0 ? void 0 : _d.includes('projecttype')) {\n if (projectType.value === '') {\n isValid = false;\n setProjectType(Object.assign(Object.assign({}, projectType), { error: t('project-details-ui.type.error-empty') }));\n }\n }\n if ((_e = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _e === void 0 ? void 0 : _e.includes('ribastatus')) {\n if (projectRibaStatus.value === '') {\n isValid = false;\n setRIBAStatus(Object.assign(Object.assign({}, projectRibaStatus), { error: t('project-details-ui.ribastatus.error-empty') }));\n }\n }\n if ((_f = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _f === void 0 ? void 0 : _f.includes('buildinguse')) {\n if (projectBuidingUse.value === '') {\n isValid = false;\n setBuildingUse(Object.assign(Object.assign({}, projectBuidingUse), { error: t('project-details-ui.buildinguse.error-empty') }));\n }\n }\n return isValid;\n };\n const onContinueClick = () => {\n const isValid = validate();\n if (isValid) {\n dispatch(setProjectDetails({\n name: projectName.value,\n siteArea: siteArea.value,\n startDate: startDate.value,\n county: countyName.value,\n size: projectSize.value,\n type: projectType.value,\n ribaStatus: projectRibaStatus.value,\n buildingUse: projectBuidingUse.value,\n postcode: projectPostcode.value\n }));\n dispatch(setAdditionalParameters({\n areaMetresSquared: area,\n perimeterMetres: perimeter\n }));\n handleContinue();\n }\n };\n const getLocale = (localeCode) => {\n var _a, _b;\n const locales = Locales;\n return (_b = (_a = locales[localeCode.replace('-', '')]) !== null && _a !== void 0 ? _a : locales[localeCode.substring(0, 2)]) !== null && _b !== void 0 ? _b : locales['enGB'];\n };\n return (React.createElement(Box, null,\n React.createElement(NewsItemBanner, { countryId: countryId, constructionType: constructionTypeId, language: language }),\n React.createElement(Box, { mx: 2 },\n React.createElement(\"h1\", null, constructionTypeName),\n React.createElement(\"h2\", null,\n React.createElement(Trans, { i18nKey: \"project-details-ui.sub-title\" }, \"Project details\"))),\n React.createElement(Grid, { container: true, direction: isMobileView ? 'column-reverse' : 'row' },\n React.createElement(Grid, { item: true, container: true, xs: 12, sm: 6 },\n React.createElement(Grid, { item: true, xs: 12 },\n React.createElement(Box, { mx: 2, my: 4 },\n React.createElement(TextField, { id: \"project-name\", label: t('project-details-ui.project-name.label'), variant: \"outlined\", className: classes.formControl, value: projectName.value, onChange: onProjectNameChange, error: !isEmpty(projectName.error), helperText: projectName.error })),\n React.createElement(Box, { mx: 2 },\n React.createElement(MuiPickersUtilsProvider, { utils: DateFnsUtils, locale: getLocale(language) },\n React.createElement(KeyboardDatePicker, { disableToolbar: true, variant: \"inline\", format: \"dd/MM/yyyy\", inputVariant: \"outlined\", margin: \"normal\", id: \"start-date-picker\", label: t('project-details-ui.start-date.label'), className: classes.formControl, value: startDate.value, onChange: onStartDateChange, error: !isEmpty(startDate.error), helperText: startDate.error })))),\n ((_b = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _b === void 0 ? void 0 : _b.includes('postcode')) &&\n React.createElement(Box, { mx: 2, my: 4 },\n React.createElement(TextField, { id: \"postcode\", label: t('project-details-ui.postcode.label'), variant: \"outlined\", className: classes.formControl, value: projectPostcode.value, onChange: onPostcodeChange, error: !isEmpty(projectPostcode.error), helperText: projectPostcode.error })),\n (((_c = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _c === void 0 ? void 0 : _c.includes('projectsitearea')) || ((_d = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _d === void 0 ? void 0 : _d.includes('sitearea'))) &&\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(InputLabel, { id: \"site-area-select-label\", error: !isEmpty(siteArea.error) }, t('project-details-ui.site-area.label')),\n React.createElement(Select, { labelId: \"site-area-select-label\", id: \"site-area-select-helper\", label: t('project-details-ui.site-area.label'), value: siteArea.value, onChange: onSiteAreaChange, error: !isEmpty(siteArea.error) }, siteAreas.map(siteArea => (React.createElement(MenuItem, { key: siteArea.id, value: siteArea.code },\n React.createElement(Trans, { i18nKey: `project-details-ui.site-area.${siteArea.code}` },\n \" \",\n siteArea.code,\n \" \"))))),\n React.createElement(FormHelperText, { error: !isEmpty(siteArea.error) }, siteArea.error))),\n ((_e = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _e === void 0 ? void 0 : _e.includes('projectcounty')) &&\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(InputLabel, { id: \"county-select-label\", error: !isEmpty(countyName.error) }, t('project-details-ui.county.label')),\n React.createElement(Select, { labelId: \"county-select-label\", id: \"county-select-helper\", label: t('project-details-ui.county.label'), value: countyName.value, onChange: onCountyChange, error: !isEmpty(countyName.error) }, countiesFiltered.map(county => (React.createElement(MenuItem, { key: county.id, value: county.code },\n React.createElement(Trans, { i18nKey: `project-details-ui.county.${county}` },\n \" \",\n county.code,\n \" \"))))),\n React.createElement(FormHelperText, { error: !isEmpty(countyName.error) }, countyName.error))),\n ((_f = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _f === void 0 ? void 0 : _f.includes('projectsize')) &&\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(InputLabel, { id: \"size-select-label\", error: !isEmpty(projectSize.error) }, t('project-details-ui.size.label')),\n React.createElement(Select, { labelId: \"size-select-label\", id: \"size-select-helper\", label: t('project-details-ui.size.label'), value: projectSize.value, onChange: onProjectSizeChange, error: !isEmpty(projectSize.error) }, sizes.map(size => (React.createElement(MenuItem, { key: size.id, value: size.code },\n React.createElement(Trans, { i18nKey: `project-details-ui.size.${size.code}` },\n \" \",\n size.code,\n \" \"))))),\n React.createElement(FormHelperText, { error: !isEmpty(projectSize.error) }, projectSize.error))),\n ((_g = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _g === void 0 ? void 0 : _g.includes('projecttype')) &&\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(InputLabel, { id: \"type-select-label\", error: !isEmpty(projectType.error) }, t('project-details-ui.type.label')),\n React.createElement(Select, { labelId: \"type-select-label\", id: \"type-select-helper\", label: t('project-details-ui.type.label'), value: projectType.value, onChange: onProjectTypeChange, error: !isEmpty(projectType.error) }, types.map(type => (React.createElement(MenuItem, { key: type.id, value: type.code },\n React.createElement(Trans, { i18nKey: `project-details-ui.type.${type.code}` },\n \" \",\n type.code,\n \" \"))))),\n React.createElement(FormHelperText, { error: !isEmpty(projectType.error) }, projectType.error))),\n ((_h = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _h === void 0 ? void 0 : _h.includes('ribastatus')) &&\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(InputLabel, { id: \"ribastatus-select-label\", error: !isEmpty(projectRibaStatus.error) }, t('project-details-ui.ribastatus.label')),\n React.createElement(Select, { labelId: \"ribastatus-select-label\", id: \"ribastatus-select-helper\", label: t('project-details-ui.ribastatus.label'), value: projectRibaStatus.value, onChange: onRIBAStatusChange, error: !isEmpty(projectRibaStatus.error) }, statuses.map(status => (React.createElement(MenuItem, { key: status.id, value: status.code },\n React.createElement(Trans, { i18nKey: `project-details-ui.ribastatus.${status.code}` },\n \" \",\n status.code,\n \" \"))))),\n React.createElement(FormHelperText, { error: !isEmpty(projectRibaStatus.error) }, projectRibaStatus.error))),\n ((_j = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.fieldNames) === null || _j === void 0 ? void 0 : _j.includes('buildinguse')) &&\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(InputLabel, { id: \"buildinguse-select-label\", error: !isEmpty(projectBuidingUse.error) }, t('project-details-ui.buildinguse.label')),\n React.createElement(Select, { labelId: \"buildinguse-select-label\", id: \"buildinguse-select-helper\", label: t('project-details-ui.buildinguse.label'), value: projectBuidingUse.value, onChange: onBuildingUseChange, error: !isEmpty(projectBuidingUse.error) }, uses.map(use => (React.createElement(MenuItem, { key: use.id, value: use.code },\n React.createElement(Trans, { i18nKey: `project-details-ui.buildinguse.${use.code}` },\n \" \",\n use.code,\n \" \"))))),\n React.createElement(FormHelperText, { error: !isEmpty(projectBuidingUse.error) }, projectBuidingUse.error))),\n (activeConstructionType === null || activeConstructionType === void 0 ? void 0 : activeConstructionType.additionalParameters) &&\n React.createElement(Grid, { item: true, xs: 12 },\n React.createElement(Box, { mx: 2, my: 2 }, activeConstructionType.additionalParameters.some(a => a === ConstructionTypeAdditionalParameters.PerimeterAndArea) &&\n React.createElement(PerimeterAndArea, { perimeter: perimeter, setPerimeter: setPerimeter, area: area, setArea: setArea }))),\n React.createElement(Grid, { item: true, xs: 12 },\n React.createElement(Box, { mx: 2, marginTop: 2 },\n React.createElement(Button, { variant: \"contained\", color: \"primary\", onClick: onContinueClick, className: classes.formControl, \"data-qa-id\": \"continueBtn\" },\n React.createElement(Trans, { i18nKey: \"project-details-ui.continue-button\" }, \"Continue\")))),\n React.createElement(Grid, { item: true, xs: 12 },\n React.createElement(Box, { mx: 2, marginTop: 2, marginBottom: 4 },\n React.createElement(RouterLink, { to: buildRouteWithCountry(countryId, '/') },\n React.createElement(Button, { color: \"primary\", onClick: onContinueClick, className: classes.formControl },\n React.createElement(Trans, { i18nKey: \"project-details-ui.back-button\" }, \"Back\")))))),\n React.createElement(Grid, { item: true, xs: 12, sm: 6 }, isEmpty(constructionTypeId)\n ? React.createElement(CircularProgress, null)\n : React.createElement(\"img\", { \"data-qa-id\": \"construction-type-image\", style: { maxWidth: '100%' }, src: `${apiUrl}/content/build-up-images/${countryId.toUpperCase()}/${countryId.toUpperCase()}-${constructionTypeId}.jpg`, alt: constructionTypeName })))));\n}\n","import React from 'react';\nimport { Typography, Select, MenuItem } from '@material-ui/core';\nimport { Trans } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentSelectedMaterialSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { setMaterial } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nexport default function MaterialDropDown(props) {\n var _a;\n const { isLinkedMaterial } = props;\n const dispatch = useDispatch();\n const layer = useSelector(activeConstructionLayerSelector);\n const currentSelectedMaterial = useSelector(currentSelectedMaterialSelector(isLinkedMaterial));\n const parentSelectedMaterial = useSelector(currentSelectedMaterialSelector(false));\n const materials = isLinkedMaterial ? parentSelectedMaterial.linkedMaterials : layer.materials;\n const handleChange = (event) => {\n dispatch(setMaterial(layer, materials.filter(m => m.materialId === event.target.value)[0]));\n };\n return (React.createElement(\"div\", { className: 'marginTop20' },\n React.createElement(Typography, { gutterBottom: true, \"data-qa-id\": \"materialSelectLabel\" },\n React.createElement(Trans, { i18nKey: \"calculation-ui.material-label\" }, \"Material\")),\n React.createElement(Select, { fullWidth: true, \"data-qa-id\": \"materialSelect\", variant: \"outlined\", value: (_a = currentSelectedMaterial === null || currentSelectedMaterial === void 0 ? void 0 : currentSelectedMaterial.materialId) !== null && _a !== void 0 ? _a : '', onChange: handleChange }, materials.map(i => (React.createElement(MenuItem, { key: i.materialId, value: i.materialId, \"data-qa-id\": `${i.name}-dropdownvalue` }, i.name))))));\n}\n","import React, { useState } from 'react';\nimport { Grid, Typography, Slider, Select, MenuItem, makeStyles, createStyles, Box } from '@material-ui/core';\nimport { Trans } from 'react-i18next';\nconst getMarks = (thicknesses) => {\n return thicknesses.map(t => { return { value: t }; });\n};\nconst useStyle = makeStyles((theme) => (createStyles({\n depthDropdownContainer: {\n marginTop: 19,\n },\n})));\nexport default function ThicknessSlider(props) {\n const { labelKey, handleChange, selectedThickness, disabled, min, max, marks, defaultValue, units, isValueFixed } = props;\n const [value, setValue] = useState(selectedThickness);\n const handleChangeInternal = (event, newValue) => {\n setValue(newValue);\n };\n const handleDropdownChange = (event) => {\n setValue(event.target.value);\n handleChange(event.target.value);\n };\n const classes = useStyle();\n React.useEffect(() => {\n setValue(selectedThickness);\n }, [selectedThickness]);\n return (React.createElement(Box, { marginTop: 4 },\n React.createElement(Grid, { container: true, spacing: 4 },\n React.createElement(Grid, { item: true, xs: 8 },\n React.createElement(Typography, { id: \"discrete-slider\", gutterBottom: true, \"data-qa-id\": \"depthSliderLabel\" },\n React.createElement(Trans, { i18nKey: `calculation-ui.${labelKey}` }, \"Thickness\")),\n React.createElement(Slider, { onChange: handleChangeInternal, onChangeCommitted: () => handleChange(value), \"aria-labelledby\": \"discrete-slider\", valueLabelDisplay: \"auto\", step: null, marks: getMarks(marks), value: value !== null && value !== void 0 ? value : defaultValue, \"data-qa-id\": \"depthSlider\", min: min, max: max, disabled: disabled })),\n React.createElement(Grid, { item: true, xs: 4, \"data-qa-id\": \"inputContainer\", className: classes.depthDropdownContainer }, isValueFixed ?\n React.createElement(Typography, { variant: \"h3\" }, value !== null && value !== void 0 ? value : defaultValue)\n :\n React.createElement(Select, { value: value !== null && value !== void 0 ? value : defaultValue, onChange: handleDropdownChange, displayEmpty: true, inputProps: { 'aria-label': 'Without label' }, disabled: disabled, \"data-qa-id\": `${labelKey}-depthDropdown` }, marks.map((mark, index) => (React.createElement(MenuItem, { value: mark, key: index, \"data-qa-id\": `${mark}-dropdownvalue` }, `${mark} ${units}`))))))));\n}\n","import React from 'react';\nimport { Grid, Box } from '@material-ui/core';\nimport { Trans } from 'react-i18next';\nexport default function NoSlider(props) {\n const { labelKey, selectedThickness, } = props;\n return (React.createElement(Box, { marginTop: 4 },\n React.createElement(Grid, { container: true, spacing: 4 },\n React.createElement(Grid, { item: true, xs: 8 },\n React.createElement(Trans, { i18nKey: `calculation-ui.${labelKey}` }, \"Thickness\"),\n React.createElement(\"div\", null, selectedThickness)))));\n}\n","import React from 'react';\nimport { Box } from '@material-ui/core';\nimport { useDispatch } from 'react-redux';\nimport { LayerType } from '../../types/domain/construction-data.types';\nimport ThicknessSlider from './ThicknessSlider';\nimport NoSlider from './NoSlider';\nimport { setThickness } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport { setMaterialParameter } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nexport default function MaterialParametersAux(props) {\n var _a, _b, _c, _d;\n const { isLinkedMaterial, layer, currentSelectedThickness, currentSelectedMaterial } = props;\n const dispatch = useDispatch();\n const isFixedLayer = layer.isWithinBridgingFrame && layer.layerType === LayerType.AirCavity;\n const handleChange = (value) => {\n dispatch(setMaterialParameter(setThickness, layer, value, isLinkedMaterial));\n };\n if (currentSelectedMaterial && currentSelectedMaterial.optionsForThicknessMillimetres.length > 1) {\n return (React.createElement(ThicknessSlider, { labelKey: 'thickness-label', handleChange: handleChange, selectedThickness: currentSelectedThickness, disabled: !currentSelectedMaterial || isFixedLayer, marks: (_a = currentSelectedMaterial === null || currentSelectedMaterial === void 0 ? void 0 : currentSelectedMaterial.optionsForThicknessMillimetres) !== null && _a !== void 0 ? _a : [], min: (_b = currentSelectedMaterial === null || currentSelectedMaterial === void 0 ? void 0 : currentSelectedMaterial.optionsForThicknessMillimetres[0]) !== null && _b !== void 0 ? _b : 0, max: (_c = currentSelectedMaterial === null || currentSelectedMaterial === void 0 ? void 0 : currentSelectedMaterial.optionsForThicknessMillimetres[currentSelectedMaterial.optionsForThicknessMillimetres.length - 1]) !== null && _c !== void 0 ? _c : 100, defaultValue: (_d = currentSelectedMaterial === null || currentSelectedMaterial === void 0 ? void 0 : currentSelectedMaterial.defaultThicknessMillimetres) !== null && _d !== void 0 ? _d : 0, units: 'mm', isValueFixed: isFixedLayer }));\n }\n else if (currentSelectedMaterial && currentSelectedMaterial.optionsForThicknessMillimetres.length === 1 && currentSelectedMaterial.optionsForThicknessMillimetres[0] !== 0) {\n return (React.createElement(NoSlider, { labelKey: 'thickness-label', selectedThickness: currentSelectedThickness, units: 'mm' }));\n }\n else {\n return (React.createElement(Box, { marginTop: 4 }));\n }\n}\n","import React from 'react';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentSelectedThicknessSelector, currentSelectedMaterialSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { useSelector } from 'react-redux';\nimport MaterialParametersAux from './MaterialParametersAux';\nexport default function MaterialParameters(props) {\n const { isLinkedMaterial } = props;\n const layer = useSelector(activeConstructionLayerSelector);\n const currentSelectedThickness = useSelector(currentSelectedThicknessSelector(isLinkedMaterial));\n const currentSelectedMatrial = useSelector(currentSelectedMaterialSelector(isLinkedMaterial));\n return (React.createElement(MaterialParametersAux, { layer: layer, currentSelectedThickness: currentSelectedThickness, currentSelectedMaterial: currentSelectedMatrial, isLinkedMaterial: isLinkedMaterial }));\n}\n","import React from 'react';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentAnchorPropertiesSelector, currentSelectedMaterialSelector, previousInsulationCalculationLayerSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { useSelector, useDispatch } from 'react-redux';\nimport ThicknessSlider from './ThicknessSlider';\nimport { setAnchorAmountPerSquareMetre, setAnchorDiameter, setAnchorPenetration } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport { setMaterialParameter } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nimport { useTranslation } from 'react-i18next';\nexport default function AnchorParameters() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const dispatch = useDispatch();\n const layer = useSelector(activeConstructionLayerSelector);\n const { numberOfAnchorsPerMetreSquare, diameterOfAnchorsMillimetres, anchorPenetrationDepthMillimetres } = useSelector(currentAnchorPropertiesSelector);\n const currentSelectedMatrial = useSelector(currentSelectedMaterialSelector(false));\n const previousInsulationLayer = useSelector(previousInsulationCalculationLayerSelector);\n const [optionsForAnchorPenetrationMillimetres, setOptionsForAnchorPenetrationMillimetres] = React.useState([]);\n const handleAmountChange = (value) => {\n dispatch(setMaterialParameter(setAnchorAmountPerSquareMetre, layer, value, false));\n };\n const handleDiameterChange = (value) => {\n dispatch(setMaterialParameter(setAnchorDiameter, layer, value, false));\n };\n const handlePenetrationChange = (value) => {\n dispatch(setMaterialParameter(setAnchorPenetration, layer, value, false));\n };\n const { t } = useTranslation();\n React.useEffect(() => {\n if (currentSelectedMatrial && currentSelectedMatrial.optionsForAnchorPenetrationMillimetres && previousInsulationLayer) {\n setOptionsForAnchorPenetrationMillimetres(currentSelectedMatrial.optionsForAnchorPenetrationMillimetres.filter(o => o <= previousInsulationLayer.thicknessMillimetres));\n }\n }, [setOptionsForAnchorPenetrationMillimetres, currentSelectedMatrial, previousInsulationLayer]);\n const defaultMarks = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n return (React.createElement(\"div\", null,\n React.createElement(ThicknessSlider, { labelKey: 'amount-label', handleChange: handleAmountChange, selectedThickness: numberOfAnchorsPerMetreSquare, disabled: !currentSelectedMatrial, marks: (_a = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.optionsForNumberOfAnchorsPerMetreSquare) !== null && _a !== void 0 ? _a : defaultMarks, min: (_b = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.optionsForNumberOfAnchorsPerMetreSquare[0]) !== null && _b !== void 0 ? _b : 0, max: (_c = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.optionsForNumberOfAnchorsPerMetreSquare[currentSelectedMatrial.optionsForNumberOfAnchorsPerMetreSquare.length - 1]) !== null && _c !== void 0 ? _c : 10, defaultValue: (_d = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.defaultNumberOfAnchorsPerMetreSquare) !== null && _d !== void 0 ? _d : 0, units: `${t('calculation-ui.anchor-per')} m²`, isValueFixed: false }),\n React.createElement(ThicknessSlider, { labelKey: 'diameter-label', handleChange: handleDiameterChange, selectedThickness: diameterOfAnchorsMillimetres, disabled: !currentSelectedMatrial, marks: (_e = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.optionsForDiameterOfAnchorsMillimetres) !== null && _e !== void 0 ? _e : defaultMarks, min: (_f = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.optionsForDiameterOfAnchorsMillimetres[0]) !== null && _f !== void 0 ? _f : 0, max: (_g = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.optionsForDiameterOfAnchorsMillimetres[currentSelectedMatrial.optionsForDiameterOfAnchorsMillimetres.length - 1]) !== null && _g !== void 0 ? _g : 10, defaultValue: (_h = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.defaultDiameterOfAnchorsMillimetres) !== null && _h !== void 0 ? _h : 0, units: 'mm', isValueFixed: false }),\n optionsForAnchorPenetrationMillimetres.length ?\n React.createElement(ThicknessSlider, { labelKey: 'penetration-label', handleChange: handlePenetrationChange, selectedThickness: anchorPenetrationDepthMillimetres, disabled: !currentSelectedMatrial, marks: optionsForAnchorPenetrationMillimetres !== null && optionsForAnchorPenetrationMillimetres !== void 0 ? optionsForAnchorPenetrationMillimetres : defaultMarks, min: optionsForAnchorPenetrationMillimetres[0], max: (_j = optionsForAnchorPenetrationMillimetres[optionsForAnchorPenetrationMillimetres.length - 1]) !== null && _j !== void 0 ? _j : 100, defaultValue: (_k = currentSelectedMatrial === null || currentSelectedMatrial === void 0 ? void 0 : currentSelectedMatrial.defaultAnchorPenetrationMillimetres) !== null && _k !== void 0 ? _k : 0, units: 'mm', isValueFixed: false })\n : null));\n}\n","import React from 'react';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentAnchorPropertiesSelector, currentSelectedMaterialSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { useSelector, useDispatch } from 'react-redux';\nimport ThicknessSlider from './ThicknessSlider';\nimport { setNetAreaPerMetreSquare } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport { setMaterialParameter } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nexport default function AnchorParameters() {\n const dispatch = useDispatch();\n const layer = useSelector(activeConstructionLayerSelector);\n const { netAreaOfAnchorsPerMetreSquareMillimetresSqrd } = useSelector(currentAnchorPropertiesSelector);\n const currentSelectedMatrial = useSelector(currentSelectedMaterialSelector(false));\n const handleChange = (value) => {\n dispatch(setMaterialParameter(setNetAreaPerMetreSquare, layer, value, false));\n };\n const areaMarks = [50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 180, 200, 220, 250, 280, 300, 320, 350, 380, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000];\n return (React.createElement(\"div\", null,\n React.createElement(ThicknessSlider, { labelKey: 'area-label', handleChange: handleChange, selectedThickness: netAreaOfAnchorsPerMetreSquareMillimetresSqrd, disabled: !currentSelectedMatrial, marks: areaMarks, min: areaMarks[0], max: areaMarks[areaMarks.length - 1], defaultValue: 50, units: 'mm\\u00B2', isValueFixed: false })));\n}\n","import React from 'react';\nimport { activeConstructionLayerSelector, activeConstructionTypeSelector } from '../../store/component-state/component-state.selectors';\nimport { currentSelectedThicknessSelector, } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { useSelector, useDispatch } from 'react-redux';\nimport ThicknessSlider from './ThicknessSlider';\nimport { setWoodPercentage } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport { setMaterialParameter } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nimport { countryIdSelector } from '../../store/component-state/component-state.selectors';\nexport default function WoodPercentage() {\n var _a, _b;\n const dispatch = useDispatch();\n const constructionType = useSelector(activeConstructionTypeSelector);\n const layer = useSelector(activeConstructionLayerSelector);\n const currentWoodPercentage = useSelector(currentSelectedThicknessSelector(false)); //using thickness property as % on pseudo layer\n const countryId = useSelector(countryIdSelector);\n const handleChange = (value) => {\n dispatch(setMaterialParameter(setWoodPercentage, layer, value, false));\n };\n if (countryId === 'gb' || countryId === 'ie') {\n return (React.createElement(ThicknessSlider, { labelKey: 'wood-percentage-label', handleChange: handleChange, selectedThickness: currentWoodPercentage, disabled: true, marks: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], min: 5, max: 25, defaultValue: Math.round(((_a = constructionType === null || constructionType === void 0 ? void 0 : constructionType.defaultWoodPercentage) !== null && _a !== void 0 ? _a : 0.2) * 100), units: '%', isValueFixed: false }));\n }\n else {\n return (React.createElement(ThicknessSlider, { labelKey: 'wood-percentage-label', handleChange: handleChange, selectedThickness: currentWoodPercentage, disabled: false, marks: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], min: 5, max: 25, defaultValue: Math.round(((_b = constructionType === null || constructionType === void 0 ? void 0 : constructionType.defaultWoodPercentage) !== null && _b !== void 0 ? _b : 0.2) * 100), units: '%', isValueFixed: false }));\n }\n}\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentSelectedThicknessSelector, currentSelectedAirCavityGradingSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { setMaterialParameter } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nimport { setThickness } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport ThicknessSlider from './ThicknessSlider';\nimport NoSlider from './NoSlider';\nexport default function AirCavityThickness() {\n var _a, _b, _c, _d;\n const dispatch = useDispatch();\n const layer = useSelector(activeConstructionLayerSelector);\n const currentSelectedAcg = useSelector(currentSelectedAirCavityGradingSelector);\n const currentSelectedThickness = useSelector(currentSelectedThicknessSelector(false));\n const isFixedLayer = layer.isWithinBridgingFrame;\n const handleThicknessChange = (value) => {\n dispatch(setMaterialParameter(setThickness, layer, value, false));\n };\n if (!isFixedLayer) {\n return (React.createElement(React.Fragment, null,\n React.createElement(ThicknessSlider, { labelKey: 'thickness-label', handleChange: handleThicknessChange, selectedThickness: currentSelectedThickness, disabled: !currentSelectedAcg || isFixedLayer, marks: (_a = currentSelectedAcg === null || currentSelectedAcg === void 0 ? void 0 : currentSelectedAcg.optionsForThicknessMillimetres) !== null && _a !== void 0 ? _a : [], min: (_b = currentSelectedAcg === null || currentSelectedAcg === void 0 ? void 0 : currentSelectedAcg.optionsForThicknessMillimetres[0]) !== null && _b !== void 0 ? _b : 0, max: (_c = currentSelectedAcg === null || currentSelectedAcg === void 0 ? void 0 : currentSelectedAcg.optionsForThicknessMillimetres[currentSelectedAcg.optionsForThicknessMillimetres.length - 1]) !== null && _c !== void 0 ? _c : 100, defaultValue: (_d = currentSelectedAcg === null || currentSelectedAcg === void 0 ? void 0 : currentSelectedAcg.defaultThicknessMillimetres) !== null && _d !== void 0 ? _d : 0, units: 'mm', isValueFixed: isFixedLayer })));\n }\n else {\n return (React.createElement(React.Fragment, null,\n React.createElement(NoSlider, { labelKey: 'thickness-label', selectedThickness: currentSelectedThickness, units: 'mm' })));\n }\n}\n","import React from 'react';\nimport { Typography, Select, MenuItem } from '@material-ui/core';\nimport { Trans } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentSelectedAirCavityGradingSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { setAirCavityGrading } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nimport AirCavityThickness from './AirCavityThickness';\nexport default function AirCavity() {\n var _a;\n const dispatch = useDispatch();\n const layer = useSelector(activeConstructionLayerSelector);\n const currentSelectedAcg = useSelector(currentSelectedAirCavityGradingSelector);\n const handleAcgChange = (event) => {\n dispatch(setAirCavityGrading(layer, layer.airCavityGradings.filter(ac => ac.airCavityGradingId === event.target.value)[0]));\n };\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: 'marginTop20' },\n React.createElement(Typography, { gutterBottom: true, \"data-qa-id\": \"materialSelectLabel\" },\n React.createElement(Trans, { i18nKey: \"calculation-ui.material-label\" }, \"Material\")),\n React.createElement(Select, { fullWidth: true, \"data-qa-id\": \"materialSelect\", variant: \"outlined\", value: (_a = currentSelectedAcg === null || currentSelectedAcg === void 0 ? void 0 : currentSelectedAcg.airCavityGradingId) !== null && _a !== void 0 ? _a : '', onChange: handleAcgChange }, layer.airCavityGradings.map(i => (React.createElement(MenuItem, { key: i.airCavityGradingId, value: i.airCavityGradingId, \"data-qa-id\": `${i.airCavityGradingId}-dropdownvalue` },\n React.createElement(Trans, { i18nKey: `calculation-ui.air-cavity-type.${i.airCavityGradingId}` }, i.airCavityGradingId)))))),\n React.createElement(AirCavityThickness, null)));\n}\n","const softHyphenChar = String.fromCharCode(173);\n/**\n *\n * @param layerName to suggest hyphens for\n * @returns A recombined layer name string with hyphen suggestions places in words that are long enough and they do not include hyphens already.\n */\nexport const insertSuggestedHyphenationIfRequired = (layerName) => {\n if (!navigator.userAgent.toLowerCase().includes('firefox/') && !navigator.userAgent.toLowerCase().includes('edg/')) {\n return layerName;\n }\n return insertSuggestedHyphenation(layerName);\n};\nexport const insertSuggestedHyphenation = (layerName) => {\n return layerName\n .split(' ')\n .map(word => (word.length <= 8 || word.includes(softHyphenChar) || word.includes('-') ? word : `${word.slice(0, 8)}${softHyphenChar}${word.slice(8, word.length)}`))\n .join(' ');\n};\n","import React from 'react';\nimport { LayerType } from '../../types/domain/construction-data.types';\nimport { useTranslation } from 'react-i18next';\nimport { insertSuggestedHyphenationIfRequired } from './hyphenSuggestion';\nconst getText = (props, t) => {\n var _a, _b;\n const text = ((_a = props.layer) === null || _a === void 0 ? void 0 : _a.layerType) === LayerType.WoodPercentage\n ? t('calculation-ui.wood-percentage')\n : (_b = props.layer) === null || _b === void 0 ? void 0 : _b.nameLocalized;\n return props.insertSuggestedHyphenationIfRequired === true\n ? insertSuggestedHyphenationIfRequired(text !== null && text !== void 0 ? text : '')\n : text;\n};\nexport default function LayerName(props) {\n const { t } = useTranslation();\n return React.createElement(\"span\", null, getText(props, t));\n}\n","import React from 'react';\nimport MaterialDropDown from './MaterialDropDown';\nimport MaterialParameters from './MaterialParameters';\nimport AnchorParameters from './AnchorParameters';\nimport AnchorPreCalculatedParameters from './AnchorPreCalculatedParameters';\nimport WoodPercentage from './WoodPercentage';\nimport AirCavity from './AirCavity';\nimport { LayerType } from '../../types/domain/construction-data.types';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { activeConstructionLayerSelector } from '../../store/component-state/component-state.selectors';\nimport { currentSelectedMaterialSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { Tooltip } from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport LayerName from '../Calculation/LayerName';\nfunction renderControls(layer, selectedMaterial, isLinkedMaterial) {\n var _a;\n switch (layer.layerType) {\n case LayerType.Anchors:\n return (React.createElement(React.Fragment, null,\n React.createElement(MaterialDropDown, { isLinkedMaterial: isLinkedMaterial }),\n React.createElement(AnchorParameters, null)));\n case LayerType.AnchorsPreCalculated:\n return (React.createElement(React.Fragment, null,\n React.createElement(MaterialDropDown, { isLinkedMaterial: isLinkedMaterial }),\n React.createElement(AnchorPreCalculatedParameters, null)));\n case LayerType.WoodPercentage:\n return (React.createElement(WoodPercentage, null));\n case LayerType.AirCavity:\n return (React.createElement(AirCavity, null));\n default:\n return (React.createElement(React.Fragment, null,\n React.createElement(MaterialDropDown, { isLinkedMaterial: isLinkedMaterial }),\n (((_a = selectedMaterial === null || selectedMaterial === void 0 ? void 0 : selectedMaterial.optionsForThicknessMillimetres) === null || _a === void 0 ? void 0 : _a.length) || layer.isWithinBridgingFrame) && React.createElement(MaterialParameters, { isLinkedMaterial: isLinkedMaterial })));\n }\n}\nfunction renderLayerHeader(layer, layerTooltipText) {\n switch (layer.layerType) {\n case LayerType.Anchors:\n case LayerType.AnchorsPreCalculated:\n case LayerType.WoodPercentage:\n return (React.createElement(Tooltip, { title: layerTooltipText, \"aria-label\": layerTooltipText, enterTouchDelay: 10 },\n React.createElement(\"div\", { className: 'stepTitle stepTitleTooltip', \"data-qa-id\": \"layerTitle\" },\n React.createElement(LayerName, { layer: layer }),\n React.createElement(InfoIcon, { className: 'tooltipIcon' }))));\n default:\n return (React.createElement(\"div\", { className: 'stepTitle', \"data-qa-id\": \"layerTitle\" },\n React.createElement(LayerName, { layer: layer })));\n }\n}\nexport default function CalculationLayer() {\n const layer = useSelector(activeConstructionLayerSelector);\n const currentSelectedMaterial = useSelector(currentSelectedMaterialSelector(false));\n const { t } = useTranslation();\n const layerTooltipText = t(`layer-tooltip.${layer.layerType.toLowerCase()}`);\n return layer ? (React.createElement(\"div\", { style: { maxWidth: '400px' } },\n renderLayerHeader(layer, layerTooltipText),\n renderControls(layer, currentSelectedMaterial, false),\n currentSelectedMaterial && currentSelectedMaterial.linkedMaterials.length > 0 && renderControls(layer, currentSelectedMaterial, true))) : null;\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectedCultureSelector } from '../../store/component-state/component-state.selectors';\nexport default function FormatNumber(props) {\n const culture = useSelector(selectedCultureSelector);\n return props.toFormat\n ? React.createElement(\"span\", null, props.toFormat.toLocaleString(culture, { minimumFractionDigits: 2, maximumFractionDigits: 2 }))\n : null;\n}\n","import React from 'react';\nimport { Grid, makeStyles, createStyles, CircularProgress } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { currentCalculationResultSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { Trans } from 'react-i18next';\nimport { calculationResultLoadingStateSelector } from '../../store/component-state/component-state.selectors';\nimport FormatNumber from '../FormatNumber/FormatNumber';\nconst useStyles = makeStyles((theme) => createStyles({\n wrapper: {\n position: 'relative',\n },\n resultProgress: {\n color: theme.palette.primary.main,\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -34,\n marginLeft: -34,\n },\n loadingClass: {\n opacity: 0.4,\n },\n}));\nexport default function RcValue() {\n const classes = useStyles();\n const result = useSelector(currentCalculationResultSelector);\n const isCalculationResultLoading = useSelector(calculationResultLoadingStateSelector);\n return (React.createElement(\"div\", { className: classes.wrapper },\n React.createElement(Grid, { container: true, justify: \"center\", alignItems: \"center\", direction: \"column\", className: isCalculationResultLoading ? classes.loadingClass : '' },\n React.createElement(Grid, { item: true },\n React.createElement(\"div\", { className: 'rcValueLabel', \"data-qa-id\": \"rcValueTitle\" }, result ?\n React.createElement(Trans, { i18nKey: `calculation-ui.${result.resultType.toLowerCase()}` }, result.resultType) :\n '--')),\n React.createElement(Grid, { item: true },\n React.createElement(\"div\", { className: 'rcValueNumber', \"data-qa-id\": \"rcValue\" }, result && result.resultValue ?\n React.createElement(FormatNumber, { toFormat: result.resultValue }) :\n '-,--')),\n React.createElement(Grid, { item: true },\n React.createElement(\"div\", { className: '', \"data-qa-id\": \"rcValueUnit\" }, result ?\n result.resultUnits :\n '--')),\n React.createElement(Grid, { item: true },\n React.createElement(\"div\", { className: 'rcTotalLabel marginTop40', \"data-qa-id\": \"totalThicknessLabel\" },\n React.createElement(Trans, { i18nKey: 'calculation-ui.construction-thickness-label' }, \"Total Construction Thickness\"))),\n React.createElement(Grid, { item: true },\n React.createElement(\"div\", { className: 'rcTotalNumber', \"data-qa-id\": \"totalThicknessValue\" },\n result ?\n result.totalThicknessMillimetres :\n '--',\n \" mm\"))),\n isCalculationResultLoading && React.createElement(CircularProgress, { size: 68, className: classes.resultProgress })));\n}\n","import React from 'react';\nimport { Grid, Button, makeStyles, createStyles, useMediaQuery } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\nimport KeyboardArrowLeftIcon from '@material-ui/icons/KeyboardArrowLeft';\nconst useStyles = makeStyles((theme) => createStyles({\n fullWidthButton: {\n width: '100%',\n marginBottom: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n}));\nexport default function CalculationWizardControls(props) {\n var _a, _b;\n const { activeStepIndex, steps, handleBackClick, handleNextClick } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const isLastStep = () => activeStepIndex === steps.length - 1;\n return (React.createElement(Grid, { container: true, direction: isMobileView ? 'column-reverse' : undefined },\n React.createElement(Grid, { item: true, xs: \"auto\", sm: \"auto\", md: 1 }),\n React.createElement(Grid, { item: true, xs: 12, sm: \"auto\" },\n React.createElement(Button, { onClick: handleBackClick, className: isMobileView ? classes.fullWidthButton : '', \"data-qa-id\": \"buttonOnTheLeft\", startIcon: React.createElement(KeyboardArrowLeftIcon, null) }, activeStepIndex > 0 ? (_a = steps[activeStepIndex - 1]) === null || _a === void 0 ? void 0 : _a.renderLabel() : t('calculation-ui.back-button'))),\n React.createElement(Grid, { item: true, xs: true }),\n React.createElement(Grid, { item: true, xs: 12, sm: \"auto\" },\n React.createElement(Button, { variant: \"contained\", color: \"primary\", className: isMobileView ? classes.fullWidthButton : '', onClick: handleNextClick, \"data-qa-id\": \"buttonOnTheRight\", endIcon: !isLastStep() && React.createElement(KeyboardArrowRightIcon, null) }, (_b = steps[activeStepIndex + 1]) === null || _b === void 0 ? void 0 : _b.renderLabel())),\n React.createElement(Grid, { item: true, xs: \"auto\", sm: \"auto\", md: 1 })));\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Grid, Box, CircularProgress } from '@material-ui/core';\nimport CalculationLayer from '../CalculationLayer/CalculationLayer';\nimport RcValue from '../RcValue/RcValue';\nimport './Calculation.module.scss';\nimport { isLoadingSelector } from '../../store/component-state/component-state.selectors';\nimport CalculationWizardControls from './CalculationWizardControls';\nimport { projectDetailsSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { constructionTypeNameSelector } from '../../store/construction-data/construction-data.selectors';\nimport { dispatchCalculationAttempt } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nexport default function Calculation(props) {\n const { activeStepIndex, constructionTypeId, steps, handleNextStep, handlePreviousStep } = props;\n const dispatch = useDispatch();\n const projectDetails = useSelector(projectDetailsSelector);\n const isLoading = useSelector(isLoadingSelector);\n const constructionTypeName = useSelector(constructionTypeNameSelector(constructionTypeId));\n useEffect(() => {\n if (!isLoading) {\n dispatch(dispatchCalculationAttempt());\n }\n }, [dispatch, isLoading]);\n const hasSteps = steps && steps.length > 0;\n return (React.createElement(Box, null,\n React.createElement(Box, { marginBottom: 4 },\n React.createElement(Grid, { container: true, spacing: 2 },\n React.createElement(Grid, { item: true, xs: \"auto\", sm: \"auto\", md: 1 }),\n React.createElement(Grid, { item: true, xs: 12, sm: 12, md: 10 },\n React.createElement(Box, { className: 'calculationTitle', \"data-qa-id\": \"calculationNameLabel\" }, constructionTypeName),\n React.createElement(Box, { className: 'calculationSubTitle', \"data-qa-id\": \"projectNameLabel\" }, projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.name)),\n React.createElement(Grid, { item: true, xs: \"auto\", sm: \"auto\", md: 1 }))),\n hasSteps ? React.createElement(Grid, { container: true },\n React.createElement(Grid, { item: true, xs: \"auto\", sm: \"auto\", md: 1 }),\n React.createElement(Grid, { item: true, xs: 12, sm: 8, md: 7 },\n React.createElement(Box, { marginBottom: 4 },\n React.createElement(CalculationLayer, null))),\n React.createElement(Grid, { item: true, xs: 12, sm: 4, md: 4 },\n React.createElement(Box, { marginBottom: 4 },\n React.createElement(RcValue, null)))) : React.createElement(Box, { m: 2 },\n React.createElement(CircularProgress, null)),\n hasSteps && React.createElement(CalculationWizardControls, { activeStepIndex: activeStepIndex, steps: steps, handleBackClick: handlePreviousStep, handleNextClick: handleNextStep })));\n}\n","import { FETCH_CONSTRUCTION_TYPES_ATTEMPT, FETCH_CONSTRUCTION_TYPES_SUCCESS, FETCH_CONSTRUCTION_TYPES_FAILURE, FETCH_CONSTRUCTION_TYPE_NAMES_SUCCESS, FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_ATTEMPT, FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_SUCCESS, FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_FAILURE, } from './construction-data.action-types';\nexport const fetchConstructionTypesAttempt = () => ({\n type: FETCH_CONSTRUCTION_TYPES_ATTEMPT,\n});\nexport const fetchConstructionTypesSuccess = (data) => ({\n type: FETCH_CONSTRUCTION_TYPES_SUCCESS,\n payload: data,\n});\nexport const fetchConstructionTypeNamesSuccess = (data) => ({\n type: FETCH_CONSTRUCTION_TYPE_NAMES_SUCCESS,\n payload: data,\n});\nexport const fetchConstructionTypesFailure = (error) => ({\n type: FETCH_CONSTRUCTION_TYPES_FAILURE,\n error,\n});\nexport const fetchConstructionLayersForTypeAttempt = () => ({\n type: FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_ATTEMPT,\n});\nexport const fetchConstructionLayersForTypeSuccess = (constructionType, data, constructionTypeNameLocalized) => ({\n type: FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_SUCCESS,\n payload: {\n constructionType: constructionType,\n constructionTypeNameLocalized,\n layers: data,\n },\n});\nexport const fetchConstructionLayersForTypeFailure = (error) => ({\n type: FETCH_CONSTRUCTION_LAYERS_FOR_TYPE_FAILURE,\n error,\n});\n","import axios from 'axios';\nimport { fetchConstructionTypesAttempt, fetchConstructionTypesFailure, fetchConstructionTypesSuccess, fetchConstructionTypeNamesSuccess, fetchConstructionLayersForTypeAttempt, fetchConstructionLayersForTypeFailure, fetchConstructionLayersForTypeSuccess, } from './construction-data.actions';\nimport { startNewCalculation, startEditCalculation, startCopyCalculation } from '../current-calculation-data/current-calculation-data.action-creators';\nimport { Complexity, LayerType } from '../../types/domain/construction-data.types';\nimport { setActiveConstructionLayer } from '../component-state/component-state.actions';\nexport const fetchConstructionTypes = (countryId) => \n// TODO: Typing needs to be defined\nasync (dispatch) => {\n dispatch(fetchConstructionTypesAttempt());\n try {\n const { data } = await axios.get(`/api/constructionTypes/${countryId}`);\n dispatch(fetchConstructionTypesSuccess(data));\n }\n catch (error) {\n dispatch(fetchConstructionTypesFailure(error === null || error === void 0 ? void 0 : error.message));\n }\n};\nexport const fetchConstructionTypeNames = (countryId) => async (dispatch) => {\n try {\n const { data } = await axios.get(`/api/constructionTypes/${countryId}`);\n dispatch(fetchConstructionTypeNamesSuccess(data));\n }\n catch (error) {\n console.warn('fetchConstructionTypeNames error', error);\n }\n};\nexport const fetchConstructionLayersForType = (constructionTypeId, countryId, refetch) => \n// TODO: Typing needs to be defined\nasync (dispatch, getState) => {\n dispatch(fetchConstructionLayersForTypeAttempt());\n try {\n const { data, headers } = await axios.get(`/api/constructionLayers/${constructionTypeId}/${countryId}`);\n const constructionTypeNameLocalized = headers['construction-type-name-localized'];\n const ct = getState().constructionData.types.filter(ct => ct.id === constructionTypeId)[0];\n const dataWithPseudoLayers = constructPseudoLayers(ct, data);\n dispatch(fetchConstructionLayersForTypeSuccess(constructionTypeId, dataWithPseudoLayers, constructionTypeNameLocalized !== null && constructionTypeNameLocalized !== void 0 ? constructionTypeNameLocalized : ''));\n if (refetch !== true) {\n dispatch(setActiveConstructionLayer(data[0].constructionLayerId));\n await startNewCalculation(constructionTypeId, dataWithPseudoLayers)(dispatch, getState);\n }\n }\n catch (error) {\n console.warn('fetchConstructionLayersForType error', error);\n dispatch(fetchConstructionLayersForTypeFailure(error === null || error === void 0 ? void 0 : error.message));\n }\n};\nexport const fetchConstructionLayersForCalculation = (calculation, copy) => async (dispatch, getState) => {\n dispatch(fetchConstructionLayersForTypeAttempt());\n try {\n const { data, headers } = await axios.get(`/api/constructionLayers/${calculation.constructionTypeId}/${calculation.countryId}`);\n const constructionTypeNameLocalized = headers['construction-type-name-localized'];\n const ct = getState().constructionData.types.filter(ct => ct.id === calculation.constructionTypeId)[0];\n const dataWithPseudoLayers = constructPseudoLayers(ct, data);\n dispatch(fetchConstructionLayersForTypeSuccess(calculation.constructionTypeId, dataWithPseudoLayers, constructionTypeNameLocalized !== null && constructionTypeNameLocalized !== void 0 ? constructionTypeNameLocalized : ''));\n dispatch(setActiveConstructionLayer(data[0].constructionLayerId));\n if (copy) {\n await startCopyCalculation(calculation, dataWithPseudoLayers)(dispatch);\n }\n else {\n await startEditCalculation(calculation, dataWithPseudoLayers)(dispatch);\n }\n }\n catch (error) {\n console.warn('fetchConstructionLayersForCalculation error', error);\n dispatch(fetchConstructionLayersForTypeFailure(error));\n }\n};\nconst constructPseudoLayers = (constructionType, layers) => {\n if (!constructionType) {\n throw new Error('Invalid state: `constructionType` param is null. The `constructPseudoLayers` function requires the `constructionType` param');\n }\n if (constructionType.complexity === Complexity.Simple) {\n return layers;\n }\n return layers.reduce((obj, item) => {\n if (item.layerType === LayerType.Bridging) {\n const pseudoLayer = {\n constructionLayerId: -9999,\n constructionTypeId: constructionType.id,\n name: 'wood-percentage',\n nameLocalized: 'Wood Percentage',\n materials: [],\n airCavityGradings: [],\n layerType: LayerType.WoodPercentage,\n isWithinBridgingFrame: false,\n isPseudoLayer: true,\n };\n return [...obj, item, pseudoLayer];\n }\n return [...obj, item];\n }, []);\n};\n","import compareDesc from 'date-fns/compareDesc';\nexport const calculationArraySelector = (store) => Object.values(store.calculations.calculations).sort((a, b) => compareDesc(a.updatedOn, b.updatedOn));\nexport const calculationSelector = (calculationId) => (store) => store.calculations.calculations[calculationId];\nexport const deletingCalculationsSelector = (store) => store.calculations.deletingCalculations;\n","import React from 'react';\nimport { Button, Dialog, DialogActions, DialogContent, Box, DialogTitle, IconButton, createStyles, makeStyles, Typography, Grid, useMediaQuery, FormControl, TextField, CircularProgress, Checkbox, FormControlLabel, } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { Trans } from 'react-i18next';\nimport { getLinks } from '../../common/links';\nconst useStyles = makeStyles((theme) => createStyles({\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n fullWidthButton: {\n width: '100%',\n marginBottom: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n formControl: {\n width: '100%',\n },\n buttonWrapper: {\n position: 'relative',\n },\n buttonProgress: {\n color: theme.palette.info.main,\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -12,\n marginLeft: -12,\n },\n checkboxLabel: {\n marginLeft: 0,\n marginTop: theme.spacing(3),\n alignItems: 'start',\n },\n checkbox: {\n paddingTop: 0,\n },\n}));\nexport default function EmailDialog(props) {\n const { open, handleClose, handleSend, sending } = props;\n const classes = useStyles();\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const [guestEmail, setGuestEmail] = React.useState('');\n const [sendingState, setSendingState] = React.useState(false);\n const [gdprConsentGiven, setGdprConsentChecked] = React.useState(false);\n const links = getLinks();\n const directMarketingConsentLink = links.marketingConsent;\n const privacyPolicyLink = links.privacyPolicy;\n const onGuestEmailChange = (event) => {\n setGuestEmail(event.target.value);\n };\n const handleGdprConsentChange = (event) => {\n setGdprConsentChecked(event.target.checked);\n };\n React.useEffect(() => {\n setSendingState(sending);\n }, [sending]);\n return (React.createElement(Dialog, { open: open, keepMounted: true, onClose: () => handleClose(), fullWidth: true, maxWidth: \"sm\" },\n React.createElement(DialogTitle, { disableTypography: true },\n React.createElement(Box, { marginRight: 4 },\n React.createElement(Typography, { variant: \"h4\" },\n React.createElement(Trans, { i18nKey: \"email-dialog.guest-title\" }, \"email-dialog.guest-title\"))),\n React.createElement(IconButton, { \"aria-label\": \"close\", className: classes.closeButton, onClick: () => handleClose() },\n React.createElement(CloseIcon, null))),\n React.createElement(DialogContent, null,\n React.createElement(Box, null,\n React.createElement(Trans, { i18nKey: \"email-dialog.guest-subtitle\" }, \"email-dialog.guest-subtitle\"),\n React.createElement(FormControlLabel, { className: classes.checkboxLabel, value: \"start\", control: React.createElement(Checkbox, { checked: gdprConsentGiven, onChange: handleGdprConsentChange, color: \"primary\", className: classes.checkbox }), label: React.createElement(Trans, { i18nKey: \"account-ui.gdpr-consent-question\", defaults: \"I would like to hear about Kingspan promotions, products, services, event and other activities that may be of interest. For full details on how we use your personal data, please view our Direct Marketing Consent Notice.
We will use your personal data for marketing and retargeting purposes and you have the right to withdraw this consent at any time as explained in our Privacy Policy.\", values: { privacyPolicyLink: privacyPolicyLink, directMarketingConsentLink: directMarketingConsentLink }, components: {\n anchorlinkMarketing: (React.createElement(\"a\", { href: directMarketingConsentLink, rel: \"noopener noreferrer\", target: \"_blank\" }, \"Direct Marketing Consent Notice\")),\n anchorlinkPrivacy: (React.createElement(\"a\", { href: privacyPolicyLink, rel: \"noopener noreferrer\", target: \"_blank\" }, \"Privacy Policy\")),\n } }), labelPlacement: \"end\" })),\n React.createElement(Box, { mx: 2, my: 2 },\n React.createElement(FormControl, { variant: \"outlined\", className: classes.formControl },\n React.createElement(TextField, { id: \"project-name\", label: React.createElement(Trans, { i18nKey: \"email-dialog.email-address\" }), variant: \"outlined\", className: classes.formControl, value: guestEmail, onChange: onGuestEmailChange })))),\n React.createElement(DialogActions, null,\n React.createElement(Grid, { container: true, justify: \"flex-end\" },\n React.createElement(Grid, { item: true, xs: 12, sm: 'auto', className: classes.buttonWrapper },\n React.createElement(Button, { variant: \"contained\", color: \"primary\", disabled: sendingState, className: isMobileView ? classes.fullWidthButton : '', onClick: () => {\n handleSend(guestEmail, gdprConsentGiven);\n } },\n React.createElement(Trans, { i18nKey: \"email-dialog.send-email\" }, \"email-dialog.send-email\")),\n sendingState && React.createElement(CircularProgress, { size: 24, className: `${classes.buttonProgress}` })),\n React.createElement(Grid, { item: true, xs: 12, sm: 'auto' },\n React.createElement(Button, { onClick: () => handleClose(), className: isMobileView ? classes.fullWidthButton : '', color: \"primary\", \"data-qa-id\": \"cancel-btn\" },\n React.createElement(Trans, { i18nKey: \"email-dialog.cancel\" }, \"email-dialog.cancel\")))))));\n}\n","export const downloadPdf = (content, filename) => {\n const blob = new Blob([content]);\n const link = window.document.createElement('a');\n link.download = filename;\n link.href = window.URL.createObjectURL(blob);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n","import axios from 'axios';\nimport * as he from 'he';\nimport { AuthenticationState } from 'react-aad-msal';\nimport { downloadPdf } from '../../common/pdf';\nimport { mapApiResponseArrayToCalculcationObjectCollection } from '../../helpers/calculation-response-helper';\nimport { deleteCalculationAttempt, deleteCalculationFailure, deleteCalculationSuccess, downloadCalculationAttempt, downloadCalculationFailure, downloadCalculationSuccess, downloadPdfCalculationAttempt, downloadPdfCalculationFailure, downloadPdfCalculationSuccess, fetchCalculationAttempt, fetchCalculationFailure, fetchCalculationSuccess, } from './calculations.actions';\nexport const fetchCalculation = (countryId) => async (dispatch, getState) => {\n dispatch(fetchCalculationAttempt());\n try {\n const { data } = await axios.get(`/api/calculation/${countryId}`, {\n withCredentials: true,\n });\n dispatch(fetchCalculationSuccess(mapApiResponseArrayToCalculcationObjectCollection(data)));\n }\n catch (error) {\n dispatch(fetchCalculationFailure(error));\n }\n};\nexport const deleteCalculation = (calculationId) => async (dispatch, getState) => {\n dispatch(deleteCalculationAttempt(calculationId));\n try {\n await axios.delete(`/api/calculation/${calculationId}`, {\n withCredentials: true,\n });\n dispatch(deleteCalculationSuccess(calculationId));\n }\n catch (error) {\n dispatch(deleteCalculationFailure(error, calculationId));\n }\n};\nexport const downloadCalculation = (calculationId, calculationAccessCode, emailAddress, gdprConsentGiven) => async (dispatch, getState) => {\n dispatch(downloadCalculationAttempt(calculationId));\n try {\n const { authenticationState } = getState();\n await axios.post('/api/pdf', {\n calculationId,\n calculationAccessCode,\n emailAddress,\n gdprConsentGiven,\n }, {\n withCredentials: authenticationState.state === AuthenticationState.Authenticated,\n });\n dispatch(downloadCalculationSuccess(calculationId));\n return true;\n }\n catch (error) {\n dispatch(downloadCalculationFailure(error, calculationId));\n }\n return false;\n};\nexport const directDownloadCalculation = (calculationId, calculationAccessCode) => async (dispatch, getState) => {\n dispatch(downloadPdfCalculationAttempt(calculationId));\n try {\n const { authenticationState } = getState();\n const params = { calculationId: calculationId, calculationAccessCode: calculationAccessCode };\n const result = await axios.get('/api/pdf', {\n withCredentials: authenticationState.state === AuthenticationState.Authenticated,\n params,\n headers: {\n 'Content-Type': 'application/pdf',\n },\n responseType: 'blob',\n });\n let filename;\n if (result.headers['filename']) {\n filename = he.decode(result.headers['filename']);\n }\n else {\n filename = `${calculationId}.pdf`;\n }\n downloadPdf(result.data, filename);\n dispatch(downloadPdfCalculationSuccess(calculationId));\n return true;\n }\n catch (error) {\n dispatch(downloadPdfCalculationFailure(error, calculationId));\n }\n return false;\n};\n","import { FETCH_CALCULATIONS_ATTEMPT, FETCH_CALCULATIONS_SUCCESS, FETCH_CALCULATIONS_FAILURE, DELETE_CALCULATION_ATTEMPT, DELETE_CALCULATION_SUCCESS, DELETE_CALCULATION_FAILURE, DOWNLOAD_CALCULATION_ATTEMPT, DOWNLOAD_CALCULATION_SUCCESS, DOWNLOAD_CALCULATION_FAILURE, DOWNLOAD_PDF_CALCULATION_ATTEMPT, DOWNLOAD_PDF_CALCULATION_SUCCESS, DOWNLOAD_PDF_CALCULATION_FAILURE, } from './calculations.action-types';\nexport const fetchCalculationAttempt = () => ({\n type: FETCH_CALCULATIONS_ATTEMPT,\n});\nexport const fetchCalculationSuccess = (data) => ({\n type: FETCH_CALCULATIONS_SUCCESS,\n payload: data,\n});\nexport const fetchCalculationFailure = (error) => ({\n type: FETCH_CALCULATIONS_FAILURE,\n error,\n});\nexport const deleteCalculationAttempt = (calculationId) => ({\n type: DELETE_CALCULATION_ATTEMPT,\n payload: calculationId,\n});\nexport const deleteCalculationSuccess = (calculationId) => ({\n type: DELETE_CALCULATION_SUCCESS,\n payload: calculationId,\n});\nexport const deleteCalculationFailure = (error, calculationId) => ({\n type: DELETE_CALCULATION_FAILURE,\n error,\n payload: calculationId,\n});\nexport const downloadCalculationAttempt = (calculationId) => ({\n type: DOWNLOAD_CALCULATION_ATTEMPT,\n payload: calculationId,\n});\nexport const downloadCalculationSuccess = (calculationId) => ({\n type: DOWNLOAD_CALCULATION_SUCCESS,\n payload: calculationId,\n});\nexport const downloadCalculationFailure = (error, calculationId) => ({\n type: DOWNLOAD_CALCULATION_FAILURE,\n error,\n payload: calculationId,\n});\nexport const downloadPdfCalculationAttempt = (calculationId) => ({\n type: DOWNLOAD_PDF_CALCULATION_ATTEMPT,\n payload: calculationId,\n});\nexport const downloadPdfCalculationSuccess = (calculationId) => ({\n type: DOWNLOAD_PDF_CALCULATION_SUCCESS,\n payload: calculationId,\n});\nexport const downloadPdfCalculationFailure = (error, calculationId) => ({\n type: DOWNLOAD_PDF_CALCULATION_FAILURE,\n error,\n payload: calculationId,\n});\n","import React from 'react';\nimport { Box } from '@material-ui/core';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nconst buildUpHeight = 120;\nconst useStyle = makeStyles((theme) => (createStyles({\n materialName: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'center',\n textAlign: 'center',\n paddingBottom: '0.5em',\n },\n buildUpContainer: {\n display: 'flex',\n justifyContent: 'center',\n minWidth: '100px',\n },\n buildUpMaterial: {\n display: 'inline-block',\n height: `${buildUpHeight}px`,\n backgroundColor: '#FFF',\n borderRadius: '2px',\n borderColor: '#414141'\n },\n buildUpMaterialInsulation: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n buildUpMaterialInnerWall: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n constructionThicknessBracket: {\n height: '10px',\n width: '100%',\n marginTop: '10px',\n marginBottom: '5px',\n },\n thicknessLabel: {\n textAlign: 'center',\n fontSize: '95%',\n },\n kingSpan: {\n backgroundColor: '#F6AF9A',\n }\n})));\nexport default function ThicknessBuildUp(props) {\n const classes = useStyle();\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { className: classes.materialName }, props.materialName),\n React.createElement(\"div\", { className: classes.buildUpContainer },\n React.createElement(Box, null,\n React.createElement(\"div\", null,\n React.createElement(Box, { className: classes.buildUpMaterial, width: 35, border: 2, marginRight: \"5px\" }),\n React.createElement(Box, { className: `${classes.buildUpMaterial} ${classes.buildUpMaterialInsulation} ${props.isKingspanProduct ? classes.kingSpan : ''}`, width: 30 * props.layerThicknessPercentageNormalised, border: 2, borderRight: 0 }),\n React.createElement(Box, { className: `${classes.buildUpMaterial} ${classes.buildUpMaterialInnerWall}`, width: 12, border: 2, borderLeft: 1 })),\n React.createElement(Box, { className: classes.constructionThicknessBracket, borderLeft: 1, borderRight: 1, borderBottom: 1 }))),\n React.createElement(\"div\", { className: classes.thicknessLabel },\n props.totalConstructionThicknessMillimetres,\n \" mm\")));\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Grid } from '@material-ui/core';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport ThicknessBuildUp from './ThicknessBuildUp';\nconst useStyle = makeStyles((theme) => (createStyles({\n tagLine: {\n textAlign: 'center',\n fontWeight: 'bold',\n marginTop: '1em',\n },\n})));\nexport default function ThicknessComparison(props) {\n const classes = useStyle();\n const { t } = useTranslation();\n const thicknessComparison = props.thicknessComparison;\n return thicknessComparison\n ? React.createElement(\"div\", null,\n React.createElement(Grid, { container: true, direction: \"row\", spacing: 1, alignItems: \"flex-end\" },\n React.createElement(Grid, { item: true, xs: 6 },\n React.createElement(ThicknessBuildUp, { materialName: thicknessComparison.sourceMaterialName, totalConstructionThicknessMillimetres: thicknessComparison.sourceTotalConstructionThicknessMillimetres, layerThicknessPercentageNormalised: 1.0, isKingspanProduct: false })),\n React.createElement(Grid, { item: true, xs: 6 },\n React.createElement(ThicknessBuildUp, { materialName: thicknessComparison.comparisonMaterialName, totalConstructionThicknessMillimetres: thicknessComparison.comparisonTotalConstructionThicknessMillimetres, layerThicknessPercentageNormalised: 1 - thicknessComparison.layerThicknessSavingPercentage / 100, isKingspanProduct: true }))),\n React.createElement(\"div\", { className: classes.tagLine },\n React.createElement(\"div\", { \"data-qa-id\": \"thickness-comparison-text\" }, t('thickness-comparison-ui.you-will-save', Object.assign({}, thicknessComparison))),\n React.createElement(\"div\", { \"data-qa-id\": \"thickness-comparison-product\" }, thicknessComparison.comparisonMaterialName)))\n : React.createElement(\"div\", null);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"layerList\":\"CalculationSummary_layerList__Fhwk8\",\"layerProperties\":\"CalculationSummary_layerProperties__v9zNa\",\"layerPropertiesChevron\":\"CalculationSummary_layerPropertiesChevron__E2QH1\"};","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport { Grid, Box, Typography } from '@material-ui/core';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport { Trans } from 'react-i18next';\nimport { isEmpty } from 'lodash';\nimport { getAppConfig } from '../../config/config';\nimport ThicknessComparison from './ThicknessComparison';\nimport RcValue from '../RcValue/RcValue';\nimport { countryIdSelector } from '../../store/component-state/component-state.selectors';\nimport { constructionTypeNameSelector } from '../../store/construction-data/construction-data.selectors';\nimport { currentCalculationDataSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport { LayerType } from '../../types/domain/construction-data.types';\nimport LayerName from '../Calculation/LayerName';\nimport styles from './CalculationSummary.module.scss';\nimport { getCalculationLayerKey } from '../../store/current-calculation-data/current-calculation-data.reducer';\nimport MaterialParametersAux from '../CalculationLayer/MaterialParametersAux';\nconst useStyle = makeStyles((theme) => (createStyles({\n media: {\n height: 270,\n backgroundSize: 'contain',\n backgroundPosition: 'center',\n },\n summaryContainer: {\n padding: theme.spacing(2),\n },\n summary: {\n marginBottom: 24,\n },\n layer: {\n marginBottom: 12,\n },\n link: {\n color: 'inherit',\n },\n panelsContainer: {\n marginTop: '0.5em',\n marginBottom: '1em',\n },\n panel: {\n padding: theme.spacing(2),\n backgroundColor: '#E0E0E0',\n borderRadius: '0.75em',\n },\n icon: {\n verticalAlign: 'bottom'\n },\n compliant: {\n color: 'green'\n },\n nonCompliant: {\n color: 'red'\n }\n})));\nfunction getAvailableMaterials(constructionLayer) {\n var _a;\n let materials = [...(_a = constructionLayer === null || constructionLayer === void 0 ? void 0 : constructionLayer.materials) !== null && _a !== void 0 ? _a : []];\n if (constructionLayer === null || constructionLayer === void 0 ? void 0 : constructionLayer.materials) {\n constructionLayer === null || constructionLayer === void 0 ? void 0 : constructionLayer.materials.forEach(material => {\n var _a;\n materials = [...materials, ...(_a = material.linkedMaterials) !== null && _a !== void 0 ? _a : []];\n });\n }\n return materials;\n}\nexport const hasThicknessOptions = (material) => (material !== null && material !== undefined &&\n !isEmpty(material.optionsForThicknessMillimetres) &&\n material.optionsForThicknessMillimetres.some(x => x > 0));\nexport default function CalculationSummary(props) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const classes = useStyle();\n const apiUrl = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.apiUrl;\n const countryId = useSelector(countryIdSelector);\n const constructionTypeId = isEmpty(props.constructionTypeId) ? 'cavity-wall' : props.constructionTypeId;\n const constructionTypeName = useSelector(constructionTypeNameSelector(constructionTypeId));\n const currentCalculationData = useSelector(currentCalculationDataSelector);\n const thicknessComparison = (_b = props.results) === null || _b === void 0 ? void 0 : _b.thicknessComparison;\n return (React.createElement(Grid, { container: true, direction: \"row\" },\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 4 },\n React.createElement(Box, { marginLeft: 2, marginTop: 2, className: \"calculationTitle\" }, constructionTypeName),\n React.createElement(Box, { marginLeft: 2, marginBottom: 2, className: \"calculationSubTitle\" }, (_c = props.projectDetails) === null || _c === void 0 ? void 0 : _c.name),\n React.createElement(Box, { marginBottom: 3 },\n React.createElement(\"img\", { \"data-qa-id\": \"construction-type-image\", style: { maxWidth: '100%' }, src: `${apiUrl}/content/build-up-images/${countryId.toUpperCase()}/${countryId.toUpperCase()}-${constructionTypeId}.jpg`, alt: constructionTypeName }))),\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 4, className: classes.summaryContainer },\n React.createElement(\"div\", { className: classes.summary, \"data-qa-id\": \"ConstructionSummary\" },\n React.createElement(\"strong\", null,\n React.createElement(Trans, { i18nKey: \"calculation-summary-ui.construction-summary-text\" }, \"Construction Summary\"))),\n React.createElement(\"ul\", { className: styles.layerList }, (_e = (_d = props.results) === null || _d === void 0 ? void 0 : _d.calculationLayers) === null || _e === void 0 ? void 0 : _e.map(resultLayer => {\n var _a;\n const constructionLayer = props.layers.find(layer => layer.name === resultLayer.layerName);\n const selectedMaterial = getAvailableMaterials(constructionLayer).find(material => material.materialId === resultLayer.materialId);\n const calculationLayerKey = getCalculationLayerKey((_a = constructionLayer === null || constructionLayer === void 0 ? void 0 : constructionLayer.constructionLayerId) !== null && _a !== void 0 ? _a : -1, selectedMaterial === null || selectedMaterial === void 0 ? void 0 : selectedMaterial.isLinkedMaterial);\n return Object.assign(Object.assign({}, resultLayer), { constructionLayer,\n selectedMaterial, calculationLayer: currentCalculationData.calculationLayers[calculationLayerKey] });\n }).map(layer => {\n var _a, _b, _c, _d;\n return (React.createElement(\"li\", { key: `${layer.layerName}-${(_a = layer.materialId) !== null && _a !== void 0 ? _a : layer.materialName}` },\n React.createElement(LayerName, { layer: layer.constructionLayer }),\n React.createElement(\"div\", { className: styles.layerProperties },\n React.createElement(Trans, { i18nKey: `results-layer.${layer.materialName}` }, layer.materialName),\n ((_b = layer.constructionLayer) === null || _b === void 0 ? void 0 : _b.layerType) === LayerType.Insulation &&\n hasThicknessOptions(layer.selectedMaterial) &&\n React.createElement(\"div\", { className: styles.layerPropertiesChevron },\n React.createElement(Box, { marginTop: -4, marginLeft: 2, marginRight: 1 },\n React.createElement(MaterialParametersAux, { layer: layer.constructionLayer, currentSelectedThickness: layer.calculationLayer.thicknessMillimetres, currentSelectedMaterial: layer.selectedMaterial, isLinkedMaterial: (_d = (_c = layer.selectedMaterial) === null || _c === void 0 ? void 0 : _c.isLinkedMaterial) !== null && _d !== void 0 ? _d : false }))))));\n })),\n React.createElement(\"div\", { \"data-qa-id\": \"total-thickness\" },\n React.createElement(\"strong\", null,\n React.createElement(Trans, { i18nKey: \"calculation-summary-ui.total-thickness-text\" }, \"Total thickness\")),\n \"\\u00A0\", (_g = (_f = props.results) === null || _f === void 0 ? void 0 : _f.totalThicknessMillimetres) !== null && _g !== void 0 ? _g : '--',\n \" mm\")),\n React.createElement(Grid, { item: true, xs: 12, sm: 12, md: 4 },\n React.createElement(Grid, { className: classes.panelsContainer, container: true, spacing: 2 },\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 12 },\n React.createElement(RcValue, null)),\n ((_h = props.results) === null || _h === void 0 ? void 0 : _h.isBengCompliant) != null &&\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 12, \"data-qa-id\": \"beng-indicator\" },\n React.createElement(Box, { className: classes.panel },\n React.createElement(Typography, { align: \"center\", variant: \"h6\", component: \"h2\" },\n \"BENG \",\n props.results.isBengCompliant ?\n React.createElement(CheckCircleIcon, { color: \"primary\", className: `${classes.icon} ${classes.compliant}`, \"data-qa-id\": \"beng-indicator-green\" }) :\n React.createElement(CancelIcon, { color: \"primary\", className: `${classes.icon} ${classes.nonCompliant}`, \"data-qa-id\": \"beng-indicator-red\" })))),\n thicknessComparison &&\n React.createElement(Grid, { item: true, xs: 12, sm: 6, md: 12 },\n React.createElement(Box, { className: classes.panel },\n React.createElement(ThicknessComparison, { thicknessComparison: thicknessComparison })))))));\n}\n","import { toast } from 'react-toastify';\nexport const displayPdfDownloadToast = (success, t) => {\n if (success) {\n toast.success(t('email-dialog.success-dialog'));\n }\n else {\n toast.error(t('email-dialog.failure-dialog'));\n }\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Grid, Button, Box, makeStyles, createStyles, useMediaQuery, CircularProgress } from '@material-ui/core';\nimport { useTranslation, Trans } from 'react-i18next';\nimport { toast } from 'react-toastify';\nimport EmailDialog from '../EmailDialogs/EmailDialog';\nimport { downloadCalculation, directDownloadCalculation } from '../../store/calculations/calculations.action-creators';\nimport { loggedInUserSelector } from '../../store/account/account.selectors';\nimport { selectedCultureSelector, activeConstructionTypeIdSelector, downloadingCalculationIdSelector } from '../../store/component-state/component-state.selectors';\nimport { dispatchCalculationAttempt } from '../../store/current-calculation-data/current-calculation-data.action-creators';\nimport { projectDetailsSelector, currentCalculationDataSelector } from '../../store/current-calculation-data/current-calculation-data.selectors';\nimport CalculationSummary from './CalculationSummary';\nimport { displayPdfDownloadToast } from '../../helpers/toast-helpers';\nimport TagManager from 'react-gtm-module';\nconst useStyles = makeStyles((theme) => createStyles({\n fullWidthButton: {\n width: '100%',\n marginBottom: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n link: {\n color: 'inherit',\n textDecoration: 'inherit',\n },\n buttonWrapper: {\n position: 'relative',\n },\n buttonProgress: {\n color: theme.palette.info.main,\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -12,\n marginLeft: -12,\n },\n}));\nexport default function CalculationResults(props) {\n const dispatch = useDispatch();\n const user = useSelector(loggedInUserSelector);\n const downloadingCalculationId = useSelector(downloadingCalculationIdSelector);\n const { t } = useTranslation();\n const handleDownloadClick = async (calculationId, calculationAccessCode) => {\n if (user != null) {\n const result = await dispatch(downloadCalculation(calculationId, calculationAccessCode));\n displayPdfDownloadToast(result, t);\n }\n else {\n setGuestDialogOpen(true);\n }\n };\n const handleDirectDownloadClick = async (calculationName, constructionTypeId, calculationId, calculationAccessCode) => {\n if (user != null) {\n await dispatch(directDownloadCalculation(calculationId, calculationAccessCode));\n }\n };\n const { handleBack } = props;\n const { calculationResult, calculationId, calculationAccessCode } = useSelector(currentCalculationDataSelector);\n const constructionTypeId = useSelector(activeConstructionTypeIdSelector);\n const projectDetails = useSelector(projectDetailsSelector);\n const classes = useStyles();\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const [guestDialogOpen, setGuestDialogOpen] = React.useState(false);\n const [downloadingState, setDownloadingState] = React.useState(false);\n React.useEffect(() => {\n TagManager.dataLayer({\n dataLayer: {\n event: 'calculation_results_page_init',\n }\n });\n });\n React.useEffect(() => {\n if (!downloadingState && downloadingCalculationId) {\n setDownloadingState(true);\n }\n else if (downloadingState && !downloadingCalculationId) {\n setDownloadingState(false);\n }\n }, [downloadingState, downloadingCalculationId, setDownloadingState]);\n const handleClose = () => {\n setGuestDialogOpen(false);\n };\n const handleGuestEmailSend = async (guestEmail, gdprConsentGiven) => {\n if (calculationId && calculationAccessCode) {\n const result = await dispatch(downloadCalculation(calculationId, calculationAccessCode, guestEmail, gdprConsentGiven));\n displayPdfDownloadToast(result, t);\n setGuestDialogOpen(false);\n }\n };\n const selectedCulture = useSelector(selectedCultureSelector);\n const isInitialised = React.useRef(false);\n React.useEffect(() => {\n if (!isInitialised.current) {\n isInitialised.current = true;\n }\n else {\n console.info(`Selected culture changed to ${selectedCulture}, so dispatching refresh of the calculation result`);\n dispatch(dispatchCalculationAttempt());\n }\n }, [dispatch, selectedCulture]);\n if (user != null && !isInitialised.current) {\n toast.info(t('calculation-results-ui.calculation-saved-message', { projectName: projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.name }));\n }\n return (React.createElement(Box, null,\n React.createElement(EmailDialog, { open: guestDialogOpen, handleClose: handleClose, sending: downloadingState, handleSend: handleGuestEmailSend }),\n React.createElement(CalculationSummary, { results: calculationResult, constructionTypeId: constructionTypeId, projectDetails: projectDetails, layers: props.layers }),\n React.createElement(Grid, { container: true, spacing: 2 },\n React.createElement(Grid, { item: true, xs: 12, sm: \"auto\", className: classes.buttonWrapper },\n calculationId && calculationAccessCode && (React.createElement(Button, { variant: \"contained\", color: \"primary\", onClick: () => handleDownloadClick(calculationId, calculationAccessCode), className: isMobileView ? classes.fullWidthButton : '', disabled: downloadingState },\n React.createElement(Trans, { i18nKey: \"calculation-results-ui.download-pdf-button\" }, \"Download\"))),\n downloadingState && React.createElement(CircularProgress, { size: 24, className: `${classes.buttonProgress}` })),\n React.createElement(Grid, { item: true, xs: 12, sm: \"auto\", className: classes.buttonWrapper },\n calculationId && calculationAccessCode && user != null && (React.createElement(Button, { variant: \"contained\", color: \"secondary\", onClick: () => handleDirectDownloadClick(projectDetails === null || projectDetails === void 0 ? void 0 : projectDetails.name, constructionTypeId, calculationId, calculationAccessCode), className: isMobileView ? classes.fullWidthButton : '', disabled: downloadingState },\n React.createElement(Trans, { i18nKey: \"calculation-results-ui.direct-download-pdf-button\" }, \"View\"))),\n downloadingState && React.createElement(CircularProgress, { size: 24, className: `${classes.buttonProgress}` })),\n React.createElement(Grid, { item: true, xs: 12, sm: \"auto\", className: classes.buttonWrapper },\n React.createElement(Button, { variant: \"outlined\", color: \"secondary\", className: isMobileView ? classes.fullWidthButton : '', onClick: handleBack, \"data-qa-id\": \"edit-calculation-button\" },\n React.createElement(Trans, { i18nKey: \"calculation-results-ui.edit-calculation-button\" }, \"Edit calculation\"))))));\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"spacing\":\"8px\",\"maxWidth\":\"1280px\",\"fontSizeBase\":\"1em\",\"fontSizeSmall\":\".875em\",\"fontSizeSmallest\":\".75em\",\"fontSizeH1\":\"2.5em\",\"fontSizeH2\":\"2em\",\"fontSizeH3\":\"1.75em\",\"fontSizeH4\":\"1.5em\",\"fontSizeH5\":\"1.25em\",\"fontSizeH6\":\"1em\",\"headerLetterSpacing\":\"-0.05em\",\"fontFamily\":\"\\\"Montserrat\\\",sans-serif\",\"fontWeightLight\":\"300\",\"fontWeightRegular\":\"500\",\"fontWeightMedium\":\"600\",\"fontWeightBold\":\"800\",\"colorPrimaryBlue\":\"#004289\",\"colorBackgroundWhite\":\"#fff\",\"colorSecondaryGreyDarkest\":\"#3c3c3b\",\"colorSecondaryGreyDark\":\"#8c8c8c\",\"colorSecondaryGreyLight\":\"#b3b3b3\",\"colorSecondaryGreyLightest\":\"#e6e6e6\",\"colorHighlightOrange\":\"#f7a42d\",\"colorHighlightBlue\":\"#138dc6\",\"colorHighlightGreen\":\"#0fa042\",\"colorHighlightGold\":\"#c09a5d\",\"colorError\":\"#d63031\",\"colorTextBase\":\"rgba(0,0,0,.87)\",\"borderRadius\":\"4px\",\"page\":\"CalculationStepper_page__ahZA2\",\"content\":\"CalculationStepper_content__fZc+B\",\"header\":\"CalculationStepper_header__vUapQ\",\"logo\":\"CalculationStepper_logo__b1Fk5\",\"myaccountMenuContainer\":\"CalculationStepper_myaccount_menu_container__J2fmy\",\"circle\":\"CalculationStepper_circle__6AnRd\",\"active\":\"CalculationStepper_active__mdxfs\",\"completed\":\"CalculationStepper_completed__mgdvn\",\"stepIcon\":\"CalculationStepper_stepIcon__GWsmR\"};","import React from 'react';\nimport { Stepper, StepButton, Step, StepLabel, useMediaQuery, Box, makeStyles, createStyles, Select, MenuItem } from '@material-ui/core';\nimport { toNumber } from 'lodash';\nimport SelectedIcon from '@material-ui/icons/LocationOn';\nimport styles from './CalculationStepper.module.scss';\nconst useStyles = makeStyles(() => createStyles({\n step: {\n hyphens: 'auto',\n },\n}));\nexport default function CalculationStepper(props) {\n const { activeStepIndex, steps } = props;\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const isTabletView = useMediaQuery((theme) => theme.breakpoints.down('sm'));\n const classes = useStyles();\n return isMobileView || (isTabletView && steps.length > 5) ? (React.createElement(Box, null,\n React.createElement(Select, { fullWidth: true, variant: \"outlined\", value: activeStepIndex, onChange: (event) => props.handleBreadcrumbStepChange(toNumber(event.target.value)) }, steps.map((step, index) => (React.createElement(MenuItem, { key: step.id, value: index },\n index + 1,\n \":\\u00A0\",\n step.renderLabel())))))) : (React.createElement(Stepper, { nonLinear: true, alternativeLabel: true, activeStep: activeStepIndex }, steps.map((step, index) => (React.createElement(Step, { key: step.id, className: classes.step },\n React.createElement(StepButton, { color: \"inherit\", onClick: () => props.handleBreadcrumbStepChange(index) },\n React.createElement(StepLabel, { StepIconComponent: StepIcon }, step.renderLabel(true))))))));\n}\nfunction StepIcon(props) {\n const { active } = props;\n return React.createElement(\"div\", { className: styles.stepIcon }, active\n ? React.createElement(SelectedIcon, { className: styles.active })\n : React.createElement(\"div\", { className: styles.circle }));\n}\n","/**\n * Represents a specific step in the Calculaton Wizard.\n * The step can either be a layer in the calculation, or any other step in the wizard which isn't a layer.\n */\nexport class CalculationStep {\n constructor(renderLabel, id) {\n this.renderLabel = renderLabel;\n this.id = id;\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport { useParams, useLocation, Redirect } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { CircularProgress } from '@material-ui/core';\nimport { setActiveConstructionType, setActiveConstructionLayer } from '../../store/component-state/component-state.actions';\nimport CalculationProjectDetails from '../CalculationProjectDetails/CalculationProjectDetails';\nimport Calculation from '../Calculation/Calculation';\nimport { activeConstructionTypeIdSelector, selectedCultureSelector, isLoadingSelector } from '../../store/component-state/component-state.selectors';\nimport { fetchConstructionLayersForType, fetchConstructionLayersForCalculation } from '../../store/construction-data/construction-data.action-creators';\nimport { resetActiveConstructionLayerForCurrentCalculation } from '../../store/component-state/component-state.action-creators';\nimport { isEmpty } from 'lodash';\nimport { calculationSelector } from '../../store/calculations/calculations.selectors';\nimport { clearCurrentCalculation } from '../../store/current-calculation-data/current-calculation-data.actions';\nimport CalculationResults from '../CalculationResults/CalculationResults';\nimport { constructionLayerSelector, constructionTypesSelector } from '../../store/construction-data/construction-data.selectors';\nimport { useHistory } from 'react-router-dom';\nimport { buildRouteWithCountry } from '../../helpers/routeHelper';\nimport CalculationStepper from './CalculationStepper';\nimport { CalculationStep } from './calculation-page.types';\nimport { Trans } from 'react-i18next';\nimport LayerName from '../Calculation/LayerName';\nvar CalculationStage;\n(function (CalculationStage) {\n CalculationStage[CalculationStage[\"INITIALIZING\"] = 0] = \"INITIALIZING\";\n CalculationStage[CalculationStage[\"PROJECT_DETAILS\"] = 1] = \"PROJECT_DETAILS\";\n CalculationStage[CalculationStage[\"CALCULATION\"] = 2] = \"CALCULATION\";\n CalculationStage[CalculationStage[\"RESULTS\"] = 3] = \"RESULTS\";\n})(CalculationStage || (CalculationStage = {}));\nfunction parseSearch(search) {\n const searchParams = new URLSearchParams(search);\n if (searchParams.has('results')) {\n return { isResultsStep: true };\n }\n return {\n isResultsStep: false,\n layerName: searchParams.get('layer'),\n };\n}\nexport default function CalculationPage() {\n var _a;\n const dispatch = useDispatch();\n const { constructionTypeId, calculationId, countryId } = useParams();\n const { search } = useLocation();\n const history = useHistory();\n const isLoading = useSelector(isLoadingSelector);\n const activeConstructionTypeId = useSelector(activeConstructionTypeIdSelector);\n const layers = useSelector(constructionLayerSelector(constructionTypeId));\n const calculation = useSelector(calculationSelector(calculationId));\n const constructionTypes = useSelector(constructionTypesSelector);\n const [isCopy] = useState(search.indexOf('?copy') > -1);\n const [activeStepIndex, setActiveStepIndex] = useState(0);\n const [steps, setSteps] = useState([]);\n const selectStep = (stepToSelect) => {\n var _a;\n const urlParts = [`/calculation/${constructionTypeId}`];\n if (calculationId) {\n urlParts.push(`/${calculationId}`);\n }\n if (typeof stepToSelect === 'number') {\n if (stepToSelect >= steps.length - 1) {\n urlParts.push('?results');\n }\n else {\n urlParts.push(`?layer=${(_a = layers[stepToSelect]) === null || _a === void 0 ? void 0 : _a.name}`);\n }\n }\n const url = urlParts.join('');\n history.push(buildRouteWithCountry(countryId, url));\n };\n const handleNextStep = () => selectStep(activeStepIndex + 1);\n const handlePreviousStep = () => {\n if (activeStepIndex === 0) {\n selectStep('project-details');\n }\n else {\n selectStep(activeStepIndex - 1);\n }\n };\n const [calculationStage, setCalculationStage] = useState(CalculationStage.INITIALIZING);\n // Build the list of steps to reflect the layers for the current Construction Type\n useEffect(() => {\n // wait until we have initialised, this will mean the layers we have are for the correct Construction Type\n if (constructionTypeId === activeConstructionTypeId && !isLoading) {\n const layerSteps = (layers !== null && layers !== void 0 ? layers : []).map(layer => new CalculationStep((insertSuggestedHyphenationIfRequired) => React.createElement(LayerName, { layer: layer, insertSuggestedHyphenationIfRequired: insertSuggestedHyphenationIfRequired }), `calc-layer-step-${layer.name}`));\n const finishStep = new CalculationStep(() => React.createElement(Trans, { i18nKey: \"calculation-summary-ui.construction-summary-text\" }, \"Construction Summary\"), 'calc-results-step');\n setSteps([...layerSteps, finishStep]);\n }\n }, [layers, constructionTypeId, activeConstructionTypeId, isLoading]);\n // Update the state whenever the user navigates to a different step\n useEffect(() => {\n // wait until we have initialised, this will mean the layers we have are for the correct Construction Type\n if (constructionTypeId === activeConstructionTypeId && !isLoading) {\n const { isResultsStep, layerName } = parseSearch(search);\n const layerIndex = layers && layerName ? layers.findIndex((layer) => layer.name === layerName) : -1;\n const layer = layers[layerIndex];\n if (layer) {\n setActiveStepIndex(layerIndex);\n setCalculationStage(CalculationStage.CALCULATION);\n dispatch(setActiveConstructionLayer(layer.constructionLayerId));\n }\n else if (isResultsStep) {\n setActiveStepIndex(layers.length);\n setCalculationStage(CalculationStage.RESULTS);\n }\n else {\n setCalculationStage(CalculationStage.PROJECT_DETAILS);\n }\n }\n }, [dispatch, search, layers, constructionTypeId, activeConstructionTypeId, isLoading]);\n // Initialise the Calculation Page and its layers\n useEffect(() => {\n dispatch(setActiveConstructionType(constructionTypeId));\n if (!isEmpty(countryId) && isEmpty(calculationId)) {\n dispatch(fetchConstructionLayersForType(constructionTypeId, countryId));\n }\n else if (!isEmpty(countryId) && !isEmpty(calculationId) && calculation) {\n dispatch(fetchConstructionLayersForCalculation(calculation, isCopy));\n }\n return function cleanup() {\n dispatch(clearCurrentCalculation());\n };\n }, [dispatch, constructionTypeId, countryId, calculationId, calculation, isCopy]);\n // Ensure latest translations from the backend are loaded\n const selectedCulture = useSelector(selectedCultureSelector);\n const isInitialised = React.useRef(false);\n useEffect(() => {\n if (!isInitialised.current) {\n isInitialised.current = true;\n }\n else {\n console.info('Selected culture/constructionType changed, so dispatching refresh of the current construction\\'s layers and material names');\n dispatch(fetchConstructionLayersForType(activeConstructionTypeId, countryId, true));\n }\n }, [dispatch, selectedCulture, activeConstructionTypeId, countryId]);\n // If the Construction Types haven't been loaded yet, that means the page has been refreshed within a Calculation\n // This is not supported, and causes errors and sequencing issues, so redirect the user back to the Construction Type Selection screen\n if (((_a = constructionTypes === null || constructionTypes === void 0 ? void 0 : constructionTypes.length) !== null && _a !== void 0 ? _a : 0) === 0) {\n return React.createElement(Redirect, { to: `/${countryId}` });\n }\n const hasSteps = steps && steps.length > 0;\n const stepper = () => (hasSteps &&\n React.createElement(CalculationStepper, { activeStepIndex: activeStepIndex, steps: steps, handleBreadcrumbStepChange: newStepIndex => selectStep(newStepIndex) }));\n switch (calculationStage) {\n case CalculationStage.PROJECT_DETAILS:\n return (React.createElement(CalculationProjectDetails, { handleContinue: () => selectStep(0) }));\n case CalculationStage.CALCULATION:\n return (React.createElement(React.Fragment, null,\n stepper(),\n React.createElement(Calculation, { steps: steps, activeStepIndex: activeStepIndex, constructionTypeId: activeConstructionTypeId, handleNextStep: handleNextStep, handlePreviousStep: handlePreviousStep })));\n case CalculationStage.RESULTS:\n return (React.createElement(React.Fragment, null,\n stepper(),\n React.createElement(CalculationResults, { layers: layers, handleBack: () => {\n dispatch(resetActiveConstructionLayerForCurrentCalculation());\n selectStep('project-details');\n } })));\n default:\n return (React.createElement(\"div\", null,\n React.createElement(CircularProgress, { size: 50 })));\n }\n}\n","import axios from 'axios';\nimport i18n from 'i18next';\nimport { toast } from 'react-toastify';\nimport { setActiveConstructionLayer, setCountries, setProjectConfig, setCounties, setFieldData } from './component-state.actions';\nexport const resetActiveConstructionLayerForCurrentCalculation = () => (async (dispatch, getState) => {\n dispatch(setActiveConstructionLayer(Object.values(getState().currentCalculationData.calculationLayers)[0].constructionLayerId));\n});\nexport const fetchCountries = () => async (dispatch) => {\n dispatch(setCountries(null));\n try {\n const showAllCountries = `${window.location.search}`.indexOf('preview=64b60e66-9735-4911-ad8f-b064aaa57526') > -1;\n const { data } = await axios.get(`/api/countries?all=${showAllCountries}`);\n dispatch(setCountries(data !== null && data !== void 0 ? data : []));\n }\n catch (error) {\n toast.error(i18n.t('navigation-ui.fetch-countries-failed'), {\n autoClose: false,\n closeOnClick: false,\n });\n dispatch(setCountries([]));\n }\n};\nexport const fetchCounties = () => async (dispatch) => {\n dispatch(setCounties(null));\n try {\n const { data } = await axios.get('/api/lookup/counties');\n dispatch(setCounties(data));\n }\n catch (error) {\n toast.error(i18n.t('navigation-ui.fetch-countries-failed'), {\n autoClose: false,\n closeOnClick: false,\n });\n }\n};\nexport const fetchFieldData = () => async (dispatch) => {\n dispatch(setFieldData(null));\n try {\n const { data } = await axios.get('/api/lookup/fielddata');\n dispatch(setFieldData(data));\n }\n catch (error) {\n toast.error(i18n.t('navigation-ui.fetch-countries-failed'), {\n autoClose: false,\n closeOnClick: false,\n });\n }\n};\nexport const fetchProjectConfig = (countryId) => async (dispatch) => {\n dispatch(setProjectConfig(null));\n try {\n const { data } = await axios.get(`/api/lookup/projectdetailsconfig/${countryId}`);\n dispatch(setProjectConfig(data));\n }\n catch (error) {\n toast.error(i18n.t('navigation-ui.fetch-countries-failed'), {\n autoClose: false,\n closeOnClick: false,\n });\n }\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Trans } from 'react-i18next';\nimport Grid from '@material-ui/core/Grid';\nimport styles from './ChooseCountry.module.scss';\nimport kingspanLogo from '../../assets/images/kingspan-logo.svg';\nimport { Link } from 'react-router-dom';\nimport { countriesSelector } from '../../store/component-state/component-state.selectors';\nimport FooterLinks from '../Footer/FooterLinks';\nexport default function ChooseCountry() {\n const countries = useSelector(countriesSelector);\n return (React.createElement(\"div\", null,\n React.createElement(Grid, { container: true, direction: \"column\", alignItems: \"center\" },\n React.createElement(\"img\", { src: kingspanLogo, alt: \"Kingspan Logo\" }),\n React.createElement(\"h1\", { className: styles.title },\n React.createElement(Trans, { i18nKey: \"choose-country.title\" }, \"U-value Calculator\")),\n React.createElement(\"div\", { className: styles.prompt }, countries.length === 0 ? (React.createElement(Trans, { i18nKey: \"choose-country.maintenance-text\" }, \"Sorry, we're down for scheduled maintenance right now. We'll be up and running again soon.\")) : (React.createElement(Trans, { i18nKey: \"choose-country.prompt\" }, \"Welcome to the Kingspan Insulation U-value Calculator. Please start your calculation below by selecting a country.\")))),\n React.createElement(\"ul\", { className: styles.countryList }, countries.map(c => (React.createElement(\"li\", { key: c.countryId },\n React.createElement(Link, { to: `/${c.countryId.toLowerCase()}`, className: c.localizedName.length > 20 ? styles.longName : '' }, c.localizedName))))),\n React.createElement(Grid, { container: true, direction: \"column\", className: styles.footer },\n React.createElement(\"div\", { className: styles.disclaimer },\n React.createElement(Trans, { i18nKey: \"choose-country.disclaimer\" }, \"Whilst the information and/or specification contained here is to the best of our knowledge true and accurate we specifically exclude any liability for errors, omissions or otherwise arising therefrom. Details, practices, principles, values and calculations should be verified as to accuracy and suitability for the required purpose for use.\")),\n React.createElement(FooterLinks, null))));\n}\n","import { useEffect } from 'react';\nimport React from 'react';\nimport { useRouteMatch, Route, useHistory } from 'react-router-dom';\nimport { setGTMContainer, setSelectedCountry } from '../../store/component-state/component-state.actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getAppConfig } from '../../config/config';\nimport { setPreviouslySelectedCountryId } from '../../helpers/memory-helper';\nimport TagManager from 'react-gtm-module';\nimport { countriesSelector, getIsGtmContainerSet } from '../../store/component-state/component-state.selectors';\nimport { fetchProjectConfig } from '../../store/component-state/component-state.action-creators';\nexport default function CountryRoute(props) {\n var _a;\n const dispatch = useDispatch();\n const match = useRouteMatch('/:countryId');\n const history = useHistory();\n const countryId = (_a = match === null || match === void 0 ? void 0 : match.params) === null || _a === void 0 ? void 0 : _a.countryId;\n const countries = useSelector(countriesSelector);\n const isGtmContainerSet = useSelector(getIsGtmContainerSet);\n function getCookies() {\n const cookies = {};\n const cookiesArray = document.cookie.split(';');\n cookiesArray.forEach(cookie => {\n const [key, value] = cookie.split('=').map(c => c.trim());\n if (key && value) {\n cookies[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n });\n return cookies;\n }\n const getIsAnalyticalCookiesAccepted = () => {\n const cookieControl = getCookies()['CookieControl'];\n if (!cookieControl)\n return false;\n try {\n const { optionalCookies } = JSON.parse(cookieControl);\n return (optionalCookies === null || optionalCookies === void 0 ? void 0 : optionalCookies.AnalyticalCookies) === 'accepted';\n }\n catch (_a) {\n return false;\n }\n };\n const isAnalyticalCookiesAccepted = getIsAnalyticalCookiesAccepted();\n useEffect(() => {\n const country = countries.find(c => c.countryId.toLowerCase() === countryId.toLowerCase());\n if (country) {\n setPreviouslySelectedCountryId(countryId);\n if (!isGtmContainerSet && isAnalyticalCookiesAccepted) {\n initialiseGTMContainer(countryId, dispatch);\n }\n dispatch(setSelectedCountry(country));\n dispatch(fetchProjectConfig(country.countryId));\n }\n else {\n console.warn(`No country matching ${countryId}, redirecing to homepage`);\n history.push('/');\n }\n }, [dispatch, countryId, history, countries, isGtmContainerSet, isAnalyticalCookiesAccepted]);\n return React.createElement(Route, Object.assign({}, props));\n}\nfunction initialiseGTMContainer(countryId, dispatch) {\n const { gtmTrackingIds } = getAppConfig();\n const gtmTrackingId = gtmTrackingIds[countryId.toUpperCase()];\n if (gtmTrackingId) {\n const tagManagerArgs = {\n gtmId: gtmTrackingId,\n };\n TagManager.initialize(tagManagerArgs);\n console.info(`GTM container set to ${gtmTrackingId} for ${countryId}`);\n dispatch(setGTMContainer());\n }\n}\n","import React from 'react';\nimport { Grid, Typography, List, ListItem, ListItemText, Button, makeStyles, createStyles, Link } from '@material-ui/core';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Link as RouterLink } from 'react-router-dom';\nconst useStyles = makeStyles((theme) => createStyles({\n link: {\n color: 'inherit',\n textDecoration: 'inherit',\n },\n}));\nexport default function PersonalInformation(props) {\n const { user, handleSignOutClick } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n return (React.createElement(Grid, { item: true, xs: 12, sm: 6 },\n React.createElement(Typography, { variant: \"h4\", component: \"h4\" },\n React.createElement(Trans, { i18nKey: \"account-ui.personal-info\" }, \"Personal Information\")),\n React.createElement(List, null,\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.name'), secondary: `${user.givenName} ${user.familyName}` })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.phone-number'), secondary: user.phone })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.email-address'), secondary: user.emailAddress })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: React.createElement(RouterLink, { to: \"/update-details\", className: classes.link },\n React.createElement(Button, { variant: \"contained\", color: \"primary\" },\n React.createElement(Trans, { i18nKey: \"account-ui.buttons.update-details\" }, \"Update My Details and Consent\"))) })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: React.createElement(RouterLink, { to: \"/reset-password\", className: classes.link },\n React.createElement(Button, { variant: \"outlined\", color: \"secondary\" },\n React.createElement(Trans, { i18nKey: \"account-ui.buttons.reset-password\" }, \"Reset Password\"))) })),\n React.createElement(ListItem, null,\n React.createElement(Link, { component: \"button\", variant: \"body2\", onClick: handleSignOutClick },\n React.createElement(Trans, { i18nKey: \"account-ui.buttons.sign-out\" }, \"Sign out\"))))));\n}\n","import React from 'react';\nimport { Grid, Typography, Box, Button, makeStyles, createStyles, List, ListItem, ListItemText, CircularProgress } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport { uploadCompanyLogo } from '../../store/account/account.action-creators';\nconst useStyles = makeStyles((theme) => (createStyles({\n companyLogo: {\n width: 250,\n }\n})));\nexport default function BusinessInformation(props) {\n const dispatch = useDispatch();\n const { user, uploadCompanyLogoState } = props;\n const { isLoading, error, response } = uploadCompanyLogoState;\n const uploadSuccessful = response === null || response === void 0 ? void 0 : response.ok;\n const classes = useStyles();\n const { t } = useTranslation();\n const handleChooseFileChange = (event) => {\n if (event.target.files && event.target.files[0]) {\n dispatch(uploadCompanyLogo(event.target.files[0], event.target.files[0].name));\n // Clear out the HTML input control's selected file, allowing the user to select a new file, or even reselect the same file.\n // This does not clear out the blob reference we have, and as long as the file doesn't change on disk before commiting, the commit changes still works.\n event.target.value = null;\n }\n };\n return (React.createElement(Grid, { item: true, xs: 12, sm: 6 },\n React.createElement(Typography, { variant: \"h4\", component: \"h4\" },\n React.createElement(Trans, { i18nKey: 'account-ui.business-info' }, \"Business Information\")),\n React.createElement(List, { dense: false },\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: React.createElement(React.Fragment, null,\n t('account-ui.titles.company-logo'),\n React.createElement(Box, { my: 4 }, user.companyLogoBase64 ? (React.createElement(\"img\", { src: user.companyLogoBase64, alt: \"Business logo\", className: classes.companyLogo })) : (React.createElement(Typography, { variant: \"caption\", color: \"textSecondary\", gutterBottom: true },\n React.createElement(Trans, { i18nKey: 'account-ui.no-logo-provided' }, \"No logo provided.\")))),\n isLoading && React.createElement(Box, { m: 2 },\n React.createElement(CircularProgress, null)),\n error && React.createElement(Box, { my: 2 },\n React.createElement(Alert, { severity: \"error\", \"data-qa-id\": \"errorMessage\" }, \"Something went wrong when trying to upload your image, please try again.\")),\n uploadSuccessful && React.createElement(Box, { my: 2 },\n React.createElement(Alert, { severity: \"success\", \"data-qa-id\": \"sucessMessage\" }, \"Your image was uploaded successfully.\")),\n React.createElement(Button, { variant: \"outlined\", color: \"secondary\", component: \"label\", disabled: isLoading, \"data-qa-id\": \"upload-company-logo-btn\" },\n React.createElement(Trans, { i18nKey: \"account-ui.buttons.upload-logo\" }),\n React.createElement(\"input\", { type: \"file\", style: { display: 'none' }, onChange: handleChooseFileChange, accept: \"image/*\" }))) })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.company-name'), secondary: user.companyName })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.street-address'), secondary: user.streetAddress })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.city'), secondary: user.city })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.postal-code'), secondary: user.postalCode })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, { primary: t('account-ui.titles.country'), secondary: user.country })))));\n}\n","import React from 'react';\nimport { Grid, Typography, Box } from '@material-ui/core';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { loggedInUserSelector, uploadCompanyLogoSelector } from '../../store/account/account.selectors';\nimport PersonalInformation from './PersonalInformation';\nimport BusinessInformation from './BusinessInformation';\nimport authProviderFactory from '../../authentication/authProvider';\nexport default function AccountDetails() {\n useTranslation();\n const loggedInUser = useSelector(loggedInUserSelector);\n const uploadCompanyLogoState = useSelector(uploadCompanyLogoSelector);\n const handleSignOutClick = () => {\n authProviderFactory().logout();\n };\n return React.createElement(React.Fragment, null,\n React.createElement(Box, { marginBottom: 4 },\n React.createElement(Typography, { variant: \"h1\", component: \"h2\" },\n React.createElement(Trans, { i18nKey: 'account-ui.title' }, \"Account settings\"))),\n loggedInUser === undefined\n ? React.createElement(Box, null,\n React.createElement(Trans, { i18nKey: 'account-ui.user-not-logged-in' }, \"No logged in user to display.\"))\n : React.createElement(Grid, { container: true },\n React.createElement(BusinessInformation, { user: loggedInUser, uploadCompanyLogoState: uploadCompanyLogoState }),\n React.createElement(PersonalInformation, { user: loggedInUser, handleSignOutClick: handleSignOutClick })));\n}\n","import React from 'react';\nimport AzureAD from 'react-aad-msal';\nimport authProviderFactory from '../../authentication/authProvider';\nexport default function PasswordReset() {\n return (React.createElement(AzureAD, { provider: authProviderFactory() }, ({ logout, accountInfo }) => {\n setTimeout(() => {\n if (accountInfo) {\n logout();\n }\n else {\n document.location.href = '/';\n }\n }, accountInfo ? 2000 : 500);\n return (accountInfo\n ? React.createElement(\"span\", null, \"Signing out. If you changed your password, please sign in with your new password.\")\n : React.createElement(\"span\", null, \"Redirecting...\"));\n }));\n}\n","export var CalculationResultType;\n(function (CalculationResultType) {\n CalculationResultType[\"RValue\"] = \"RValue\";\n CalculationResultType[\"UValue\"] = \"UValue\";\n})(CalculationResultType || (CalculationResultType = {}));\n","import React from 'react';\nimport { TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Button, makeStyles, createStyles, Paper, CircularProgress, useMediaQuery } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport EmailIcon from '@material-ui/icons/Email';\nimport GetAppIcon from '@material-ui/icons/GetApp';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { format } from 'date-fns';\nimport { Trans } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { buildRouteWithCountry } from '../../helpers/routeHelper';\nimport FormatNumber from '../FormatNumber/FormatNumber';\nimport { CalculationResultType } from '../../types/domain/calculation-data.types';\nconst useStyles = makeStyles((theme) => createStyles({\n table: {\n fontSize: '0.9em',\n '& td': {\n padding: '16px 0px 16px 4px',\n },\n '& th': {\n padding: '16px 0px 16px 4px',\n },\n '& .actionButtons': {\n padding: '16px 0px',\n },\n },\n button: {\n margin: `${theme.spacing(1)}px 2px`,\n },\n progressContainer: {\n display: 'flex',\n '& > * + *': {\n marginLeft: theme.spacing(2),\n },\n },\n buttonWrapper: {\n position: 'relative',\n float: 'left',\n },\n buttonProgress: {\n color: theme.palette.info.main,\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -12,\n marginLeft: -12,\n },\n}));\nexport default function MyCalculationsDesktop(props) {\n const { calculations, country, countryId, handleDownloadClick, handleDirectDownloadClick, handleDeleteClick, isDeleting, isDownloading, isCalculationDownloading } = props;\n const history = useHistory();\n const classes = useStyles();\n const isTabletView = useMediaQuery((theme) => theme.breakpoints.only('sm'));\n return (React.createElement(TableContainer, { className: classes.table, component: Paper },\n React.createElement(Table, { \"aria-label\": \"simple table\" },\n React.createElement(TableHead, null,\n React.createElement(TableRow, null,\n React.createElement(TableCell, null,\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.project-name\" }, \"Project Name\")),\n React.createElement(TableCell, null,\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.construction-type\" }, \"Type of Construction\")),\n React.createElement(TableCell, null, (country === null || country === void 0 ? void 0 : country.calculationResultType) === CalculationResultType.RValue\n ? React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.rvalue\" }, \"R Value ()\")\n : React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.uvalue\" }, \"U Value ()\")),\n !isTabletView && (React.createElement(TableCell, null,\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.startdate\" }, \"Start Date\"))),\n !isTabletView && (React.createElement(TableCell, null,\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.last-change\" }, \"Date of last Change\"))),\n React.createElement(TableCell, null))),\n React.createElement(TableBody, null, calculations.map(calc => (React.createElement(TableRow, { key: calc.calculationId },\n React.createElement(TableCell, { component: \"th\", scope: \"row\" }, calc.projectDetails.name),\n React.createElement(TableCell, null, calc.constructionTypeNameLocalized),\n React.createElement(TableCell, null,\n React.createElement(FormatNumber, { toFormat: calc.calculationResult.resultValue }),\n \" \",\n calc.calculationResult.resultUnits),\n !isTabletView && React.createElement(TableCell, null, calc.projectDetails.startDate ? format(calc.projectDetails.startDate, 'dd-MM-yyyy') : '-'),\n !isTabletView && React.createElement(TableCell, null, calc.updatedOn ? format(calc.updatedOn, 'dd-MM-yyyy HH:mm:ss') : '-'),\n React.createElement(TableCell, { className: 'actionButtons' },\n React.createElement(\"div\", { className: classes.buttonWrapper },\n React.createElement(Button, { color: \"primary\", className: classes.button, startIcon: React.createElement(FileCopyIcon, null), onClick: () => history.push(buildRouteWithCountry(countryId, `/calculation/${calc.constructionTypeId}/${calc.calculationId}?copy`)) },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.buttons.copy\" }, \"Copy\"))),\n React.createElement(\"div\", { className: classes.buttonWrapper },\n React.createElement(Button, { color: \"primary\", className: classes.button, startIcon: React.createElement(EditIcon, null), onClick: () => history.push(buildRouteWithCountry(countryId, `/calculation/${calc.constructionTypeId}/${calc.calculationId}`)) },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.buttons.edit\" }, \"Edit\"))),\n React.createElement(\"div\", { className: classes.buttonWrapper },\n React.createElement(Button, { color: \"primary\", className: classes.button, startIcon: React.createElement(EmailIcon, null), onClick: () => handleDownloadClick(calc.calculationId, calc.calculationAccessCode), disabled: isDownloading() },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.buttons.download\" }, \"Download\")),\n isCalculationDownloading(calc.calculationId) && React.createElement(CircularProgress, { size: 24, className: `${classes.buttonProgress}` })),\n React.createElement(\"div\", { className: classes.buttonWrapper },\n React.createElement(Button, { color: \"primary\", className: classes.button, startIcon: React.createElement(GetAppIcon, null), onClick: () => handleDirectDownloadClick(calc.calculationId, calc.calculationAccessCode), disabled: isDownloading() },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.buttons.direct-download\" }, \"View\")),\n isCalculationDownloading(calc.calculationId) && React.createElement(CircularProgress, { size: 24, className: `${classes.buttonProgress}` })),\n React.createElement(\"div\", { className: classes.buttonWrapper },\n React.createElement(Button, { color: \"primary\", className: classes.button, startIcon: React.createElement(DeleteIcon, null), onClick: () => handleDeleteClick(calc.calculationId), disabled: isDeleting(calc.calculationId) },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.buttons.delete\" }, \"Delete\")),\n isDeleting(calc.calculationId) && React.createElement(CircularProgress, { size: 24, className: `${classes.buttonProgress}` }))))))))));\n}\n","import React, { useState, useEffect } from 'react';\nimport { CalculationResultType } from '../../types/domain/calculation-data.types';\nimport { List, ListSubheader, ListItem, ListItemText, Collapse, makeStyles, createStyles, Box, ListItemSecondaryAction, IconButton, Button } from '@material-ui/core';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport EmailIcon from '@material-ui/icons/Email';\nimport GetAppIcon from '@material-ui/icons/GetApp';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { groupBy, isEmpty } from 'lodash';\nimport { Trans } from 'react-i18next';\nimport { format } from 'date-fns';\nimport { useHistory } from 'react-router-dom';\nimport { buildRouteWithCountry } from '../../helpers/routeHelper';\nimport FormatNumber from '../FormatNumber/FormatNumber';\nimport { Link } from 'react-router-dom';\nconst useStyles = makeStyles((theme) => createStyles({\n root: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n nested: {\n paddingLeft: theme.spacing(4),\n },\n}));\nexport default function MyCalculationsMobile(props) {\n const { calculations, countryId, handleDownloadClick, handleDirectDownloadClick, handleDeleteClick, isDeleting } = props;\n const classes = useStyles();\n const history = useHistory();\n const [displayableCalculations, setDisplayableCalculations] = useState({});\n const [opens, setOpens] = useState({});\n useEffect(() => {\n const result = groupBy(calculations, calculation => calculation.projectDetails.name);\n setDisplayableCalculations(result);\n }, [calculations]);\n useEffect(() => {\n const result = Object.keys(displayableCalculations).reduce((acc, projectName) => (Object.assign(Object.assign({}, acc), { [projectName]: {\n open: false,\n } })), {});\n setOpens(result);\n }, [displayableCalculations]);\n const handleItemClick = (projectName) => {\n setOpens(Object.assign(Object.assign({}, opens), { [projectName]: {\n // @ts-ignore\n open: !opens[projectName].open,\n } }));\n };\n const getProjectStartDate = (projectName) => {\n // @ts-ignore\n if (isEmpty(displayableCalculations[projectName])) {\n return '';\n }\n // @ts-ignore\n return format(displayableCalculations[projectName][0].projectDetails.startDate, 'dd-MM-yyyy');\n };\n return (React.createElement(\"div\", null,\n React.createElement(List, { component: \"nav\", \"aria-labelledby\": \"nested-list-subheader\", subheader: React.createElement(ListSubheader, { component: \"div\", id: \"nested-list-subheader\", \"data-qa-id\": \"my-calculation-tab\" }, \"My calculations\"), className: classes.root },\n React.createElement(ListItem, null,\n React.createElement(Button, { variant: \"outlined\", color: \"secondary\", component: Link, to: buildRouteWithCountry(countryId, '') },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.new-calculation\" }, \"New Calculation\"))),\n Object.keys(displayableCalculations).map((projectName, index) => {\n var _a, _b;\n return (React.createElement(Box, { key: index, marginBottom: 2 },\n React.createElement(ListItem, { button: true, divider: true, onClick: () => handleItemClick(projectName) },\n React.createElement(ListItemText, { primary: projectName, secondary: getProjectStartDate(projectName) }),\n ((_a = opens[projectName]) === null || _a === void 0 ? void 0 : _a.open) ? React.createElement(ExpandLess, null) : React.createElement(ExpandMore, null)),\n React.createElement(Collapse, { in: \n // @ts-ignore\n (_b = opens[projectName]) === null || _b === void 0 ? void 0 : _b.open, timeout: \"auto\", unmountOnExit: true },\n React.createElement(List, { component: \"div\", disablePadding: true }, // @ts-ignore\n displayableCalculations[projectName].map((calculation, index) => (React.createElement(Box, { key: index },\n React.createElement(ListItem, { button: true, className: classes.nested },\n React.createElement(ListItemText, { primary: calculation.constructionTypeNameLocalized, secondary: React.createElement(\"span\", null,\n calculation.calculationResult.resultType === CalculationResultType.RValue\n ? React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.rvalue\" }, \"R Value ()\")\n : React.createElement(Trans, { i18nKey: \"my-calculations-ui.table.uvalue\" }, \"U Value ()\"),\n \":\",\n ' ',\n React.createElement(FormatNumber, { toFormat: calculation.calculationResult.resultValue }),\n \" \",\n calculation.calculationResult.resultUnits) })),\n React.createElement(ListItem, null,\n React.createElement(ListItemText, null),\n React.createElement(ListItemSecondaryAction, null,\n React.createElement(IconButton, { edge: \"end\", \"aria-label\": \"copy\", onClick: () => history.push(buildRouteWithCountry(countryId, `/calculation/${calculation.constructionTypeId}/${calculation.calculationId}?copy`)) },\n React.createElement(FileCopyIcon, null)),\n React.createElement(IconButton, { edge: \"end\", \"aria-label\": \"edit\", onClick: () => history.push(buildRouteWithCountry(countryId, `/calculation/${calculation.constructionTypeId}/${calculation.calculationId}`)) },\n React.createElement(EditIcon, null)),\n React.createElement(IconButton, { edge: \"end\", \"aria-label\": \"download\", onClick: () => handleDownloadClick(calculation.calculationId, calculation.calculationAccessCode) },\n React.createElement(EmailIcon, null)),\n React.createElement(IconButton, { edge: \"end\", \"aria-label\": \"download\", onClick: () => handleDirectDownloadClick(calculation.calculationId, calculation.calculationAccessCode) },\n React.createElement(GetAppIcon, null)),\n React.createElement(IconButton, { edge: \"end\", \"aria-label\": \"delete\", disabled: isDeleting(calculation.calculationId), onClick: () => handleDeleteClick(calculation.calculationId) },\n React.createElement(DeleteIcon, null)))))))))));\n }))));\n}\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fetchCalculation, deleteCalculation, downloadCalculation, directDownloadCalculation } from '../../store/calculations/calculations.action-creators';\nimport { Box, Typography, Divider, Button, makeStyles, createStyles, CircularProgress, useMediaQuery } from '@material-ui/core';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { isEmpty } from 'lodash';\nimport { buildRouteWithCountry } from '../../helpers/routeHelper';\nimport { Link } from 'react-router-dom';\nimport { calculationArraySelector, deletingCalculationsSelector } from '../../store/calculations/calculations.selectors';\nimport { isAuthenticationInitialized } from '../../store/authentication/authentication.selectors';\nimport { isLoadingSelector, countryIdSelector, downloadingCalculationIdSelector, countrySelector, selectedCultureSelector } from '../../store/component-state/component-state.selectors';\nimport MyCalculationsDesktop from './MyCalculations.desktop';\nimport MyCalculationsMobile from './MyCalculations.mobile';\nimport { displayPdfDownloadToast } from '../../helpers/toast-helpers';\nconst useStyles = makeStyles((theme) => createStyles({\n progressContainer: {\n display: 'flex',\n '& > * + *': {\n marginLeft: theme.spacing(2),\n },\n },\n}));\nexport default function MyCalculations() {\n const dispatch = useDispatch();\n const country = useSelector(countrySelector);\n const countryId = useSelector(countryIdSelector);\n const selectedCulture = useSelector(selectedCultureSelector);\n const calculations = useSelector(calculationArraySelector);\n const isAuthInitialized = useSelector(isAuthenticationInitialized);\n const deletingCalculationsStore = useSelector(deletingCalculationsSelector);\n const isLoading = useSelector(isLoadingSelector);\n const downloadingCalculationId = useSelector(downloadingCalculationIdSelector);\n const classes = useStyles();\n const isMobileView = useMediaQuery((theme) => theme.breakpoints.down('xs'));\n const { t } = useTranslation();\n React.useEffect(() => {\n if (isAuthInitialized && !isEmpty(countryId)) {\n dispatch(fetchCalculation(countryId));\n }\n }, [dispatch, isAuthInitialized, countryId, selectedCulture]);\n const [deletingCalculationIds, setDeletingCalclationIds] = useState([]);\n const [downloadingState, setDownloadingState] = useState(false);\n React.useEffect(() => {\n if (!downloadingState && downloadingCalculationId) {\n setDownloadingState(true);\n }\n else if (downloadingState && !downloadingCalculationId) {\n setDownloadingState(false);\n }\n }, [downloadingState, downloadingCalculationId, setDownloadingState]);\n const handleDeleteClick = (calculationId) => {\n setDeletingCalclationIds([...deletingCalculationIds, calculationId]);\n dispatch(deleteCalculation(calculationId));\n };\n const handleDownloadClick = async (calculationId, calculationAccessCode) => {\n const result = await dispatch(downloadCalculation(calculationId, calculationAccessCode));\n displayPdfDownloadToast(result, t);\n };\n const handleDirectDownloadClick = async (calculationId, calculationAccessCode) => {\n await dispatch(directDownloadCalculation(calculationId, calculationAccessCode));\n };\n React.useEffect(() => {\n setDeletingCalclationIds(deletingCalculationsStore);\n }, [deletingCalculationsStore]);\n const isDeleting = (calculationId) => {\n return deletingCalculationIds.some(c => c === calculationId);\n };\n const isDownloading = () => {\n return downloadingState;\n };\n const isCalculationDownloading = (calculationId) => {\n return downloadingCalculationId === calculationId;\n };\n const renderMyCalculationsView = () => {\n return isMobileView ? (React.createElement(MyCalculationsMobile, { calculations: calculations, country: country, countryId: countryId, handleDownloadClick: handleDownloadClick, handleDirectDownloadClick: handleDirectDownloadClick, handleDeleteClick: handleDeleteClick, isDeleting: isDeleting, isDownloading: isDownloading, isCalculationDownloading: isCalculationDownloading })) : (React.createElement(MyCalculationsDesktop, { calculations: calculations, country: country, countryId: countryId, handleDownloadClick: handleDownloadClick, handleDirectDownloadClick: handleDirectDownloadClick, handleDeleteClick: handleDeleteClick, isDeleting: isDeleting, isDownloading: isDownloading, isCalculationDownloading: isCalculationDownloading }));\n };\n return (React.createElement(React.Fragment, null,\n !isMobileView && (React.createElement(React.Fragment, null,\n React.createElement(Box, { marginBottom: 4 },\n React.createElement(Typography, { variant: \"h1\", component: \"h2\" },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.title\" }, \"My Calculations\"))),\n React.createElement(Divider, null),\n React.createElement(Box, { my: 4 },\n React.createElement(Button, { variant: \"outlined\", color: \"secondary\", component: Link, to: buildRouteWithCountry(countryId, '') },\n React.createElement(Trans, { i18nKey: \"my-calculations-ui.new-calculation\" }, \"New Calculation\"))),\n React.createElement(Divider, null))),\n isAuthInitialized && !isLoading ? (renderMyCalculationsView()) : (React.createElement(\"div\", { className: classes.progressContainer },\n React.createElement(CircularProgress, null)))));\n}\n","import { default as axiosDefault } from 'axios';\nimport { store } from '../store/store';\nimport authProviderFactory from '../authentication/authProvider';\nimport { getAppConfig } from '../config/config';\nfunction init() {\n var _a;\n axiosDefault.defaults.baseURL = (_a = getAppConfig()) === null || _a === void 0 ? void 0 : _a.apiUrl;\n axiosDefault.interceptors.request.use(config => {\n var _a;\n config.headers = (_a = config.headers) !== null && _a !== void 0 ? _a : {};\n config.headers['Accept-Language'] = store.getState().componentState.selectedCulture;\n return config;\n }, error => Promise.reject(error));\n axiosDefault.interceptors.request.use(async (config) => {\n var _a;\n if (config.withCredentials) {\n const idToken = await authProviderFactory().getIdToken();\n config.headers = (_a = config.headers) !== null && _a !== void 0 ? _a : {};\n config.headers['Authorization'] = `Bearer ${idToken === null || idToken === void 0 ? void 0 : idToken.idToken.rawIdToken}`;\n }\n return config;\n }, error => Promise.reject(error));\n}\nexport default {\n init,\n};\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { CircularProgress, Grid } from '@material-ui/core';\nimport { isEmpty } from 'lodash';\nimport { fetchCountries, fetchCounties, fetchFieldData } from '../../store/component-state/component-state.action-creators';\nimport { countryIdSelector, isLoadingCountriesSelector, isLoadingConstructionTypesSelector, selectedCultureSelector } from '../../store/component-state/component-state.selectors';\nimport kingspanLogo from '../../assets/images/kingspan-logo.svg';\nimport { LayoutMinimal } from '../Layout/LayoutMinimal';\nimport { fetchConstructionTypes, fetchConstructionTypeNames } from '../../store/construction-data/construction-data.action-creators';\nconst splash = () => (React.createElement(LayoutMinimal, null,\n React.createElement(Grid, { container: true, direction: 'column', alignItems: 'center' },\n React.createElement(\"p\", null,\n React.createElement(\"img\", { src: kingspanLogo, alt: \"Kingspan Logo\" })),\n React.createElement(CircularProgress, { size: 50 }))));\nexport default function CountriesProvider({ children }) {\n const isLoadingCountries = useSelector(isLoadingCountriesSelector);\n const countryId = useSelector(countryIdSelector);\n const selectedCulture = useSelector(selectedCultureSelector);\n const isLoadingConstructionTypes = useSelector(isLoadingConstructionTypesSelector);\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(fetchCountries());\n }, [dispatch]);\n useEffect(() => {\n dispatch(fetchCounties());\n }, [dispatch]);\n useEffect(() => {\n dispatch(fetchFieldData());\n }, [dispatch]);\n // Make sure that the construction types for the current country are always available\n useEffect(() => {\n if (!isEmpty(countryId)) {\n console.log(`Loading Construction Types for Country: ${countryId}`);\n dispatch(fetchConstructionTypes(countryId));\n }\n }, [dispatch, countryId]);\n // Make sure that the localised names for the construction types are always in-sync\n useEffect(() => {\n if (!isEmpty(countryId)) {\n console.log(`Refreshing localised Construction Type Names for Country: ${countryId}, Culture: ${selectedCulture}`);\n dispatch(fetchConstructionTypeNames(countryId));\n }\n }, [dispatch, countryId, selectedCulture]);\n return (React.createElement(React.Fragment, null, isLoadingCountries || isLoadingConstructionTypes ? splash() : children));\n}\n","import React, { Suspense } from 'react';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom';\nimport { CssBaseline } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/core/styles';\nimport { buildRouteWithCountry } from '../../helpers/routeHelper';\nimport { getPreviouslySelectedCountryId } from '../../helpers/memory-helper';\nimport { authenticationActionCreatorOverrides } from '../../store/authentication/authentication.action-creators';\nimport { Layout } from '../Layout/Layout';\nimport { LayoutMinimal } from '../Layout/LayoutMinimal';\nimport { store } from '../../store/store';\nimport { theme } from '../../theme/theme';\nimport ConstructionTypeSelection from '../ConstructionTypeSelection/ConstructionTypeSelection';\nimport CalculationPage from '../CalculationPage/CalculationPage';\nimport ChooseCountry from '../ChooseCountry/ChooseCountry';\nimport CountryRoute from './CountryRoute';\nimport AccountDetails from '../AccountDetails/AccountDetails';\nimport PasswordReset from '../PasswordReset/PasswordReset';\nimport MyCalculations from '../MyCalculations/MyCalculations';\nimport logo from '../../assets/images/kingspan-logo.svg';\nimport i18n from '../../i18n';\nimport { I18nextProvider } from 'react-i18next';\nimport authProviderFactory, { launchRedirectToPasswordReset, updateDetailsAuthConfig, buildAuthenticationParameters } from '../../authentication/authProvider';\nimport * as Msal from 'msal';\nimport interceptors from '../../interceptors/interceptors';\nimport AzureAD from 'react-aad-msal';\nimport { ToastContainer } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.min.css';\nimport CountriesProvider from './CountriesProvider';\nconst Loader = () => (React.createElement(\"div\", { className: \"App\" },\n React.createElement(\"img\", { src: logo, className: \"App-logo\", alt: \"logo\" }),\n React.createElement(\"div\", null, \"loading...\")));\nexport function App() {\n authenticationActionCreatorOverrides(store);\n authProviderFactory().registerReduxStore(store);\n interceptors.init();\n return (React.createElement(Provider, { store: store },\n React.createElement(ThemeProvider, { theme: theme },\n React.createElement(I18nextProvider, { i18n: i18n },\n React.createElement(CssBaseline, null),\n React.createElement(Suspense, { fallback: React.createElement(Loader, null) },\n React.createElement(CountriesProvider, null,\n React.createElement(BrowserRouter, null,\n React.createElement(Switch, null,\n React.createElement(Route, { exact: true, path: \"/\" },\n React.createElement(LayoutMinimal, null,\n React.createElement(ChooseCountry, null))),\n React.createElement(Layout, null,\n React.createElement(Switch, null,\n React.createElement(CountryRoute, { path: \"/:countryId/account\" },\n React.createElement(AzureAD, { provider: authProviderFactory(), forceLogin: true },\n React.createElement(AccountDetails, null))),\n React.createElement(Route, { path: \"/account-updated\" },\n React.createElement(Redirect, { to: buildRouteWithCountry(getPreviouslySelectedCountryId(), '/account') })),\n React.createElement(Route, { path: \"/reset-password\", render: () => {\n launchRedirectToPasswordReset();\n return (React.createElement(\"span\", null, i18n.t('navigation-ui.redirecting-ellipsis')));\n } }),\n React.createElement(Route, { path: \"/update-details\", render: () => {\n const myMSALObj = new Msal.UserAgentApplication(updateDetailsAuthConfig());\n setTimeout(() => myMSALObj.loginRedirect(buildAuthenticationParameters('updateDetails')), 250);\n return (React.createElement(\"span\", null, i18n.t('navigation-ui.redirecting-ellipsis')));\n } }),\n React.createElement(Route, { path: \"/password-reset\" },\n React.createElement(PasswordReset, null)),\n React.createElement(CountryRoute, { exact: true, path: \"/:countryId\" },\n React.createElement(ConstructionTypeSelection, null)),\n React.createElement(CountryRoute, { path: \"/:countryId/calculation/:constructionTypeId/:calculationId?\" },\n React.createElement(CalculationPage, null)),\n React.createElement(CountryRoute, { path: \"/:countryId/my-calculations\" },\n React.createElement(AzureAD, { provider: authProviderFactory(), forceLogin: true },\n React.createElement(MyCalculations, null))),\n React.createElement(Redirect, { to: \"/\" })))))),\n React.createElement(ToastContainer, null))))));\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { detect } from 'detect-browser';\nimport { App } from './components/App/App';\nimport { setAppConfig } from './config/config';\nimport { isUnsupportedBrowser } from './isUnsupportedBrowser';\nif (isUnsupportedBrowser(detect())) {\n const unsupportedBrowserBannerEl = document.getElementById('browser-unsupported');\n if (unsupportedBrowserBannerEl != null) {\n unsupportedBrowserBannerEl.style.display = 'block';\n }\n}\n(async function () {\n try {\n const clientConfig = await (await fetch('/config.json')).json();\n const { apiUrl } = clientConfig;\n const configData = await fetch(`${apiUrl}/config.json`);\n const appConfig = Object.assign(Object.assign({}, (await configData.json())), clientConfig);\n console.log('appConfig', appConfig);\n setAppConfig(appConfig);\n ReactDOM.render(React.createElement(App, null), document.getElementById('root'));\n }\n catch (e) {\n console.error('App config could not be loaded');\n console.error(e);\n }\n})();\n","import cmp from 'semver-compare';\nexport const isUnsupportedBrowser = (browser) => {\n switch (browser && browser.name) {\n case 'chrome':\n return cmp(browser.version, '85') < 0;\n case 'firefox':\n return cmp(browser.version, '80') < 0;\n case 'edge':\n return cmp(browser.version, '84') < 0;\n case 'safari':\n return cmp(browser.version, '13') < 0;\n default:\n return false;\n }\n};\n"],"sourceRoot":""}