{"version":3,"sources":["components/CalculationNavigation/CalculationNavigation.module.scss","components/CondensationRiskModal/EnvConditionsTab.module.scss","components/CondensationRiskModal/EnvConditionsEditorModal.module.scss","components/OpenCalculationModal/OpenCalculationModal.module.scss","components/ProjectInfoModal/ProjectInfoModal.module.scss","theme/theme.module.scss","assets/images/kingspan-logo.svg","components/ConstructionModal/ConstructionModal.module.scss","components/Header/Header.module.scss","components/Layout/Layout.module.scss","components/App/App.module.scss","components/CalculationResults/CalculationResults.module.scss","components/Utilities/VerticalAlign/VerticalAlign.module.scss","assets/icons/bridged.svg","assets/icons/fastened.svg","assets/icons/bridged-and-fastened.svg","components/NewCalculationModal/NewCalculationModal.module.scss","components/WelcomeModal/WelcomeModal.module.scss","components/ContactInfoModal/ContactInfoModal.module.scss","components/LayersTable/LayersTable.module.scss","theme/overrides.module.scss","components/Header/Header.tsx","store/selectors.ts","components/Utilities/VerticalAlign/VerticalAlign.tsx","components/LandingPage/LandingPage.tsx","components/LandingPages/UnauthenticatedLandingPage/UnauthenticatedLandingPage.tsx","components/LandingPages/AccessDeniedLandingPage/AccessDeniedLandingPage.tsx","components/LandingPages/AuthorisingLandingPage/AuthorisingLandingPage.tsx","actions/actionTypes.ts","types/store/masterDataTypes.ts","auth/authProvider.ts","config/config.ts","types/store/apiTypes.ts","common/api.ts","actions/masterDataActions.ts","actions/userProfileActions.ts","common/userProfile.ts","components/Layout/Layout.tsx","types/store/calculationTypes.ts","types/store/LayerMaterialTypes.ts","common/uuid.ts","actions/projectActions.ts","actions/contactActions.ts","actions/calculationActions.ts","components/CalculationNavigation/CalculationNavigation.tsx","components/CalculationResults/CalculationResults.tsx","components/LayerModal/TabPanel.tsx","components/CondensationRiskModal/EnvConditionsEditorModal.tsx","components/Utilities/hooks/useDebounce.ts","components/Utilities/hooks/usePrevious.ts","components/FormComponents/DebouncedDecimalInput/DebouncedDecimalInput.tsx","components/CondensationRiskModal/EnvConditionsTab.tsx","components/CondensationRiskModal/CondensationResultsTab.tsx","components/CondensationRiskModal/CondensationRiskTabs.tsx","components/CondensationRiskModal/CondensationRiskModal.tsx","components/ConstructionModal/NotesTab.tsx","common/inputValidation.ts","components/ConstructionModal/ConstructionModalStateTypes.ts","components/ConstructionModal/ConstructionModal.tsx","components/LayerModal/BridgingTab.tsx","components/LayerModal/FastenersTab.tsx","components/LayerModal/AirGapsTab.tsx","components/LayerModal/VapourTab.tsx","components/LayerModal/LayerNotesTab.tsx","components/LayerModal/LayerDetailsTabs.tsx","components/LayerModal/CoreLayerDetails.tsx","components/LayerModal/LayerModal.tsx","components/LayersTable/LayersTableRow/LayersTableRow.tsx","components/LayersTable/LayersTable.tsx","actions/masterDataUploadActions.ts","types/store/masterDataUploadTypes.ts","components/FormComponents/BusinessUnitDropdown/BusinessUnitDropdown.tsx","components/MasterDataUploadModal/MasterDataUploadModal.tsx","components/NewCalculationModal/NewCalculationModal.tsx","components/OpenCalculationModal/OpenCalculationModal.tsx","common/dates.ts","components/WelcomeModal/WelcomeModal.tsx","actions/pdfActions.ts","components/PdfModal/PdfModal.tsx","components/ProjectInfoModal/ProjectInfoModal.tsx","components/ContactInfoModal/ContactInfoModal.tsx","components/Screens/CalculationScreen/CalculationScreen.tsx","reducers/apiReducer.ts","reducers/inactiveCalculationsReducer.ts","reducers/calculationReducer.ts","reducers/masterDataReducer.ts","reducers/pdfReducer.ts","reducers/reducers.ts","reducers/userProfileReducer.ts","store/store.ts","theme/theme.ts","components/App/App.tsx","index.tsx","components/PdfModal/PdfModal.module.scss","components/LayerModal/LayerModal.module.scss","components/CondensationRiskModal/CondensationRiskModal.module.scss","components/MasterDataUploadModal/MasterDataUploadModal.module.scss","components/Screens/CalculationScreen/CalculationScreen.module.scss","components/LandingPage/LandingPage.module.scss"],"names":["module","exports","Header","className","styles","header","src","logo","alt","interimOrCurrentCalculationSelector","state","calculation","interimCalculation","currentCalculation","currentCalculationBusinessUnitIdSelector","businessUnitId","inactiveCalculationsByBusinessUnitSelector","currentBusinessUnitId","inactiveCalculations","filter","ic","inactiveCalculationsSelector","masterDataSelector","masterData","isLoadingMasterDataSelector","isLoadingMasterData","floorMasterLayerSelector","floorLayers","applicationTypeSelector","applications","soilTypeSelector","soilTypes","buildingRegionSelector","buildingRegions","buildingTypeSelector","buildingTypes","riskLevelSelector","riskLevels","rainscreenCladdingDefaultsSelector","rainscreenCladdingDefaults","drainageFxSelector","drainageFx","precipitationByPostCodeAreaSelector","precipitationByPostCodeArea","buildingUsagesSelector","buildingUsage","projectRegionsSelector","projectRegion","roofCharacteristicsOptionsSelector","roofCharacteristicsOptions","envConditionsSelector","envConditions","envSettingsSelector","envSettings","interstitialInterfaceSelector","interstitialInterfaces","masterDataBradingSelector","branding","pdfExportsSelector","pdf","pdfPendingDownloadsSelector","pendingDownloads","apiSelector","api","productSectorSelector","productSectors","salesContactTeamSelector","salesContactTeams","projectCountyStateSelector","projectCountyStates","projectStageSelector","projectStages","calculationTitleSelector","calculationTitles","currentBuildingRegionNameSelector","buildingRegionId","buildingTypeId","internalTemperature","riskLevelId","br","id","name","saveSuccessSelector","savedSuccessfully","userProfileSelector","userProfile","currentCalculationBusinessUnitSelector","createSelector","currentCalculationBusinessUnitId","useableBusinessUnits","find","bu","VerticalAlign","align","children","Grid","container","direction","justify","top","center","bottom","fullHeight","LandingPage","qaIdBase","shouldShowLoadingIcon","title","content","buttonText","onButtonClick","landingPageContainer","data-qa-id","landingPage","logoContainer","titleContainer","Typography","variant","loadingIconContainer","CircularProgress","size","contentContainer","buttonContainer","Button","color","disableElevation","onClick","UnauthenticatedLandingPage","window","location","reload","AccessDeniedLandingPage","AuthorisingLandingPage","actionTypes","AirGapsCorrectionLevel","getEmptyMasterData","layers","bridgeMaterials","mechanicalFasteners","airGapsCorrectionLevels","level0","level","Level0","value","level1","Level1","level2","Level2","bracketsPerMetreSquared","chiValue","authConfig","authProvider","MsalAuthProvider","auth","authority","clientId","postLogoutRedirectUri","origin","redirectUri","validateAuthority","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","scopes","loginType","LoginType","Redirect","tokenRefreshUri","appConfig","apiUrl","isApiClientError","e","candidate","response","data","undefined","message","errorCode","getGenericErrorMessage","statusCode","status","isApiServerError","errorMessage","exception","toastError","url","type","console","warn","toast","closeOnClick","copy","info","callApi","async","dispatch","method","endpoint","requestBody","responseType","accessToken","acquireTokenSilent","requestConfig","headers","Authorization","axios","request","API_CALL_SUCCESSFUL","SET_UNAUTHENTICATED","getApiClientErrorMessage","substring","requestId","getApiServerErrorMessage","SET_UNAUTHORISED","fetchMasterData","SET_IS_LOADING_MASTER_DATA","payload","masterLayers","map","layer","isActive","shortCode","thermalConductivity","defaultThickness","thicknessMillimetres","insideEmissivity","outsideEmissivity","layerMaterialType","isCustom","vapourResistance","vapourResistivity","isFloorInsulation","vr1","vr2","vr3","vr4","vrBreak1","vrBreak2","vrBreak3","bridgeMaterial","bridgeDescription","bridgeThermalConductivity","defaultBridgeWidth","bridgeWidthMillimetres","defaultCentresDistance","centresDistanceMillimetres","defaultNonBridgeHeight","nonBridgeHeightMillimetres","floorMasterLayers","material","fastener","defaultCrossArea","crossSectionalAreaMillimetresSquared","defaultNumber","fastenersPerMetreSquared","airGapsCorrectionRecords","applicationType","buildingRegion","buildingType","riskLevel","soilType","description","lambda","drainageFxInput","covering","fxFactor","precipitation","postCodeArea","rainfallMillimetres","brands","option","roofSpaceThermalResistance","fetchMasterDataFromApi","FETCH_MASTER_DATA","checkIsPowerUser","administrableBusinessUnits","length","Layout","useDispatch","enqueueSnackbar","useSnackbar","React","useEffect","FETCH_USER_PROFILE","useSelector","isPowerUser","persist","TransitionComponent","Fade","isFirstCallSuccessful","isAuthenticated","isAuthorised","Fragment","Container","fixed","disableGutters","page","FloorInsulationLayerReferenceType","customLayerDefaults","thermalResistance","isBlank","CustomLayerTypeOptions","customLayerTypeOptions","Blank","Insulation","NonInsulation","InvertedInsulation","EnvConditionType","LayerMaterialTypeKeys","uuid","v4","associateProject","project","isNewProject","shouldAssociateToAll","getState","calculationIds","calculationId","c","apiMethod","apiEndpoint","projectUsage","region","enquiryType","projectStage","projectCountyState","projectStartDate","Date","toDateString","UPDATE_CALCULATION_PROJECT","UPDATE_INACTIVE_CALCULATIONS_PROJECT","associateContact","contact","isNewContact","contactType","salesContactTeam","UPDATE_CALCULATION_CONTACT","UPDATE_INACTIVE_CALCULATIONS_CONTACT","requestCalculation","requestData","saveCalculation","CLEAR_CALCULATION_SAVE_SUCCESS","SET_CALCULATION_SAVE_SUCCESS","mapCurrentResponseLayerToRequest","responseLayer","instanceId","customReferenceLayer","layerBridging","mechanicalFastener","airGapsCorrection","layerNotes","isReadOnly","notes","fasteningsPerMetreSquared","calculatedCorrectionFactor","overrideCorrectionFactor","airGapsCorrectionOverride","overriddenCalculatedCorrectionFactor","registerCalculation","applicationDetails","previousActiveCalculation","cloneDeep","MAKE_ALL_CALCULATIONS_INACTIVE","Promise","resolve","order","REGISTER_CALCULATION","addLayerToCalculation","previousAirGapsCorrectionLevelOverride","nextAirGapsCorrectionLevelOverride","isCalculationInterim","calculationNotes","constructionDetails","rainscreenCladdingDetails","GenericInsulation","productSectorId","projectInsulationVolumeM2","payloadCalculation","ADD_LAYER_TO_INTERIM_CALCULATION","ADD_LAYER_TO_CALCULATION","editLayerInCalculation","index","findIndex","nextLayers","EDIT_LAYER_IN_INTERIM_CALCULATION","EDIT_LAYER_IN_CALCULATION","clearInterimCalculation","CLEAR_INTERIM_CALCULATION","setRiskLevel","updatedOverrides","envConditionOverrides","o","envConditionType","ExternalRelativeHumidity","ExternalTemperature","InternalRelativeHumidity","updatedEnvSettings","editEnvSettings","setInternalTemperature","InternalTemperature","EDIT_ENV_SETTINGS","isNaN","Number","EDIT_ENV_CONDITIONS","CalculationNavigation","items","currentItem","handleChange","handleTabClose","handleTabCopy","getTabContent","item","isSelected","tabContent","tabContentSelected","tabLabel","onDoubleClick","clipboardIcon","autoHideDuration","handleTabClick","tabCopyButtonContainer","tabCopyButton","tabCloseButtonContainer","tabCloseButton","Tabs","onChange","scrollButtons","textColor","Tab","key","label","disableRipple","CalculationResults","props","resultsContainer","results","xs","result","businessUnitPanel","resultValueText","resultTitle","businessUnit","Tooltip","countryName","resultCondensation","classnames","resultValue","hasCondensation","condensationResult","resultTotalThermalResistance","totalThermalResistance","resultUnit","uValue","uValue2DP","resultValueSub","isTotalCorrectionFactorBelowThreshold","resultValueTotalCorrectionInfo","arrow","Info","fontSize","isLocked","resultValueCalculationLocked","Lock","TabPanel","currentTabIndex","targetIndex","ariaLabelledBy","dataQaId","hidden","aria-labelledby","EnvConditionsEditorModal","monthKey","onClose","onMoveToNextMonth","onMoveToPrevMonth","onSubmit","dateTimeFormat","Intl","DateTimeFormat","month","editableConditions","setEditableConditions","useState","months","m","overridden","unit","handleDialogCancel","overrides","some","handleSubmitMonthValues","event","preventDefault","isInvalid","flatMap","v","handleMonthValueChange","target","prevState","updatedConditions","conditionToUpdate","monthToUpdate","Dialog","open","maxWidth","noValidate","modalHeader","DialogTitle","modalContent","DialogContent","envConditionData","spacing","disabled","alignItems","format","Paper","InputLabel","TextField","envConditionEditBox","placeholder","inputUnit","modalActions","DialogActions","fullWidth","useDebounce","delay","debouncedValue","setDebouncedValue","debounceState","useRef","debounce","newValue","current","cancel","usePrevious","ref","DebouncedDecimalInput","precision","textFieldId","localValue","setLocalValue","prevValue","prevDebouncedValue","newNumber","NaN","currentNumber","toFixed","columns","field","render","rowdata","tableStyles","tableCellContainer","Array","fill","_","i","EnvConditionsTab","setIsInvalid","environmentalConditions","setState","isEditorOpen","monthEditKey","handleBuildingRegionChange","useCallback","handleBuildingTypeChange","handleInternalTemperatureChange","handleRiskLevelChange","getEnvConditions","ec","handleRowClick","handleEditorSubmit","mergedOverrides","forEach","existingOverride","om","existingMonth","em","push","addEnvConditionOverrides","handleResetClick","Select","MenuItem","options","sorting","showTitle","search","paging","toolbar","grouping","selection","draggable","components","renderProps","tableContainer","table","Cell","columnDef","component","localization","body","emptyDataSourceMessage","condensationProperty","CondensationResultsTab","selectedInterfaceId","setSelectedInterfaceId","selectedInterface","modalStyles","interstitialInterface","saturationVapourPressure","vapourPressure","condensationAmount","condensationAccumulationAmount","CondensationRiskTabs","tabIndex","setTabIndex","tabs","_event","newTabIndex","indicatorColor","aria-label","tab","aria-controls","tabbedContentContainer","CondensationRiskModal","handleSaveEnvConditions","SAVE_ENV_CONDITIONS","scroll","dividers","locked","NotesTab","selectedTab","calculationTitle","setLocalState","filteredCalculationTitles","setFilteredCalculationTitles","htmlFor","Autocomplete","freeSolo","autoHighlight","onInputChange","filterValue","filteredList","element","includes","filterCalculationTitles","renderInput","params","verticalDivider","multiline","rows","isStringNotNullishOrWhitespace","input","trim","isStringValidPostiveNumber","isStringValidNumberInRangeInclusive","min","max","numberInput","noFloorReferenceOption","None","clientSpecifiedFloorReferenceOption","Custom","createFilterOptions","stringify","typesWithWindShielding","typesWithPaRatio","typesWithWallThickness","typesWithSoilType","typesWithHeightBelowGround","typesWithFloorInsulationDetails","typesWithPitchAngle","typesWithInsulationWidth","typesWithConstructionDetails","typesWithRainscreenCladding","applicationTypeHasHeightBelowGround","applicationTypeHasPaRatio","applicationTypeHasWallThickness","applicationTypeHasSoilType","applicationTypeHasWindShielding","applicationTypeHasPitchAngle","applicationTypeIsSteelFrameWall","applicationTypeHasFloorInsulationDetails","applicationTypeHasRainscreenCladding","applicationTypeHasConstructionDetails","applicationTypeIsInvertedRoof","applicationTypeIsPitchedRoofWithVentilatedLoftSpace","applicationTypeHasInsulationWidth","getInitialFloorMasterLayer","floorInsulationDetails","masterFloorLayers","insulationReference","insulationReferenceType","Master","masterFloorLayer","ConstructionModal","applicationTypes","drainageFxTypes","precipitationByPostCodeAreas","floorReferenceOptions","useMemo","initialSelectedApplicationType","initialSelectedApplicationName","initialDrainageFxTypeId","invertedRoofDetails","drainageFxId","initialTabsForSelection","localState","x","applicationTypeId","perimeterMetres","areaMetresSquared","perimeterAreaRatio","wallThicknessMetres","widthOfEdgeInsulation","ventilationRateMillimetresSquaredPerMetre","thermalTransmittanceWallsInUnderFloorSpaceAboveGround","windSpeedMetresPerSecond","averageWindShieldingFactor","heightBelowGroundMetres","soilTypeId","floorInsulationLayer","floorInsulationReferenceType","floorInsulationLayerThickness","floorInsulationThermalConductivity","floorInsulationLayerInstanceId","insulationLayerInstanceId","isWarmSteelFramedWall","steelWallDetails","is50To80MillimetreFlange","studDepthMillimetres","studSpacingMillimetres","rainscreenCladdingDetailsPartial","d","precipitationForArea","precipitationForAreaId","pitchAngle","pitchedRoofDetails","pitchedRoofWithLoftDetails","selectedApplicationType","selectedApplicationName","groundThermalConductivity","groundVapourResistivity","rainscreenCladdingCorrectionFactor","handleSubmit","hasConstructionDetails","hasPaRatio","hasWindshielding","isSteelFramedWall","hasWallThickness","hasInsulationWidth","hasHeightBelowGround","hasSoilType","hasPitchAngle","isInvertedRoof","hasFloorInsulationDetails","hasRainscreenCladdingDetails","isPitchedRoofWithVentilatedLoftSpace","precipitationForAreaMillimetres","titleFallback","finalCalculationNotes","requestDataWithLoftDetails","currentPitchedRoofDetails","requestPitchedRoofDetailsDetails","currentFloorInsulationDetails","requestFloorInsulationDetails","loftLayerInstanceId","loftLayerId","insulationLayerId","handleAutomaticLayers","ADD_CONSTRUCTION_DETAILS_TO_CALCULATION","addConstructionDetailsToCalculation","setPeremiterAndArea","isPerimeterAndAreaInvalid","isFinite","newSelectedApplicationId","newSelectedApplicationType","tabsForSelection","defaultsToResetTo","roofCharacteristicId","newSelectedProductSectorId","productSelector","sector","newProjectInsulationVolumeM2","constructionStyles","notesTabLabelIcon","Chat","classes","root","targetValue","standaloneUnit","getOptionLabel","forcePopupIcon","filterOptions","autoComplete","FormLabel","formLabelUpsize","FormControlLabel","control","Switch","checked","labelPlacement","FormControl","RadioGroup","toString","row","Radio","drainageFxType","inputProps","tabContentResults","tabContentResult","tabContentResultValueUnitContainer","tabContentResultValue","tabContentResultUnit","rainwaterCoolingCorrectionFactor","isSoilTypeValid","isHeightBelowGroundMetresValid","isWindshieldingValid","isFloorInsulationDetailsValid","isPaRatioValid","isSteelFramedWallValid","Infinity","isWallThicknessValid","isInsulationWidthValid","isRainscreenCladdingValid","isInvertedRoofValid","isPitchAngleValid","isPitchedRoofWithVentilatedLoftSpaceValid","canSubmit","BridgingTab","clearBridgingDetails","referenceLayer","setBridgeMaterial","bridgeWidth","setBridgeWidth","bridgeCentres","setBridgeCentres","bridgeNonBridgedHeight","setBridgeNonBridgedHeight","layerBridgePercentage","helperText","parseFloat","FastenersTab","clearFastenersDetails","fasteners","setFasteners","fastenersCrossArea","setFastenersCrossArea","fastenersNumber","setFastenersNumber","fastenersAlpha","fastenersThermalConductivity","fastenersCorrectionFactor","AirGapsTab","airGapsCorrectionLevel","airGapsCorrectionLevelOverride","setAirGapsCorrectionLevelOverride","airGapsCorrectionResultValue","totalAirGapsCorrectionFactor","masterDataAirGapsCorrectionLevel","shouldDisableAirgaps","relative","ButtonGroup","multiButtonContainer","disableFocusRipple","disableTouchRipple","multiButtonSelected","FormHelperText","VapourTab","setVapourResistances","LayerNotesTab","setLayerNotes","LayerDetailsTabs","WellVentilatedAirspace","layerNotesTabLabelIcon","bridgingTabIndex","fastenersTabIndex","airGapsTabIndex","vapourTabIndex","layerNotesTabIndex","CoreLayerDetails","layerThermalResistance","clearAllDetails","apiBridgeResponse","masterLayer","setMasterLayer","layerThickness","setLayerThickness","setShortCode","hasShortCodeError","setHasShortCodeError","setLayerFromShortCode","setCustomReferenceLayer","updateCustomReferenceLayer","refShortCodeField","refThicknessField","onBlur","onKeyDown","keyCode","InputProps","error","filtered","inputValue","customLayerOption","renderOption","layerResult","layerResultTitle","layerResultValue","layerResultUnit","customLayerDetailsWrapper","customLayerDetails","layerType","capturedReferenceLayer","customLayerTypeOption","shouldShowThermalConductivity","customLayerField","shouldShowThermalResistance","LayerModalMode","getInitMasterDataLayer","defaults","mode","interimLayer","ADD","masterDataLayer","getInitLayerThickness","EDIT","getInitHasShortCodeError","getInitCustomReferenceLayer","getInitMasterDataBridgeMaterial","masterMaterial","getInitBridgeWidth","getInitBridgeCentres","getInitBridgeNonBridgedHeight","getInitMasterDataMechanicalFastener","getInitFastenersCrossArea","getInitFastenersNumber","getInitAirGapsCorrectionLevelOverride","getInitTabIndex","initialTabIndex","getInitVapourResistance","getInitVapourResistivity","getInitNotes","getVapourResistance","vapourResistanceBreak","vvr","getSetMasterLayer","getResetBridgingDetails","getSetLayerThickness","getSetShortCode","getSetHasShortCodeError","getSetCustomReferenceLayer","getUpdateCustomReferenceLayer","getSetBridgeMaterial","getSetBridgeWidth","getSetBridgeCentres","getSetBridgeNonBridgedHeight","getSetFasteners","getSetFastenersCrossArea","getSetFastenersNumber","getSetAirGapsCorrectionLevelOverride","getSetNotes","getResetCoreDetails","getResetFastenerDetails","getResetAllDetails","getSetTabIndex","getSetVapourResistances","isModalStateInvalid","isThereAValidReferenceLayerSelected","isLayerThicknessValid","isACustomReferenceLayerSelectedAndTheCustomValuesAreValid","areAllBridgingFieldsEmpty","every","property","doesBridgingHaveEmptyRequiredField","areAllBridgingFieldsValid","areAllFastenerFieldsEmpty","doesFastenerHaveEmptyRequiredField","areAllFastenerFieldsValid","nonBridgeHeight","width","Math","round","decimalPlaces","centres","height","percentage","isBridgingPercentageInvalid","LayerModalWithDefaults","layerInstanceId","setLayerInstanceId","createRef","initializerArgs","args","resetBridgingDetails","resetFastenerDetails","resetAllDetails","resetCoreDetails","getSetters","focusOnShortCodeField","getElementsByTagName","focus","selectAllTextInShortCodeField","select","focusOnThicknessField","customReferenceLayerRequest","handleSubmitLayer","toLowerCase","onEntered","bridgePercentage","alphaCoefficient","correctionFactor","correctionFactorResult","airGapsCorrectionFactor","LayerModal","LayersTableRow","disableDrag","onLayerClick","isInsideSurface","isOutsideSurface","isDraggingThisRow","drag","ReactDnd","dragLayerInstanceId","collect","monitor","isDragging","isHovered","drop","accept","movedLayerInstanceId","targetLayerInstanceId","movedLayerIndex","movedLayer","splice","targetLayerIndex","INTERIM_MOVE_LAYER_IN_CALCULATION","MOVE_LAYER_IN_CALCULATION","isOver","dragDropContainer","dragDropContainerDragging","tableRowDropZone","tableRowDropZoneHovered","colSpan","tableRowContainer","tableRowContainerDragging","LayersTableMode","tableIcons","Add","forwardRef","AddBox","Check","Clear","Delete","DetailPanel","ChevronRight","Edit","Export","SaveAlt","Filter","FilterList","FirstPage","LastPage","NextPage","PreviousPage","ChevronLeft","ResetSearch","Search","SortArrow","ArrowDownward","ThirdStateCheck","Remove","ViewColumn","typesWithGroundAsOuterSurface","typesWithSoilInterface","renderLabel","text","tableHeaderText","tableHeaderUnit","renderValueWithMonth","descriptionColumn","thermalColumns","iconBridgedAndFastened","iconBridged","iconFastened","thermalBridgingColumnCell","condensationColumns","interfaceTemperature","dewpointTemperature","peakCondensationAmount","peakCondensationAmountMonth","peakCondensationAccumulationAmount","peakCondensationAccumulationAmountMonth","LayersTable","layersTableMode","insideSurfaceThermalResistance","associatedInterface","innerLayerInstanceId","worstMonthDewpointTemperature","worstMonthInterfaceTemperature","outsideSurfaceThermalResistance","hideLastInterface","CONDENSATION","icons","THERMAL","actionsColumnIndex","actions","icon","isArray","clonedLayer","DUPLICATE_LAYER_IN_CALCULATION","REMOVE_LAYER_FROM_CALCULATION","tableHeaderContainer","condensation","thermal","Row","utf8EncodeFile","reader","FileReader","onload","readAsText","file","MasterDataType","BusinessUnitDropdown","setBusinessUnitId","businessUnits","display","UploadStatus","MasterDataUploadModal","dataType","setDataType","LAYERS","primaryBusinessUnitId","setFile","uploadStatus","setUploadStatus","errors","setErrors","getRootProps","getInputProps","isDragActive","useDropzone","onDrop","acceptedFile","multiple","PENDING","masterDataType","csvFormData","uploadMasterData","SUCCESS","ERROR","responseData","errorMessages","disableBackdropClick","disableEscapeKeyDown","Alert","severity","alert","masterDataTypeContainer","Object","values","dropzoneContainer","dropzone","fileIcon","fileName","uploadButton","NewCalculationModal","canClose","isCreating","setIsCreating","join","createNewCalculation","startIcon","autoFocus","OpenCalculationModal","searchTerm","setSearchTerm","setError","isOpening","setIsOpening","isLoading","setIsLoading","previousCalcs","setPreviousCalcs","handleOpen","SET_ACTIVE_CALCULATION_DATA","newCalculationData","shouldUseExistingCalculationId","openCalculation","then","catch","Backdrop","loadingBackdrop","openButton","topMargin","Box","List","calculationList","ListItem","button","ListItemAvatar","Avatar","advisorId","applicationTypeName","calculationTitleIsSpecified","businessUnitName","formatDistanceToNow","utcDateString","utcDateStringNoTz","exec","utcDateStringToDate","lastUpdated","addSuffix","WelcomeModal","onCreateNewCalculationClick","onMasterDataUploadClick","onOpenCalculationClick","FolderOpen","Settings","exportPdf","brandId","shouldApplyWatermark","filename","showWatermark","uploadSuccess","isCurrentCalculation","LOCK_CALCULATION","lockCalculation","EXPORT_PDF","export","pdfFile","PreviewStatus","ExportStatus","PdfModal","previewStatus","setPreviewStatus","exportStatus","setExportStatus","selectedCalculations","setSelectedCalculations","previewErrors","setPreviewErrors","exportErrors","setExportErrors","setShouldApplyWatermark","userGroup","b","adGroups","setBrandId","countPreviewErrors","countExportErrors","download","uniq","handleExportPdf","all","exported","selectedCalculation","CLEAR_PENDING_PDF_DOWNLOADS","updateCalculationsList","isChecked","without","areNoCalculationsSelected","areSomeNotAllCalculationsSelected","areAllCalculationsSelected","areOnlyExportedCalculationsSelected","disableExport","renderExportStatusIcon","pdfExport","placement","href","rel","exportIconContainer","cloudDoneIcon","cloudIcon","checkboxListContainer","checkboxList","raisedCheckboxContainer","Checkbox","indeterminate","FormGroup","checkboxListLabel","checkboxListLabelEmphasis","inactiveCalculation","brandName","country","watermarkCheckboxContainer","previewUrl","URL","createObjectURL","revokeObjectURL","ProjectInfoModal","projectUsages","projectRegions","defaultState","newProject","displayId","supportingInfo","projectUsageValue","buildingHeight","regionValue","projectStageValue","projectAddressLine1","projectAddressLine2","projectCity","projectCountyStateValue","projectPostCode","existingProject","existingProjects","setExistingProjects","startDate","setStartDate","disableButtons","debouncedSearchTerm","updateField","fieldName","currentState","handleProjectNameChange","reduce","acc","isNewOption","isAlreadyASuggestion","p","utils","DateFnsUtils","border","borderRadius","borderColor","disableToolbar","margin","KeyboardButtonProps","disableUnderline","style","paddingLeft","ps","code","pcs","county","pu","projectType","pr","maxLength","email","ContactInfoModal","contactTypes","newContact","firstName","lastName","jobTitle","company","businessPhone","mobilePhone","salesContactTeamValue","companyPostCode","existingContact","setExistingContact","lookupContactType","ct","typeName","existingCoontacts","handleContactEmailChange","sct","areaCode","getCondensationMessage","CalculationScreen","currentBuildingRegionName","saveSuccess","currentCalculationBusinessUnit","isLayerModalOpen","setIsLayerModalOpen","layerModalLayerInstanceId","setLayerModalLayerInstanceId","layerModalMode","setLayerModalMode","isConstructionModalOpen","setIsConstructionModalOpen","isEnvConditionsModalOpen","setIsEnvConditionsModalOpen","setLayersTableMode","isWelcomeModalOpen","setIsWelcomeModalOpen","isNewCalculationModalOpen","setIsNewCalculationModalOpen","isOpenCalculationModalOpen","setIsOpenCalculationModalOpen","canDismissNewCalculationModal","setCanDismissNewCalculationModal","isPrintPdfModalOpen","setIsPrintPdfModalOpen","isMasterDataUploadModalOpen","setIsMasterDataUploadModalOpen","isProjectInfoModalOpen","setIsProjectInfoModalOpen","isContactInfoModalOpen","setIsContactInfoModalOpen","layerModalInitialTabIndex","setLayerModalInitialTabIndex","activeCalculationId","handleCreateNewCalculationModal","handleOpenCalculationModal","handleOpenMasterDataUploadModal","handleOpenLayerModal","handleNavigateCalculation","selectedItem","newActiveCalculation","CHANGE_ACTIVE_CALCULATION","calculationNavigationItems","sort","a","handleCloseCalculation","newInactiveCalculations","indexOfCalculationToRemove","CLOSE_ACTIVE_CALCULATION","handleCopyCalculation","buttonLinkLabel","buttonLink","prevLayersTableMode","AddCircle","DndProvider","backend","Backend","navigationBarContainer","navigationBar","navigationBarDisabled","forceWelcome","initialState","reducers","combineReducers","action","newState","calc","existingIndex","r","middleware","thunk","store","createStore","composeWithDevTools","applyMiddleware","themeOptions","breakpoints","keys","parseInt","themeStyles","sm","md","lg","xl","mixins","minHeight","palette","common","black","white","primary","main","colorSecondaryGreyDarkest","light","dark","contrastText","secondary","colorHighlightGold","colorError","grey","A100","A200","A400","A700","contrastThreshold","tonalOffset","colorTextBase","hint","divider","background","paper","default","colorSecondaryGreyLightest","active","hover","hoverOpacity","selected","disabledBackground","shadows","typography","htmlFontSize","fontSizeBase","fontFamily","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","h1","fontWeight","fontSizeH1","lineHeight","letterSpacing","headerLetterSpacing","h2","fontSizeH2","h3","fontSizeH3","h4","fontSizeH4","h5","fontSizeH5","h6","fontSizeH6","subtitle1","subtitle2","fontSizeSmall","body1","body2","textTransform","caption","overline","shape","transitions","easing","easeInOut","easeOut","easeIn","sharp","duration","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","zIndex","mobileStepper","speedDial","appBar","drawer","modal","snackbar","tooltip","theme","createMuiTheme","App","anchorOrigin","vertical","horizontal","maxSnack","containerRoot","snackbarRoot","anchorOriginBottomCenter","provider","reduxStore","forceLogin","authenticationState","ThemeProvider","CssBaseline","AuthenticationState","InProgress","Unauthenticated","Authenticated","path","to","configData","fetch","json","ReactDOM","document","getElementById"],"mappings":"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","file":"static/js/main.2a0c03a6.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\":\"CalculationNavigation_page___LU9J\",\"content\":\"CalculationNavigation_content__3JS62\",\"container\":\"CalculationNavigation_container__1Dkcs\",\"tabContent\":\"CalculationNavigation_tabContent__3N89F\",\"tabContentSelected\":\"CalculationNavigation_tabContentSelected__3fWRe\",\"tabCloseButtonContainer\":\"CalculationNavigation_tabCloseButtonContainer__2mg1d\",\"tabCopyButtonContainer\":\"CalculationNavigation_tabCopyButtonContainer__2y-hG\",\"tabCopyButton\":\"CalculationNavigation_tabCopyButton__UPGZ9\",\"tabCloseButton\":\"CalculationNavigation_tabCloseButton__3orfh\",\"clipboardIcon\":\"CalculationNavigation_clipboardIcon__1hFcs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"tableContainer\":\"EnvConditionsTab_tableContainer__1IH38\",\"table\":\"EnvConditionsTab_table__3ROxS\",\"tableHeaderContainer\":\"EnvConditionsTab_tableHeaderContainer__2Rv33\",\"tableHeaderUnit\":\"EnvConditionsTab_tableHeaderUnit__NNi8P\",\"tableCellContainer\":\"EnvConditionsTab_tableCellContainer__1ZqyQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalHeader\":\"EnvConditionsEditorModal_modalHeader__1P30h\",\"modalContent\":\"EnvConditionsEditorModal_modalContent__1kbWQ\",\"modalActions\":\"EnvConditionsEditorModal_modalActions__1oCiT\",\"customLayerDetailsWrapper\":\"EnvConditionsEditorModal_customLayerDetailsWrapper__3ZdQm\",\"customLayerField\":\"EnvConditionsEditorModal_customLayerField__2tulG\",\"customLayerDetails\":\"EnvConditionsEditorModal_customLayerDetails__8Pw-9\",\"tabContent\":\"EnvConditionsEditorModal_tabContent__1keGd\",\"customLayerFieldinputUnit\":\"EnvConditionsEditorModal_customLayerFieldinputUnit__3El_h\",\"layerResult\":\"EnvConditionsEditorModal_layerResult__2ywQG\",\"layerResultTitle\":\"EnvConditionsEditorModal_layerResultTitle__2LcXP\",\"layerResultValue\":\"EnvConditionsEditorModal_layerResultValue__2k8dO\",\"layerResultUnit\":\"EnvConditionsEditorModal_layerResultUnit__11LD1\",\"tabs\":\"EnvConditionsEditorModal_tabs__GXUA1\",\"tab\":\"EnvConditionsEditorModal_tab__2NM8b\",\"tabbedContentContainer\":\"EnvConditionsEditorModal_tabbedContentContainer__1lacm\",\"inputUnit\":\"EnvConditionsEditorModal_inputUnit__1_lLb\",\"inputHint\":\"EnvConditionsEditorModal_inputHint__YxJBU\",\"tabContentResults\":\"EnvConditionsEditorModal_tabContentResults__26xM3\",\"tabContentResult\":\"EnvConditionsEditorModal_tabContentResult__3jg_B\",\"tabContentResultValueUnitContainer\":\"EnvConditionsEditorModal_tabContentResultValueUnitContainer__1kKBI\",\"tabContentResultValueUnitContainerLeft\":\"EnvConditionsEditorModal_tabContentResultValueUnitContainerLeft__26NRX\",\"tabContentResultValue\":\"EnvConditionsEditorModal_tabContentResultValue__SBP1q\",\"tabContentResultValueLink\":\"EnvConditionsEditorModal_tabContentResultValueLink__1SQH9\",\"tabContentResultUnit\":\"EnvConditionsEditorModal_tabContentResultUnit__VP_gI\",\"multiButtonContainer\":\"EnvConditionsEditorModal_multiButtonContainer__-WoEZ\",\"multiButtonSelected\":\"EnvConditionsEditorModal_multiButtonSelected__3uwlX\",\"relative\":\"EnvConditionsEditorModal_relative__13jbm\",\"standaloneUnit\":\"EnvConditionsEditorModal_standaloneUnit__2sp8y\",\"verticalDivider\":\"EnvConditionsEditorModal_verticalDivider__SUnJh\",\"layerNotesTabLabelIcon\":\"EnvConditionsEditorModal_layerNotesTabLabelIcon__Zfuwc\",\"envConditions\":\"EnvConditionsEditorModal_envConditions__2nDvF\",\"envConditionEditBox\":\"EnvConditionsEditorModal_envConditionEditBox__3BU7-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalContent\":\"OpenCalculationModal_modalContent__3Vaaf\",\"openButton\":\"OpenCalculationModal_openButton__JTRvk\",\"loadingBackdrop\":\"OpenCalculationModal_loadingBackdrop__1oNJe\",\"calculationList\":\"OpenCalculationModal_calculationList__14QF9\",\"topMargin\":\"OpenCalculationModal_topMargin__2LLp-\",\"alert\":\"OpenCalculationModal_alert__1Nb8d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalContent\":\"ProjectInfoModal_modalContent__dw6Yd\",\"multiButtonContainer\":\"ProjectInfoModal_multiButtonContainer__1PlHG\",\"multiButtonSelected\":\"ProjectInfoModal_multiButtonSelected__d1YGV\",\"alert\":\"ProjectInfoModal_alert__30vQK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\"};","module.exports = __webpack_public_path__ + \"static/media/kingspan-logo.0880b6c7.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"formLabelUpsize\":\"ConstructionModal_formLabelUpsize__266TE\",\"notesTabLabelIcon\":\"ConstructionModal_notesTabLabelIcon__2KTnR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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__1v0yI\",\"logo\":\"Header_logo__3T0lc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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__3uP2v\",\"content\":\"Layout_content__3nMgS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"snackbarRoot\":\"App_snackbarRoot__LFDlI\",\"snackbar\":\"App_snackbar__1CQR9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\":\"CalculationResults_page__1wY9q\",\"content\":\"CalculationResults_content__3LzHy\",\"header\":\"CalculationResults_header__1bhRe\",\"logo\":\"CalculationResults_logo__3ues7\",\"resultsContainer\":\"CalculationResults_resultsContainer__37wsA\",\"results\":\"CalculationResults_results__1hOAb\",\"result\":\"CalculationResults_result__1D_ST\",\"businessUnitPanel\":\"CalculationResults_businessUnitPanel__19xX9\",\"resultTotalThermalResistance\":\"CalculationResults_resultTotalThermalResistance__2Qyxc\",\"resultCondensation\":\"CalculationResults_resultCondensation__rKLJR\",\"resultValue\":\"CalculationResults_resultValue__1Bzfc\",\"hasCondensation\":\"CalculationResults_hasCondensation__316t1\",\"resultTitle\":\"CalculationResults_resultTitle__KIzvu\",\"resultValueText\":\"CalculationResults_resultValueText__VZYL_\",\"resultValueSub\":\"CalculationResults_resultValueSub__2nBl_\",\"resultUnit\":\"CalculationResults_resultUnit__3eXaJ\",\"resultValueTotalCorrectionInfo\":\"CalculationResults_resultValueTotalCorrectionInfo__2fwJ_\",\"resultValueCalculationLocked\":\"CalculationResults_resultValueCalculationLocked__DYxCD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"fullHeight\":\"VerticalAlign_fullHeight__1W_aF\"};","module.exports = __webpack_public_path__ + \"static/media/bridged.85efb7a5.svg\";","module.exports = __webpack_public_path__ + \"static/media/fastened.06b4f60f.svg\";","module.exports = __webpack_public_path__ + \"static/media/bridged-and-fastened.7669900f.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalContent\":\"NewCalculationModal_modalContent__2ey5W\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalContent\":\"WelcomeModal_modalContent__254Mk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalContent\":\"ContactInfoModal_modalContent__167w7\",\"alert\":\"ContactInfoModal_alert__1xsKM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"tableContainer\":\"LayersTable_tableContainer__UF1H0\",\"hideLastInterface\":\"LayersTable_hideLastInterface__evXn8\",\"dragDropContainer\":\"LayersTable_dragDropContainer__2BGjr\",\"tableCellContainer\":\"LayersTable_tableCellContainer__2q9r3\",\"condensation\":\"LayersTable_condensation__rkjNU\",\"table\":\"LayersTable_table__1GqTw\",\"tableHeaderContainer\":\"LayersTable_tableHeaderContainer__2uSWa\",\"thermal\":\"LayersTable_thermal__j4NXo\",\"tableHeaderUnit\":\"LayersTable_tableHeaderUnit__3hAcJ\",\"dragDropContainerDragging\":\"LayersTable_dragDropContainerDragging__FIjSP\",\"tableRowDropZone\":\"LayersTable_tableRowDropZone__2CMeX\",\"tableRowDropZoneHovered\":\"LayersTable_tableRowDropZoneHovered__2fg_J\",\"tableRowContainer\":\"LayersTable_tableRowContainer__1dqtR\",\"tableRowContainerDragging\":\"LayersTable_tableRowContainerDragging__wrqKb\",\"iconBridged\":\"LayersTable_iconBridged__33_mI\",\"iconFastened\":\"LayersTable_iconFastened__QCcHm\",\"iconBridgedAndFastened\":\"LayersTable_iconBridgedAndFastened__hEiHS\",\"thermalBridgingColumnCell\":\"LayersTable_thermalBridgingColumnCell__1qayt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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 React from 'react';\n\nimport styles from './Header.module.scss';\nimport logo from '../../assets/images/kingspan-logo.svg';\n\nexport function Header() {\n return (\n
\n \"Logo\"\n
\n );\n}\n","import { createSelector } from 'reselect';\nimport { ApiState } from '../types/store/apiTypes';\nimport { RootState } from './store';\nimport { Calculation, EnvCondition, EnvSettings, InterstitialInterface } from '../types/store/calculationTypes';\nimport { InactiveCalculationsState } from '../types/store/inactiveCalculationsTypes';\nimport {\n MasterDataApplicationType,\n MasterDataBuildingRegion,\n MasterDataBuildingType,\n MasterDataRiskLevel,\n MasterDataSoilType,\n MasterDataLayer,\n MasterRainscreenCladdingDefaults,\n MasterDataDrainageFx,\n MasterDataPrecipitationByPostCodeArea,\n MasterDataBuildingUsage,\n MasterDataProjectRegion,\n MasterDataBranding,\n MasterDataRoofCharacteristics,\n MasterData,\n MasterDataCalculationTitle,\n MasterDataProductSector,\n MasterDataSalesContactTeam,\n MasterDataProjectCountyState,\n MasterDataProjectStage,\n} from '../types/store/masterDataTypes';\nimport { UserProfileState } from '../types/store/userProfileTypes';\nimport { ApiResponseExportPdf } from '../types/store/pdfTypes';\n\nexport function interimOrCurrentCalculationSelector(state: RootState): Calculation | null {\n return state.calculation.interimCalculation ?? state.calculation.currentCalculation;\n}\n\nexport function currentCalculationBusinessUnitIdSelector(state: RootState): number | null {\n return state.calculation?.currentCalculation?.businessUnitId ?? null;\n}\n\nexport function inactiveCalculationsByBusinessUnitSelector(state: RootState): InactiveCalculationsState {\n const currentBusinessUnitId = currentCalculationBusinessUnitIdSelector(state);\n return state.inactiveCalculations.filter(ic => ic.businessUnitId === currentBusinessUnitId);\n}\n\nexport function inactiveCalculationsSelector(state: RootState): InactiveCalculationsState {\n return state.inactiveCalculations;\n}\n\nexport function masterDataSelector(state: RootState): MasterData {\n return state.masterData;\n}\n\nexport function isLoadingMasterDataSelector(state: RootState): boolean {\n return state.masterData.isLoadingMasterData === true;\n}\n\nexport function floorMasterLayerSelector(state: RootState): MasterDataLayer[] {\n return state.masterData.floorLayers;\n}\n\nexport function applicationTypeSelector(state: RootState): MasterDataApplicationType[] {\n return state.masterData.applications;\n}\n\nexport function soilTypeSelector(state: RootState): MasterDataSoilType[] {\n return state.masterData.soilTypes;\n}\n\nexport function buildingRegionSelector(state: RootState): MasterDataBuildingRegion[] {\n return state.masterData.buildingRegions;\n}\n\nexport function buildingTypeSelector(state: RootState): MasterDataBuildingType[] {\n return state.masterData.buildingTypes;\n}\n\nexport function riskLevelSelector(state: RootState): MasterDataRiskLevel[] {\n return state.masterData.riskLevels;\n}\n\nexport function rainscreenCladdingDefaultsSelector(state: RootState): MasterRainscreenCladdingDefaults | undefined {\n return state.masterData.rainscreenCladdingDefaults;\n}\n\nexport function drainageFxSelector(state: RootState): MasterDataDrainageFx[] {\n return state.masterData.drainageFx;\n}\n\nexport function precipitationByPostCodeAreaSelector(state: RootState): MasterDataPrecipitationByPostCodeArea[] {\n return state.masterData.precipitationByPostCodeArea;\n}\n\nexport function buildingUsagesSelector(state: RootState): MasterDataBuildingUsage[] {\n return state.masterData.buildingUsage;\n}\n\nexport function projectRegionsSelector(state: RootState): MasterDataProjectRegion[] {\n return state.masterData.projectRegion;\n}\n\nexport function roofCharacteristicsOptionsSelector(state: RootState): MasterDataRoofCharacteristics[] {\n return state.masterData.roofCharacteristicsOptions;\n}\n\nexport function envConditionsSelector(state: RootState): EnvCondition[] | undefined {\n return state.calculation.interimCalculation?.envConditions ?? state.calculation.currentCalculation?.envConditions;\n}\n\nexport function envSettingsSelector(state: RootState): EnvSettings | undefined {\n return state.calculation.interimCalculation?.envSettings ?? state.calculation.currentCalculation?.envSettings;\n}\n\nexport function interstitialInterfaceSelector(state: RootState): InterstitialInterface[] {\n return state.calculation.interimCalculation?.interstitialInterfaces ?? state.calculation.currentCalculation?.interstitialInterfaces ?? [];\n}\n\nexport function masterDataBradingSelector(state: RootState): MasterDataBranding[] {\n return state.masterData.branding;\n}\n\nexport function pdfExportsSelector(state: RootState): ApiResponseExportPdf[] {\n return state.pdf.exports;\n}\n\nexport function pdfPendingDownloadsSelector(state: RootState): ApiResponseExportPdf[] {\n return state.pdf.pendingDownloads;\n}\n\nexport function apiSelector(state: RootState): ApiState {\n return state.api;\n}\n\nexport function productSectorSelector(state: RootState): MasterDataProductSector[] {\n return state.masterData.productSectors;\n}\n\nexport function salesContactTeamSelector(state: RootState): MasterDataSalesContactTeam[] {\n return state.masterData.salesContactTeams;\n}\n\nexport function projectCountyStateSelector(state: RootState): MasterDataProjectCountyState[] {\n return state.masterData.projectCountyStates;\n}\n\nexport function projectStageSelector(state: RootState): MasterDataProjectStage[] {\n return state.masterData.projectStages;\n}\n\nexport function calculationTitleSelector(state: RootState): MasterDataCalculationTitle[] {\n return state.masterData.calculationTitles\n}\n\nexport function currentBuildingRegionNameSelector(state: RootState): string | undefined {\n var envSettings = envSettingsSelector(state);\n if (\n !envSettings ||\n !envSettings.buildingRegionId ||\n !envSettings.buildingTypeId ||\n !envSettings.internalTemperature ||\n !envSettings.riskLevelId\n ) {\n return undefined;\n }\n\n return state.masterData.buildingRegions.filter(br => br.id === envSettingsSelector(state)?.buildingRegionId)[0]?.name;\n}\n\nexport function saveSuccessSelector(state: RootState): boolean | null {\n return state.calculation.savedSuccessfully;\n}\n\nexport function userProfileSelector(state: RootState): UserProfileState {\n return state.userProfile;\n}\n\nexport const currentCalculationBusinessUnitSelector = createSelector(\n [userProfileSelector, currentCalculationBusinessUnitIdSelector],\n (userProfile, currentCalculationBusinessUnitId) => {\n return (userProfile?.useableBusinessUnits ?? []).find(bu => bu.businessUnitId === currentCalculationBusinessUnitId) ?? null;\n });\n","import React, { ReactNode } from 'react';\nimport { Grid } from '@material-ui/core';\nimport { GridJustification } from '@material-ui/core/Grid/Grid';\n\nimport styles from './VerticalAlign.module.scss';\n\ntype Props = {\n children: ReactNode;\n align: 'top' | 'center' | 'bottom';\n};\n\nexport function VerticalAlign({ align, children }: Props) {\n let justifications: { [alignment: string]: GridJustification } = {\n top: 'flex-start',\n center: 'center',\n bottom: 'flex-end',\n };\n\n return (\n \n {children}\n \n );\n}\n","import React, { ReactNode } from 'react';\nimport { Button, CircularProgress, Typography } from '@material-ui/core';\n\nimport styles from './LandingPage.module.scss';\nimport logo from '../../assets/images/kingspan-logo.svg';\nimport { VerticalAlign } from '../Utilities/VerticalAlign/VerticalAlign';\n\ntype Props = {\n qaIdBase: string;\n title: ReactNode;\n shouldShowLoadingIcon?: boolean;\n content?: string;\n buttonText?: string;\n onButtonClick?: () => void;\n};\n\nexport const LandingPage = ({ qaIdBase, shouldShowLoadingIcon, title, content, buttonText, onButtonClick }: Props) => {\n return (\n
\n
\n \n
\n \"Logo\"\n
\n\n
\n \n {shouldShowLoadingIcon && (\n
\n \n
\n )}\n\n {title}\n
\n
\n\n
\n
\n {content}\n
\n
\n\n {buttonText && onButtonClick && (\n
\n \n
\n )}\n
\n
\n
\n );\n};\n","import React from 'react';\n\nimport { LandingPage } from '../../LandingPage/LandingPage';\n\nexport const UnauthenticatedLandingPage = () => (\n window.location.reload()}\n qaIdBase=\"landingPageAuthFailed\"\n />\n);\n","import React from 'react';\n\nimport { LandingPage } from '../../LandingPage/LandingPage';\n\nexport const AccessDeniedLandingPage = () => (\n \n);\n","import React from 'react';\n\nimport { LandingPage } from '../../LandingPage/LandingPage';\n\nexport const AuthorisingLandingPage = () => ;\n","export enum actionTypes {\n // API action types\n API_CALL_SUCCESSFUL = 'API_CALL_SUCCESSFUL',\n SET_UNAUTHENTICATED = 'SET_UNAUTHENTICATED',\n SET_UNAUTHORISED = 'SET_UNAUTHORISED',\n // MasterData action types\n FETCH_MASTER_DATA = 'FETCH_MASTER_DATA',\n SET_IS_LOADING_MASTER_DATA = 'SET_IS_LOADING_MASTER_DATA',\n // MasterDataUpload action types\n UPLOAD_MASTER_DATA = 'UPLOAD_MASTER_DATA',\n // Calculation action types\n REGISTER_CALCULATION = 'REGISTER_CALCULATION',\n CLOSE_ACTIVE_CALCULATION = 'CLOSE_ACTIVE_CALCULATION',\n ADD_LAYER_TO_CALCULATION = 'ADD_LAYER_TO_CALCULATION',\n EDIT_LAYER_IN_CALCULATION = 'EDIT_LAYER_IN_CALCULATION',\n INTERIM_MOVE_LAYER_IN_CALCULATION = 'INTERIM_MOVE_LAYER_IN_CALCULATION',\n MOVE_LAYER_IN_CALCULATION = 'MOVE_LAYER_IN_CALCULATION',\n DUPLICATE_LAYER_IN_CALCULATION = 'DUPLICATE_LAYER_IN_CALCULATION',\n REMOVE_LAYER_FROM_CALCULATION = 'REMOVE_LAYER_FROM_CALCULATION',\n LOCK_CALCULATION = 'LOCK_CALCULATION',\n ADD_CONSTRUCTION_DETAILS_TO_CALCULATION = 'ADD_CONSTRUCTION_DETAILS_TO_CALCULATION',\n CHANGE_ACTIVE_CALCULATION = 'CHANGE_ACTIVE_CALCULATION',\n MAKE_ALL_CALCULATIONS_INACTIVE = 'MAKE_ALL_CALCULATIONS_INACTIVE',\n SET_ACTIVE_CALCULATION_DATA = 'SET_ACTIVE_CALCULATION_DATA',\n CLEAR_CALCULATION_SAVE_SUCCESS = 'CLEAR_CALCULATION_SAVE_SUCCESS',\n SET_CALCULATION_SAVE_SUCCESS = 'SET_CALCULATION_SAVE_SUCCESS',\n UPDATE_CALCULATION_PROJECT = 'UPDATE_CALCULATION_PROJECT',\n UPDATE_INACTIVE_CALCULATIONS_PROJECT = 'UPDATE_INACTIVE_CALCULATIONS_PROJECT',\n UPDATE_CALCULATION_CONTACT = 'UPDATE_CALCULATION_CONTACT',\n UPDATE_INACTIVE_CALCULATIONS_CONTACT = 'UPDATE_INACTIVE_CALCULATIONS_CONTACT',\n // Interim calculation action types\n ADD_LAYER_TO_INTERIM_CALCULATION = 'ADD_LAYER_TO_INTERIM_CALCULATION',\n EDIT_LAYER_IN_INTERIM_CALCULATION = 'EDIT_LAYER_IN_INTERIM_CALCULATION',\n CLEAR_INTERIM_CALCULATION = 'CLEAR_INTERIM_CALCULATION',\n // Condensation action types\n EDIT_ENV_SETTINGS = 'EDIT_ENV_SETTINGS',\n EDIT_ENV_CONDITIONS = 'EDIT_ENV_CONDITIONS',\n SAVE_ENV_CONDITIONS = 'SAVE_ENV_CONDITIONS',\n //PDF action types\n EXPORT_PDF = 'EXPORT_PDF',\n CLEAR_PENDING_PDF_DOWNLOADS = 'CLEAR_PENDING_PDF_DOWNLOADS',\n // User Profile types\n FETCH_USER_PROFILE = 'FETCH_USER_PROFILE',\n}\n","import { actionTypes } from '../../actions/actionTypes';\n\nexport enum AirGapsCorrectionLevel {\n Level0 = 'Level0',\n Level1 = 'Level1',\n Level2 = 'Level2',\n}\n\nexport type ApiMasterData = {\n businessUnitId: number;\n layers: ApiMasterDataLayer[];\n bridgeMaterials: ApiMasterDataBridgeMaterial[];\n mechanicalFasteners: ApiMasterDataMechanicalFasteners[];\n airGapsCorrectionRecords: ApiAirGapsCorrectionLevels;\n soilTypes: ApiMasterDataSoilType[];\n applications: ApiMasterDataApplicationType[];\n buildingRegions: ApiMasterDataBuildingRegion[];\n buildingTypes: ApiMasterDataBuildingType[];\n riskLevels: ApiMasterDataRiskLevel[];\n rainscreenCladdingDefaults: ApiRainscreenCladdingDefaults;\n drainageFx: ApiMasterDataDrainageFx[];\n precipitationByPostCodeArea: ApiMasterDataPrecipitationByPostCodeArea[];\n buildingUsage: ApiMasterDataBuildingUsage[];\n projectRegion: ApiMasterDataProjectRegion[];\n brands: MasterDataBranding[];\n roofCharacteristicsOptions: ApiMasterDataRoofCharacteristics[];\n salesContactTeams: ApiMasterDataSalesContactTeam[];\n projectCountyStates: ApiMasterDataProjectCountyState[];\n projectStages: ApiMasterDataProjectStage[];\n productSectors: ApiMasterDataProductSector[];\n calculationTitles: ApiMasterDataCalculationTitle[];\n};\n\nexport type MasterData = {\n businessUnitId: number;\n layers: MasterDataLayer[];\n floorLayers: MasterDataLayer[];\n bridgeMaterials: MasterDataBridgeMaterial[];\n mechanicalFasteners: MasterDataMechanicalFasteners[];\n airGapsCorrectionLevels: MasterDataAirGapsCorrectionLevels;\n applications: MasterDataApplicationType[];\n buildingRegions: MasterDataBuildingRegion[];\n buildingTypes: MasterDataBuildingType[];\n riskLevels: MasterDataRiskLevel[];\n soilTypes: MasterDataSoilType[];\n rainscreenCladdingDefaults: MasterRainscreenCladdingDefaults;\n drainageFx: MasterDataDrainageFx[];\n precipitationByPostCodeArea: MasterDataPrecipitationByPostCodeArea[];\n buildingUsage: MasterDataBuildingUsage[];\n projectRegion: MasterDataProjectRegion[];\n branding: MasterDataBranding[];\n roofCharacteristicsOptions: MasterDataRoofCharacteristics[];\n salesContactTeams: MasterDataSalesContactTeam[];\n projectCountyStates: MasterDataProjectCountyState[];\n projectStages: MasterDataProjectStage[];\n productSectors: MasterDataProductSector[];\n calculationTitles: MasterDataCalculationTitle[];\n};\n\nexport const getEmptyMasterData = (): MasterData => ({\n businessUnitId: -1,\n layers: [],\n floorLayers: [],\n bridgeMaterials: [],\n applications: [],\n mechanicalFasteners: [],\n airGapsCorrectionLevels: {\n level0: {\n level: AirGapsCorrectionLevel.Level0,\n value: '',\n },\n level1: {\n level: AirGapsCorrectionLevel.Level1,\n value: '',\n },\n level2: {\n level: AirGapsCorrectionLevel.Level2,\n value: '',\n },\n },\n buildingRegions: [],\n buildingTypes: [],\n riskLevels: [],\n soilTypes: [],\n rainscreenCladdingDefaults: {\n bracketsPerMetreSquared: '',\n chiValue: '',\n },\n drainageFx: [],\n precipitationByPostCodeArea: [],\n buildingUsage: [],\n projectRegion: [],\n branding: [],\n roofCharacteristicsOptions: [],\n salesContactTeams: [],\n projectCountyStates: [],\n projectStages: [],\n productSectors: [],\n calculationTitles: [],\n});\n\nexport type ApiMasterDataLayer = {\n id: number;\n isActive: boolean;\n name: string;\n shortCode: string;\n thicknessMillimetres: string;\n thermalConductivity: string;\n insideEmissivity: string;\n outsideEmissivity: string;\n layerMaterialType: string;\n isCustom: false;\n vapourResistance?: string | null;\n vapourResistivity?: string | null;\n isFloorInsulation: boolean;\n vr1: string | null;\n vr2: string | null;\n vr3: string | null;\n vr4: string | null;\n vrBreak1: string | null;\n vrBreak2: string | null;\n vrBreak3: string | null;\n bridgeMaterial: ApiMasterDataBridgeMaterial | null;\n};\n\nexport type MasterDataLayer = {\n id: number;\n isActive: boolean;\n name: string;\n shortCode: string;\n defaultThickness: string;\n thermalConductivity: string;\n insideEmissivity: string;\n outsideEmissivity: string;\n layerMaterialType: string;\n isCustom: false;\n vapourResistance?: string | null;\n vapourResistivity?: string | null;\n isFloorInsulation: boolean;\n vr1: string | null;\n vr2: string | null;\n vr3: string | null;\n vr4: string | null;\n vrBreak1: string | null;\n vrBreak2: string | null;\n vrBreak3: string | null;\n bridgeMaterial: MasterDataBridgeMaterial | null;\n};\n\nexport type ApiMasterDataBridgeMaterial = {\n id: number;\n name: string;\n bridgeDescription: string;\n bridgeWidthMillimetres: string;\n bridgeThermalConductivity: string;\n centresDistanceMillimetres: string;\n nonBridgeHeightMillimetres: string | null;\n};\n\nexport type MasterDataBridgeMaterial = {\n id: number;\n name: string;\n bridgeDescription: string;\n bridgeThermalConductivity: string;\n defaultBridgeWidth: string;\n defaultCentresDistance: string;\n defaultNonBridgeHeight: string | null;\n};\n\nexport type ApiMasterDataMechanicalFasteners = {\n id: number;\n name: string;\n alphaCoefficient: string;\n thermalConductivity: string;\n crossSectionalAreaMillimetresSquared: string;\n fastenersPerMetreSquared: string;\n};\n\nexport type MasterDataMechanicalFasteners = {\n id: number;\n name: string;\n defaultCrossArea: string;\n defaultNumber: string;\n};\n\nexport type ApiAirGapsCorrectionLevels = {\n level0: {\n level: AirGapsCorrectionLevel.Level0;\n value: string;\n };\n level1: {\n level: AirGapsCorrectionLevel.Level1;\n value: string;\n };\n level2: {\n level: AirGapsCorrectionLevel.Level2;\n value: string;\n };\n};\n\nexport type MasterDataAirGapsCorrectionLevel = {\n level: AirGapsCorrectionLevel;\n value: string;\n};\n\nexport type MasterDataAirGapsCorrectionLevels = {\n level0: MasterDataAirGapsCorrectionLevel;\n level1: MasterDataAirGapsCorrectionLevel;\n level2: MasterDataAirGapsCorrectionLevel;\n};\n\nexport type ApiMasterDataApplicationType = {\n id: number;\n type: string;\n name: string;\n};\n\nexport type MasterDataApplicationType = ApiMasterDataApplicationType;\n\nexport type ApiMasterDataSoilType = {\n id: number;\n description: string;\n lambda: string;\n vapourResistivity: string;\n};\n\nexport type MasterDataSoilType = ApiMasterDataSoilType;\n\nexport type MasterDataBuildingRegion = {\n id: number;\n name: string;\n};\n\nexport type ApiMasterDataBuildingRegion = {\n id: number;\n name: string;\n};\n\nexport type MasterDataBuildingType = {\n id: number;\n name: string;\n};\n\nexport type ApiMasterDataBuildingType = {\n id: number;\n name: string;\n};\n\nexport type ApiMasterDataRiskLevel = {\n id: number;\n name: string;\n};\n\nexport type ApiMasterDataBuildingUsage = MasterDataBuildingUsage;\n\nexport type ApiMasterDataProjectRegion = MasterDataProjectRegion;\n\nexport type MasterDataRiskLevel = {\n id: number;\n name: string;\n};\n\nexport type MasterDataDrainageFx = {\n id: number;\n covering: string;\n fxFactor: string;\n};\n\nexport type MasterDataPrecipitationByPostCodeArea = {\n id: number;\n postCodeArea: string;\n rainfallMillimetres: string;\n};\n\nexport type MasterDataBuildingUsage = {\n id: number;\n name: string;\n};\n\nexport type MasterDataProjectRegion = {\n id: number;\n name: string;\n country: string;\n isActive: boolean;\n};\n\nexport type ApiMasterDataDrainageFx = {\n id: number;\n covering: string;\n fxFactor: string;\n};\n\nexport type ApiMasterDataPrecipitationByPostCodeArea = {\n id: number;\n postCodeArea: string;\n rainfallMillimetres: string;\n};\n\nexport type MasterDataBranding = {\n id: number;\n brandName: string;\n country: string;\n adGroups: number;\n};\n\nexport type ApiRainscreenCladdingDefaults = {\n bracketsPerMetreSquared: string;\n chiValue: string;\n};\n\nexport type MasterRainscreenCladdingDefaults = ApiRainscreenCladdingDefaults;\n\nexport type ApiMasterDataRoofCharacteristics = {\n id: number;\n description: string;\n roofSpaceThermalResistance: string;\n};\n\nexport type MasterDataRoofCharacteristics = ApiMasterDataRoofCharacteristics;\n\nexport type MasterDataState = MasterData & {\n isLoadingMasterData?: boolean;\n};\n\nexport type FetchMasterDataAction = {\n type: actionTypes.FETCH_MASTER_DATA;\n payload: {\n masterData: MasterData;\n };\n};\n\nexport type SetIsFetchingMasterDataAction = {\n type: actionTypes.SET_IS_LOADING_MASTER_DATA;\n payload: {\n isLoadingMasterData: boolean;\n };\n};\n\nexport type MasterDataAction = FetchMasterDataAction | SetIsFetchingMasterDataAction;\n\nexport type ApiMasterDataCalculationTitle = {\n id: number;\n businessUnitId: number;\n title: string;\n}\n\nexport type MasterDataCalculationTitle = ApiMasterDataCalculationTitle;\nexport type ApiMasterDataProductSector = {\n id: number;\n businessUnitId: number;\n sector: string;\n}\n\nexport type MasterDataProductSector = ApiMasterDataProductSector;\nexport type ApiMasterDataSalesContactTeam = {\n id: number;\n businessUnitId: number;\n areaCode: string;\n}\n\nexport type MasterDataSalesContactTeam = ApiMasterDataSalesContactTeam;\n\nexport type ApiMasterDataProjectCountyState = {\n id: number,\n businessUnitId: number;\n county: string;\n}\n\nexport type MasterDataProjectCountyState = ApiMasterDataProjectCountyState;\n\nexport type ApiMasterDataProjectStage = {\n id: number;\n businessUnitId: number;\n code: string;\n}\n\nexport type MasterDataProjectStage = ApiMasterDataProjectStage;\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.\n */\nimport { LoginType, MsalAuthProvider } from 'react-aad-msal';\n\n// These can be hard-coded as they are neither sensitive nor environment-specific.\nexport const authConfig = {\n authority: 'https://login.microsoftonline.com/9fc58307-b8c4-416e-bc27-eab7ad86b306/',\n clientId: '66245245-1195-40fa-905d-14c26834e97b',\n apiScope: 'api://b27ea26b-3888-4cd3-bbfa-4638b2dc0bac/access_user_data',\n};\n\nexport const authProvider = new MsalAuthProvider(\n {\n auth: {\n authority: authConfig.authority,\n clientId: authConfig.clientId,\n postLogoutRedirectUri: window.location.origin,\n redirectUri: window.location.origin,\n validateAuthority: true,\n navigateToLoginRequestUrl: false,\n },\n cache: {\n cacheLocation: 'localStorage',\n storeAuthStateInCookie: false,\n },\n },\n {\n scopes: ['openid'],\n },\n {\n loginType: LoginType.Redirect,\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);\n","import { AppConfig } from '../types/config/configTypes';\n\nlet appConfig: AppConfig = {\n apiUrl: '',\n};\n\nexport function setAppConfig(newAppConfig: AppConfig) {\n appConfig = newAppConfig;\n}\n\nexport function getAppConfig() {\n return appConfig;\n}\n","import { AxiosError, AxiosResponse } from 'axios';\nimport { actionTypes } from '../../actions/actionTypes';\n\nexport type ApiClientError = {\n errorCode: string;\n message: string;\n args?: { [key: string]: string };\n};\n\nexport type ApiServerError = {\n errorMessage: string;\n path: string | null;\n method: string | null;\n requestId: string | null;\n exception: string; // Will always equal \"[REACTED]\" in non-Dev/Test environments\n};\n\nexport function isApiClientError(e: unknown): e is AxiosError & { response: AxiosResponse } {\n const responseData = (e as AxiosError)?.response?.data;\n const candidate: ApiClientError | null | undefined = responseData;\n return candidate !== null && candidate !== undefined &&\n typeof candidate === 'object' &&\n typeof candidate.message === 'string' &&\n typeof candidate.errorCode === 'string';\n}\n\nfunction getGenericErrorMessage(e: unknown) {\n const statusCode = (e as AxiosError)?.response?.status;\n return statusCode ? `Unknown error (status code ${statusCode})` : 'Unknown error';\n}\n\nexport function getApiClientErrorMessage(e: unknown): string {\n return isApiClientError(e) ? e.response.data.message : getGenericErrorMessage(e);\n}\n\nexport function isApiServerError(e: unknown): e is AxiosError & { response: AxiosResponse } {\n const responseData = (e as AxiosError)?.response?.data;\n const candidate: ApiServerError | null | undefined = responseData;\n return candidate !== null && candidate !== undefined &&\n typeof candidate === 'object' &&\n typeof candidate.errorMessage === 'string' &&\n typeof candidate.exception === 'string'; // Will always equal \"[REACTED]\" in non-Dev/Test environments\n}\n\nexport function getApiServerErrorMessage(e: unknown): string {\n return isApiServerError(e)\n ? `${e.response.data.errorMessage} (${e.response.data.exception.substring(0, 150)}) [${e.response.data.requestId}]`\n : getGenericErrorMessage(e);\n}\n\nexport type ApiState = {\n isFirstCallSuccessful: boolean;\n isAuthenticated: boolean;\n isAuthorised: boolean;\n};\n\nexport type ApiCallSuccessfulAction = {\n type: actionTypes.API_CALL_SUCCESSFUL;\n};\n\nexport type SetUnauthenticatedAction = {\n type: actionTypes.SET_UNAUTHENTICATED;\n};\n\nexport type SetUnauthorisedAction = {\n type: actionTypes.SET_UNAUTHORISED;\n};\n\nexport type ApiAction = ApiCallSuccessfulAction | SetUnauthenticatedAction | SetUnauthorisedAction;\n","import axios, { AxiosRequestConfig, AxiosResponse, Method, ResponseType } from 'axios';\nimport { toast } from 'react-toastify';\nimport copy from 'copy-to-clipboard';\n\nimport { authConfig, authProvider } from '../auth/authProvider';\nimport { getAppConfig } from '../config/config';\nimport { actionTypes } from '../actions/actionTypes';\nimport { getApiClientErrorMessage, getApiServerErrorMessage, isApiClientError, isApiServerError } from '../types/store/apiTypes';\n\nfunction toastError(errorMessage: string, url: string, type: 'Client' | 'Server') {\n console.warn(`Call to ${url} failed with ${type} Error`, errorMessage);\n\n toast(errorMessage, {\n type: type === 'Client' ? 'warning' : 'error',\n closeOnClick: false,\n onClick: () => {\n copy(errorMessage);\n toast.info('Message copied to clipboard');\n },\n });\n}\n\nexport const callApi = async (\n dispatch: Function,\n method: Method,\n endpoint: string,\n requestBody?: Object,\n responseType?: ResponseType\n): Promise => {\n const url = `${getAppConfig().apiUrl}${endpoint}`;\n\n let accessToken;\n\n try {\n ({ accessToken } = await authProvider.acquireTokenSilent({\n scopes: [authConfig.apiScope],\n }));\n } catch (e) {\n console.warn('Could not retrieve new access token');\n }\n\n try {\n const requestConfig: AxiosRequestConfig = {\n headers: {\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n },\n method,\n url,\n ...(requestBody ? { data: requestBody } : {}),\n responseType: responseType ?? 'json',\n };\n\n const { data }: AxiosResponse = await axios.request(requestConfig);\n\n dispatch({\n type: actionTypes.API_CALL_SUCCESSFUL,\n });\n\n return data;\n } catch (e) {\n const status = (e as { response: AxiosResponse })?.response?.status;\n\n if (status === 401) {\n dispatch({\n type: actionTypes.SET_UNAUTHENTICATED,\n });\n } else if (status === 403) {\n dispatch({\n type: actionTypes.SET_UNAUTHORISED,\n });\n } else {\n // If the response was a 400 Bad Request, and specifically in the API Client Error format, toast the error to the user so they know they need to fix something.\n // But also still throw the error, to allow calling code to handle the error in a more specific way, like stop loading animations and re-enable buttons.\n if (status === 400 && isApiClientError(e)) {\n toastError(getApiClientErrorMessage(e), url, 'Client');\n }\n\n // If the response was a 500 Internal Server Error, and specifically in the API Server Error format, toast the user to tell them something went wrong.\n // But also still throw the error, to allow calling code to handle the error in a more specific way, like stop loading animations and re-enable buttons.\n if (status === 500 && isApiServerError(e)) {\n toastError(getApiServerErrorMessage(e), url, 'Server');\n }\n\n throw e;\n }\n }\n};\n","import { actionTypes } from './actionTypes';\nimport { AppDispatch } from '../store/store';\nimport {\n ApiMasterDataLayer,\n MasterDataLayer,\n ApiMasterDataBridgeMaterial,\n MasterDataBridgeMaterial,\n ApiMasterDataMechanicalFasteners,\n MasterDataMechanicalFasteners,\n ApiMasterDataApplicationType,\n MasterDataApplicationType,\n ApiMasterData,\n ApiMasterDataSoilType,\n MasterDataSoilType,\n MasterDataBuildingRegion,\n ApiMasterDataBuildingRegion,\n MasterDataBuildingType,\n ApiMasterDataBuildingType,\n MasterDataRiskLevel,\n ApiMasterDataRiskLevel,\n ApiMasterDataDrainageFx,\n MasterDataDrainageFx,\n ApiMasterDataPrecipitationByPostCodeArea,\n MasterDataPrecipitationByPostCodeArea,\n ApiMasterDataRoofCharacteristics,\n MasterDataRoofCharacteristics,\n MasterData,\n getEmptyMasterData,\n} from '../types/store/masterDataTypes';\nimport { callApi } from '../common/api';\n\nexport const fetchMasterData = (businessUnitId: number) => {\n return async (dispatch: AppDispatch) => {\n try {\n\n dispatch({\n type: actionTypes.SET_IS_LOADING_MASTER_DATA,\n payload: { isLoadingMasterData: true },\n });\n\n const masterData = await fetchMasterDataFromApi(businessUnitId, dispatch);\n\n dispatch({\n type: actionTypes.FETCH_MASTER_DATA,\n payload: { masterData: masterData },\n });\n\n } finally {\n dispatch({\n type: actionTypes.SET_IS_LOADING_MASTER_DATA,\n payload: { isLoadingMasterData: false },\n });\n }\n };\n};\n\nasync function fetchMasterDataFromApi(businessUnitId: number, dispatch: AppDispatch): Promise {\n console.info(`Fetching Master Data for Business Unit ${businessUnitId}...`);\n\n const data = await callApi(dispatch, 'GET', `/MasterData/${businessUnitId}`);\n\n if (!data) {\n console.warn(`Failed to fetch Master Data for Business Unit ${businessUnitId}`);\n return getEmptyMasterData();\n }\n\n console.info(`Fetched Master Data for Business Unit ${businessUnitId}`);\n\n const masterLayers = data.layers.map(\n (layer: ApiMasterDataLayer): MasterDataLayer => ({\n id: layer.id,\n isActive: layer.isActive,\n name: layer.name,\n shortCode: layer.shortCode,\n thermalConductivity: layer.thermalConductivity,\n defaultThickness: layer.thicknessMillimetres,\n insideEmissivity: layer.insideEmissivity,\n outsideEmissivity: layer.outsideEmissivity,\n layerMaterialType: layer.layerMaterialType,\n isCustom: false,\n vapourResistance: layer.vapourResistance,\n vapourResistivity: layer.vapourResistivity,\n isFloorInsulation: layer.isFloorInsulation,\n vr1: layer.vr1,\n vr2: layer.vr2,\n vr3: layer.vr3,\n vr4: layer.vr4,\n vrBreak1: layer.vrBreak1,\n vrBreak2: layer.vrBreak2,\n vrBreak3: layer.vrBreak3,\n bridgeMaterial: layer.bridgeMaterial\n ? {\n id: layer.bridgeMaterial.id,\n name: layer.bridgeMaterial.name,\n bridgeDescription: layer.bridgeMaterial.bridgeDescription,\n bridgeThermalConductivity: layer.bridgeMaterial.bridgeThermalConductivity,\n defaultBridgeWidth: layer.bridgeMaterial.bridgeWidthMillimetres,\n defaultCentresDistance: layer.bridgeMaterial.centresDistanceMillimetres,\n defaultNonBridgeHeight: layer.bridgeMaterial.nonBridgeHeightMillimetres,\n }\n : null,\n })\n );\n\n const floorMasterLayers = masterLayers.filter(layer => layer.isFloorInsulation);\n\n return {\n businessUnitId: data.businessUnitId,\n layers: masterLayers,\n floorLayers: floorMasterLayers,\n bridgeMaterials: data.bridgeMaterials.map(\n (material: ApiMasterDataBridgeMaterial): MasterDataBridgeMaterial => ({\n id: material.id,\n name: material.name,\n bridgeDescription: material.bridgeDescription,\n bridgeThermalConductivity: material.bridgeThermalConductivity,\n defaultBridgeWidth: material.bridgeWidthMillimetres,\n defaultCentresDistance: material.centresDistanceMillimetres,\n defaultNonBridgeHeight: material.nonBridgeHeightMillimetres,\n })\n ),\n mechanicalFasteners: data.mechanicalFasteners.map(\n (fastener: ApiMasterDataMechanicalFasteners): MasterDataMechanicalFasteners => ({\n id: fastener.id,\n name: fastener.name,\n defaultCrossArea: fastener.crossSectionalAreaMillimetresSquared,\n defaultNumber: fastener.fastenersPerMetreSquared,\n })\n ),\n airGapsCorrectionLevels: {\n level0: {\n level: data.airGapsCorrectionRecords.level0.level,\n value: data.airGapsCorrectionRecords.level0.value,\n },\n level1: {\n level: data.airGapsCorrectionRecords.level1.level,\n value: data.airGapsCorrectionRecords.level1.value,\n },\n level2: {\n level: data.airGapsCorrectionRecords.level2.level,\n value: data.airGapsCorrectionRecords.level2.value,\n },\n },\n applications: data.applications.map(\n (applicationType: ApiMasterDataApplicationType): MasterDataApplicationType => ({\n id: applicationType.id,\n name: applicationType.name,\n type: applicationType.type,\n })\n ),\n buildingRegions: data.buildingRegions.map(\n (buildingRegion: ApiMasterDataBuildingRegion): MasterDataBuildingRegion => ({\n id: buildingRegion.id,\n name: buildingRegion.name,\n })\n ),\n buildingTypes: data.buildingTypes.map(\n (buildingType: ApiMasterDataBuildingType): MasterDataBuildingType => ({\n id: buildingType.id,\n name: buildingType.name,\n })\n ),\n riskLevels: data.riskLevels.map(\n (riskLevel: ApiMasterDataRiskLevel): MasterDataRiskLevel => ({\n id: riskLevel.id,\n name: riskLevel.name,\n })\n ),\n soilTypes: data.soilTypes.map(\n (soilType: ApiMasterDataSoilType): MasterDataSoilType => ({\n id: soilType.id,\n description: soilType.description,\n lambda: soilType.lambda,\n vapourResistivity: soilType.vapourResistivity,\n })\n ),\n drainageFx: data.drainageFx.map(\n (drainageFxInput: ApiMasterDataDrainageFx): MasterDataDrainageFx => ({\n id: drainageFxInput.id,\n covering: drainageFxInput.covering,\n fxFactor: drainageFxInput.fxFactor,\n })\n ),\n precipitationByPostCodeArea: data.precipitationByPostCodeArea.map(\n (precipitation: ApiMasterDataPrecipitationByPostCodeArea): MasterDataPrecipitationByPostCodeArea => ({\n id: precipitation.id,\n postCodeArea: precipitation.postCodeArea,\n rainfallMillimetres: precipitation.rainfallMillimetres,\n })\n ),\n rainscreenCladdingDefaults: {\n chiValue: data.rainscreenCladdingDefaults.chiValue,\n bracketsPerMetreSquared: data.rainscreenCladdingDefaults.bracketsPerMetreSquared,\n },\n buildingUsage: data.buildingUsage,\n projectRegion: data.projectRegion,\n branding: data.brands,\n roofCharacteristicsOptions: data.roofCharacteristicsOptions.map(\n (option: ApiMasterDataRoofCharacteristics): MasterDataRoofCharacteristics => ({\n id: option.id,\n description: option.description,\n roofSpaceThermalResistance: option.roofSpaceThermalResistance,\n })\n ),\n salesContactTeams: data.salesContactTeams,\n projectCountyStates: data.projectCountyStates,\n projectStages: data.projectStages,\n productSectors: data.productSectors,\n calculationTitles: data.calculationTitles,\n };\n}\n","import { callApi } from '../common/api';\nimport { ApiUserProfile, FetchUserProfileAction } from '../types/store/userProfileTypes';\nimport { actionTypes } from './actionTypes';\n\nexport const fetchUserProfile = () => {\n return async (dispatch: (action: FetchUserProfileAction) => void) => {\n const data = await callApi(dispatch, 'GET', '/Profile');\n\n if (!data) return;\n\n dispatch({\n type: actionTypes.FETCH_USER_PROFILE,\n payload: {\n userProfile: data,\n },\n });\n };\n};\n","import { UserProfileState } from '../types/store/userProfileTypes';\n\nexport const checkIsPowerUser = (userProfile: UserProfileState): boolean => (userProfile?.administrableBusinessUnits?.length ?? 0) > 0;\n","import React, { ReactNode } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Fade } from '@material-ui/core';\nimport { useSnackbar } from 'notistack';\n\nimport { Header } from '../Header/Header';\nimport styles from './Layout.module.scss';\nimport { apiSelector, currentCalculationBusinessUnitIdSelector, userProfileSelector } from '../../store/selectors';\nimport { AppDispatch } from '../../store/store';\nimport { UnauthenticatedLandingPage } from '../LandingPages/UnauthenticatedLandingPage/UnauthenticatedLandingPage';\nimport { AccessDeniedLandingPage } from '../LandingPages/AccessDeniedLandingPage/AccessDeniedLandingPage';\nimport { AuthorisingLandingPage } from '../LandingPages/AuthorisingLandingPage/AuthorisingLandingPage';\nimport { fetchMasterData } from '../../actions/masterDataActions';\nimport { fetchUserProfile } from '../../actions/userProfileActions';\nimport { UserProfileState } from '../../types/store/userProfileTypes';\nimport { checkIsPowerUser } from '../../common/userProfile';\n\ntype Props = {\n children: ReactNode;\n};\n\nexport function Layout({ children }: Props) {\n const dispatch = useDispatch();\n const { enqueueSnackbar } = useSnackbar();\n\n React.useEffect(() => {\n dispatch(fetchUserProfile());\n }, [dispatch]);\n\n\n const userProfile: UserProfileState = useSelector(userProfileSelector);\n const currentCalculationBusinessUnitId = useSelector(currentCalculationBusinessUnitIdSelector);\n const isPowerUser = checkIsPowerUser(userProfile);\n\n React.useEffect(() => {\n (async () => {\n if (userProfile && currentCalculationBusinessUnitId) {\n try {\n await dispatch(fetchMasterData(currentCalculationBusinessUnitId));\n } catch (e) {\n const status = (e as any)?.response?.status;\n\n const message = status === 400 /* Bad Request */\n ? ((e as any)?.response?.data?.message ?? 'Unknown failure while fetching master data.')\n : isPowerUser\n ? 'Unable to fetch master data, please try uploading the previous valid set or contact support for more information.'\n : 'Unable to fetch master data, please contact your system administrator.';\n\n enqueueSnackbar(\n message,\n {\n variant: 'error',\n persist: true,\n TransitionComponent: Fade,\n }\n );\n }\n }\n })();\n }, [dispatch, enqueueSnackbar, userProfile, currentCalculationBusinessUnitId, isPowerUser]);\n\n const { isFirstCallSuccessful, isAuthenticated, isAuthorised } = useSelector(apiSelector);\n\n /**\n * This covers the scenario where the frontend flow is happy that the user is authenticated\n * but the API throws an authentication error. This is unlikely to happen.\n */\n if (!isAuthenticated) {\n return ;\n }\n\n /**\n * This covers the scenario where both the frontend and API are happy that the user is\n * authenticated but they are not in the correct group(s) to be given access to the app.\n */\n if (!isAuthorised) {\n return ;\n }\n\n return (\n \n {/**\n * This covers the scenario where the user is authenticated but we're waiting to hear back\n * from the API about authorisation.\n */\n !isFirstCallSuccessful && }\n\n \n
\n \n
\n\n
\n {children}\n
\n \n
\n
\n
\n );\n}\n","import { actionTypes } from '../../actions/actionTypes';\nimport { AirGapsCorrectionLevel } from './masterDataTypes';\nimport { InactiveCalculationsState } from './inactiveCalculationsTypes';\nimport { Project } from './projectTypes';\nimport { Contact } from './contactTypes';\n\nexport type ApiPostCalculationRequest = {\n businessUnitId: number;\n applicationDetails: {\n id: number;\n };\n calculationNotes?: CalculationNotes;\n layers: Array;\n constructionDetails?: ApiConstructionDetailsRequest;\n rainscreenCladdingDetails?: ConstructionRainscreenCladdingDetails;\n envSettings?: ApiEnvSettingsRequest;\n saveCalculation: boolean;\n locked?: boolean;\n productSectorId?: number;\n projectInsulationVolumeM2?: number;\n};\n\nexport type ApiCustomReferenceLayerRequest = {\n name: string;\n thermalResistance: string | null;\n thermalConductivity: string | null;\n insideEmissivity: string | null;\n outsideEmissivity: string | null;\n layerMaterialType: string | null;\n isCustom: true;\n isBlank: boolean;\n};\n\nexport type ApiLayerBridgingRequest = {\n id: number;\n bridgeWidthMillimetres: string;\n centresDistanceMillimetres: string;\n nonBridgeHeightMillimetres: string | null;\n};\n\nexport type ApiLayerMechanicalFastenerRequest = {\n id: number;\n crossSectionalAreaMillimetresSquared: string;\n fasteningsPerMetreSquared: string;\n};\n\nexport type ApiLayerAirGapsCorrectionOverrideRequest = {\n overriddenCalculatedCorrectionFactor: AirGapsCorrectionLevel;\n overrideCorrectionFactor: AirGapsCorrectionLevel;\n};\n\nexport type ApiLayerNotesRequest = {\n notes: string;\n};\n\nexport type ApiCalculationRequestLayer = {\n id: number | null;\n isReadOnly?: boolean;\n instanceId: string;\n thicknessMillimetres: string | null;\n layerNotes?: ApiLayerNotesRequest;\n customReferenceLayer?: ApiCustomReferenceLayerRequest;\n layerBridging?: ApiLayerBridgingRequest;\n mechanicalFastener?: ApiLayerMechanicalFastenerRequest;\n airGapsCorrectionOverride?: ApiLayerAirGapsCorrectionOverrideRequest;\n vapourResistance?: string | null;\n vapourResistivity?: string | null;\n};\n\nexport enum FloorInsulationLayerReferenceType {\n Master = 'Master',\n None = 'None',\n Custom = 'Custom',\n}\n\nexport type ConstructionFloorInsulationReference = {\n insulationReferenceType: FloorInsulationLayerReferenceType;\n id: number | null;\n};\n\nexport type ConstructionFloorInsulationDetails = {\n insulationReference: ConstructionFloorInsulationReference;\n thicknessMillimetres: string | null;\n thermalConductivity: string | null;\n insulationLayerInstanceId: string | null;\n};\n\nexport type ConstructionRainscreenCladdingDetails = {\n chiValue: string;\n bracketsPerMetreSquared: string;\n};\n\nexport type ConstructionPitchedRoofDetails = {\n pitchAngle: string;\n};\n\nexport type ConstructionPitchedRoofWithLoftDetails = {\n roofCharacteristicId: number;\n thicknessMillimetres: string;\n loftLayerInstanceId: string;\n};\n\nexport type CalculationNotes = {\n calculationTitle: string | null;\n notes: string | null;\n};\n\nexport type ApiConstructionDetailsRequest = {\n soilTypeId: number | null;\n perimeterMetres: string | null;\n areaMetresSquared: string | null;\n perimeterAreaRatio: string | null;\n wallThicknessMetres: string | null;\n ventilationRateMillimetresSquaredPerMetre: string | null;\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround: string | null;\n windSpeedMetresPerSecond: string | null;\n averageWindShieldingFactor: string | null;\n heightBelowGroundMetres: string | null;\n floorInsulationDetails?: ConstructionFloorInsulationDetails;\n steelWallDetails: ApiConstructionDetailsSteelWallRequest | null;\n invertedRoofDetails: ApiConstructionDetailsInvertedRoofRequest | null;\n pitchedRoofDetails?: ConstructionPitchedRoofDetails;\n pitchedRoofWithLoftDetails?: ConstructionPitchedRoofWithLoftDetails;\n widthOfEdgeInsulation: string | null;\n};\n\nexport type ApiConstructionDetailsInvertedRoofRequest = {\n drainageFxId: number | null;\n drainageFx: string | null;\n precipitationForAreaId: number | null;\n precipitationForAreaMillimetres: string | null;\n};\n\nexport type ApiConstructionDetailsSteelWallRequest = {\n isWarmSteelFramedWall: boolean | null;\n is50To80MillimetreFlange: boolean | null;\n studDepthMillimetres: string | null;\n studSpacingMillimetres: string | null;\n};\n\nexport type ApiPutCalculationRequest = ApiPostCalculationRequest & {\n project: Project | null;\n contact: Contact | null;\n};\n\nexport type ApiCalculationResponse = {\n calculationId: string;\n businessUnitId: number;\n countryCode: string;\n applicationDetails: ApiApplicationDetailsResponse;\n calculationNotes: CalculationNotes;\n constructionDetails?: ApiConstructionDetailsResponse;\n rainscreenCladdingDetails?: ConstructionRainscreenCladdingDetails;\n layers: Array;\n mechanicalFastenersCorrectionFactor: string;\n airGapsCorrectionFactor: string;\n rainscreenCladdingCorrectionFactor: string;\n rainwaterCoolingCorrectionFactor: string;\n correctionFactor: string;\n totalThermalResistance: string;\n baseUValue: string;\n uValue: string;\n uValue2DP: string;\n isTotalCorrectionFactorBelowThreshold: boolean;\n envSettings?: EnvSettings;\n envConditions?: ApiEnvConditionResponse[];\n interstitialInterfaces?: ApiInterstitialInterfaceResponse[];\n project: Project | null;\n hasCondensation: boolean;\n locked?: boolean;\n productSectorId?: number;\n contact?: Contact | null;\n projectInsulationVolumeM2: number;\n};\n\nexport type ApiCustomReferenceLayerResponse = ApiCustomReferenceLayerRequest;\n\nexport type ApiLayerNotesResponse = ApiLayerNotesRequest;\n\nexport type CustomReferenceLayer = ApiCustomReferenceLayerResponse;\n\nexport const customLayerDefaults: CustomReferenceLayer = {\n name: '',\n thermalResistance: null,\n thermalConductivity: null,\n insideEmissivity: null,\n outsideEmissivity: null,\n layerMaterialType: null,\n isCustom: true,\n isBlank: true,\n};\n\nexport enum CustomLayerTypeOptions {\n Blank = 'Blank',\n Insulation = 'Insulation',\n NonInsulation = 'Non-Insulation',\n InvertedInsulation = 'Inverted Insulation',\n}\n\nexport const customLayerTypeOptions = [\n CustomLayerTypeOptions.Blank,\n CustomLayerTypeOptions.Insulation,\n CustomLayerTypeOptions.NonInsulation,\n CustomLayerTypeOptions.InvertedInsulation,\n];\n\nexport type ApiApplicationDetailsResponse = {\n id: number;\n type: string;\n insideSurfaceThermalResistance: string;\n outsideSurfaceThermalResistance: string;\n};\n\nexport type ApiLayerBridgingResponse = {\n id: number;\n name: string;\n bridgeDescription: string;\n bridgeThermalConductivity: string;\n bridgePercentage: string;\n bridgeWidthMillimetres: string;\n centresDistanceMillimetres: string;\n nonBridgeHeightMillimetres: string | null;\n};\n\nexport type ApiLayerMechanicalFastenerResponse = {\n id: number;\n name: string;\n alphaCoefficient: string;\n crossSectionalAreaMillimetresSquared: string;\n thermalConductivity: string;\n fasteningsPerMetreSquared: string;\n correctionFactor: string;\n};\n\nexport type ApiLayerAirGapsCorrectionResponse = {\n calculatedCorrectionFactor: AirGapsCorrectionLevel;\n overrideCorrectionFactor: AirGapsCorrectionLevel | null;\n correctionFactorResult: AirGapsCorrectionLevel;\n airGapsCorrectionResultValue: string;\n};\n\nexport type ApiCalculationResponseLayer = {\n id: number | null;\n isReadOnly?: boolean;\n instanceId: string;\n name: string;\n thicknessMillimetres: string;\n thermalConductivity: string;\n insideEmissivity: string;\n outsideEmissivity: string;\n thermalResistance: string;\n layerNotes?: ApiLayerNotesResponse;\n customReferenceLayer?: ApiCustomReferenceLayerResponse;\n layerBridging?: ApiLayerBridgingResponse;\n mechanicalFastener?: ApiLayerMechanicalFastenerResponse;\n airGapsCorrection?: ApiLayerAirGapsCorrectionResponse;\n constructionDetails?: ApiConstructionDetailsResponse;\n vapourResistance?: string;\n vapourResistivity?: string;\n};\n\nexport type ApiConstructionDetailsResponse = ApiConstructionDetailsRequest & {\n groundThermalConductivity: string | null;\n};\n\nexport type CalculationLayer = ApiCalculationResponseLayer;\n\nexport enum EnvConditionType {\n InternalTemperature = 'InternalTemperature',\n InternalRelativeHumidity = 'InternalRelativeHumidity',\n ExternalTemperature = 'ExternalTemperature',\n ExternalRelativeHumidity = 'ExternalRelativeHumidity',\n}\n\nexport type ApiMonthValueResponse = {\n id: number;\n name: string;\n value: string;\n};\n\nexport type ApiEnvConditionResponse = {\n envConditionType: EnvConditionType;\n name: string;\n months: ApiMonthValueResponse[];\n unit: string;\n};\n\nexport type ApiEnvSettingsRequest = {\n buildingRegionId?: number;\n buildingTypeId?: number;\n internalTemperature?: string;\n riskLevelId?: number;\n envConditionOverrides?: ApiEnvConditionOverride[];\n};\n\nexport type ApiInterstitialMonthResponse = {\n condensationAccumulationAmount: string;\n condensationAmount: string;\n id: number;\n saturationVapourPressure: string;\n vapourPressure: string;\n};\n\nexport type ApiInterstitialInterfaceResponse = {\n id: string;\n innerLayerInstanceId: string;\n outerLayerInstanceId: string;\n months: ApiInterstitialMonthResponse[];\n name: string;\n peakCondensationAccumulationAmount: string;\n peakCondensationAccumulationAmountMonth: string;\n peakCondensationAmount: string;\n peakCondensationAmountMonth: string;\n worstMonthDewpointTemperature: string;\n worstMonthInterfaceTemperature: string;\n};\n\nexport type InterstitialMonth = ApiInterstitialMonthResponse;\n\nexport type InterstitialInterface = ApiInterstitialInterfaceResponse;\n\nexport type ApiEnvSettingsResponse = ApiEnvSettingsRequest;\n\nexport type EnvSettings = ApiEnvSettingsRequest;\n\nexport type MonthValue = ApiMonthValueResponse;\n\nexport type EnvCondition = ApiEnvConditionResponse & {\n months: MonthValue[];\n};\n\nexport type ApiMonthOverride = {\n id: number;\n value: string;\n};\n\nexport type ApiEnvConditionOverride = {\n envConditionType: EnvConditionType;\n months: ApiMonthOverride[];\n};\n\nexport type MonthOverride = ApiMonthOverride;\n\nexport type EnvConditionOverride = ApiEnvConditionOverride;\n\nexport type Calculation = ApiCalculationResponse & {\n order: number;\n envConditions?: EnvCondition[];\n envSettings?: EnvSettings;\n layers: Array;\n\n};\n\nexport type CalculationState = {\n currentCalculation: Calculation | null;\n interimCalculation: Calculation | null;\n savedSuccessfully: boolean | null;\n};\n\nexport type RegisterCalculationAction = {\n type: actionTypes.REGISTER_CALCULATION;\n payload: {\n calculation: ApiCalculationResponse;\n order: number;\n };\n};\n\nexport type ChangeActiveCalculationAction = {\n type: actionTypes.CHANGE_ACTIVE_CALCULATION;\n payload: {\n previousActiveCalculation: Calculation;\n newActiveCalculation: Calculation;\n };\n};\n\nexport type MakeAllCalculationsInactiveAction = {\n type: actionTypes.MAKE_ALL_CALCULATIONS_INACTIVE;\n payload: {\n previousActiveCalculation: Calculation | null;\n };\n};\n\nexport type CloseActiveCalculationAction = {\n type: actionTypes.CLOSE_ACTIVE_CALCULATION;\n payload: {\n newActiveCalculation?: Calculation;\n newInactiveCalculations: InactiveCalculationsState;\n };\n};\n\nexport type SetActiveCalculationDataAction = {\n type: actionTypes.SET_ACTIVE_CALCULATION_DATA;\n payload: {\n newCalculationData: ApiCalculationResponse | Calculation | null;\n shouldUseExistingCalculationId: boolean;\n order: number;\n };\n};\n\nexport type AddLayerToCalculationAction = {\n type: actionTypes.ADD_LAYER_TO_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type EditLayerInCalculationAction = {\n type: actionTypes.EDIT_LAYER_IN_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type MoveLayerInCalculationAction = {\n type: actionTypes.MOVE_LAYER_IN_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type InterimMoveLayerInCalculationAction = {\n type: actionTypes.INTERIM_MOVE_LAYER_IN_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type DuplicateLayerInCalculationAction = {\n type: actionTypes.DUPLICATE_LAYER_IN_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type RemoveLayerFromCalculationAction = {\n type: actionTypes.REMOVE_LAYER_FROM_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type LockCalculationAction = {\n type: actionTypes.LOCK_CALCULATION;\n payload: {\n isCurrentCalculation: boolean;\n calculation: ApiCalculationResponse;\n };\n};\n\nexport type AddLayerToInterimCalculationAction = {\n type: actionTypes.ADD_LAYER_TO_INTERIM_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type EditLayerInInterimCalculationAction = {\n type: actionTypes.EDIT_LAYER_IN_INTERIM_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type AddConstructionDetailsToCalculationAction = {\n type: actionTypes.ADD_CONSTRUCTION_DETAILS_TO_CALCULATION;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type ClearInterimCalculationAction = {\n type: actionTypes.CLEAR_INTERIM_CALCULATION;\n};\n\nexport type EditEnvSettingsAction = {\n type: actionTypes.EDIT_ENV_SETTINGS;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type EditEnvConditionsAction = {\n type: actionTypes.EDIT_ENV_CONDITIONS;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type SaveEnvConditionsAction = {\n type: actionTypes.SAVE_ENV_CONDITIONS;\n payload: {\n calculation: Calculation;\n };\n};\n\nexport type ClearCalculationSaveSuccessAction = {\n type: actionTypes.CLEAR_CALCULATION_SAVE_SUCCESS;\n};\n\nexport type SetCalculationSaveSuccessAction = {\n type: actionTypes.SET_CALCULATION_SAVE_SUCCESS;\n};\n\nexport type UpdateCalculationProjectAction = {\n type: actionTypes.UPDATE_CALCULATION_PROJECT;\n payload: { project: Project };\n};\n\nexport type UpdateInactiveCalculationsProjectAction = {\n type: actionTypes.UPDATE_INACTIVE_CALCULATIONS_PROJECT;\n payload: { project: Project };\n};\n\nexport type UpdateCalculationContactAction = {\n type: actionTypes.UPDATE_CALCULATION_CONTACT;\n payload: { contact: Contact };\n};\n\nexport type UpdateInactiveCalculationsContactAction = {\n type: actionTypes.UPDATE_INACTIVE_CALCULATIONS_CONTACT;\n payload: { contact: Contact };\n};\n\nexport type CalculationAction =\n | ChangeActiveCalculationAction\n | MakeAllCalculationsInactiveAction\n | SetActiveCalculationDataAction\n | AddLayerToCalculationAction\n | EditLayerInCalculationAction\n | InterimMoveLayerInCalculationAction\n | MoveLayerInCalculationAction\n | DuplicateLayerInCalculationAction\n | RemoveLayerFromCalculationAction\n | RegisterCalculationAction\n | CloseActiveCalculationAction\n | AddLayerToInterimCalculationAction\n | EditLayerInInterimCalculationAction\n | ClearInterimCalculationAction\n | AddConstructionDetailsToCalculationAction\n | EditEnvSettingsAction\n | EditEnvConditionsAction\n | SaveEnvConditionsAction\n | ClearCalculationSaveSuccessAction\n | SetCalculationSaveSuccessAction\n | UpdateCalculationProjectAction\n | UpdateCalculationContactAction\n | LockCalculationAction;\n","// Reference backend's `Kics.Shared.CalculationEngine.Domain.Common.LayerMaterialTypeModels.cs` for backend strings\nexport enum LayerMaterialTypeKeys {\n GenericInsulation = 'GenericInsulation',\n InvertedInsulation = 'InvertedInsulation',\n NonInsulation = 'NonInsulation',\n UnventilatedAirspace = 'UnventilatedAirspace',\n WellVentilatedAirspace = 'WellVentilatedAirspace',\n}\n","import { v4 } from 'uuid';\n\n// For some reason its really hard to mock the uuid module directly,\n// so using this wrapper will all us to mock it in tests with low impact on code\nexport function uuid(): string {\n return v4();\n}\n","import { AppDispatch, RootState } from '../store/store';\nimport { Project } from '../types/store/projectTypes';\nimport { callApi } from '../common/api';\nimport { actionTypes } from './actionTypes';\n\nexport const associateProject = (project: Project, isNewProject: boolean, shouldAssociateToAll: boolean) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const {\n calculation: { currentCalculation },\n inactiveCalculations,\n } = getState();\n\n const calculationIds = shouldAssociateToAll\n ? [currentCalculation?.calculationId, ...inactiveCalculations.map(c => c.calculationId)]\n : [currentCalculation?.calculationId];\n\n const apiMethod = isNewProject ? 'POST' : 'PUT';\n const apiEndpoint = isNewProject ? '/Project' : `/Project/${project.id}`;\n\n const data = await callApi(dispatch, apiMethod, apiEndpoint, {\n calculationIds,\n ...project,\n projectUsage: project.projectUsage || undefined,\n region: project.region || undefined,\n enquiryType: project.enquiryType || undefined,\n projectStage: project.projectStage || undefined,\n projectCountyState: project.projectCountyState || undefined,\n projectStartDate: new Date(project.projectStartDate ?? new Date()).toDateString()\n });\n\n if (!data?.id) return;\n\n /**\n * Use \"data\" rather than the project param as the data from the API will\n * contain the generated unique ID.\n */\n\n dispatch({\n type: actionTypes.UPDATE_CALCULATION_PROJECT,\n payload: { project: data },\n });\n\n if (!shouldAssociateToAll) return;\n\n dispatch({\n type: actionTypes.UPDATE_INACTIVE_CALCULATIONS_PROJECT,\n payload: { project: data },\n });\n };\n};\n","import { callApi } from \"../common/api\";\nimport { AppDispatch, RootState } from \"../store/store\";\nimport { Contact } from \"../types/store/contactTypes\";\nimport { actionTypes } from \"./actionTypes\";\n\nexport const associateContact = (contact: Contact, isNewContact: boolean, shouldAssociateToAll: boolean) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const {\n calculation: { currentCalculation },\n inactiveCalculations,\n } = getState();\n\n const calculationIds = shouldAssociateToAll\n ? [currentCalculation?.calculationId, ...inactiveCalculations.map(c => c.calculationId)]\n : [currentCalculation?.calculationId];\n\n const apiMethod = isNewContact ? 'POST' : 'PUT';\n const apiEndpoint = isNewContact ? '/Contact' : `/Contact/${contact.id}`;\n\n const data = await callApi(dispatch, apiMethod, apiEndpoint, {\n calculationIds,\n ...contact,\n contactType: contact.contactType || undefined,\n salesContactTeam: contact.salesContactTeam || undefined,\n });\n\n if (!data?.id) return;\n\n /**\n * Use \"data\" rather than the contact param as the data from the API will\n * contain the generated unique ID.\n */\n\n dispatch({\n type: actionTypes.UPDATE_CALCULATION_CONTACT,\n payload: { contact: data },\n });\n\n if (!shouldAssociateToAll) return;\n\n dispatch({\n type: actionTypes.UPDATE_INACTIVE_CALCULATIONS_CONTACT,\n payload: { contact: data },\n });\n };\n};\n","import { cloneDeep } from 'lodash';\n\nimport { actionTypes } from './actionTypes';\nimport { AppDispatch, RootState } from '../store/store';\nimport { AirGapsCorrectionLevel, MasterDataLayer } from '../types/store/masterDataTypes';\nimport {\n ApiCalculationRequestLayer,\n ApiCalculationResponse,\n ApiCalculationResponseLayer,\n ApiLayerBridgingRequest,\n ApiLayerMechanicalFastenerRequest,\n ApiPostCalculationRequest,\n ApiPutCalculationRequest,\n Calculation,\n CalculationLayer,\n CustomReferenceLayer,\n EnvSettings,\n EnvConditionOverride,\n EnvConditionType,\n CalculationNotes,\n ConstructionRainscreenCladdingDetails,\n ApiConstructionDetailsRequest,\n ApiLayerNotesRequest,\n} from '../types/store/calculationTypes';\nimport { LayerMaterialTypeKeys } from '../types/store/LayerMaterialTypes';\nimport { uuid } from '../common/uuid';\nimport { InactiveCalculationsState } from '../types/store/inactiveCalculationsTypes';\nimport { callApi } from '../common/api';\nimport { Method } from 'axios';\nimport { associateProject } from './projectActions';\nimport { associateContact } from './contactActions';\n\nexport async function requestCalculation(\n dispatch: AppDispatch,\n method: Method,\n endpoint: string,\n requestData: T\n): Promise {\n if (requestData.saveCalculation) {\n dispatch({ type: actionTypes.CLEAR_CALCULATION_SAVE_SUCCESS });\n }\n\n const data = await callApi(dispatch, method, endpoint, requestData);\n\n if (data && requestData.saveCalculation) {\n dispatch({ type: actionTypes.SET_CALCULATION_SAVE_SUCCESS });\n }\n\n return data;\n}\n\nexport function mapCurrentResponseLayerToRequest(responseLayer: ApiCalculationResponseLayer): ApiCalculationRequestLayer {\n const {\n id,\n instanceId,\n thicknessMillimetres,\n customReferenceLayer,\n layerBridging,\n mechanicalFastener,\n airGapsCorrection,\n vapourResistance,\n vapourResistivity,\n layerNotes,\n isReadOnly,\n } = responseLayer;\n\n if (isReadOnly) {\n return {\n isReadOnly: true,\n id: null,\n instanceId,\n thicknessMillimetres: null,\n };\n }\n\n return {\n id,\n instanceId,\n isReadOnly,\n thicknessMillimetres: thicknessMillimetres || null,\n customReferenceLayer:\n customReferenceLayer != null\n ? {\n name: customReferenceLayer.name,\n thermalResistance: customReferenceLayer.thermalResistance,\n thermalConductivity: customReferenceLayer.thermalConductivity,\n insideEmissivity: customReferenceLayer.insideEmissivity,\n outsideEmissivity: customReferenceLayer.outsideEmissivity,\n layerMaterialType: customReferenceLayer.layerMaterialType,\n isBlank: customReferenceLayer.isBlank,\n isCustom: true,\n }\n : undefined,\n layerNotes:\n layerNotes != null\n ? {\n notes: layerNotes.notes,\n }\n : undefined,\n layerBridging:\n layerBridging != null\n ? {\n id: layerBridging.id,\n bridgeWidthMillimetres: layerBridging.bridgeWidthMillimetres,\n centresDistanceMillimetres: layerBridging.centresDistanceMillimetres,\n nonBridgeHeightMillimetres: layerBridging.nonBridgeHeightMillimetres,\n }\n : undefined,\n mechanicalFastener:\n mechanicalFastener != null\n ? {\n id: mechanicalFastener.id,\n crossSectionalAreaMillimetresSquared: mechanicalFastener.crossSectionalAreaMillimetresSquared,\n fasteningsPerMetreSquared: mechanicalFastener.fasteningsPerMetreSquared,\n }\n : undefined,\n ...(airGapsCorrection?.calculatedCorrectionFactor && airGapsCorrection?.overrideCorrectionFactor\n ? {\n airGapsCorrectionOverride: {\n overriddenCalculatedCorrectionFactor: airGapsCorrection?.calculatedCorrectionFactor,\n overrideCorrectionFactor: airGapsCorrection?.overrideCorrectionFactor,\n },\n }\n : {}),\n vapourResistance,\n vapourResistivity,\n };\n}\n\nexport const openCalculation = (calculationId: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n await Promise.resolve(); // Give the UI time to update, before doing the expensive `cloneDeep`\n\n const previousActiveCalculation = cloneDeep(getState().calculation.currentCalculation);\n\n const data = await callApi(dispatch, 'GET', `/Calculation/${calculationId}`);\n\n dispatch({\n type: actionTypes.MAKE_ALL_CALCULATIONS_INACTIVE,\n payload: {\n previousActiveCalculation,\n },\n });\n\n const inactiveCalculations: InactiveCalculationsState = getState().inactiveCalculations;\n\n dispatch({\n type: actionTypes.SET_ACTIVE_CALCULATION_DATA,\n payload: {\n newCalculationData: data!,\n shouldUseExistingCalculationId: true,\n order: inactiveCalculations.length + 1,\n },\n });\n };\n};\n\nexport const registerCalculation = (businessUnitId: number) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const wallApplicationTypeUniqueReferenceId = 1; // This refers to the unique reference ID of the Application Type. These are hardcoded in the Calculation Engine. 1 means Wall.\n\n const requestData: ApiPostCalculationRequest = {\n businessUnitId,\n applicationDetails: {\n id: wallApplicationTypeUniqueReferenceId,\n },\n layers: [],\n saveCalculation: true,\n };\n\n const data = await requestCalculation(dispatch, 'POST', '/Calculation', requestData);\n\n if (!data) return;\n\n const previousActiveCalculation: Calculation = cloneDeep(getState().calculation.currentCalculation)!;\n\n dispatch({\n type: actionTypes.MAKE_ALL_CALCULATIONS_INACTIVE,\n payload: {\n previousActiveCalculation,\n },\n });\n\n await Promise.resolve(); // Yield between dispatches\n\n // Ensure new calculations are always last in the tab list\n const order = getState().inactiveCalculations.length + 1;\n\n dispatch({\n type: actionTypes.REGISTER_CALCULATION,\n payload: {\n calculation: data,\n order,\n },\n });\n };\n};\n\nexport const closeActiveCalculation = () => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const previousActiveCalculation: Calculation = cloneDeep(getState().calculation.currentCalculation)!;\n const inactiveCalculations: InactiveCalculationsState = cloneDeep(getState().inactiveCalculations);\n\n // Re-evaluate all \"order\" values to prevent there being gaps\n const newInactiveCalculations = [...inactiveCalculations]\n .sort((a, b) => (a.order > b.order ? 1 : -1))\n .map((c, index) => ({ ...c, order: index + 1 }));\n\n let newActiveCalculation: Calculation | undefined;\n\n if (newInactiveCalculations.length > 0) {\n // Move to the next tab if one exists, otherwise go to previous tab\n newActiveCalculation =\n newInactiveCalculations.find(c => c.order === previousActiveCalculation.order) ||\n newInactiveCalculations.find(c => c.order === previousActiveCalculation.order - 1);\n\n // Remove newly-active calculation from the inactive calculations array\n const indexOfCalculationToRemove = newInactiveCalculations.findIndex(c => c.calculationId === newActiveCalculation?.calculationId);\n\n newInactiveCalculations.splice(indexOfCalculationToRemove, 1);\n }\n\n dispatch({\n type: actionTypes.CLOSE_ACTIVE_CALCULATION,\n payload: {\n newActiveCalculation,\n newInactiveCalculations,\n },\n });\n };\n};\n\nexport const handleAutomaticLayers = (\n currentCalculation: Calculation,\n request: ApiPutCalculationRequest\n): ApiPutCalculationRequest => {\n const currentPitchedRoofDetails = currentCalculation.constructionDetails?.pitchedRoofWithLoftDetails;\n const requestPitchedRoofDetailsDetails = request.constructionDetails?.pitchedRoofWithLoftDetails;\n const currentFloorInsulationDetails = currentCalculation.constructionDetails?.floorInsulationDetails;\n const requestFloorInsulationDetails = request.constructionDetails?.floorInsulationDetails;\n\n // Adding pitchedRoofWithLoftDetails\n if (currentPitchedRoofDetails == null && requestPitchedRoofDetailsDetails != null) {\n return {\n ...request,\n layers: [\n ...request.layers,\n {\n instanceId: requestPitchedRoofDetailsDetails.loftLayerInstanceId,\n id: null,\n thicknessMillimetres: null,\n isReadOnly: true,\n },\n ],\n };\n }\n // Removing pitchedRoofWithLoftDetails\n if (currentPitchedRoofDetails != null && requestPitchedRoofDetailsDetails == null) {\n const loftLayerId = currentPitchedRoofDetails.loftLayerInstanceId;\n\n return {\n ...request,\n layers: request.layers.filter(layer => layer.instanceId !== loftLayerId),\n };\n }\n\n // Adding floorInsulationDetails\n if (currentFloorInsulationDetails?.insulationLayerInstanceId == null && requestFloorInsulationDetails?.insulationLayerInstanceId) {\n return {\n ...request,\n layers: [\n ...request.layers,\n {\n instanceId: requestFloorInsulationDetails.insulationLayerInstanceId,\n id: null,\n thicknessMillimetres: null,\n isReadOnly: true,\n },\n ],\n };\n }\n // Removing floorInsulationDetails\n if (currentFloorInsulationDetails?.insulationLayerInstanceId != null && !requestFloorInsulationDetails?.insulationLayerInstanceId) {\n const insulationLayerId = currentFloorInsulationDetails.insulationLayerInstanceId;\n\n return {\n ...request,\n layers: request.layers.filter(layer => layer.instanceId !== insulationLayerId),\n };\n }\n\n return request;\n};\n\nexport const addConstructionDetailsToCalculation = (\n applicationTypeId: number,\n constructionDetails: ApiConstructionDetailsRequest | undefined,\n rainscreenCladdingDetails: ConstructionRainscreenCladdingDetails | undefined,\n calculationNotes: CalculationNotes | undefined,\n productSectorId: number | undefined,\n projectInsulationVolumeM2: number | undefined\n) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const currentCalculation = getState().calculation.currentCalculation;\n\n if (!currentCalculation) return;\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: currentCalculation.businessUnitId,\n applicationDetails: { id: applicationTypeId },\n layers: [...currentCalculation.layers.map(mapCurrentResponseLayerToRequest)],\n calculationNotes,\n constructionDetails,\n rainscreenCladdingDetails,\n envSettings: currentCalculation.envSettings,\n saveCalculation: true,\n project: currentCalculation.project,\n productSectorId: productSectorId,\n projectInsulationVolumeM2: projectInsulationVolumeM2,\n contact: currentCalculation.contact ?? null,\n };\n\n const requestDataWithLoftDetails = handleAutomaticLayers(currentCalculation, requestData);\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${currentCalculation.calculationId}`,\n requestDataWithLoftDetails\n );\n\n if (!data) return;\n\n const payloadCalculation = {\n ...data,\n order: currentCalculation.order,\n layers: data.layers.map(\n (layer: ApiCalculationResponseLayer): CalculationLayer => ({\n ...layer,\n })\n ),\n };\n\n dispatch({\n type: actionTypes.ADD_CONSTRUCTION_DETAILS_TO_CALCULATION,\n payload: {\n calculation: payloadCalculation,\n },\n });\n };\n};\n\nexport const addLayerToCalculation = (\n instanceId: string,\n layer: MasterDataLayer | null,\n thicknessMillimetres: string | null,\n customReferenceLayer?: CustomReferenceLayer,\n layerBridging?: ApiLayerBridgingRequest,\n mechanicalFastener?: ApiLayerMechanicalFastenerRequest,\n previousAirGapsCorrectionLevelOverride?: AirGapsCorrectionLevel,\n nextAirGapsCorrectionLevelOverride?: AirGapsCorrectionLevel,\n layerNotes?: ApiLayerNotesRequest,\n vapourResistance?: string | null,\n vapourResistivity?: string | null,\n isCalculationInterim: boolean = false\n) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const currentCalculation = getState().calculation.currentCalculation;\n\n if (!currentCalculation) return;\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: currentCalculation.businessUnitId,\n applicationDetails: currentCalculation.applicationDetails,\n calculationNotes: currentCalculation.calculationNotes,\n constructionDetails: currentCalculation.constructionDetails,\n rainscreenCladdingDetails: currentCalculation.rainscreenCladdingDetails,\n layers: [\n ...currentCalculation.layers.map(mapCurrentResponseLayerToRequest),\n {\n id: (customReferenceLayer == null ? layer?.id : null) || null,\n instanceId: instanceId,\n thicknessMillimetres: thicknessMillimetres || null,\n customReferenceLayer,\n layerNotes,\n layerBridging,\n mechanicalFastener,\n ...(nextAirGapsCorrectionLevelOverride &&\n (layer?.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation ||\n layer?.layerMaterialType === LayerMaterialTypeKeys.InvertedInsulation ||\n customReferenceLayer?.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation ||\n customReferenceLayer?.layerMaterialType === LayerMaterialTypeKeys.InvertedInsulation)\n ? {\n airGapsCorrectionOverride: {\n overriddenCalculatedCorrectionFactor: previousAirGapsCorrectionLevelOverride || AirGapsCorrectionLevel.Level0,\n overrideCorrectionFactor: nextAirGapsCorrectionLevelOverride,\n },\n }\n : {}),\n vapourResistance: vapourResistance,\n vapourResistivity: vapourResistivity,\n },\n ],\n envSettings: currentCalculation.envSettings,\n saveCalculation: !isCalculationInterim,\n project: currentCalculation.project,\n productSectorId: currentCalculation.productSectorId,\n projectInsulationVolumeM2: currentCalculation.projectInsulationVolumeM2,\n contact: currentCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${currentCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n\n const payloadCalculation = {\n ...data,\n layers: data.layers,\n project: currentCalculation.project,\n };\n\n if (isCalculationInterim) {\n dispatch({\n type: actionTypes.ADD_LAYER_TO_INTERIM_CALCULATION,\n payload: {\n calculation: {\n ...payloadCalculation,\n order: currentCalculation.order,\n },\n },\n });\n } else {\n dispatch({\n type: actionTypes.ADD_LAYER_TO_CALCULATION,\n payload: {\n calculation: {\n order: currentCalculation.order,\n ...payloadCalculation,\n },\n },\n });\n }\n };\n};\n\nexport const editLayerInCalculation = (\n instanceId: string,\n layer: MasterDataLayer | null,\n thicknessMillimetres: string | null,\n customReferenceLayer?: CustomReferenceLayer,\n layerBridging?: ApiLayerBridgingRequest,\n mechanicalFastener?: ApiLayerMechanicalFastenerRequest,\n previousAirGapsCorrectionLevelOverride?: AirGapsCorrectionLevel,\n nextAirGapsCorrectionLevelOverride?: AirGapsCorrectionLevel,\n layerNotes?: ApiLayerNotesRequest,\n vapourResistance?: string | null,\n vapourResistivity?: string | null,\n isCalculationInterim: boolean = false\n) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const currentCalculation = getState().calculation.currentCalculation;\n\n if (!currentCalculation) return;\n\n const layers = cloneDeep(currentCalculation.layers);\n\n const index = layers.findIndex((layer: CalculationLayer) => layer.instanceId === instanceId);\n\n const nextLayers = [...layers.map(mapCurrentResponseLayerToRequest)];\n\n nextLayers[index] = {\n id: (customReferenceLayer == null ? layer?.id : null) || null,\n instanceId,\n thicknessMillimetres: thicknessMillimetres || null,\n layerNotes,\n customReferenceLayer,\n layerBridging,\n mechanicalFastener,\n ...(nextAirGapsCorrectionLevelOverride &&\n (layer?.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation ||\n layer?.layerMaterialType === LayerMaterialTypeKeys.InvertedInsulation ||\n customReferenceLayer?.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation ||\n customReferenceLayer?.layerMaterialType === LayerMaterialTypeKeys.InvertedInsulation)\n ? {\n airGapsCorrectionOverride: {\n overriddenCalculatedCorrectionFactor: previousAirGapsCorrectionLevelOverride || AirGapsCorrectionLevel.Level0,\n overrideCorrectionFactor: nextAirGapsCorrectionLevelOverride,\n },\n }\n : {}),\n vapourResistance: vapourResistance,\n vapourResistivity: vapourResistivity,\n };\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: currentCalculation.businessUnitId,\n applicationDetails: currentCalculation.applicationDetails,\n calculationNotes: currentCalculation.calculationNotes,\n constructionDetails: currentCalculation.constructionDetails,\n rainscreenCladdingDetails: currentCalculation.rainscreenCladdingDetails,\n layers: nextLayers,\n envSettings: currentCalculation.envSettings,\n saveCalculation: !isCalculationInterim,\n project: currentCalculation.project,\n productSectorId: currentCalculation.productSectorId,\n projectInsulationVolumeM2: currentCalculation.projectInsulationVolumeM2,\n contact: currentCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${currentCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n\n const payloadCalculation = {\n ...data,\n layers: data.layers.map(\n (layer: ApiCalculationResponseLayer): CalculationLayer => ({\n ...layer,\n })\n ),\n };\n\n if (isCalculationInterim) {\n dispatch({\n type: actionTypes.EDIT_LAYER_IN_INTERIM_CALCULATION,\n payload: {\n calculation: {\n ...payloadCalculation,\n order: currentCalculation.order,\n },\n },\n });\n } else {\n dispatch({\n type: actionTypes.EDIT_LAYER_IN_CALCULATION,\n payload: {\n calculation: {\n ...payloadCalculation,\n order: currentCalculation.order,\n },\n },\n });\n }\n };\n};\n\nexport const clearInterimCalculation = () => {\n return async (dispatch: AppDispatch) => {\n dispatch({\n type: actionTypes.CLEAR_INTERIM_CALCULATION,\n });\n };\n};\n\nexport const moveLayerInCalculation = (movedLayerInstanceId: string, targetLayerInstanceId: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n if (movedLayerInstanceId === targetLayerInstanceId) return;\n\n const { currentCalculation } = getState().calculation;\n\n if (!currentCalculation) return;\n\n const layers = cloneDeep(currentCalculation.layers);\n\n const movedLayerIndex = layers.findIndex((layer: CalculationLayer) => layer.instanceId === movedLayerInstanceId);\n const movedLayer = layers[movedLayerIndex];\n\n // Remove the moved layer from it's current position\n layers.splice(movedLayerIndex, 1);\n\n const targetLayerIndex = layers.findIndex((layer: CalculationLayer) => layer.instanceId === targetLayerInstanceId);\n\n // Insert the moved layer before the target layer\n if (targetLayerIndex >= 0) {\n layers.splice(targetLayerIndex, 0, movedLayer);\n } else {\n /**\n * If we can't find the target layer then the target is the Outside Surface,\n * so move the moved layer to the end of the layers list.\n */\n layers.push(movedLayer);\n }\n\n /**\n * We will update the layer order locally immediately while we wait for the API to\n * respond to prevent strange-looking behaviour where the moved layer pings back to\n * its original location for the interim period before the API responds.\n */\n dispatch({\n type: actionTypes.INTERIM_MOVE_LAYER_IN_CALCULATION,\n payload: {\n calculation: {\n ...currentCalculation,\n layers,\n },\n },\n });\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: currentCalculation.businessUnitId,\n applicationDetails: currentCalculation.applicationDetails,\n calculationNotes: currentCalculation.calculationNotes,\n constructionDetails: currentCalculation.constructionDetails,\n rainscreenCladdingDetails: currentCalculation.rainscreenCladdingDetails,\n layers: [...layers.map(mapCurrentResponseLayerToRequest)],\n envSettings: currentCalculation.envSettings,\n saveCalculation: true,\n project: currentCalculation.project,\n productSectorId: currentCalculation.productSectorId,\n projectInsulationVolumeM2: currentCalculation.projectInsulationVolumeM2,\n contact: currentCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${currentCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n\n dispatch({\n type: actionTypes.MOVE_LAYER_IN_CALCULATION,\n payload: {\n calculation: {\n ...data,\n order: currentCalculation.order,\n },\n },\n });\n };\n};\n\nexport const duplicateLayerInCalculation = (instanceId: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const currentCalculation: Calculation | null = getState().calculation.currentCalculation;\n\n if (!currentCalculation) return;\n\n const layers = cloneDeep(currentCalculation.layers);\n\n const index = layers.findIndex((layer: CalculationLayer) => layer.instanceId === instanceId);\n const layer = layers.find((layer: CalculationLayer) => layer.instanceId === instanceId)!;\n\n const clonedLayer = {\n ...cloneDeep(layer),\n instanceId: uuid(),\n };\n\n if (index >= 0) {\n // Insert new layer after selected one\n layers.splice(index + 1, 0, clonedLayer);\n }\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: currentCalculation.businessUnitId,\n applicationDetails: currentCalculation.applicationDetails,\n calculationNotes: currentCalculation.calculationNotes,\n constructionDetails: currentCalculation.constructionDetails,\n rainscreenCladdingDetails: currentCalculation.rainscreenCladdingDetails,\n layers: layers.map(mapCurrentResponseLayerToRequest),\n envSettings: currentCalculation.envSettings,\n saveCalculation: true,\n project: currentCalculation.project,\n productSectorId: currentCalculation.productSectorId,\n projectInsulationVolumeM2: currentCalculation.projectInsulationVolumeM2,\n contact: currentCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${currentCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n\n dispatch({\n type: actionTypes.DUPLICATE_LAYER_IN_CALCULATION,\n payload: {\n calculation: {\n ...data,\n order: currentCalculation.order,\n layers: data.layers.map(\n (layer: ApiCalculationResponseLayer): CalculationLayer => ({\n ...layer,\n })\n ),\n },\n },\n });\n };\n};\n\nexport const lockCalculation = (calculationId: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n let isCurrentCalculation = true;\n let calculation: Calculation | null = getState().calculation.currentCalculation;\n if (calculationId !== calculation?.calculationId) {\n calculation = cloneDeep(getState().inactiveCalculations.find(c => c.calculationId === calculationId))!;\n isCurrentCalculation = false;\n }\n\n if (!calculation) return;\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: calculation.businessUnitId,\n applicationDetails: calculation.applicationDetails,\n calculationNotes: calculation.calculationNotes,\n constructionDetails: calculation.constructionDetails,\n rainscreenCladdingDetails: calculation.rainscreenCladdingDetails,\n layers: calculation.layers.map(mapCurrentResponseLayerToRequest),\n envSettings: calculation.envSettings,\n saveCalculation: true,\n project: calculation.project,\n locked: true,\n productSectorId: calculation.productSectorId,\n projectInsulationVolumeM2: calculation.projectInsulationVolumeM2,\n contact: calculation.contact ?? null,\n };\n\n const data = await requestCalculation(dispatch, 'PUT', `/Calculation/${calculationId}`, requestData);\n\n if (!data) return;\n\n dispatch({\n type: actionTypes.LOCK_CALCULATION,\n payload: {\n isCurrentCalculation,\n calculation: data,\n },\n });\n };\n};\n\nexport const removeLayerFromCalculation = (instanceId: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const currentCalculation: Calculation | null = getState().calculation.currentCalculation;\n\n if (!currentCalculation) return;\n\n const layers = cloneDeep(currentCalculation.layers);\n\n const index = layers.findIndex((layer: CalculationLayer) => layer.instanceId === instanceId);\n\n if (index >= 0) {\n layers.splice(index, 1);\n }\n\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: currentCalculation.businessUnitId,\n applicationDetails: currentCalculation.applicationDetails,\n calculationNotes: currentCalculation.calculationNotes,\n constructionDetails: currentCalculation.constructionDetails,\n rainscreenCladdingDetails: currentCalculation.rainscreenCladdingDetails,\n layers: layers.map(mapCurrentResponseLayerToRequest),\n envSettings: currentCalculation.envSettings,\n saveCalculation: true,\n project: currentCalculation.project,\n productSectorId: currentCalculation.productSectorId,\n projectInsulationVolumeM2: currentCalculation.projectInsulationVolumeM2,\n contact: currentCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${currentCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n\n dispatch({\n type: actionTypes.REMOVE_LAYER_FROM_CALCULATION,\n payload: {\n calculation: {\n ...data,\n order: currentCalculation.order,\n layers: data.layers.map(\n (layer: ApiCalculationResponseLayer): CalculationLayer => ({\n ...layer,\n })\n ),\n },\n },\n });\n };\n};\n\nexport const changeActiveCalculation = (calculationId: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const previousActiveCalculation: Calculation = cloneDeep(getState().calculation.currentCalculation)!;\n const newActiveCalculation: Calculation = cloneDeep(getState().inactiveCalculations.find(c => c.calculationId === calculationId))!;\n\n dispatch({\n type: actionTypes.CHANGE_ACTIVE_CALCULATION,\n payload: {\n previousActiveCalculation,\n newActiveCalculation,\n },\n });\n };\n};\n\nexport const createNewCalculation = (businessUnitId: number) => {\n return async (dispatch: AppDispatch) => {\n await dispatch(registerCalculation(businessUnitId));\n };\n};\n\nexport const copyCalculation = () => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const currentState = getState();\n const previousActiveCalculation: Calculation = cloneDeep(currentState.calculation.currentCalculation)!;\n const { inactiveCalculations } = currentState;\n\n await dispatch(registerCalculation(previousActiveCalculation.businessUnitId));\n\n await dispatch({\n type: actionTypes.SET_ACTIVE_CALCULATION_DATA,\n payload: {\n newCalculationData: { ...previousActiveCalculation, ...{ locked: false } },\n shouldUseExistingCalculationId: false,\n /**\n * To put the copied calculation at the end of the list, we want the order to be 1 greater\n * than the combined length of all open calculations (including the active one).\n */\n order: inactiveCalculations.length + 2,\n },\n });\n\n const newActiveCalculation: Calculation = cloneDeep(getState().calculation.currentCalculation)!;\n\n await requestCalculation(dispatch, 'PUT', `/Calculation/${newActiveCalculation.calculationId}`, {\n businessUnitId: newActiveCalculation.businessUnitId,\n applicationDetails: newActiveCalculation.applicationDetails,\n calculationNotes: newActiveCalculation.calculationNotes,\n constructionDetails: newActiveCalculation.constructionDetails,\n rainscreenCladdingDetails: newActiveCalculation.rainscreenCladdingDetails,\n layers: [...newActiveCalculation.layers.map(mapCurrentResponseLayerToRequest)],\n envSettings: newActiveCalculation.envSettings,\n saveCalculation: true,\n locked: false,\n project: newActiveCalculation.project,\n contact: newActiveCalculation.contact ?? null,\n });\n\n /**\n * It may look like the new calculation has copied over the project correctly by this\n * point, but we need to make an association in the database for this to persist when\n * the calculation is closed and re-opened.\n */\n if (newActiveCalculation.project) {\n await dispatch(associateProject(newActiveCalculation.project, false, false));\n }\n if (newActiveCalculation.contact) {\n await dispatch(associateContact(newActiveCalculation.contact, false, false));\n }\n };\n};\n\nexport const addEnvConditionOverrides = (envConditionOverrides: EnvConditionOverride[]) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n const mergedOverrides = cloneDeep([...(interimCalculation.envSettings?.envConditionOverrides || [])]);\n envConditionOverrides.forEach(o => {\n const existingOverride = mergedOverrides.find(m => m.envConditionType === o.envConditionType);\n if (existingOverride) {\n o.months.forEach(om => {\n const existingMonth = existingOverride.months.find(em => em.id === om.id);\n if (existingMonth) {\n existingMonth.value = om.value;\n } else {\n existingOverride.months.push({ ...om });\n }\n });\n } else {\n mergedOverrides.push({ ...o, months: [...o.months] });\n }\n });\n\n const updatedEnvSettings = {\n ...interimCalculation.envSettings!,\n envConditionOverrides: mergedOverrides,\n };\n\n await editEnvSettings(dispatch, getState, updatedEnvSettings);\n };\n};\n\nexport const clearEnvConditionOverrides = () => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n const updatedEnvSettings = {\n ...interimCalculation.envSettings!,\n envConditionOverrides: [],\n };\n\n await editEnvSettings(dispatch, getState, updatedEnvSettings);\n };\n};\n\nexport const setBuildingRegion = (buildingRegionId: number) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n const updatedOverrides = [...(interimCalculation.envSettings?.envConditionOverrides || [])].filter(\n o =>\n o.envConditionType !== EnvConditionType.ExternalRelativeHumidity &&\n o.envConditionType !== EnvConditionType.ExternalTemperature &&\n o.envConditionType !== EnvConditionType.InternalRelativeHumidity\n );\n\n const updatedEnvSettings: EnvSettings = {\n ...interimCalculation.envSettings,\n buildingRegionId: buildingRegionId,\n envConditionOverrides: updatedOverrides,\n };\n await editEnvSettings(dispatch, getState, updatedEnvSettings);\n };\n};\n\nexport const setBuildingType = (buildingTypeId: number) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n const updatedOverrides = [...(interimCalculation.envSettings?.envConditionOverrides || [])].filter(\n o => o.envConditionType !== EnvConditionType.InternalRelativeHumidity\n );\n\n const updatedEnvSettings: EnvSettings = {\n ...interimCalculation.envSettings,\n buildingTypeId: buildingTypeId,\n envConditionOverrides: updatedOverrides,\n };\n await editEnvSettings(dispatch, getState, updatedEnvSettings);\n };\n};\n\nexport const setRiskLevel = (riskLevelId: number) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n const updatedOverrides = [...(interimCalculation.envSettings?.envConditionOverrides || [])].filter(\n o =>\n o.envConditionType !== EnvConditionType.ExternalRelativeHumidity &&\n o.envConditionType !== EnvConditionType.ExternalTemperature &&\n o.envConditionType !== EnvConditionType.InternalRelativeHumidity\n );\n\n const updatedEnvSettings: EnvSettings = {\n ...interimCalculation.envSettings,\n riskLevelId: riskLevelId,\n envConditionOverrides: updatedOverrides,\n };\n await editEnvSettings(dispatch, getState, updatedEnvSettings);\n };\n};\n\nexport const setInternalTemperature = (internalTemperature: string) => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n const updatedOverrides = [...(interimCalculation.envSettings?.envConditionOverrides || [])].filter(\n o => o.envConditionType !== EnvConditionType.InternalRelativeHumidity && o.envConditionType !== EnvConditionType.InternalTemperature\n );\n\n const updatedEnvSettings: EnvSettings = {\n ...interimCalculation.envSettings,\n internalTemperature: internalTemperature,\n envConditionOverrides: updatedOverrides,\n };\n await editEnvSettings(dispatch, getState, updatedEnvSettings);\n };\n};\n\nconst editEnvSettings = async (\n dispatch: AppDispatch,\n getState: () => RootState,\n updatedEnvSettings: EnvSettings\n) => {\n const interimCalculation = getState().calculation.interimCalculation || cloneDeep(getState().calculation.currentCalculation);\n\n if (!interimCalculation) return;\n\n dispatch({\n type: actionTypes.EDIT_ENV_SETTINGS,\n payload: {\n calculation: {\n ...interimCalculation,\n envSettings: { ...updatedEnvSettings },\n },\n },\n });\n\n if (\n updatedEnvSettings.buildingRegionId &&\n updatedEnvSettings.buildingTypeId &&\n updatedEnvSettings.riskLevelId &&\n updatedEnvSettings.internalTemperature &&\n !isNaN(Number(updatedEnvSettings.internalTemperature))\n ) {\n const requestData: ApiPutCalculationRequest = {\n businessUnitId: interimCalculation.businessUnitId,\n applicationDetails: interimCalculation.applicationDetails,\n calculationNotes: interimCalculation.calculationNotes,\n constructionDetails: interimCalculation.constructionDetails,\n rainscreenCladdingDetails: interimCalculation.rainscreenCladdingDetails,\n envSettings: updatedEnvSettings,\n layers: interimCalculation.layers.map(mapCurrentResponseLayerToRequest),\n saveCalculation: false,\n project: interimCalculation.project,\n productSectorId: interimCalculation.productSectorId,\n projectInsulationVolumeM2: interimCalculation.projectInsulationVolumeM2,\n contact: interimCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${interimCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n\n dispatch({\n type: actionTypes.EDIT_ENV_CONDITIONS,\n payload: {\n calculation: {\n ...data,\n order: interimCalculation.order,\n },\n },\n });\n }\n};\n\nexport const saveEnvConditions = () => {\n return async (dispatch: AppDispatch, getState: () => RootState) => {\n const interimCalculation = getState().calculation.interimCalculation;\n\n if (!interimCalculation) return;\n\n const requestData: ApiPutCalculationRequest = {\n ...interimCalculation,\n layers: interimCalculation.layers.map(mapCurrentResponseLayerToRequest),\n saveCalculation: true,\n contact: interimCalculation.contact ?? null,\n };\n\n const data = await requestCalculation(\n dispatch,\n 'PUT',\n `/Calculation/${interimCalculation.calculationId}`,\n requestData\n );\n\n if (!data) return;\n dispatch({\n type: actionTypes.SAVE_ENV_CONDITIONS,\n payload: {\n calculation: {\n ...data,\n order: interimCalculation.order,\n },\n },\n });\n };\n};\n","import React from 'react';\nimport { Tabs, Tab, Fade } from '@material-ui/core';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport ClipboardIcon from '@material-ui/icons/Assignment';\nimport copy from 'copy-to-clipboard';\nimport { useSnackbar } from 'notistack';\n\nimport styles from './CalculationNavigation.module.scss';\n\ntype Props = {\n items: string[];\n currentItem?: string;\n handleChange: (_: any, selectedItem: string) => void;\n handleTabClose: () => void;\n handleTabCopy: () => void;\n};\n\nexport function CalculationNavigation({ items, currentItem, handleChange, handleTabClose, handleTabCopy }: Props) {\n const { enqueueSnackbar } = useSnackbar();\n\n const handleTabClick = (item: string) => {\n copy(item);\n\n enqueueSnackbar(\n \n \n Copied to clipboard\n ,\n { variant: 'default', autoHideDuration: 750, TransitionComponent: Fade }\n );\n };\n\n const getTabContent = (item: string) => {\n const isSelected = item === currentItem;\n\n return (\n
\n
handleTabClick(item)}>\n {item}\n
\n\n {isSelected && (\n \n
\n handleTabCopy()} />\n
\n\n
\n handleTabClose()} />\n
\n
\n )}\n
\n );\n };\n\n return (\n
\n \n {items.map((item, index) => (\n \n ))}\n \n
\n );\n}\n","import React from 'react';\nimport { CircularProgress, Grid, Tooltip } from '@material-ui/core';\nimport { Info, Lock } from '@material-ui/icons';\nimport classnames from 'classnames';\n\nimport { BusinessUnitModel } from '../../types/store/userProfileTypes';\nimport styles from './CalculationResults.module.scss';\n\ntype Props = {\n uValue: string;\n uValue2DP: string;\n totalThermalResistance: string;\n isTotalCorrectionFactorBelowThreshold: boolean;\n condensationResult: string;\n isLocked?: boolean;\n businessUnit?: BusinessUnitModel | null;\n isLoadingMasterData?: boolean;\n};\n\nexport function CalculationResults(props: Props) {\n return (\n
\n
\n \n \n
\n {props.isLoadingMasterData === true\n ?
\n \n
\n : <>\n
\n Business Unit\n
\n
\n {props.businessUnit\n ? \n Business Unit {props.businessUnit.businessUnitId}
\n {props.businessUnit.countryName}\n }\n >\n \n {props.businessUnit.name}\n \n
\n : '—'}\n
\n }\n
\n
\n\n \n
\n
\n Condensation Risk\n
\n \n {props.condensationResult || '—'}\n
\n
\n \n\n \n
\n
\n Total Thermal Resistance\n
\n
\n {props.totalThermalResistance || '—'}\n
\n
\n m²K/W\n
\n
\n
\n\n \n
\n
\n U-Value\n
\n
\n {props.uValue || '—'}\n\n {props.uValue2DP && (\n \n ({props.uValue2DP})\n \n )}\n\n {props.isTotalCorrectionFactorBelowThreshold && (\n \n \n \n \n \n )}\n {props.isLocked && (\n \n \n \n \n \n )}\n
\n
\n W/m²K\n
\n
\n
\n \n
\n \n );\n}\n","import React, { ReactNode } from 'react';\n\nexport type TabPanelProps = {\n children?: ReactNode;\n id: string;\n 'data-qa-id': string;\n targetIndex: number;\n currentTabIndex: number | false;\n 'aria-labelledby': string;\n};\n\nexport function TabPanel(props: TabPanelProps) {\n const { children, currentTabIndex, targetIndex, id, 'aria-labelledby': ariaLabelledBy, 'data-qa-id': dataQaId } = props;\n return (\n \n );\n}\n","import React, { FormEvent } from 'react';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Typography,\n Grid,\n Button,\n InputLabel,\n TextField,\n Paper,\n} from '@material-ui/core';\nimport { cloneDeep } from 'lodash';\nimport { EnvCondition, MonthValue, EnvConditionType, EnvConditionOverride } from '../../types/store/calculationTypes';\n\nimport styles from './EnvConditionsEditorModal.module.scss';\n\ntype OverrideMonth = MonthValue & {\n overridden: boolean;\n};\n\ntype OverrideEnvCondition = {\n envConditionType: EnvConditionType;\n months: OverrideMonth[];\n name: string;\n unit: string;\n};\n\ntype EnvConditionsEditorModalProps = {\n envConditions: EnvCondition[];\n monthKey: number;\n onClose: () => void;\n onMoveToNextMonth: () => void;\n onMoveToPrevMonth: () => void;\n onSubmit: (overrides: EnvConditionOverride[]) => void;\n isLocked?: boolean;\n};\n\nexport const EnvConditionsEditorModal: React.FC = ({\n envConditions,\n monthKey,\n onClose,\n onMoveToNextMonth,\n onMoveToPrevMonth,\n onSubmit,\n isLocked,\n}) => {\n const dateTimeFormat = new Intl.DateTimeFormat('en-GB', { month: 'long' });\n\n const [editableConditions, setEditableConditions] = React.useState(\n envConditions.map(e => ({\n envConditionType: e.envConditionType,\n name: e.name,\n months: e.months.map(m => ({\n id: m.id,\n name: m.name,\n overridden: false,\n value: m.value,\n })),\n unit: e.unit,\n }))\n );\n\n const handleDialogCancel = () => {\n onClose();\n };\n\n const overrides = editableConditions\n .filter(e => e.months.some(m => m.overridden))\n .map(e => ({\n envConditionType: e.envConditionType,\n months: e.months\n .filter(m => m.overridden)\n .map(m => ({\n id: m.id,\n value: m.value,\n })),\n }));\n\n const handleSubmitMonthValues = (event: FormEvent) => {\n event.preventDefault();\n onSubmit(overrides);\n onClose();\n };\n\n const isInvalid =\n overrides.length === 0 ||\n editableConditions.flatMap((o: OverrideEnvCondition): string[] => o.months.map(m => m.value)).some(v => v === '' || isNaN(Number(v)));\n\n const handleMonthValueChange = (envConditionType: EnvConditionType) => ({ target: { value } }: React.ChangeEvent) => {\n setEditableConditions(prevState => {\n const updatedConditions = cloneDeep(prevState);\n const conditionToUpdate = updatedConditions.find(o => o.envConditionType === envConditionType);\n if (conditionToUpdate) {\n const monthToUpdate = conditionToUpdate.months.find(m => m.id === monthKey);\n if (monthToUpdate) {\n monthToUpdate.overridden = true;\n monthToUpdate.value = value;\n return updatedConditions;\n }\n }\n return prevState;\n });\n };\n\n return (\n \n
\n
\n Update Values\n
\n\n
\n \n \n \n \n \n \n \n \n {dateTimeFormat.format(new Date(1, monthKey - 1, 1))}\n \n \n \n \n \n \n \n \n
\n \n {editableConditions.map(({ envConditionType, name, months, unit }) => (\n \n \n {name}\n \n\n \n \n \n \n\n \n
\n {unit}\n
\n
\n
\n
\n ))}\n
\n
\n
\n
\n
\n
\n
\n\n
\n \n \n \n \n \n\n \n \n Done\n \n \n \n \n
\n
\n
\n );\n};\n","import React from 'react';\nimport { debounce, Cancelable } from 'lodash';\n\nexport const useDebounce = function(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = React.useState(null);\n\n const debounceState = React.useRef<((value: any) => void) & Cancelable>(debounce(newValue => setDebouncedValue(newValue), delay));\n\n React.useEffect(() => {\n const { current } = debounceState;\n current(value);\n return () => current.cancel();\n }, [delay, value]);\n\n return debouncedValue;\n};\n","import React from 'react';\n\n/**\n * Returns the value from the previous render\n * Can be used inside a useEffect to help determine which of the dependencies has changed\n *\n * @param value The value to track\n */\nexport const usePrevious = function(value: T): T | undefined {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n","import React, { ChangeEvent } from 'react';\nimport { TextField } from '@material-ui/core';\nimport { useDebounce } from '../../Utilities/hooks/useDebounce';\nimport { usePrevious } from '../../Utilities/hooks/usePrevious';\n\nexport type DebouncedDecimalInputProps = {\n delay: number;\n onChange: (value: string) => void;\n precision: number;\n textFieldId: string;\n value: string;\n disabled?: boolean;\n};\n\nexport function DebouncedDecimalInput(props: DebouncedDecimalInputProps) {\n const { delay, onChange, precision, textFieldId, value, disabled } = props;\n\n const [localValue, setLocalValue] = React.useState(value);\n const prevValue = usePrevious(value);\n const debouncedValue = useDebounce(localValue, delay);\n const prevDebouncedValue = usePrevious(debouncedValue);\n\n React.useEffect(() => {\n // handle prop change\n if (value !== prevValue) {\n setLocalValue(value);\n return;\n }\n\n // cast to number to allow for number being returned with zeroes added\n var newNumber = debouncedValue === '' ? NaN : Number(debouncedValue);\n var currentNumber = value === '' ? NaN : Number(value);\n\n if (\n debouncedValue !== prevDebouncedValue &&\n newNumber.toFixed(precision) !== currentNumber.toFixed(precision) &&\n (!isNaN(newNumber) || debouncedValue === '')\n ) {\n onChange(debouncedValue);\n }\n }, [onChange, debouncedValue, value, prevDebouncedValue, prevValue, precision, setLocalValue]);\n\n return (\n ) => setLocalValue(event.target.value)}\n placeholder={(0).toFixed(precision)}\n value={localValue}\n variant=\"outlined\"\n disabled={disabled}\n />\n );\n}\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Grid, InputLabel, Select, MenuItem, Paper, Button } from '@material-ui/core';\nimport MaterialTable, { MTableCell, Column } from 'material-table';\nimport { TabPanel } from '../LayerModal/TabPanel';\nimport { EnvConditionsEditorModal } from './EnvConditionsEditorModal';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\nimport {\n buildingRegionSelector,\n buildingTypeSelector,\n riskLevelSelector,\n envConditionsSelector,\n envSettingsSelector,\n} from '../../store/selectors';\nimport { MasterDataBuildingRegion, MasterDataBuildingType, MasterDataRiskLevel } from '../../types/store/masterDataTypes';\nimport { EnvCondition, EnvSettings, EnvConditionOverride } from '../../types/store/calculationTypes';\nimport {\n addEnvConditionOverrides,\n setBuildingRegion,\n setBuildingType,\n setInternalTemperature,\n setRiskLevel,\n clearEnvConditionOverrides,\n} from '../../actions/calculationActions';\n\nimport styles from './CondensationRiskModal.module.scss';\nimport tableStyles from './EnvConditionsTab.module.scss';\nimport { DebouncedDecimalInput } from '../FormComponents/DebouncedDecimalInput/DebouncedDecimalInput';\n\nexport type CoreEnvConditionsTabProps = {\n setIsInvalid: React.Dispatch>;\n isLocked?: boolean;\n};\n\nexport type EnvConditionsTabProps = CoreEnvConditionsTabProps & TabIndexInfo;\n\ntype State = {\n isEditorOpen: boolean;\n monthEditKey: number;\n};\n\ntype KeyedColumn = Column & {\n key: number;\n};\n\nconst dateTimeFormat = new Intl.DateTimeFormat('en-GB', { month: 'short' });\nconst monthColumns: KeyedColumn[] = new Array(12).fill({}).map((_, i) => ({\n field: `months[${i}].value`,\n key: i + 1,\n title: dateTimeFormat.format(new Date(1, i, 1)),\n}));\nconst columns = [\n ...[],\n {\n field: 'name',\n key: 0,\n render: (rowdata: EnvCondition) => {`${rowdata.name} (${rowdata.unit})`},\n title: '',\n },\n ...monthColumns,\n];\n\nexport function EnvConditionsTab(props: EnvConditionsTabProps) {\n const { currentTabIndex, setIsInvalid, targetIndex } = props;\n const dispatch = useDispatch();\n const buildingRegions: MasterDataBuildingRegion[] = useSelector(buildingRegionSelector);\n const buildingTypes: MasterDataBuildingType[] = useSelector(buildingTypeSelector);\n const riskLevels: MasterDataRiskLevel[] = useSelector(riskLevelSelector);\n const environmentalConditions: EnvCondition[] | undefined = useSelector(envConditionsSelector);\n const envSettings: EnvSettings | undefined = useSelector(envSettingsSelector);\n\n const [state, setState] = React.useState({\n isEditorOpen: false,\n monthEditKey: 1,\n });\n\n React.useEffect(() => {\n if (!envSettings) {\n dispatch(setRiskLevel(4));\n dispatch(setInternalTemperature('20'));\n }\n }, [dispatch, envSettings]);\n\n React.useEffect(() => {\n if (\n envSettings?.buildingRegionId &&\n envSettings?.buildingTypeId &&\n envSettings?.internalTemperature &&\n !isNaN(Number(envSettings?.internalTemperature))\n ) {\n setIsInvalid(false);\n } else {\n setIsInvalid(true);\n }\n }, [setIsInvalid, envSettings]);\n\n const handleBuildingRegionChange = React.useCallback(\n ({ target: { value } }: React.ChangeEvent) => {\n dispatch(setBuildingRegion(value));\n },\n [dispatch]\n );\n\n const handleBuildingTypeChange = React.useCallback(\n ({ target: { value } }: React.ChangeEvent) => {\n dispatch(setBuildingType(value));\n },\n [dispatch]\n );\n\n const handleInternalTemperatureChange = React.useCallback(\n (value: string) => {\n dispatch(setInternalTemperature(value));\n },\n [dispatch]\n );\n\n const handleRiskLevelChange = React.useCallback(\n ({ target: { value } }: React.ChangeEvent) => {\n dispatch(setRiskLevel(value));\n },\n [dispatch]\n );\n\n const getEnvConditions = React.useCallback(() => (environmentalConditions || []).map(ec => ({ ...ec })), [environmentalConditions]);\n\n const handleRowClick = React.useCallback(\n (key: number) => () => {\n if (key > 0) {\n setState(prevState => ({\n ...prevState,\n isEditorOpen: true,\n monthEditKey: key,\n }));\n }\n },\n []\n );\n\n const handleEditorClose = () => {\n setState({\n ...state,\n isEditorOpen: false,\n });\n };\n\n const handleEditorSubmit = React.useCallback(\n (envConditionOverrides: EnvConditionOverride[]) => {\n dispatch(addEnvConditionOverrides(envConditionOverrides));\n },\n [dispatch]\n );\n\n const handleResetClick = React.useCallback(() => {\n dispatch(clearEnvConditionOverrides());\n }, [dispatch]);\n\n const handleMoveToNextMonth = () => {\n setState(prevState => {\n const { monthEditKey } = prevState;\n if (monthEditKey < 12) {\n return {\n ...prevState,\n monthEditKey: monthEditKey + 1,\n };\n }\n return prevState;\n });\n };\n\n const handleMoveToPrevMonth = () => {\n setState(prevState => {\n const { monthEditKey } = prevState;\n if (monthEditKey > 1) {\n return {\n ...prevState,\n monthEditKey: monthEditKey - 1,\n };\n }\n return prevState;\n });\n };\n\n return (\n \n
\n \n \n \n Building region\n \n\n \n {buildingRegions.map(buildingRegion => {\n return (\n \n {buildingRegion.name}\n \n );\n })}\n \n \n \n \n Internal humidity class\n \n\n \n {buildingTypes.map(buildingType => {\n return (\n \n {buildingType.name}\n \n );\n })}\n \n \n \n \n Risk level\n \n\n \n {riskLevels.map(riskLevel => {\n return (\n \n {riskLevel.name}\n \n );\n })}\n \n \n \n \n Internal temp\n \n\n \n \n \n \n\n \n
\n °C\n
\n
\n
\n
\n \n (\n
\n \n
\n ),\n Cell: renderProps => {\n const {\n columnDef: { key },\n } = renderProps;\n return (\n \n \n \n );\n },\n }}\n localization={{\n body: {\n emptyDataSourceMessage: 'Please select a Building Region and Internal Humidity Class',\n },\n }}\n />\n
\n \n \n \n \n Reset\n \n \n \n \n
\n
\n {state.isEditorOpen && (\n \n )}\n \n );\n}\n","import React from 'react';\nimport { Grid, InputLabel, Select, MenuItem, Paper } from '@material-ui/core';\nimport MaterialTable, { Column } from 'material-table';\n\nimport { TabPanel } from '../LayerModal/TabPanel';\nimport { interstitialInterfaceSelector } from '../../store/selectors';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\n\nimport modalStyles from './CondensationRiskModal.module.scss';\nimport tableStyles from './EnvConditionsTab.module.scss';\nimport { useSelector } from 'react-redux';\nimport { InterstitialInterface } from '../../types/store/calculationTypes';\n\nexport type CondensationResultsTabProps = TabIndexInfo & { isLocked?: boolean };\n\ntype TableRow = {\n condensationProperty: string;\n months: string[];\n};\n\nconst dateTimeFormat = new Intl.DateTimeFormat('en-GB', { month: 'short' });\nconst monthColumns: Column[] = new Array(12).fill({}).map((_, i) => ({\n field: `months[${i}]`,\n key: i + 1,\n title: dateTimeFormat.format(new Date(1, i, 1)),\n}));\nconst columns = [\n ...[],\n {\n field: 'name',\n key: 0,\n render: (rowdata: TableRow) => {rowdata.condensationProperty},\n title: '',\n },\n ...monthColumns,\n];\n\nexport function CondensationResultsTab({ currentTabIndex, targetIndex, isLocked }: CondensationResultsTabProps) {\n const interstitialInterfaces: InterstitialInterface[] = useSelector(interstitialInterfaceSelector);\n const [selectedInterfaceId, setSelectedInterfaceId] = React.useState();\n const selectedInterface = interstitialInterfaces.find(i => i.id === selectedInterfaceId);\n\n const handleSelectedInterfaceIdChange = ({ target: { value } }: React.ChangeEvent) => {\n setSelectedInterfaceId(value);\n };\n\n const createTableRows: () => TableRow[] = () => {\n if (selectedInterface) {\n return [\n {\n condensationProperty: 'Saturation Vapour Pressure (kPa)',\n months: selectedInterface.months.map(m => m.saturationVapourPressure),\n },\n {\n condensationProperty: 'Vapour Pressure (kPa)',\n months: selectedInterface.months.map(m => m.vapourPressure),\n },\n {\n condensationProperty: 'Gc (kg/m2)',\n months: selectedInterface.months.map(m => m.condensationAmount),\n },\n {\n condensationProperty: 'Ma (kg/m2)',\n months: selectedInterface.months.map(m => m.condensationAccumulationAmount),\n },\n ];\n }\n return [];\n };\n\n React.useEffect(() => {\n setSelectedInterfaceId(interstitialInterfaces[0]?.id);\n }, [interstitialInterfaces]);\n\n return (\n \n
\n \n \n \n Interface\n \n\n \n {interstitialInterfaces.map(interstitialInterface => {\n return (\n \n {interstitialInterface.name}\n \n );\n })}\n \n \n \n (\n
\n \n
\n ),\n }}\n localization={{\n body: {\n emptyDataSourceMessage: 'No interfaces defined',\n },\n }}\n />\n
\n
\n
\n \n );\n}\n","import React from 'react';\nimport { Tabs, Tab } from '@material-ui/core';\nimport styles from './CondensationRiskModal.module.scss';\nimport { CoreEnvConditionsTabProps, EnvConditionsTab } from './EnvConditionsTab';\nimport { CondensationResultsTab } from './CondensationResultsTab';\n\nexport type CondensationRiskTabsProps = CoreEnvConditionsTabProps;\n\nconst envConditionsTabIndex = 0;\nconst condensationResultsTabIndex = 1;\n\nexport function CondensationRiskTabs(props: CondensationRiskTabsProps) {\n const [tabIndex, setTabIndex] = React.useState(envConditionsTabIndex);\n\n const handleTabChange = (_event: React.ChangeEvent<{}>, newTabIndex: number) => {\n setTabIndex(newTabIndex);\n };\n\n return (\n \n \n \n \n \n\n {tabIndex !== false && (\n
\n \n \n
\n )}\n
\n );\n}\n","import React, { FormEvent } from 'react';\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, Typography } from '@material-ui/core';\n\nimport styles from './CondensationRiskModal.module.scss';\nimport { CondensationRiskTabs } from './CondensationRiskTabs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { clearInterimCalculation, saveEnvConditions } from '../../actions/calculationActions';\nimport { Calculation } from '../../types/store/calculationTypes';\nimport { interimOrCurrentCalculationSelector } from '../../store/selectors';\n\ntype Props = {\n onClose: () => void;\n};\n\nexport function CondensationRiskModal(props: Props) {\n const dispatch = useDispatch();\n const [isInvalid, setIsInvalid] = React.useState(true);\n const calculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n\n const handleDialogCancel = React.useCallback(() => {\n dispatch(clearInterimCalculation());\n props.onClose();\n }, [dispatch, props]);\n\n const handleSaveEnvConditions = React.useCallback(\n (event: FormEvent) => {\n event.preventDefault();\n dispatch(saveEnvConditions());\n props.onClose();\n },\n [dispatch, props]\n );\n\n return (\n \n
\n \n \n Condensation Risk\n \n \n
\n\n
\n \n \n \n
\n\n
\n \n
\n \n \n \n \n\n \n \n Save\n \n \n \n
\n
\n
\n
\n );\n}\n","import React, { ChangeEvent, useState } from 'react';\nimport { Grid, InputLabel, TextField } from '@material-ui/core';\n\nimport styles from '../LayerModal/LayerModal.module.scss';\nimport { TabPanel } from '../LayerModal/TabPanel';\nimport { ConstructionModalState } from './ConstructionModalStateTypes';\nimport { MasterDataCalculationTitle } from '../../types/store/masterDataTypes';\nimport { Autocomplete } from '@material-ui/lab';\nimport { useSelector } from 'react-redux';\nimport { calculationTitleSelector } from '../../store/selectors';\n\nexport type NotesTabProps = {\n selectedTab: number | false;\n calculationTitle: string | null;\n notes: string | null;\n setLocalState: (value: React.SetStateAction) => void;\n isLocked?: boolean;\n};\n\nexport function NotesTab(props: NotesTabProps) {\n const { selectedTab, calculationTitle, notes, setLocalState } = props;\n const calculationTitles: MasterDataCalculationTitle[] = useSelector(calculationTitleSelector);\n const [filteredCalculationTitles, setFilteredCalculationTitles] = useState(calculationTitles)\n\n const filterCalculationTitles = (filterValue: string) => {\n var filteredList: MasterDataCalculationTitle[] = []\n calculationTitles.forEach(element => {\n if (element.title.includes(filterValue)) {\n filteredList.push(element)\n }\n });\n setFilteredCalculationTitles(filteredList)\n }\n\n return (\n \n
\n \n \n \n Calculation Title\n \n\n \n {\n if (newValue) {\n filterCalculationTitles(newValue)\n }\n setLocalState(prevState => ({\n ...prevState,\n calculationNotes: {\n ...prevState.calculationNotes,\n calculationTitle: newValue,\n },\n }));\n }}\n options={filteredCalculationTitles.map((option) => option.title)}\n renderInput={(params) =>\n \n }\n />\n \n \n
\n \n \n Supporting information about this calculation\n \n\n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n calculationNotes: {\n ...prevState.calculationNotes,\n notes: value,\n },\n }));\n }}\n />\n \n \n \n
\n \n );\n}\n","export const isStringNotNullishOrWhitespace = (input?: string | null) => input != null && input.trim().length > 0;\n\nexport const isStringValidPostiveNumber = (input?: string | null) => isStringNotNullishOrWhitespace(input) && Number(input) > 0;\n\nexport const isStringValidNumberInRangeInclusive = (min: number, max: number, input?: string | null) => {\n if (!isStringNotNullishOrWhitespace(input)) {\n return false;\n }\n const numberInput = Number(input);\n if (numberInput < min || numberInput > max) {\n return false;\n }\n return true;\n};\n","import {\n FloorInsulationLayerReferenceType,\n ConstructionRainscreenCladdingDetails,\n CalculationNotes,\n ConstructionPitchedRoofWithLoftDetails,\n} from '../../types/store/calculationTypes';\n\nimport { MasterDataLayer, MasterDataDrainageFx, MasterDataPrecipitationByPostCodeArea } from '../../types/store/masterDataTypes';\n\nexport type NoFloorReferenceOption = {\n id: null;\n type: FloorInsulationLayerReferenceType.None;\n name: 'None';\n};\n\nexport type ClientSpecifiedFloorReferenceOption = {\n id: null;\n type: FloorInsulationLayerReferenceType.Custom;\n name: 'Client Specified';\n};\n\nexport const noFloorReferenceOption: NoFloorReferenceOption = {\n id: null,\n type: FloorInsulationLayerReferenceType.None,\n name: 'None',\n};\n\nexport const clientSpecifiedFloorReferenceOption: ClientSpecifiedFloorReferenceOption = {\n id: null,\n type: FloorInsulationLayerReferenceType.Custom,\n name: 'Client Specified',\n};\n\nexport type FloorReferenceOption = MasterDataLayer | NoFloorReferenceOption | ClientSpecifiedFloorReferenceOption;\n\nexport type ConstructionModalState = {\n selectedTab: number | false;\n applicationTypeId: number;\n perimeterMetres: string | null;\n areaMetresSquared: string | null;\n perimeterAreaRatio: string | null;\n wallThicknessMetres: string | null;\n ventilationRateMillimetresSquaredPerMetre: string | null;\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround: string | null;\n windSpeedMetresPerSecond: string | null;\n averageWindShieldingFactor: string | null;\n heightBelowGroundMetres: string | null;\n soilTypeId: number | null;\n floorInsulationLayer: FloorReferenceOption | null;\n floorInsulationReferenceType: FloorInsulationLayerReferenceType | null;\n floorInsulationThermalConductivity: string | null;\n floorInsulationLayerThickness: string | null;\n floorInsulationLayerInstanceId: string | null;\n isWarmSteelFramedWall: boolean | null;\n is50To80MillimetreFlange: boolean | null;\n studDepthMillimetres: string | null;\n studSpacingMillimetres: string | null;\n drainageFx: MasterDataDrainageFx | null;\n precipitationForArea: MasterDataPrecipitationByPostCodeArea | null;\n pitchAngle: string | null;\n pitchedRoofWithLoftDetails?: ConstructionPitchedRoofWithLoftDetails;\n rainscreenCladdingDetailsPartial?: Partial;\n calculationNotes: CalculationNotes;\n widthOfEdgeInsulation: string | null;\n productSectorId: number;\n projectInsulationVolumeM2: number;\n};\n","import React, { ChangeEvent, FormEvent, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n InputLabel,\n MenuItem,\n Select,\n Tab,\n Tabs,\n TextField,\n Typography,\n FormControlLabel,\n Switch,\n FormControl,\n FormLabel,\n RadioGroup,\n Radio,\n} from '@material-ui/core';\nimport { Chat } from '@material-ui/icons';\n\nimport { NotesTab } from './NotesTab';\n\nimport styles from '../LayerModal/LayerModal.module.scss';\nimport constructionStyles from './ConstructionModal.module.scss';\nimport {\n Calculation,\n ConstructionFloorInsulationDetails,\n FloorInsulationLayerReferenceType,\n ConstructionRainscreenCladdingDetails,\n ApiConstructionDetailsRequest,\n ApiConstructionDetailsSteelWallRequest,\n ApiConstructionDetailsInvertedRoofRequest,\n ConstructionPitchedRoofDetails,\n CalculationNotes,\n ConstructionPitchedRoofWithLoftDetails,\n} from '../../types/store/calculationTypes';\nimport {\n applicationTypeSelector,\n interimOrCurrentCalculationSelector,\n soilTypeSelector,\n floorMasterLayerSelector,\n drainageFxSelector,\n precipitationByPostCodeAreaSelector,\n rainscreenCladdingDefaultsSelector,\n roofCharacteristicsOptionsSelector,\n productSectorSelector,\n} from '../../store/selectors';\nimport {\n MasterDataApplicationType,\n MasterDataSoilType,\n MasterRainscreenCladdingDefaults,\n MasterDataDrainageFx,\n MasterDataPrecipitationByPostCodeArea,\n MasterDataRoofCharacteristics,\n MasterDataProductSector,\n} from '../../types/store/masterDataTypes';\nimport { TabPanel } from '../LayerModal/TabPanel';\nimport { VerticalAlign } from '../Utilities/VerticalAlign/VerticalAlign';\nimport { addConstructionDetailsToCalculation } from '../../actions/calculationActions';\nimport { Autocomplete, createFilterOptions, CreateFilterOptionsConfig } from '@material-ui/lab';\nimport { isStringValidPostiveNumber, isStringNotNullishOrWhitespace } from '../../common/inputValidation';\n\nimport {\n ConstructionModalState,\n noFloorReferenceOption,\n clientSpecifiedFloorReferenceOption,\n FloorReferenceOption,\n} from './ConstructionModalStateTypes';\nimport { uuid } from '../../common/uuid';\n\ntype Props = {\n onClose: () => void;\n};\n\nconst config: CreateFilterOptionsConfig = {\n stringify: (option: FloorReferenceOption) => option.name,\n};\nconst filter = createFilterOptions(config);\n\nconst wallType = 'Wall';\nconst floorOtherThanGroundType = 'Floor';\nconst solidGroundFloorType = 'SolidGroundFloor';\nconst suspendedFloorType = 'SuspendedFloor';\nconst basementWallType = 'BasementWall';\nconst basementFloorType = 'BasementFloor';\nconst steelFrameWallType = 'SteelFrameWall';\nconst invertedRoofType = 'InvertedRoof';\nconst pitchedRoofWithRafterInsulation = 'PitchedRoofWithRafterInsulation';\nconst pitchedRoofWithVentilatedLoftSpace = 'PitchedRoofWithVentilatedLoftSpace';\nconst floorWithPerimeterInsulation = 'FloorWithPerimeterInsulation';\n\nconst typesWithWindShielding = [suspendedFloorType];\nconst typesWithPaRatio = [solidGroundFloorType, suspendedFloorType, basementFloorType, floorWithPerimeterInsulation];\nconst typesWithWallThickness = [\n solidGroundFloorType,\n suspendedFloorType,\n basementFloorType,\n basementWallType,\n floorWithPerimeterInsulation,\n];\nconst typesWithSoilType = [solidGroundFloorType, suspendedFloorType, basementFloorType, basementWallType, floorWithPerimeterInsulation];\nconst typesWithHeightBelowGround = [basementWallType, suspendedFloorType, basementFloorType];\nconst typesWithFloorInsulationDetails = [basementWallType, floorWithPerimeterInsulation];\nconst typesWithPitchAngle = [pitchedRoofWithRafterInsulation];\nconst typesWithInsulationWidth = [floorWithPerimeterInsulation];\n\nconst typesWithConstructionDetails = [\n steelFrameWallType,\n solidGroundFloorType,\n suspendedFloorType,\n basementWallType,\n basementFloorType,\n invertedRoofType,\n pitchedRoofWithRafterInsulation,\n pitchedRoofWithVentilatedLoftSpace,\n floorWithPerimeterInsulation,\n];\nconst typesWithRainscreenCladding = [wallType, floorOtherThanGroundType, steelFrameWallType];\n\nfunction applicationTypeHasHeightBelowGround(applicationType?: string) {\n return applicationType != null && typesWithHeightBelowGround.includes(applicationType);\n}\n\nfunction applicationTypeHasPaRatio(applicationType?: string) {\n return applicationType != null && typesWithPaRatio.includes(applicationType);\n}\n\nfunction applicationTypeHasWallThickness(applicationType?: string) {\n return applicationType != null && typesWithWallThickness.includes(applicationType);\n}\n\nfunction applicationTypeHasSoilType(applicationType?: string) {\n return applicationType != null && typesWithSoilType.includes(applicationType);\n}\n\nfunction applicationTypeHasWindShielding(applicationType?: string) {\n return applicationType != null && typesWithWindShielding.includes(applicationType);\n}\n\nfunction applicationTypeHasPitchAngle(applicationType?: string) {\n return applicationType != null && typesWithPitchAngle.includes(applicationType);\n}\n\nfunction applicationTypeIsSteelFrameWall(applicationType?: string) {\n return applicationType != null && applicationType === steelFrameWallType;\n}\n\nfunction applicationTypeHasFloorInsulationDetails(applicationType?: string) {\n return applicationType != null && typesWithFloorInsulationDetails.includes(applicationType);\n}\n\nfunction applicationTypeHasRainscreenCladding(applicationType?: string) {\n return applicationType != null && typesWithRainscreenCladding.includes(applicationType);\n}\n\nfunction applicationTypeHasConstructionDetails(applicationType?: string) {\n return applicationType != null && typesWithConstructionDetails.includes(applicationType);\n}\n\nfunction applicationTypeIsInvertedRoof(applicationType?: string) {\n return applicationType != null && applicationType === invertedRoofType;\n}\n\nfunction applicationTypeHasConstructionDetailsResults(applicationType?: string) {\n return applicationTypeHasSoilType(applicationType) || applicationTypeIsInvertedRoof(applicationType);\n}\n\nfunction applicationTypeIsPitchedRoofWithVentilatedLoftSpace(applicationType?: string) {\n return applicationType != null && applicationType === pitchedRoofWithVentilatedLoftSpace;\n}\n\nfunction applicationTypeIsFloorWithPerimeterInsulation(applicationType?: string) {\n return applicationType != null && applicationType === floorWithPerimeterInsulation;\n}\n\nfunction applicationTypeHasInsulationWidth(applicationType?: string) {\n return applicationType != null && typesWithInsulationWidth.includes(applicationType);\n}\n\nfunction getInitialFloorMasterLayer(\n floorInsulationDetails: ConstructionFloorInsulationDetails | undefined,\n masterFloorLayers: FloorReferenceOption[]\n): FloorReferenceOption | null {\n if (!masterFloorLayers || floorInsulationDetails?.insulationReference.insulationReferenceType == null) {\n return null;\n }\n\n switch (floorInsulationDetails?.insulationReference.insulationReferenceType) {\n case FloorInsulationLayerReferenceType.None:\n return noFloorReferenceOption;\n case FloorInsulationLayerReferenceType.Custom:\n return clientSpecifiedFloorReferenceOption;\n case FloorInsulationLayerReferenceType.Master:\n const masterFloorLayer = masterFloorLayers.find(\n layer => layer.id != null && layer.id === (floorInsulationDetails?.insulationReference.id || '')\n );\n\n if (masterFloorLayer == null) {\n return null;\n }\n\n return masterFloorLayer;\n default:\n return null;\n }\n}\n\nexport function ConstructionModal(props: Props) {\n const dispatch = useDispatch();\n\n const calculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n const applicationTypes: MasterDataApplicationType[] = useSelector(applicationTypeSelector);\n const soilTypes: MasterDataSoilType[] = useSelector(soilTypeSelector);\n const productSectors: MasterDataProductSector[] = useSelector(productSectorSelector);\n\n const drainageFxTypes: MasterDataDrainageFx[] = useSelector(drainageFxSelector);\n const precipitationByPostCodeAreas: MasterDataPrecipitationByPostCodeArea[] = useSelector(precipitationByPostCodeAreaSelector);\n const floorLayers: FloorReferenceOption[] = useSelector(floorMasterLayerSelector);\n const rainscreenCladdingDefaults: MasterRainscreenCladdingDefaults | undefined = useSelector(rainscreenCladdingDefaultsSelector);\n const roofCharacteristicsOptions: MasterDataRoofCharacteristics[] = useSelector(roofCharacteristicsOptionsSelector);\n const floorReferenceOptions = useMemo(() => [...floorLayers, clientSpecifiedFloorReferenceOption, noFloorReferenceOption], [floorLayers]);\n\n const initialSelectedApplicationType = applicationTypes.find(({ id }) => id === calculation?.applicationDetails.id)?.type;\n const initialSelectedApplicationName = applicationTypes.find(({ id }) => id === calculation?.applicationDetails.id)?.name;\n\n const initialDrainageFxTypeId = calculation?.constructionDetails?.invertedRoofDetails?.drainageFxId\n ? calculation?.constructionDetails?.invertedRoofDetails?.drainageFxId\n : 4;\n\n const initialTabsForSelection = [\n applicationTypeHasConstructionDetails(initialSelectedApplicationType) ? 0 : -1,\n applicationTypeHasRainscreenCladding(initialSelectedApplicationType) ? 1 : -1,\n 2, // Fallback to Notes tab\n ];\n\n const [localState, setLocalState] = React.useState({\n selectedTab: initialTabsForSelection.filter(x => x !== -1)[0],\n applicationTypeId: calculation?.applicationDetails.id || 1,\n perimeterMetres: calculation?.constructionDetails?.perimeterMetres ?? '0.000',\n areaMetresSquared: calculation?.constructionDetails?.areaMetresSquared ?? '0.00',\n perimeterAreaRatio: calculation?.constructionDetails?.perimeterAreaRatio ?? '0.000',\n wallThicknessMetres: calculation?.constructionDetails?.wallThicknessMetres ?? '0.30',\n widthOfEdgeInsulation: calculation?.constructionDetails?.widthOfEdgeInsulation ?? '1200',\n ventilationRateMillimetresSquaredPerMetre: calculation?.constructionDetails?.ventilationRateMillimetresSquaredPerMetre ?? '1500',\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround:\n calculation?.constructionDetails?.thermalTransmittanceWallsInUnderFloorSpaceAboveGround ?? '1.7',\n windSpeedMetresPerSecond: calculation?.constructionDetails?.windSpeedMetresPerSecond ?? '5.0',\n averageWindShieldingFactor: calculation?.constructionDetails?.averageWindShieldingFactor ?? '0.05',\n heightBelowGroundMetres: calculation?.constructionDetails?.heightBelowGroundMetres ?? '0.225',\n soilTypeId: applicationTypeHasSoilType(initialSelectedApplicationType)\n ? calculation?.constructionDetails?.soilTypeId ?? soilTypes[0].id\n : null,\n floorInsulationLayer: getInitialFloorMasterLayer(calculation?.constructionDetails?.floorInsulationDetails, floorReferenceOptions),\n floorInsulationReferenceType:\n calculation?.constructionDetails?.floorInsulationDetails?.insulationReference.insulationReferenceType ?? null,\n floorInsulationLayerThickness: calculation?.constructionDetails?.floorInsulationDetails?.thicknessMillimetres ?? null,\n floorInsulationThermalConductivity: calculation?.constructionDetails?.floorInsulationDetails?.thermalConductivity ?? null,\n floorInsulationLayerInstanceId: calculation?.constructionDetails?.floorInsulationDetails?.insulationLayerInstanceId ?? null,\n isWarmSteelFramedWall: calculation?.constructionDetails?.steelWallDetails?.isWarmSteelFramedWall ?? false,\n is50To80MillimetreFlange: calculation?.constructionDetails?.steelWallDetails?.is50To80MillimetreFlange ?? true,\n studDepthMillimetres: calculation?.constructionDetails?.steelWallDetails?.studDepthMillimetres ?? '150.0',\n studSpacingMillimetres: calculation?.constructionDetails?.steelWallDetails?.studSpacingMillimetres ?? '400.0',\n rainscreenCladdingDetailsPartial: calculation?.rainscreenCladdingDetails ?? undefined,\n drainageFx: drainageFxTypes.filter(d => d.id === initialDrainageFxTypeId)[0],\n precipitationForArea:\n precipitationByPostCodeAreas.filter(d => d.id === calculation?.constructionDetails?.invertedRoofDetails?.precipitationForAreaId)[0] ??\n null,\n pitchAngle: applicationTypeHasPitchAngle(initialSelectedApplicationType)\n ? calculation?.constructionDetails?.pitchedRoofDetails?.pitchAngle ?? '30'\n : null,\n calculationNotes: calculation?.calculationNotes ?? { calculationTitle: initialSelectedApplicationName || null, notes: null },\n pitchedRoofWithLoftDetails: applicationTypeIsPitchedRoofWithVentilatedLoftSpace(initialSelectedApplicationType)\n ? calculation!.constructionDetails!.pitchedRoofWithLoftDetails\n : undefined,\n productSectorId: calculation?.productSectorId ? calculation.productSectorId : productSectors[0].id,\n projectInsulationVolumeM2: calculation?.projectInsulationVolumeM2 ? calculation.projectInsulationVolumeM2 : 0,\n });\n\n const {\n selectedTab,\n applicationTypeId,\n soilTypeId,\n perimeterMetres,\n areaMetresSquared,\n perimeterAreaRatio,\n wallThicknessMetres,\n widthOfEdgeInsulation,\n ventilationRateMillimetresSquaredPerMetre,\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround,\n windSpeedMetresPerSecond,\n averageWindShieldingFactor,\n heightBelowGroundMetres,\n floorInsulationLayer,\n floorInsulationReferenceType,\n floorInsulationLayerThickness,\n floorInsulationThermalConductivity,\n floorInsulationLayerInstanceId,\n isWarmSteelFramedWall,\n is50To80MillimetreFlange,\n studDepthMillimetres,\n studSpacingMillimetres,\n rainscreenCladdingDetailsPartial,\n drainageFx,\n precipitationForArea,\n pitchAngle,\n calculationNotes,\n pitchedRoofWithLoftDetails,\n productSectorId,\n projectInsulationVolumeM2\n } = localState;\n\n const selectedApplicationType = applicationTypes.find(({ id }) => id === localState.applicationTypeId)?.type;\n const selectedApplicationName = applicationTypes.find(({ id }) => id === localState.applicationTypeId)?.name;\n const groundThermalConductivity = soilTypes.find(({ id }) => id === localState.soilTypeId)?.lambda;\n const groundVapourResistivity = soilTypes.find(({ id }) => id === localState.soilTypeId)?.vapourResistivity;\n const rainscreenCladdingCorrectionFactor = calculation?.rainscreenCladdingCorrectionFactor;\n\n const handleApplicationTypeChange = (event: React.ChangeEvent) => {\n const newSelectedApplicationId = Number(event.target.value);\n const newSelectedApplicationType = applicationTypes.find(({ id }) => id === newSelectedApplicationId)?.type;\n const selectedApplicationName = applicationTypes.find(({ id }) => id === newSelectedApplicationId)?.name;\n\n setLocalState(prevState => {\n const tabsForSelection = [\n applicationTypeHasConstructionDetails(newSelectedApplicationType) ? 0 : -1,\n applicationTypeHasRainscreenCladding(newSelectedApplicationType) ? 1 : -1,\n 2, // Fallback to Notes tab\n ];\n\n // Object to resetModalState. Only include values that should be changed on application type change\n const defaultsToResetTo: Partial =\n prevState.applicationTypeId !== newSelectedApplicationId\n ? {\n selectedTab: tabsForSelection.filter(x => x !== -1)[0],\n rainscreenCladdingDetailsPartial: undefined,\n soilTypeId: applicationTypeHasSoilType(newSelectedApplicationType) ? soilTypes[0].id : null,\n pitchAngle: applicationTypeHasPitchAngle(newSelectedApplicationType) ? '30' : null,\n calculationNotes: {\n ...prevState.calculationNotes,\n calculationTitle: selectedApplicationName || '',\n },\n pitchedRoofWithLoftDetails: applicationTypeIsPitchedRoofWithVentilatedLoftSpace(newSelectedApplicationType)\n ? { loftLayerInstanceId: uuid(), roofCharacteristicId: roofCharacteristicsOptions[0].id, thicknessMillimetres: '300.0' }\n : undefined,\n floorInsulationLayerInstanceId: applicationTypeIsFloorWithPerimeterInsulation(newSelectedApplicationType) ? uuid() : undefined\n }\n : {};\n\n return {\n ...prevState,\n applicationTypeId: newSelectedApplicationId,\n // Reset construction details\n ...defaultsToResetTo,\n };\n });\n };\n\n const handleProjectInsulationVolumeM2Changed = (event: React.ChangeEvent) => {\n const newProjectInsulationVolumeM2 = Number(event.target.value)\n\n setLocalState(prevState => {\n return {\n ...prevState,\n projectInsulationVolumeM2: newProjectInsulationVolumeM2,\n };\n });\n };\n\n const handleProductSectorChange = (event: React.ChangeEvent) => {\n const newSelectedProductSectorId = Number(event.target.value);\n\n setLocalState(prevState => {\n\n const defaultsToResetTo: Partial =\n prevState.productSectorId !== newSelectedProductSectorId\n ? {\n productSectorId: newSelectedProductSectorId\n }\n : {};\n\n return {\n ...prevState,\n productSectorId: newSelectedProductSectorId,\n // Reset construction details\n ...defaultsToResetTo,\n };\n });\n };\n\n const handleSubmit = React.useCallback(\n (event: FormEvent) => {\n event.preventDefault();\n\n const hasConstructionDetails = applicationTypeHasConstructionDetails(selectedApplicationType);\n const hasPaRatio = applicationTypeHasPaRatio(selectedApplicationType);\n const hasWindshielding = applicationTypeHasWindShielding(selectedApplicationType);\n const isSteelFramedWall = applicationTypeIsSteelFrameWall(selectedApplicationType);\n const hasWallThickness = applicationTypeHasWallThickness(selectedApplicationType);\n const hasInsulationWidth = applicationTypeHasInsulationWidth(selectedApplicationType);\n const hasHeightBelowGround = applicationTypeHasHeightBelowGround(selectedApplicationType);\n const hasSoilType = applicationTypeHasSoilType(selectedApplicationType);\n const hasPitchAngle = applicationTypeHasPitchAngle(selectedApplicationType);\n\n const isInvertedRoof = applicationTypeIsInvertedRoof(selectedApplicationType);\n const hasFloorInsulationDetails = applicationTypeHasFloorInsulationDetails(selectedApplicationType);\n const hasRainscreenCladdingDetails = applicationTypeHasRainscreenCladding(selectedApplicationType);\n const isPitchedRoofWithVentilatedLoftSpace = applicationTypeIsPitchedRoofWithVentilatedLoftSpace(selectedApplicationType);\n\n const floorInsulationDetails: ConstructionFloorInsulationDetails | undefined =\n hasFloorInsulationDetails && floorInsulationReferenceType != null\n ? {\n insulationReference: {\n insulationReferenceType: floorInsulationReferenceType,\n id: floorInsulationLayer?.id || null,\n },\n thicknessMillimetres: floorInsulationLayerThickness,\n thermalConductivity: floorInsulationThermalConductivity,\n insulationLayerInstanceId: floorInsulationLayerInstanceId\n }\n : undefined;\n\n const isRainscreenCladdingComplete =\n hasRainscreenCladdingDetails &&\n rainscreenCladdingDetailsPartial != null &&\n Number(rainscreenCladdingDetailsPartial?.chiValue) > 0 &&\n Number(rainscreenCladdingDetailsPartial?.bracketsPerMetreSquared) > 0;\n\n const rainscreenCladdingDetails: ConstructionRainscreenCladdingDetails | undefined = isRainscreenCladdingComplete\n ? {\n chiValue: rainscreenCladdingDetailsPartial!.chiValue!,\n bracketsPerMetreSquared: rainscreenCladdingDetailsPartial!.bracketsPerMetreSquared!,\n }\n : undefined;\n\n let steelWallDetails: ApiConstructionDetailsSteelWallRequest | null = null;\n if (isSteelFramedWall && isWarmSteelFramedWall != null) {\n steelWallDetails = {\n isWarmSteelFramedWall,\n is50To80MillimetreFlange: isSteelFramedWall ? is50To80MillimetreFlange : null,\n studDepthMillimetres: isSteelFramedWall ? studDepthMillimetres : null,\n studSpacingMillimetres: isSteelFramedWall ? studSpacingMillimetres : null,\n };\n }\n\n const invertedRoofDetails: ApiConstructionDetailsInvertedRoofRequest | null = isInvertedRoof\n ? {\n drainageFxId: drainageFx ? drainageFx.id : null,\n drainageFx: drainageFx ? drainageFx.fxFactor : null,\n precipitationForAreaId: precipitationForArea ? precipitationForArea?.id : null,\n precipitationForAreaMillimetres: precipitationForArea ? precipitationForArea?.rainfallMillimetres : null,\n }\n : null;\n\n const pitchedRoofDetails: ConstructionPitchedRoofDetails | undefined =\n hasPitchAngle && pitchAngle != null && Number(pitchAngle) >= 0 && Number(pitchAngle) <= 90\n ? {\n pitchAngle,\n }\n : undefined;\n\n const pitchedRoofWithLoftDetailsFinal: ConstructionPitchedRoofWithLoftDetails | undefined = isPitchedRoofWithVentilatedLoftSpace\n ? pitchedRoofWithLoftDetails\n : undefined;\n\n const constructionDetails: ApiConstructionDetailsRequest | undefined = hasConstructionDetails\n ? {\n soilTypeId: hasSoilType ? soilTypeId : null,\n perimeterMetres: hasPaRatio ? perimeterMetres : null,\n areaMetresSquared: hasPaRatio ? areaMetresSquared : null,\n perimeterAreaRatio: hasPaRatio ? perimeterAreaRatio : null,\n wallThicknessMetres: hasWallThickness ? wallThicknessMetres : null,\n widthOfEdgeInsulation: hasInsulationWidth ? widthOfEdgeInsulation : null,\n ventilationRateMillimetresSquaredPerMetre: hasWindshielding ? ventilationRateMillimetresSquaredPerMetre : null,\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround: hasWindshielding\n ? thermalTransmittanceWallsInUnderFloorSpaceAboveGround\n : null,\n windSpeedMetresPerSecond: hasWindshielding ? windSpeedMetresPerSecond : null,\n averageWindShieldingFactor: hasWindshielding ? averageWindShieldingFactor : null,\n heightBelowGroundMetres: hasHeightBelowGround ? heightBelowGroundMetres : null,\n floorInsulationDetails: floorInsulationDetails,\n steelWallDetails,\n invertedRoofDetails,\n pitchedRoofDetails,\n pitchedRoofWithLoftDetails: pitchedRoofWithLoftDetailsFinal,\n }\n : undefined;\n\n // If null is somehow sent because we don't have an applicationName, the server will replace the title with the applicationName\n const titleFallback = isStringNotNullishOrWhitespace(selectedApplicationName) ? (selectedApplicationName as string) : null;\n const finalCalculationNotes: CalculationNotes = {\n ...calculationNotes,\n calculationTitle: isStringNotNullishOrWhitespace(calculationNotes.calculationTitle)\n ? calculationNotes.calculationTitle\n : titleFallback,\n };\n\n // const projectInsulationVolumeM2: number = Number(localState.projectInsulationVolumeM2);\n\n dispatch(\n addConstructionDetailsToCalculation(applicationTypeId, constructionDetails, rainscreenCladdingDetails, finalCalculationNotes, productSectorId, projectInsulationVolumeM2)\n );\n props.onClose();\n },\n [\n dispatch,\n applicationTypeId,\n soilTypeId,\n perimeterMetres,\n areaMetresSquared,\n perimeterAreaRatio,\n wallThicknessMetres,\n widthOfEdgeInsulation,\n selectedApplicationType,\n averageWindShieldingFactor,\n heightBelowGroundMetres,\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround,\n ventilationRateMillimetresSquaredPerMetre,\n windSpeedMetresPerSecond,\n floorInsulationLayer,\n floorInsulationReferenceType,\n floorInsulationLayerThickness,\n floorInsulationThermalConductivity,\n floorInsulationLayerInstanceId,\n isWarmSteelFramedWall,\n is50To80MillimetreFlange,\n studDepthMillimetres,\n studSpacingMillimetres,\n rainscreenCladdingDetailsPartial,\n drainageFx,\n precipitationForArea,\n pitchAngle,\n calculationNotes,\n selectedApplicationName,\n pitchedRoofWithLoftDetails,\n productSectorId,\n projectInsulationVolumeM2,\n props,\n ]\n );\n\n const handlePerimeterAreaRatioChanged = (event: React.ChangeEvent) => {\n const targetValue = event.target.value;\n if (event.target.value !== '') {\n setLocalState(prevState => {\n return {\n ...prevState,\n perimeterMetres: '',\n areaMetresSquared: '',\n perimeterAreaRatio: targetValue,\n };\n });\n } else {\n setLocalState(prevState => ({ ...prevState, perimeterAreaRatio: targetValue }));\n }\n };\n\n const handlePerimeterMetresChanged = (event: React.ChangeEvent) => {\n const targetValue = event.target.value;\n setLocalState(prevState => {\n return setPeremiterAndArea(prevState, targetValue, prevState.areaMetresSquared);\n });\n };\n\n const handleAreaMetresSquaredChanged = (event: React.ChangeEvent) => {\n const targetValue = event.target.value;\n setLocalState(prevState => {\n return setPeremiterAndArea(prevState, prevState.perimeterMetres, targetValue);\n });\n };\n\n const setPeremiterAndArea = (prevState: ConstructionModalState, perimeterMetres: string | null, areaMetresSquared: string | null) => {\n const perimeterAreaRatio = Number(perimeterMetres) / Number(areaMetresSquared);\n\n if (isPerimeterAndAreaInvalid(perimeterMetres, areaMetresSquared, perimeterAreaRatio)) {\n return { ...prevState, perimeterMetres, areaMetresSquared, perimeterAreaRatio: '' };\n } else {\n return { ...prevState, perimeterMetres, areaMetresSquared, perimeterAreaRatio: perimeterAreaRatio.toFixed(3) };\n }\n };\n\n const isPerimeterAndAreaInvalid = (perimeterMetres: any, areaMetresSquared: any, perimeterAreaRatio: number) => {\n return perimeterMetres === '' || areaMetresSquared === '' || isNaN(perimeterAreaRatio) || !isFinite(perimeterAreaRatio);\n };\n\n const canSubmit = () => {\n if (calculation?.locked) return false;\n\n const isSoilTypeValid =\n (applicationTypeHasSoilType(selectedApplicationType) && Number(localState.soilTypeId) > 0) ||\n !applicationTypeHasSoilType(selectedApplicationType);\n\n const isHeightBelowGroundMetresValid =\n (applicationTypeHasHeightBelowGround(selectedApplicationType) && Number(localState.heightBelowGroundMetres) > 0) ||\n !applicationTypeHasHeightBelowGround(selectedApplicationType);\n\n const isWindshieldingValid =\n (applicationTypeHasWindShielding(selectedApplicationType) &&\n Number(localState.ventilationRateMillimetresSquaredPerMetre) > 0 &&\n Number(localState.windSpeedMetresPerSecond) > 0 &&\n Number(localState.averageWindShieldingFactor) > 0 &&\n Number(localState.thermalTransmittanceWallsInUnderFloorSpaceAboveGround) > 0) ||\n !applicationTypeHasWindShielding(selectedApplicationType);\n\n const isFloorInsulationDetailsValid =\n (applicationTypeHasFloorInsulationDetails(selectedApplicationType) &&\n ((localState.floorInsulationReferenceType === FloorInsulationLayerReferenceType.None &&\n localState.floorInsulationLayer?.id == null &&\n localState.floorInsulationLayerThickness == null &&\n localState.floorInsulationThermalConductivity == null) ||\n // If master layer is selected, the thermal conductivity is not validated as the user cannot set it, and there are some cases where it cannot be set in the frontend.\n // Therefore, setting it has moved completely to the backend for consistency\n (localState.floorInsulationReferenceType === FloorInsulationLayerReferenceType.Master &&\n localState.floorInsulationLayer?.id != null &&\n isStringValidPostiveNumber(localState.floorInsulationLayerThickness)) ||\n (localState.floorInsulationReferenceType === FloorInsulationLayerReferenceType.Custom &&\n localState.floorInsulationLayer?.id == null &&\n isStringValidPostiveNumber(localState.floorInsulationLayerThickness) &&\n isStringValidPostiveNumber(localState.floorInsulationThermalConductivity)))) ||\n !applicationTypeHasFloorInsulationDetails(selectedApplicationType);\n\n const isPaRatioValid =\n (applicationTypeHasPaRatio(selectedApplicationType) &&\n isStringValidPostiveNumber(localState.perimeterAreaRatio) &&\n !isNaN(Number(localState.perimeterAreaRatio)) &&\n isFinite(Number(localState.perimeterAreaRatio))) ||\n !applicationTypeHasPaRatio(selectedApplicationType);\n\n const isSteelFramedWallValid =\n (applicationTypeIsSteelFrameWall(selectedApplicationType) &&\n Number(localState.studSpacingMillimetres) > 0 &&\n Number(localState.studSpacingMillimetres) !== Infinity &&\n Number(localState.studDepthMillimetres) > 0 &&\n Number(localState.studDepthMillimetres) !== Infinity) ||\n !applicationTypeIsSteelFrameWall(selectedApplicationType);\n\n const isWallThicknessValid =\n (applicationTypeHasWallThickness(selectedApplicationType) && isStringValidPostiveNumber(localState.wallThicknessMetres)) ||\n !applicationTypeHasWallThickness(selectedApplicationType);\n\n const isInsulationWidthValid =\n (applicationTypeHasInsulationWidth(selectedApplicationType) && isStringValidPostiveNumber(localState.widthOfEdgeInsulation)) ||\n !applicationTypeHasInsulationWidth(selectedApplicationType);\n\n const isRainscreenCladdingValid =\n (applicationTypeHasRainscreenCladding(selectedApplicationType) &&\n ((Number(localState.rainscreenCladdingDetailsPartial?.chiValue) > 0 &&\n Number(localState.rainscreenCladdingDetailsPartial?.bracketsPerMetreSquared) > 0) ||\n localState.rainscreenCladdingDetailsPartial == null)) ||\n !applicationTypeHasRainscreenCladding(selectedApplicationType);\n\n const isInvertedRoofValid =\n (applicationTypeIsInvertedRoof(selectedApplicationType) &&\n Number(localState.drainageFx?.id) > 0 &&\n isStringValidPostiveNumber(localState.drainageFx?.fxFactor) &&\n Number(localState.precipitationForArea?.id) > 0) ||\n !applicationTypeIsInvertedRoof(selectedApplicationType);\n\n const isPitchAngleValid =\n (applicationTypeHasPitchAngle(selectedApplicationType) &&\n isStringNotNullishOrWhitespace(localState.pitchAngle) &&\n Number(localState.pitchAngle) >= 0 &&\n Number(localState.pitchAngle) <= 90) ||\n !applicationTypeHasPitchAngle(selectedApplicationType);\n\n const isPitchedRoofWithVentilatedLoftSpaceValid =\n (applicationTypeIsPitchedRoofWithVentilatedLoftSpace(selectedApplicationType) &&\n isStringNotNullishOrWhitespace(pitchedRoofWithLoftDetails?.loftLayerInstanceId) &&\n Number(pitchedRoofWithLoftDetails?.roofCharacteristicId) > 0 &&\n Number(pitchedRoofWithLoftDetails?.thicknessMillimetres) > 0) ||\n (!applicationTypeIsPitchedRoofWithVentilatedLoftSpace(selectedApplicationType) && pitchedRoofWithLoftDetails === undefined);\n\n return (\n isSoilTypeValid &&\n isWallThicknessValid &&\n isInsulationWidthValid &&\n isPaRatioValid &&\n isHeightBelowGroundMetresValid &&\n isWindshieldingValid &&\n isFloorInsulationDetailsValid &&\n isPaRatioValid &&\n isHeightBelowGroundMetresValid &&\n isWindshieldingValid &&\n isSteelFramedWallValid &&\n isRainscreenCladdingValid &&\n isInvertedRoofValid &&\n isPitchAngleValid &&\n isPitchedRoofWithVentilatedLoftSpaceValid\n );\n };\n\n function renderNoteTabLabel() {\n return (\n \n Notes\n \n \n \n \n );\n }\n\n return (\n \n
\n
\n \n Edit Construction\n \n
\n\n
\n \n \n \n \n Application Type\n \n\n \n {applicationTypes.map(applicationType => {\n return (\n \n {applicationType.name}\n \n );\n })}\n \n \n\n \n \n Product Sector\n \n\n \n {productSectors.map(productSelector => {\n return (\n \n {productSelector.sector}\n \n );\n })}\n \n \n\n \n \n \n Project Insulation Volume M2\n \n\n \n \n \n\n \n , selectedTab: number) =>\n setLocalState(prevState => ({ ...prevState, selectedTab }))\n }\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"further-details-tabs\"\n data-qa-id=\"further-details-tabs\"\n >\n \n\n \n\n \n \n\n {localState.selectedTab !== false && (\n
\n {applicationTypeHasConstructionDetails(selectedApplicationType) && (\n \n
\n \n {applicationTypeHasPaRatio(selectedApplicationType) && (\n \n \n \n Perimeter\n \n\n \n \n \n \n\n \n
\n m\n
\n
\n
\n
\n\n \n \n Area\n \n\n \n \n \n \n\n \n
\n m²\n
\n
\n
\n
\n\n \n {/* Empty label to ensure correct vertical alignment */}\n \n\n \n
=
\n
\n
\n\n \n \n P/A Ratio\n \n\n \n \n \n \n \n \n
\n )}\n \n {applicationTypeHasWallThickness(selectedApplicationType) && (\n \n \n Wall Thickness\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, wallThicknessMetres: value }));\n }}\n />\n \n\n \n
\n m\n
\n
\n
\n
\n )}\n\n {applicationTypeHasHeightBelowGround(selectedApplicationType) && (\n \n \n Height B. Ground\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, heightBelowGroundMetres: value }));\n }}\n />\n \n\n \n
\n m\n
\n
\n
\n
\n )}\n\n {applicationTypeHasInsulationWidth(selectedApplicationType) && (\n \n \n Insulation Width\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, widthOfEdgeInsulation: value }));\n }}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n )}\n\n {applicationTypeHasWindShielding(selectedApplicationType) && (\n \n \n Ventilation rate\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n ventilationRateMillimetresSquaredPerMetre: value,\n }));\n }}\n />\n \n\n \n
\n mm2\n
\n /m\n
\n
\n
\n
\n )}\n
\n
\n\n {(applicationTypeHasSoilType(selectedApplicationType) ||\n applicationTypeHasWindShielding(selectedApplicationType)) && (\n \n
\n\n \n {applicationTypeHasSoilType(selectedApplicationType) && (\n \n \n \n Soil Type\n \n\n ) =>\n setLocalState(prevState => ({ ...prevState, soilTypeId: Number(event.target.value) }))\n }\n variant=\"outlined\"\n >\n {soilTypes.map(soilType => {\n return (\n \n {soilType.description}\n \n );\n })}\n \n \n \n )}\n {applicationTypeHasWindShielding(selectedApplicationType) && (\n \n \n \n Thermal trans\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n thermalTransmittanceWallsInUnderFloorSpaceAboveGround: value,\n }));\n }}\n />\n \n\n \n
\n m\n
\n
\n
\n
\n \n \n Windspeed\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, windSpeedMetresPerSecond: value }));\n }}\n />\n \n\n \n
\n m/s\n
\n
\n
\n
\n \n \n Avg wind shielding\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, averageWindShieldingFactor: value }));\n }}\n />\n \n \n \n
\n )}\n
\n \n )}\n\n {applicationTypeHasFloorInsulationDetails(selectedApplicationType) && (\n \n
\n \n \n \n \n Floor Insulation\n \n\n \n \n option.name}\n value={localState.floorInsulationLayer}\n disabled={!!calculation?.locked}\n onChange={(event: React.ChangeEvent<{}>, layer: FloorReferenceOption | null) => {\n if (!layer) {\n setLocalState(prevState => ({\n ...prevState,\n floorInsulationLayerThickness: null,\n floorInsulationReferenceType: null,\n floorInsulationThermalConductivity: null,\n floorInsulationLayer: null,\n }));\n return;\n }\n\n if (layer.id != null) {\n setLocalState(prevState => ({\n ...prevState,\n floorInsulationLayerThickness: layer.defaultThickness,\n floorInsulationReferenceType: FloorInsulationLayerReferenceType.Master,\n floorInsulationThermalConductivity: null,\n floorInsulationLayer: layer,\n }));\n return;\n } else {\n if (layer.type === FloorInsulationLayerReferenceType.None) {\n setLocalState(prevState => ({\n ...prevState,\n floorInsulationLayerThickness: null,\n floorInsulationReferenceType: FloorInsulationLayerReferenceType.None,\n floorInsulationThermalConductivity: null,\n floorInsulationLayer: layer,\n }));\n return;\n } else {\n setLocalState(prevState => ({\n ...prevState,\n floorInsulationLayerThickness: null,\n floorInsulationReferenceType: FloorInsulationLayerReferenceType.Custom,\n floorInsulationThermalConductivity: null,\n floorInsulationLayer: layer,\n }));\n return;\n }\n }\n }}\n forcePopupIcon\n freeSolo\n filterOptions={(options, params) => {\n const filtered = filter(options, params) as FloorReferenceOption[];\n return filtered;\n }}\n renderInput={params => (\n \n )}\n />\n \n \n \n \n \n {floorInsulationReferenceType === FloorInsulationLayerReferenceType.Custom && (\n \n \n Therm. Cond.\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, floorInsulationThermalConductivity: value }));\n }}\n />\n \n\n \n \n W/mK\n
\n \n \n \n )}\n\n {floorInsulationReferenceType != null &&\n floorInsulationReferenceType !== FloorInsulationLayerReferenceType.None && (\n \n \n Thickness\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, floorInsulationLayerThickness: value }));\n }}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n )}\n \n \n
\n )}\n\n {applicationTypeIsSteelFrameWall(selectedApplicationType) && (\n \n \n \n \n Cold or Hybrid Steel Frame\n \n \n \n {\n setLocalState(prevState => ({\n ...prevState,\n isWarmSteelFramedWall: !prevState.isWarmSteelFramedWall,\n }));\n }}\n />\n }\n label=\"Warm Steel Frame\"\n labelPlacement=\"end\"\n />\n \n
\n \n \n \n Stud depth\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, studDepthMillimetres: value }));\n }}\n />\n \n \n
\n mm\n
\n
\n
\n
\n \n \n Stud spacing\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, studSpacingMillimetres: value }));\n }}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n
\n \n \n \n ) => {\n const value = event.target.value === 'true';\n setLocalState(prevState => ({ ...prevState, is50To80MillimetreFlange: value }));\n }}\n row\n >\n }\n label=\"Not Exceeding 50mm\"\n />\n }\n label=\"Not Exceeding 80mm\"\n />\n \n \n \n \n \n \n \n )}\n\n {applicationTypeIsInvertedRoof(selectedApplicationType) && (\n \n \n \n \n Ballast Type\n \n\n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n drainageFx: drainageFxTypes.filter(d => d.id === value)[0],\n }));\n }}\n variant=\"outlined\"\n >\n {drainageFxTypes.map(drainageFxType => {\n return (\n \n {drainageFxType.covering}\n \n );\n })}\n \n \n \n \n Drainage (f.x)\n \n\n \n \n \n \n \n \n \n \n Postcode Area\n \n option.postCodeArea}\n value={precipitationForArea}\n disabled={!!calculation?.locked}\n onChange={(event: React.ChangeEvent<{}>, value: MasterDataPrecipitationByPostCodeArea | null) => {\n setLocalState(prevState => ({\n ...prevState,\n precipitationForArea: value,\n }));\n }}\n renderInput={params => (\n \n )}\n />\n \n \n \n Rainfall\n \n\n \n \n \n \n \n \n \n \n )}\n\n {applicationTypeHasPitchAngle(selectedApplicationType) && (\n \n \n \n Pitch Angle\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({ ...prevState, pitchAngle: value }));\n }}\n />\n \n \n \n \n )}\n\n {applicationTypeIsPitchedRoofWithVentilatedLoftSpace(selectedApplicationType) && (\n \n \n \n Roof Characteristics\n \n\n ) =>\n setLocalState(prevState => ({\n ...prevState,\n pitchedRoofWithLoftDetails: {\n ...prevState.pitchedRoofWithLoftDetails!,\n roofCharacteristicId: Number(event.target.value),\n },\n }))\n }\n variant=\"outlined\"\n >\n {roofCharacteristicsOptions.map(option => {\n return (\n \n {option.description}\n \n );\n })}\n \n \n\n \n \n Loft Space Thickness\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n pitchedRoofWithLoftDetails: {\n ...prevState.pitchedRoofWithLoftDetails!,\n thicknessMillimetres: value,\n },\n }));\n }}\n />\n \n \n \n \n )}\n
\n\n {applicationTypeHasConstructionDetailsResults(selectedApplicationType) && (\n
\n {applicationTypeHasSoilType(selectedApplicationType) && (\n \n \n
\n \n \n Soil Thermal Conductivity\n \n\n \n
\n
\n {groundThermalConductivity ?? '0.000'}\n
\n\n
\n W/mK\n
\n
\n
\n
\n
\n
\n \n
\n \n \n Soil Vapour Resistivity\n \n\n \n
\n
\n {groundVapourResistivity ?? '0.000'}\n
\n\n
\n MNs/gm\n
\n
\n
\n
\n
\n
\n
\n )}\n\n {applicationTypeIsInvertedRoof(selectedApplicationType) && (\n \n \n
\n \n \n Rainwater Cooling Correction\n \n\n \n
\n
\n {calculation?.rainwaterCoolingCorrectionFactor ?? '0.000'}\n
\n\n
\n W/m²K\n
\n
\n
\n
\n
\n
\n
\n )}\n
\n )}\n \n )}\n\n {applicationTypeHasRainscreenCladding(selectedApplicationType) && (\n \n
\n \n \n \n {\n setLocalState(prevState => ({\n ...prevState,\n rainscreenCladdingDetailsPartial:\n prevState.rainscreenCladdingDetailsPartial == null\n ? {\n chiValue: rainscreenCladdingDefaults?.chiValue ?? undefined,\n bracketsPerMetreSquared: rainscreenCladdingDefaults?.bracketsPerMetreSquared ?? undefined,\n }\n : undefined,\n }));\n }}\n />\n }\n label=\"Apply Rainscreen Cladding\"\n labelPlacement=\"end\"\n />\n \n \n
\n {rainscreenCladdingDetailsPartial != null && (\n \n {/* Chi Value */}\n \n \n Chi Value\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n rainscreenCladdingDetailsPartial:\n prevState.rainscreenCladdingDetailsPartial == null\n ? {\n bracketsPerMetreSquared: undefined,\n chiValue: value,\n }\n : {\n ...prevState.rainscreenCladdingDetailsPartial,\n chiValue: value,\n },\n }));\n }}\n />\n \n \n \n {/* Brackets Per Meter Squared */}\n \n \n Brackets per m²\n \n\n \n \n ) => {\n const value = event.target.value;\n setLocalState(prevState => ({\n ...prevState,\n rainscreenCladdingDetailsPartial:\n prevState.rainscreenCladdingDetailsPartial == null\n ? {\n bracketsPerMetreSquared: value,\n chiValue: undefined,\n }\n : {\n ...prevState.rainscreenCladdingDetailsPartial,\n bracketsPerMetreSquared: value,\n },\n }));\n }}\n />\n \n \n \n \n )}\n \n
\n\n {/* Rainscreen cladding correction factor results */}\n
\n \n \n
\n \n \n Rainscreen Cladding Correction Factor\n \n\n \n
\n
\n {rainscreenCladdingCorrectionFactor ?? '0.000'}\n
\n\n
\n W/m²K\n
\n
\n
\n
\n
\n
\n
\n
\n \n )}\n\n \n
\n )}\n \n \n
\n\n
\n \n \n \n \n \n\n \n \n Save\n \n \n \n \n
\n \n
\n );\n}\n","import React, { ChangeEvent } from 'react';\nimport { Grid, TextField, InputLabel } from '@material-ui/core';\nimport { Autocomplete } from '@material-ui/lab';\nimport { TabPanel } from './TabPanel';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\nimport { MasterDataBridgeMaterial, MasterData } from '../../types/store/masterDataTypes';\nimport styles from './LayerModal.module.scss';\nimport { ReferenceLayer } from '../../types/components/layerSelectionTypes';\n\nexport type CoreBridgingTabProps = {\n masterData: MasterData;\n clearBridgingDetails: () => void;\n referenceLayer: ReferenceLayer | null;\n bridgeMaterial: MasterDataBridgeMaterial | null;\n setBridgeMaterial: (bridgeMaterial: MasterDataBridgeMaterial) => void;\n bridgeWidth: string;\n setBridgeWidth: (bridgeWidth: string) => void;\n bridgeCentres: string;\n setBridgeCentres: (bridgeCentres: string) => void;\n bridgeNonBridgedHeight: string | null;\n setBridgeNonBridgedHeight: (bridgeNonBridgedHeight: string | null) => void;\n layerBridgePercentage?: string;\n isLocked?: boolean;\n};\n\nexport type BridgingTabProps = CoreBridgingTabProps & TabIndexInfo;\n\nexport function BridgingTab(props: BridgingTabProps) {\n const {\n masterData,\n clearBridgingDetails,\n referenceLayer,\n bridgeMaterial,\n setBridgeMaterial,\n bridgeWidth,\n setBridgeWidth,\n bridgeCentres,\n setBridgeCentres,\n bridgeNonBridgedHeight,\n setBridgeNonBridgedHeight,\n layerBridgePercentage,\n targetIndex,\n currentTabIndex,\n isLocked,\n } = props;\n\n return (\n \n
\n \n \n \n Bridge Material\n \n\n material.name}\n onChange={(event: ChangeEvent<{}>, material: MasterDataBridgeMaterial | null) => {\n if (!material) {\n clearBridgingDetails();\n return;\n }\n\n setBridgeMaterial(material);\n }}\n value={bridgeMaterial}\n disabled={isLocked}\n renderInput={params => (\n \n )}\n />\n \n\n \n\n \n \n Bridge Width\n \n\n \n \n ) => setBridgeWidth(event.target.value)}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n\n \n \n Centres\n \n\n \n \n ) => setBridgeCentres(event.target.value)}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n\n \n \n Non-Bridged Height\n \n\n \n \n ) => setBridgeNonBridgedHeight(event.target.value)}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n
\n
\n\n
\n \n \n
\n \n \n Bridged Thermal Conductivity\n \n\n \n
\n
\n {bridgeMaterial?.bridgeThermalConductivity ?? '0.000'}\n
\n\n
\n W/mK\n
\n
\n
\n
\n
\n\n
\n \n \n Unbridged Thermal Conductivity\n \n\n \n
\n
\n {referenceLayer?.thermalConductivity ?? '0.000'}\n
\n\n
\n W/mK\n
\n
\n
\n
\n
\n
\n\n \n
\n \n \n Bridging Percentage\n \n\n \n
\n
\n {layerBridgePercentage != null ? (Number.parseFloat(layerBridgePercentage) * 100).toFixed(1) : '0.0'}\n
\n\n
\n %\n
\n
\n
\n
\n
\n
\n
\n
\n \n );\n}\n","import React, { ChangeEvent } from 'react';\nimport { Grid, TextField, InputLabel } from '@material-ui/core';\nimport { Autocomplete } from '@material-ui/lab';\nimport { TabPanel } from './TabPanel';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\nimport { MasterData, MasterDataMechanicalFasteners } from '../../types/store/masterDataTypes';\nimport styles from './LayerModal.module.scss';\n\nexport type CoreFastenersTabProps = {\n masterData: MasterData;\n clearFastenersDetails: () => void;\n fasteners: MasterDataMechanicalFasteners | null;\n setFasteners: (fasteners: MasterDataMechanicalFasteners) => void;\n fastenersCrossArea: string;\n setFastenersCrossArea: (fastenersCrossArea: string) => void;\n fastenersNumber: string;\n setFastenersNumber: (fastenersCrossArea: string) => void;\n fastenersAlpha?: string;\n fastenersThermalConductivity?: string;\n fastenersCorrectionFactor?: string;\n isLocked?: boolean;\n};\n\nexport type FastenersTabProps = CoreFastenersTabProps & TabIndexInfo;\n\nexport function FastenersTab(props: FastenersTabProps) {\n const {\n masterData,\n clearFastenersDetails,\n targetIndex,\n currentTabIndex,\n fasteners,\n setFasteners,\n fastenersCrossArea,\n setFastenersCrossArea,\n fastenersNumber,\n setFastenersNumber,\n fastenersAlpha,\n fastenersThermalConductivity,\n fastenersCorrectionFactor,\n isLocked,\n } = props;\n\n return (\n \n
\n \n \n \n Mechanical Fasteners Name\n \n\n material.name}\n onChange={(event: ChangeEvent<{}>, fastener: MasterDataMechanicalFasteners | null) => {\n if (!fastener) {\n clearFastenersDetails();\n return;\n }\n\n setFasteners(fastener);\n setFastenersCrossArea(fastener.defaultCrossArea);\n setFastenersNumber(fastener.defaultNumber);\n }}\n value={fasteners}\n disabled={isLocked}\n renderInput={params => (\n \n )}\n />\n \n\n \n\n \n \n Cross Area\n \n\n \n \n ) => setFastenersCrossArea(event.target.value)}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n\n \n \n No. of Fasteners\n \n\n \n \n ) => setFastenersNumber(event.target.value)}\n />\n \n\n \n
\n /m²\n
\n
\n
\n
\n
\n
\n\n
\n \n \n
\n \n \n Alpha\n \n\n \n
\n
\n {fastenersAlpha ?? '0.0'}\n
\n
\n
\n
\n
\n\n
\n \n \n Fastener Thermal Conductivity\n \n\n \n
\n
\n {fastenersThermalConductivity ?? '0.000'}\n
\n\n
\n W/mK\n
\n
\n
\n
\n
\n
\n\n \n
\n \n \n Correction Factor\n \n\n \n
\n
\n {fastenersCorrectionFactor ?? '0.000'}\n
\n
\n
\n
\n
\n
\n
\n
\n \n );\n}\n","import React from 'react';\nimport { Grid, InputLabel, Button, ButtonGroup, FormHelperText } from '@material-ui/core';\nimport { TabPanel } from './TabPanel';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\nimport { MasterDataAirGapsCorrectionLevel, AirGapsCorrectionLevel, MasterData } from '../../types/store/masterDataTypes';\nimport styles from './LayerModal.module.scss';\nimport { ReferenceLayer } from '../../types/components/layerSelectionTypes';\nimport { LayerMaterialTypeKeys } from '../../types/store/LayerMaterialTypes';\n\nexport type CoreAirGapsTabProps = {\n masterData: MasterData;\n referenceLayer: ReferenceLayer | null;\n airGapsCorrectionLevel?: AirGapsCorrectionLevel;\n airGapsCorrectionLevelOverride?: AirGapsCorrectionLevel;\n setAirGapsCorrectionLevelOverride: (airGapsCorrectionLevelOverride: AirGapsCorrectionLevel | undefined) => void;\n insideEmissivity?: string;\n outsideEmissivity?: string;\n airGapsCorrectionResultValue?: string;\n totalAirGapsCorrectionFactor?: string;\n isLocked?: boolean;\n};\n\nexport type AirGapsTabProps = CoreAirGapsTabProps & TabIndexInfo;\n\nexport function AirGapsTab(props: AirGapsTabProps) {\n const {\n masterData,\n referenceLayer,\n airGapsCorrectionLevel,\n airGapsCorrectionLevelOverride,\n setAirGapsCorrectionLevelOverride,\n insideEmissivity,\n outsideEmissivity,\n airGapsCorrectionResultValue,\n totalAirGapsCorrectionFactor,\n targetIndex,\n currentTabIndex,\n isLocked,\n } = props;\n\n const isSelected = (masterDataAirGapsCorrectionLevel?: MasterDataAirGapsCorrectionLevel): boolean => {\n if (masterDataAirGapsCorrectionLevel?.level === AirGapsCorrectionLevel.Level0 && !airGapsCorrectionLevel) {\n return true;\n }\n\n return masterDataAirGapsCorrectionLevel?.level === airGapsCorrectionLevel;\n };\n\n const shouldDisableAirgaps =\n !referenceLayer ||\n !(\n referenceLayer.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation ||\n referenceLayer.layerMaterialType === LayerMaterialTypeKeys.InvertedInsulation\n );\n\n return (\n \n
\n \n \n Air Gaps Correction Level\n\n
\n \n setAirGapsCorrectionLevelOverride(masterData.airGapsCorrectionLevels?.level0.level)}\n data-qa-id=\"layerAirGapsCorrectionLevel0Button\"\n >\n 0\n \n setAirGapsCorrectionLevelOverride(masterData.airGapsCorrectionLevels?.level1.level)}\n data-qa-id=\"layerAirGapsCorrectionLevel1Button\"\n >\n 1\n \n setAirGapsCorrectionLevelOverride(masterData.airGapsCorrectionLevels?.level2.level)}\n data-qa-id=\"layerAirGapsCorrectionLevel2Button\"\n >\n 2\n \n \n\n {airGapsCorrectionLevelOverride && This property has been manually overridden}\n
\n
\n
\n
\n\n
\n \n \n
\n \n \n Layer Air Gaps Correction Factor\n \n\n \n
\n
\n {airGapsCorrectionResultValue ?? '0.000000'}\n
\n
\n
\n
\n
\n\n
\n \n \n Total Air Gaps Correction Factor\n \n\n \n
\n
\n {totalAirGapsCorrectionFactor ?? '0.000000'}\n
\n
\n
\n
\n
\n
\n\n \n
\n \n \n Inside Surface Emissivity\n \n\n \n
\n
\n {insideEmissivity}\n
\n
\n
\n
\n
\n\n
\n \n \n Outside Surface Emissivity\n \n\n \n
\n
\n {outsideEmissivity}\n
\n
\n
\n
\n
\n
\n
\n
\n \n );\n}\n","import React from 'react';\nimport { Grid, InputLabel } from '@material-ui/core';\nimport { DebouncedDecimalInput } from '../FormComponents/DebouncedDecimalInput/DebouncedDecimalInput';\nimport { TabPanel } from './TabPanel';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\nimport styles from './LayerModal.module.scss';\n\nexport type CoreVapourTabProps = {\n setVapourResistances: (vapourResistance: string | null, vapourResistivity: string | null) => void;\n vapourResistance: string | null;\n vapourResistivity: string | null;\n isLocked?: boolean;\n};\n\nexport type VapourTabProps = CoreVapourTabProps & TabIndexInfo;\n\nexport function VapourTab(props: VapourTabProps) {\n const { targetIndex, currentTabIndex, setVapourResistances, vapourResistance, vapourResistivity, isLocked } = props;\n\n const onVapourResistanceChange = (value: string) => setVapourResistances(value, value === '' ? vapourResistivity : null);\n\n const onVapourResistivityChange = (value: string) => setVapourResistances(value === '' ? vapourResistance : null, value);\n\n return (\n \n
\n \n \n \n Vapour Resistance\n \n\n \n \n \n \n\n \n
\n MNs/g\n
\n
\n
\n
\n \n \n \n Vapour Resistivity\n \n\n \n \n \n \n\n \n
\n MNs/gm\n
\n
\n
\n
\n
\n
\n\n
\n \n \n
\n
\n
\n
\n \n );\n}\n","import React, { ChangeEvent } from 'react';\nimport { Grid, InputLabel, TextField } from '@material-ui/core';\nimport { TabIndexInfo } from '../../types/components/tabTypes';\nimport styles from '../LayerModal/LayerModal.module.scss';\nimport { TabPanel } from '../LayerModal/TabPanel';\n\nexport type CoreLayerNotesTabProps = {\n notes: string | null;\n setLayerNotes: (notes: string) => void;\n isLocked?: boolean;\n};\n\nexport type LayerNotesTabProps = CoreLayerNotesTabProps & TabIndexInfo;\n\nexport function LayerNotesTab(props: LayerNotesTabProps) {\n const { notes, setLayerNotes, targetIndex, currentTabIndex, isLocked } = props;\n\n return (\n \n
\n \n \n \n Supporting information about this layer\n \n\n \n ) => setLayerNotes(event.target.value)}\n />\n \n \n \n
\n \n );\n}\n","import React from 'react';\nimport { Tabs, Tab } from '@material-ui/core';\nimport styles from './LayerModal.module.scss';\nimport { BridgingTab, CoreBridgingTabProps } from './BridgingTab';\nimport { CoreFastenersTabProps, FastenersTab } from './FastenersTab';\nimport { CoreAirGapsTabProps, AirGapsTab } from './AirGapsTab';\nimport { CoreVapourTabProps, VapourTab } from './VapourTab';\nimport { layerNotesTabIndex, airGapsTabIndex, bridgingTabIndex, fastenersTabIndex, vapourTabIndex, LayerModalMode } from './LayerModal';\nimport { LayerNotesTab, CoreLayerNotesTabProps } from './LayerNotesTab';\nimport { LayerMaterialTypeKeys } from '../../types/store/LayerMaterialTypes';\nimport { Chat } from '@material-ui/icons';\n\nexport type LayerDetailsProps = CoreBridgingTabProps &\n CoreFastenersTabProps &\n CoreAirGapsTabProps &\n CoreVapourTabProps &\n CoreLayerNotesTabProps & {\n mode: LayerModalMode;\n tabIndex: number | false;\n setTabIndex: (tabIndex: number | false) => void;\n };\n\nexport function LayerDetailsTabs(props: LayerDetailsProps) {\n const { referenceLayer } = props;\n\n const handleTabChange = (_event: React.ChangeEvent<{}>, newTabIndex: number) => {\n props.setTabIndex(newTabIndex);\n };\n\n function renderNoteTabLabel() {\n return (\n \n Notes\n \n \n \n \n );\n }\n\n return (\n \n \n \n\n \n\n \n\n \n\n \n \n\n {props.tabIndex !== false && (\n
\n {referenceLayer?.layerMaterialType !== LayerMaterialTypeKeys.WellVentilatedAirspace && (\n \n )}\n\n {referenceLayer?.layerMaterialType !== LayerMaterialTypeKeys.WellVentilatedAirspace && (\n \n )}\n\n \n\n \n\n \n
\n )}\n
\n );\n}\n","import React, { ChangeEvent } from 'react';\nimport { Button, Grid, InputLabel, MenuItem, Select, TextField } from '@material-ui/core';\nimport { Autocomplete, createFilterOptions, CreateFilterOptionsConfig } from '@material-ui/lab';\nimport { MasterData, MasterDataLayer } from '../../types/store/masterDataTypes';\nimport styles from './LayerModal.module.scss';\nimport {\n customLayerDefaults,\n CustomLayerTypeOptions,\n customLayerTypeOptions,\n CustomReferenceLayer,\n ApiLayerBridgingResponse,\n} from '../../types/store/calculationTypes';\nimport { ReferenceLayer } from '../../types/components/layerSelectionTypes';\nimport { LayerMaterialTypeKeys } from '../../types/store/LayerMaterialTypes';\nimport { isStringNotNullishOrWhitespace } from '../../common/inputValidation';\n\nexport type CoreDetailsProps = {\n masterData: MasterData;\n layerThermalResistance: string | undefined;\n clearAllDetails: () => void;\n apiBridgeResponse: ApiLayerBridgingResponse | undefined;\n masterLayer: MasterDataLayer | null;\n setMasterLayer: (masterLayer: MasterDataLayer, apiBridgeResponse: ApiLayerBridgingResponse | undefined) => void;\n layerThickness: string | null;\n setLayerThickness: (shortCode: string) => void;\n shortCode: string | null;\n setShortCode: (shortCode: string) => void;\n hasShortCodeError: boolean;\n setHasShortCodeError: (setHasShortCodeError: boolean) => void;\n setLayerFromShortCode: (shortCode: string, bridgeMaterial: ApiLayerBridgingResponse | undefined) => void;\n customReferenceLayer: CustomReferenceLayer | null;\n setCustomReferenceLayer: (customReferenceLayer: CustomReferenceLayer) => void;\n updateCustomReferenceLayer: (customReferenceLayer: Partial) => void;\n refShortCodeField: React.RefObject;\n refThicknessField: React.RefObject;\n isLocked?: boolean;\n};\n\nconst config: CreateFilterOptionsConfig = {\n stringify: (option: ReferenceLayer) => option.name,\n};\nconst filter = createFilterOptions(config);\n\nexport function CoreLayerDetails(props: CoreDetailsProps) {\n const {\n masterData,\n layerThermalResistance,\n clearAllDetails,\n apiBridgeResponse,\n masterLayer,\n setMasterLayer,\n layerThickness,\n setLayerThickness,\n shortCode,\n setShortCode,\n hasShortCodeError,\n setHasShortCodeError,\n setLayerFromShortCode,\n customReferenceLayer,\n setCustomReferenceLayer,\n updateCustomReferenceLayer,\n refShortCodeField,\n refThicknessField,\n isLocked,\n } = props;\n\n const getCustomLayerType = (referenceLayer: CustomReferenceLayer): CustomLayerTypeOptions => {\n if (referenceLayer.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation) {\n return CustomLayerTypeOptions.Insulation;\n }\n\n if (referenceLayer.layerMaterialType === LayerMaterialTypeKeys.NonInsulation) {\n return CustomLayerTypeOptions.NonInsulation;\n }\n\n if (referenceLayer.layerMaterialType === LayerMaterialTypeKeys.InvertedInsulation) {\n return CustomLayerTypeOptions.InvertedInsulation;\n }\n\n if (referenceLayer.isBlank) {\n return CustomLayerTypeOptions.Blank;\n }\n\n return CustomLayerTypeOptions.Blank;\n };\n\n const shouldShowThermalResistance = (referenceLayer: CustomReferenceLayer): boolean => {\n if (isStringNotNullishOrWhitespace(referenceLayer.thermalResistance)) {\n return true;\n }\n\n if (\n !isStringNotNullishOrWhitespace(referenceLayer.thermalResistance) &&\n !isStringNotNullishOrWhitespace(referenceLayer.thermalConductivity)\n ) {\n return true;\n }\n\n return false;\n };\n\n const shouldShowThermalConductivity = (referenceLayer: CustomReferenceLayer): boolean => {\n if (!isStringNotNullishOrWhitespace(referenceLayer.thermalResistance)) {\n return true;\n }\n\n if (\n !isStringNotNullishOrWhitespace(referenceLayer.thermalResistance) &&\n !isStringNotNullishOrWhitespace(referenceLayer.thermalConductivity)\n ) {\n return true;\n }\n\n return false;\n };\n\n return (\n
\n \n \n \n Short Code\n \n\n ) => {\n setShortCode(event.target.value);\n\n setHasShortCodeError(false);\n }}\n onBlur={() => {\n setShortCode('');\n\n setHasShortCodeError(false);\n }}\n onKeyDown={event => {\n // If \"Enter\" key\n if (event.keyCode === 13) {\n event.preventDefault();\n\n setLayerFromShortCode(shortCode || '', apiBridgeResponse);\n }\n }}\n InputProps={{\n ref: refShortCodeField,\n }}\n error={hasShortCodeError}\n helperText={hasShortCodeError ? 'Material not found' : 'Hit enter to search'}\n disabled={isLocked}\n />\n \n\n \n \n Layer\n \n\n layer.isActive !== false) as ReferenceLayer[]}\n autoHighlight\n getOptionLabel={(option: ReferenceLayer) => option.name}\n onChange={(_event: ChangeEvent<{}>, layer: ReferenceLayer | null) => {\n if (!layer) {\n clearAllDetails();\n return;\n }\n\n if (layer.isCustom) {\n if (customReferenceLayer == null) {\n setCustomReferenceLayer(layer);\n } else {\n updateCustomReferenceLayer({ name: layer.name });\n }\n } else {\n setMasterLayer(layer, apiBridgeResponse);\n }\n }}\n value={customReferenceLayer ?? masterLayer}\n disabled={isLocked}\n forcePopupIcon\n freeSolo\n filterOptions={(options, params) => {\n const filtered = filter(options, params) as ReferenceLayer[];\n if (params.inputValue !== '') {\n const customLayerOption: CustomReferenceLayer =\n customReferenceLayer != null\n ? {\n ...customReferenceLayer,\n name: params.inputValue,\n }\n : {\n ...customLayerDefaults,\n name: params.inputValue,\n };\n\n filtered.push(customLayerOption);\n }\n\n return filtered;\n }}\n renderOption={(option: ReferenceLayer) =>\n !option.isCustom ? (\n option.name\n ) : (\n \n {option.name}\n \n \n \n \n )\n }\n renderInput={params => (\n \n )}\n />\n \n\n \n {!customReferenceLayer?.isBlank && (\n \n \n Thickness\n \n\n \n \n ) => setLayerThickness(event.target.value)}\n InputProps={{\n ref: refThicknessField,\n }}\n />\n \n\n \n
\n mm\n
\n
\n
\n
\n )}\n
\n\n \n
\n
\n Layer Thermal Resistance\n
\n\n
\n {layerThermalResistance ?? '0.000'}\n
\n\n
\n m²K/W\n
\n
\n
\n
\n\n {customReferenceLayer == null ? null : (\n
\n
\n \n \n \n Custom Layer Type\n \n\n {\n const layerType = event.target.value;\n\n if (layerType === CustomLayerTypeOptions.Blank) {\n const capturedReferenceLayer = customReferenceLayer;\n\n clearAllDetails();\n\n updateCustomReferenceLayer({\n ...customLayerDefaults,\n isBlank: true,\n layerMaterialType: null,\n name: capturedReferenceLayer.name,\n });\n } else if (layerType === CustomLayerTypeOptions.Insulation) {\n updateCustomReferenceLayer({\n isBlank: false,\n layerMaterialType: LayerMaterialTypeKeys.GenericInsulation,\n thermalConductivity: customLayerDefaults.thermalConductivity,\n thermalResistance: customLayerDefaults.thermalResistance,\n insideEmissivity: '0.90',\n outsideEmissivity: '0.90',\n });\n } else if (layerType === CustomLayerTypeOptions.InvertedInsulation) {\n updateCustomReferenceLayer({\n isBlank: false,\n layerMaterialType: LayerMaterialTypeKeys.InvertedInsulation,\n thermalConductivity: customLayerDefaults.thermalConductivity,\n thermalResistance: customLayerDefaults.thermalResistance,\n insideEmissivity: '0.90',\n outsideEmissivity: '0.90',\n });\n } else {\n updateCustomReferenceLayer({\n isBlank: false,\n layerMaterialType: LayerMaterialTypeKeys.NonInsulation,\n thermalConductivity: customLayerDefaults.thermalConductivity,\n thermalResistance: customLayerDefaults.thermalResistance,\n insideEmissivity: '0.90',\n outsideEmissivity: '0.90',\n });\n }\n }}\n variant=\"outlined\"\n >\n {customLayerTypeOptions.map(customLayerTypeOption => {\n return (\n \n {customLayerTypeOption}\n \n );\n })}\n \n \n\n {!customReferenceLayer?.isBlank && (\n \n {shouldShowThermalConductivity(customReferenceLayer) && (\n \n \n Thermal Conductivity\n \n\n \n \n ) =>\n updateCustomReferenceLayer({ thermalConductivity: event.target.value, thermalResistance: null })\n }\n />\n \n\n \n
\n W/mk\n
\n
\n
\n
\n )}\n\n {shouldShowThermalResistance(customReferenceLayer) && (\n \n \n Thermal Resistance\n \n\n \n \n ) =>\n updateCustomReferenceLayer({ thermalResistance: event.target.value, thermalConductivity: null })\n }\n />\n \n\n \n
\n m²K/W\n
\n
\n
\n
\n )}\n\n \n \n Inside Emissivity\n \n\n \n \n ) =>\n updateCustomReferenceLayer({ insideEmissivity: event.target.value })\n }\n />\n \n \n \n\n \n \n Outside Emissivity\n \n\n \n \n ) =>\n updateCustomReferenceLayer({ outsideEmissivity: event.target.value })\n }\n />\n \n \n \n
\n )}\n
\n
\n
\n )}\n
\n );\n}\n","import React, { FormEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Dialog, DialogTitle, DialogContent, DialogActions, Grid, Typography } from '@material-ui/core';\n\nimport { LayerDetailsTabs } from './LayerDetailsTabs';\nimport { CoreLayerDetails } from './CoreLayerDetails';\nimport {\n MasterDataLayer,\n MasterDataBridgeMaterial,\n MasterDataMechanicalFasteners,\n AirGapsCorrectionLevel,\n MasterData,\n} from '../../types/store/masterDataTypes';\nimport { addLayerToCalculation, editLayerInCalculation, clearInterimCalculation } from '../../actions/calculationActions';\nimport {\n CalculationLayer,\n ApiLayerBridgingRequest,\n Calculation,\n ApiLayerMechanicalFastenerRequest,\n CustomReferenceLayer,\n ApiCustomReferenceLayerRequest,\n customLayerDefaults,\n ApiLayerNotesRequest,\n ApiLayerBridgingResponse,\n} from '../../types/store/calculationTypes';\nimport styles from './LayerModal.module.scss';\nimport { interimOrCurrentCalculationSelector, masterDataSelector } from '../../store/selectors';\nimport { LayerMaterialTypeKeys } from '../../types/store/LayerMaterialTypes';\nimport {\n isStringNotNullishOrWhitespace,\n isStringValidNumberInRangeInclusive,\n isStringValidPostiveNumber,\n} from '../../common/inputValidation';\nimport { uuid } from '../../common/uuid';\n\nexport enum LayerModalMode {\n ADD = 'ADD',\n EDIT = 'EDIT',\n}\n\nexport type Props = {\n mode: LayerModalMode;\n layerInstanceId: string | undefined;\n setLayerInstanceId: (value: string | undefined) => void;\n onClose: () => void;\n initialTabIndex: false | number;\n};\n\nexport type DefaultModalState = {\n masterLayer: MasterDataLayer | null;\n layerThickness: string | null;\n shortCode: string | null;\n hasShortCodeError: boolean;\n customReferenceLayer: CustomReferenceLayer | null;\n bridgeMaterial: MasterDataBridgeMaterial | null;\n bridgeWidth: string;\n bridgeCentres: string;\n bridgeNonBridgedHeight: string | null;\n fasteners: MasterDataMechanicalFasteners | null;\n fastenersCrossArea: string;\n fastenersNumber: string;\n airGapsCorrectionLevelOverride: AirGapsCorrectionLevel | undefined;\n notes: string | null;\n tabIndex: false | number;\n};\n\nexport const defaultState: DefaultModalState = {\n masterLayer: null,\n layerThickness: null,\n shortCode: null,\n hasShortCodeError: false,\n customReferenceLayer: null,\n bridgeMaterial: null,\n bridgeWidth: '',\n bridgeCentres: '',\n bridgeNonBridgedHeight: null,\n fasteners: null,\n fastenersCrossArea: '',\n fastenersNumber: '',\n airGapsCorrectionLevelOverride: undefined,\n notes: null,\n tabIndex: false,\n};\n\ntype InitializerArgs = {\n defaults: DefaultModalState;\n masterData: MasterData;\n mode: LayerModalMode;\n interimLayer: CalculationLayer | null;\n initialTabIndex: false | number;\n};\n\ntype ModalState = {\n masterLayer: MasterDataLayer | null;\n layerThickness: string | null;\n shortCode: string | null;\n hasShortCodeError: boolean;\n customReferenceLayer: CustomReferenceLayer | null;\n bridgeMaterial: MasterDataBridgeMaterial | null;\n bridgeWidth: string;\n bridgeCentres: string;\n bridgeNonBridgedHeight: string | null;\n fasteners: MasterDataMechanicalFasteners | null;\n fastenersCrossArea: string;\n fastenersNumber: string;\n airGapsCorrectionLevelOverride: AirGapsCorrectionLevel | undefined;\n notes: string | null;\n tabIndex: false | number;\n vapourResistance: string | null;\n vapourResistivity: string | null;\n};\n\ntype VariableVapourResistance = {\n vapourResistance: number;\n vapourResistanceBreak: number;\n};\n\nconst getInitMasterDataLayer = ({ defaults, masterData, mode, interimLayer }: InitializerArgs): MasterDataLayer | null => {\n if (mode === LayerModalMode.ADD || !masterData.layers) {\n return defaults.masterLayer;\n }\n\n const masterDataLayer = masterData.layers.find(masterDataLayer => masterDataLayer.id === (interimLayer ? interimLayer.id : ''));\n\n return masterDataLayer || defaults.masterLayer;\n};\n\nconst getInitLayerThickness = ({ mode, interimLayer, defaults }: InitializerArgs): string | null =>\n mode === LayerModalMode.EDIT ? (interimLayer ? interimLayer.thicknessMillimetres : defaults.layerThickness) : defaults.layerThickness;\n\nconst getInitShortCode = ({ interimLayer }: InitializerArgs): string | null => '';\n\nconst getInitHasShortCodeError = ({ defaults }: InitializerArgs): boolean => defaults.hasShortCodeError;\n\nconst getInitCustomReferenceLayer = ({ defaults, mode, interimLayer }: InitializerArgs): CustomReferenceLayer | null => {\n if (mode === LayerModalMode.ADD || !interimLayer?.customReferenceLayer) {\n return defaults.customReferenceLayer;\n }\n\n return interimLayer?.customReferenceLayer || defaults.customReferenceLayer;\n};\n\nconst getInitMasterDataBridgeMaterial = ({\n defaults,\n masterData,\n mode,\n interimLayer,\n}: InitializerArgs): MasterDataBridgeMaterial | null => {\n if (mode === LayerModalMode.ADD || !masterData.bridgeMaterials || !interimLayer?.layerBridging) {\n return defaults.bridgeMaterial;\n }\n\n let material: MasterDataBridgeMaterial | undefined;\n\n if (interimLayer?.layerBridging?.id === -1) {\n material = {\n id: interimLayer.layerBridging.id,\n name: interimLayer.layerBridging.name,\n bridgeDescription: interimLayer.layerBridging.bridgeDescription,\n bridgeThermalConductivity: interimLayer.layerBridging.bridgeThermalConductivity,\n defaultBridgeWidth: interimLayer.layerBridging.bridgeWidthMillimetres,\n defaultCentresDistance: interimLayer.layerBridging.centresDistanceMillimetres,\n defaultNonBridgeHeight: interimLayer.layerBridging.nonBridgeHeightMillimetres,\n };\n } else {\n material = masterData.bridgeMaterials.find(masterMaterial => masterMaterial.id === (interimLayer?.layerBridging?.id ?? ''));\n }\n\n return material || defaults.bridgeMaterial;\n};\n\nconst getInitBridgeWidth = ({ defaults, mode, interimLayer }: InitializerArgs): string =>\n mode === LayerModalMode.EDIT ? interimLayer?.layerBridging?.bridgeWidthMillimetres ?? defaults.bridgeWidth : defaults.bridgeWidth;\n\nconst getInitBridgeCentres = ({ defaults, mode, interimLayer }: InitializerArgs): string =>\n mode === LayerModalMode.EDIT ? interimLayer?.layerBridging?.centresDistanceMillimetres ?? defaults.bridgeCentres : defaults.bridgeCentres;\n\nconst getInitBridgeNonBridgedHeight = ({ defaults, mode, interimLayer }: InitializerArgs): string | null =>\n mode === LayerModalMode.EDIT\n ? interimLayer?.layerBridging?.nonBridgeHeightMillimetres ?? defaults.bridgeNonBridgedHeight\n : defaults.bridgeNonBridgedHeight;\n\nconst getInitMasterDataMechanicalFastener = ({\n defaults,\n masterData,\n mode,\n interimLayer,\n}: InitializerArgs): MasterDataMechanicalFasteners | null => {\n if (mode === LayerModalMode.ADD || !masterData.mechanicalFasteners || !interimLayer?.mechanicalFastener) {\n return defaults.fasteners;\n }\n\n const fasteners = masterData.mechanicalFasteners.find(fastener => fastener.id === (interimLayer?.mechanicalFastener?.id ?? ''));\n\n return fasteners || defaults.fasteners;\n};\n\nconst getInitFastenersCrossArea = ({ defaults, mode, interimLayer }: InitializerArgs): string =>\n mode === LayerModalMode.EDIT\n ? interimLayer?.mechanicalFastener?.crossSectionalAreaMillimetresSquared ?? defaults.fastenersCrossArea\n : defaults.fastenersCrossArea;\n\nconst getInitFastenersNumber = ({ defaults, mode, interimLayer }: InitializerArgs): string => {\n return mode === LayerModalMode.EDIT\n ? interimLayer?.mechanicalFastener?.fasteningsPerMetreSquared ?? defaults.fastenersNumber\n : defaults.fastenersNumber;\n};\n\nconst getInitAirGapsCorrectionLevelOverride = ({ defaults, interimLayer }: InitializerArgs): AirGapsCorrectionLevel | undefined =>\n interimLayer?.airGapsCorrection?.overrideCorrectionFactor ?? defaults.airGapsCorrectionLevelOverride;\n\nconst getInitTabIndex = ({ initialTabIndex }: InitializerArgs): false | number => initialTabIndex;\n\nconst getInitVapourResistance = ({ interimLayer }: InitializerArgs): string | null => interimLayer?.vapourResistance || null;\n\nconst getInitVapourResistivity = ({ interimLayer }: InitializerArgs): string | null => interimLayer?.vapourResistivity || null;\n\nconst getInitNotes = ({ defaults, mode, interimLayer }: InitializerArgs): string | null =>\n mode === LayerModalMode.EDIT ? interimLayer?.layerNotes?.notes ?? defaults.notes : defaults.notes;\n\nexport function stateInitializer(args: InitializerArgs): ModalState {\n return {\n masterLayer: getInitMasterDataLayer(args),\n layerThickness: getInitLayerThickness(args),\n shortCode: getInitShortCode(args),\n hasShortCodeError: getInitHasShortCodeError(args),\n notes: getInitNotes(args),\n customReferenceLayer: getInitCustomReferenceLayer(args),\n bridgeMaterial: getInitMasterDataBridgeMaterial(args),\n bridgeWidth: getInitBridgeWidth(args),\n bridgeCentres: getInitBridgeCentres(args),\n bridgeNonBridgedHeight: getInitBridgeNonBridgedHeight(args),\n fasteners: getInitMasterDataMechanicalFastener(args),\n fastenersCrossArea: getInitFastenersCrossArea(args),\n fastenersNumber: getInitFastenersNumber(args),\n airGapsCorrectionLevelOverride: getInitAirGapsCorrectionLevelOverride(args),\n tabIndex: getInitTabIndex(args),\n vapourResistance: getInitVapourResistance(args),\n vapourResistivity: getInitVapourResistivity(args),\n };\n}\n\nconst getVapourResistance = (masterLayer: MasterDataLayer | null, layerThickness: string) => {\n if (!masterLayer) {\n return null;\n }\n\n if (masterLayer.vapourResistance) {\n return masterLayer.vapourResistance;\n }\n\n const variableResistances: VariableVapourResistance[] = [\n { vapourResistance: Number(masterLayer.vr4), vapourResistanceBreak: Number(masterLayer.vrBreak3) },\n { vapourResistance: Number(masterLayer.vr3), vapourResistanceBreak: Number(masterLayer.vrBreak2) },\n { vapourResistance: Number(masterLayer.vr2), vapourResistanceBreak: Number(masterLayer.vrBreak1) },\n { vapourResistance: Number(masterLayer.vr1), vapourResistanceBreak: 0 },\n ];\n\n return variableResistances.find(vvr => Number(layerThickness) > vvr.vapourResistanceBreak)?.vapourResistance.toString() || null;\n};\n\nconst getSetMasterLayer = (setLocalState: React.Dispatch>) => (defaults: DefaultModalState) => (\n masterLayer: MasterDataLayer,\n apiBridgeResponse: ApiLayerBridgingResponse | undefined\n): void => {\n const bridgeMaterial = masterLayer.bridgeMaterial;\n\n if (bridgeMaterial) {\n setLocalState(prevState => ({\n ...prevState,\n bridgeMaterial,\n bridgeWidth: bridgeMaterial.defaultBridgeWidth,\n bridgeCentres: bridgeMaterial.defaultCentresDistance,\n bridgeNonBridgedHeight: bridgeMaterial.defaultNonBridgeHeight,\n tabIndex: bridgingTabIndex,\n }));\n } else if (apiBridgeResponse?.id === -1) {\n getResetBridgingDetails(setLocalState)(defaults);\n }\n\n setLocalState(prevState => ({\n ...prevState,\n masterLayer,\n layerThickness: masterLayer.defaultThickness,\n customReferenceLayer: masterLayer != null ? defaults.customReferenceLayer : prevState.customReferenceLayer,\n airGapsCorrectionLevelOverride: !(masterLayer.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation)\n ? defaults.airGapsCorrectionLevelOverride\n : prevState.airGapsCorrectionLevelOverride,\n vapourResistance: getVapourResistance(masterLayer, masterLayer.defaultThickness),\n vapourResistivity: masterLayer?.vapourResistivity || null,\n }));\n};\n\nconst getSetLayerThickness = (setLocalState: React.Dispatch>) => (layerThickness: string): void => {\n setLocalState((prevState: ModalState) => ({\n ...prevState,\n layerThickness,\n vapourResistance: getVapourResistance(prevState.masterLayer, layerThickness),\n }));\n};\n\nconst getSetShortCode = (setLocalState: React.Dispatch>) => (shortCode: string): void => {\n setLocalState(prevState => ({\n ...prevState,\n shortCode,\n }));\n};\n\nconst getSetHasShortCodeError = (setLocalState: React.Dispatch>) => (hasShortCodeError: boolean): void => {\n setLocalState(prevState => ({\n ...prevState,\n hasShortCodeError,\n }));\n};\n\nconst getSetCustomReferenceLayer = (setLocalState: React.Dispatch>) => (defaults: DefaultModalState) => (\n customReferenceLayer: CustomReferenceLayer\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n masterLayer: customReferenceLayer != null ? defaults.masterLayer : prevState.masterLayer,\n // Only clear the layer thickness if we are chaging customReferenceLayer from null to a value\n layerThickness: prevState.customReferenceLayer != null ? prevState.layerThickness : defaults.layerThickness,\n airGapsCorrectionLevelOverride:\n customReferenceLayer == null || !(customReferenceLayer.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation)\n ? defaults.airGapsCorrectionLevelOverride\n : prevState.airGapsCorrectionLevelOverride,\n customReferenceLayer,\n }));\n};\n\nconst getUpdateCustomReferenceLayer = (setLocalState: React.Dispatch>) => (\n defaults: DefaultModalState\n) => (customReferenceLayer: Partial): void => {\n setLocalState(prevState => ({\n ...prevState,\n masterLayer: defaults.masterLayer,\n airGapsCorrectionLevelOverride:\n customReferenceLayer == null || !(customReferenceLayer.layerMaterialType === LayerMaterialTypeKeys.GenericInsulation)\n ? defaults.airGapsCorrectionLevelOverride\n : prevState.airGapsCorrectionLevelOverride,\n customReferenceLayer:\n prevState.customReferenceLayer == null\n ? { ...customLayerDefaults, ...customReferenceLayer }\n : { ...prevState.customReferenceLayer, ...customReferenceLayer },\n }));\n};\n\nconst getSetBridgeMaterial = (setLocalState: React.Dispatch>) => (\n bridgeMaterial: MasterDataBridgeMaterial\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n bridgeMaterial,\n bridgeWidth: bridgeMaterial.defaultBridgeWidth,\n bridgeCentres: bridgeMaterial.defaultCentresDistance,\n bridgeNonBridgedHeight: bridgeMaterial.defaultNonBridgeHeight,\n }));\n};\n\nconst getSetBridgeWidth = (setLocalState: React.Dispatch>) => (bridgeWidth: string): void => {\n setLocalState(prevState => ({\n ...prevState,\n bridgeWidth,\n }));\n};\n\nconst getSetBridgeCentres = (setLocalState: React.Dispatch>) => (bridgeCentres: string): void => {\n setLocalState(prevState => ({\n ...prevState,\n bridgeCentres,\n }));\n};\n\nconst getSetBridgeNonBridgedHeight = (setLocalState: React.Dispatch>) => (\n bridgeNonBridgedHeight: string | null\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n bridgeNonBridgedHeight,\n }));\n};\n\nconst getSetFasteners = (setLocalState: React.Dispatch>) => (\n fasteners: MasterDataMechanicalFasteners\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n fasteners,\n fastenersCrossArea: fasteners.defaultCrossArea,\n fastenersNumber: fasteners.defaultNumber,\n }));\n};\n\nconst getSetFastenersCrossArea = (setLocalState: React.Dispatch>) => (\n fastenersCrossArea: string\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n fastenersCrossArea,\n }));\n};\n\nconst getSetFastenersNumber = (setLocalState: React.Dispatch>) => (fastenersNumber: string): void => {\n setLocalState(prevState => ({\n ...prevState,\n fastenersNumber,\n }));\n};\n\nconst getSetAirGapsCorrectionLevelOverride = (setLocalState: React.Dispatch>) => (\n airGapsCorrectionLevelOverride: AirGapsCorrectionLevel | undefined\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n airGapsCorrectionLevelOverride,\n }));\n};\n\nconst getSetNotes = (setLocalState: React.Dispatch>) => (notes: string): void => {\n setLocalState(prevState => ({\n ...prevState,\n notes,\n }));\n};\n\nconst getResetCoreDetails = (setLocalState: React.Dispatch>) => (defaults: DefaultModalState): void => {\n setLocalState(prevState => ({\n ...prevState,\n masterLayer: defaults.masterLayer,\n layerThickness: defaults.layerThickness,\n shortCode: defaults.shortCode,\n airGapsCorrectionLevelOverride: defaults.airGapsCorrectionLevelOverride,\n customReferenceLayer: defaults.customReferenceLayer,\n notes: defaults.notes,\n }));\n};\n\nconst getResetBridgingDetails = (setLocalState: React.Dispatch>) => (\n defaults: DefaultModalState\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n bridgeMaterial: defaults.bridgeMaterial,\n bridgeWidth: defaults.bridgeWidth,\n bridgeCentres: defaults.bridgeCentres,\n bridgeNonBridgedHeight: defaults.bridgeNonBridgedHeight,\n }));\n};\n\nconst getResetFastenerDetails = (setLocalState: React.Dispatch>) => (\n defaults: DefaultModalState\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n fasteners: defaults.fasteners,\n fastenersCrossArea: defaults.fastenersCrossArea,\n fastenersNumber: defaults.fastenersNumber,\n }));\n};\n\nconst getResetAllDetails = (setLocalState: React.Dispatch>) => (defaults: DefaultModalState): void => {\n getResetCoreDetails(setLocalState)(defaults);\n getResetBridgingDetails(setLocalState)(defaults);\n getResetFastenerDetails(setLocalState)(defaults);\n};\n\nconst getSetTabIndex = (setLocalState: React.Dispatch>) => (tabIndex: false | number): void => {\n setLocalState(prevState => ({\n ...prevState,\n tabIndex,\n }));\n};\n\nconst getSetVapourResistances = (setLocalState: React.Dispatch>) => (\n vapourResistance: string | null,\n vapourResistivity: string | null\n): void => {\n setLocalState(prevState => ({\n ...prevState,\n vapourResistance,\n vapourResistivity,\n }));\n};\n\nexport function getSetters(setLocalState: React.Dispatch>, defaults: DefaultModalState) {\n return {\n setMasterLayer: getSetMasterLayer(setLocalState)(defaults),\n setLayerThickness: getSetLayerThickness(setLocalState),\n setShortCode: getSetShortCode(setLocalState),\n setHasShortCodeError: getSetHasShortCodeError(setLocalState),\n setLayerNotes: getSetNotes(setLocalState),\n setCustomReferenceLayer: getSetCustomReferenceLayer(setLocalState)(defaults),\n updateCustomReferenceLayer: getUpdateCustomReferenceLayer(setLocalState)(defaults),\n setBridgeMaterial: getSetBridgeMaterial(setLocalState),\n setBridgeWidth: getSetBridgeWidth(setLocalState),\n setBridgeCentres: getSetBridgeCentres(setLocalState),\n setBridgeNonBridgedHeight: getSetBridgeNonBridgedHeight(setLocalState),\n setFasteners: getSetFasteners(setLocalState),\n setFastenersCrossArea: getSetFastenersCrossArea(setLocalState),\n setFastenersNumber: getSetFastenersNumber(setLocalState),\n setAirGapsCorrectionLevelOverride: getSetAirGapsCorrectionLevelOverride(setLocalState),\n resetCoreDetails: getResetCoreDetails(setLocalState),\n resetBridgingDetails: getResetBridgingDetails(setLocalState),\n resetFastenerDetails: getResetFastenerDetails(setLocalState),\n resetAllDetails: getResetAllDetails(setLocalState),\n setTabIndex: getSetTabIndex(setLocalState),\n setVapourResistances: getSetVapourResistances(setLocalState),\n };\n}\n\n// The logic in this function must reflect the buisiness logic in the `Kics.Technical.Calculation` project, `LayerCalculator.cs::CalculateBridgingPercentage`\nfunction isBridgingPercentageInvalid(bridgeWidth: string, bridgeCentres: string, nonBridgeHeight: string | null): boolean {\n const decimalPlaces = 1;\n const precision = decimalPlaces * 10;\n const width: number = Math.round(+bridgeWidth * precision) / precision;\n const centres: number = Math.round(+bridgeCentres * precision) / precision;\n\n if (nonBridgeHeight == null || nonBridgeHeight === '') {\n if (width < centres) {\n return false;\n }\n } else {\n // 2 Dimensional\n const height: number = Math.round(+nonBridgeHeight * precision) / precision;\n\n const percentage = 1 - ((centres - width) * height) / (centres * (height + width));\n if (percentage > 0 && percentage < 1) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isModalStateInvalid(state: ModalState) {\n const {\n masterLayer,\n layerThickness,\n customReferenceLayer,\n bridgeMaterial,\n bridgeWidth,\n bridgeCentres,\n bridgeNonBridgedHeight,\n fasteners,\n fastenersCrossArea,\n fastenersNumber,\n } = state;\n\n const isThereAValidReferenceLayerSelected = masterLayer != null || customReferenceLayer != null;\n const isLayerThicknessValid = customReferenceLayer?.isBlank || isStringValidPostiveNumber(layerThickness);\n const isACustomReferenceLayerSelectedAndTheCustomValuesAreValid =\n !customReferenceLayer ||\n (isStringNotNullishOrWhitespace(customReferenceLayer.name) &&\n (customReferenceLayer?.isBlank ||\n (isStringValidPostiveNumber(customReferenceLayer.thermalConductivity) &&\n !isStringNotNullishOrWhitespace(customReferenceLayer.thermalResistance)) ||\n (isStringValidPostiveNumber(customReferenceLayer.thermalResistance) &&\n !isStringNotNullishOrWhitespace(customReferenceLayer.thermalConductivity))) &&\n (customReferenceLayer?.isBlank || isStringValidNumberInRangeInclusive(0, 1, customReferenceLayer.insideEmissivity)) &&\n (customReferenceLayer?.isBlank || isStringValidNumberInRangeInclusive(0, 1, customReferenceLayer.outsideEmissivity)));\n const areAllBridgingFieldsEmpty = [bridgeMaterial, bridgeWidth, bridgeCentres, bridgeNonBridgedHeight].every(property => !property);\n const doesBridgingHaveEmptyRequiredField = [bridgeMaterial, bridgeWidth, bridgeCentres].some(property => !property);\n const areAllBridgingFieldsValid = [bridgeWidth, bridgeCentres, bridgeNonBridgedHeight].every(\n property => !property || Number(property) > 0\n );\n\n const areAllFastenerFieldsEmpty = [fasteners, fastenersCrossArea, fastenersNumber].every(property => !property);\n const doesFastenerHaveEmptyRequiredField = [fasteners, fastenersCrossArea, fastenersNumber].some(property => !property);\n const areAllFastenerFieldsValid = [fastenersCrossArea, fastenersNumber].every(property => !property || Number(property) > 0);\n\n return (\n !isThereAValidReferenceLayerSelected ||\n !isLayerThicknessValid ||\n !isACustomReferenceLayerSelectedAndTheCustomValuesAreValid ||\n (!areAllFastenerFieldsEmpty && (doesFastenerHaveEmptyRequiredField || !areAllFastenerFieldsValid)) ||\n (!areAllBridgingFieldsEmpty &&\n (doesBridgingHaveEmptyRequiredField ||\n !areAllBridgingFieldsValid ||\n isBridgingPercentageInvalid(bridgeWidth, bridgeCentres, bridgeNonBridgedHeight)))\n );\n}\n\nexport const closedTabIndex = false;\nexport const bridgingTabIndex = 0;\nexport const fastenersTabIndex = 1;\nexport const airGapsTabIndex = 2;\nexport const vapourTabIndex = 3;\nexport const layerNotesTabIndex = 4;\n\nfunction LayerModalWithDefaults(defaults: DefaultModalState, props: Props) {\n const { layerInstanceId, mode, onClose, setLayerInstanceId, initialTabIndex } = props;\n const dispatch = useDispatch();\n\n const masterData: MasterData = useSelector(masterDataSelector);\n const calculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n\n const refShortCodeField = React.createRef();\n const refThicknessField = React.createRef();\n\n const interimLayer = calculation\n ? calculation.layers.find((layer: CalculationLayer) => layer.instanceId === layerInstanceId) || null\n : null;\n\n const initializerArgs = { defaults, masterData, interimLayer, mode, initialTabIndex };\n\n function initState() {\n return stateInitializer(initializerArgs);\n }\n\n const [localState, setLocalState] = React.useState(initState);\n\n const {\n masterLayer,\n notes,\n layerThickness,\n shortCode,\n hasShortCodeError,\n customReferenceLayer,\n bridgeMaterial,\n bridgeWidth,\n bridgeCentres,\n bridgeNonBridgedHeight,\n fasteners,\n fastenersCrossArea,\n fastenersNumber,\n airGapsCorrectionLevelOverride,\n tabIndex,\n vapourResistance,\n vapourResistivity,\n } = localState;\n\n const {\n setMasterLayer,\n setLayerThickness,\n setShortCode,\n setHasShortCodeError,\n setLayerNotes,\n setCustomReferenceLayer,\n updateCustomReferenceLayer,\n setBridgeMaterial,\n setBridgeWidth,\n setBridgeCentres,\n setBridgeNonBridgedHeight,\n setFasteners,\n setFastenersCrossArea,\n setFastenersNumber,\n setAirGapsCorrectionLevelOverride,\n resetBridgingDetails,\n resetFastenerDetails,\n resetAllDetails,\n setTabIndex,\n setVapourResistances,\n } = getSetters(setLocalState, defaults);\n\n const clearBridgingDetails = () => resetBridgingDetails(defaults);\n const clearFastenersDetails = () => resetFastenerDetails(defaults);\n const clearAllDetails = React.useCallback(() => {\n resetAllDetails(defaults);\n }, [resetAllDetails, defaults]);\n\n const focusOnShortCodeField = React.useCallback(() => {\n if (refShortCodeField.current) {\n refShortCodeField?.current?.getElementsByTagName('input')[0].focus();\n }\n }, [refShortCodeField]);\n\n const selectAllTextInShortCodeField = React.useCallback(() => {\n if (refShortCodeField.current) {\n refShortCodeField?.current?.getElementsByTagName('input')[0].select();\n }\n }, [refShortCodeField]);\n\n const focusOnThicknessField = React.useCallback(() => {\n if (refThicknessField.current) {\n refThicknessField.current.getElementsByTagName('input')[0].select();\n }\n }, [refThicknessField]);\n\n const calculatedCorrectionFactor = interimLayer?.airGapsCorrection?.calculatedCorrectionFactor;\n\n React.useEffect(() => {\n if (isModalStateInvalid(localState)) {\n return;\n }\n\n const customReferenceLayerRequest: ApiCustomReferenceLayerRequest | undefined =\n customReferenceLayer != null\n ? {\n ...customReferenceLayer,\n }\n : undefined;\n\n const layerBridging: ApiLayerBridgingRequest | undefined =\n bridgeMaterial != null\n ? {\n id: bridgeMaterial.id,\n bridgeWidthMillimetres: bridgeWidth,\n centresDistanceMillimetres: bridgeCentres,\n nonBridgeHeightMillimetres: bridgeNonBridgedHeight,\n }\n : undefined;\n\n const mechanicalFasteners: ApiLayerMechanicalFastenerRequest | undefined =\n fasteners != null\n ? {\n id: fasteners.id,\n crossSectionalAreaMillimetresSquared: fastenersCrossArea,\n fasteningsPerMetreSquared: fastenersNumber,\n }\n : undefined;\n\n const layerNotes: ApiLayerNotesRequest | undefined =\n isStringNotNullishOrWhitespace(notes) && notes != null\n ? {\n notes,\n }\n : undefined;\n\n if (mode === LayerModalMode.EDIT && layerInstanceId) {\n dispatch(\n editLayerInCalculation(\n layerInstanceId,\n masterLayer,\n layerThickness,\n customReferenceLayerRequest,\n layerBridging,\n mechanicalFasteners,\n calculatedCorrectionFactor,\n airGapsCorrectionLevelOverride,\n layerNotes,\n vapourResistance,\n vapourResistivity,\n true\n )\n );\n } else if (mode === LayerModalMode.ADD && layerInstanceId) {\n dispatch(\n addLayerToCalculation(\n layerInstanceId,\n masterLayer,\n layerThickness,\n customReferenceLayerRequest,\n layerBridging,\n mechanicalFasteners,\n calculatedCorrectionFactor,\n airGapsCorrectionLevelOverride,\n layerNotes,\n vapourResistance,\n vapourResistivity,\n true\n )\n );\n }\n }, [\n dispatch,\n mode,\n layerInstanceId,\n notes,\n localState,\n masterLayer,\n layerThickness,\n customReferenceLayer,\n bridgeMaterial,\n bridgeWidth,\n bridgeCentres,\n bridgeNonBridgedHeight,\n fasteners,\n fastenersCrossArea,\n fastenersNumber,\n calculatedCorrectionFactor,\n airGapsCorrectionLevelOverride,\n vapourResistance,\n vapourResistivity,\n ]);\n\n const handleSubmitLayer = React.useCallback(\n (event: FormEvent) => {\n event.preventDefault();\n\n if (isModalStateInvalid(localState)) {\n return;\n }\n\n const customReferenceLayerRequest: ApiCustomReferenceLayerRequest | undefined =\n customReferenceLayer != null\n ? {\n ...customReferenceLayer,\n }\n : undefined;\n\n const layerBridging: ApiLayerBridgingRequest | undefined =\n bridgeMaterial != null\n ? {\n id: bridgeMaterial.id,\n bridgeWidthMillimetres: bridgeWidth,\n centresDistanceMillimetres: bridgeCentres,\n nonBridgeHeightMillimetres: bridgeNonBridgedHeight,\n }\n : undefined;\n\n const mechanicalFasteners: ApiLayerMechanicalFastenerRequest | undefined =\n fasteners != null\n ? {\n id: fasteners.id,\n crossSectionalAreaMillimetresSquared: fastenersCrossArea,\n fasteningsPerMetreSquared: fastenersNumber,\n }\n : undefined;\n\n const layerNotes: ApiLayerNotesRequest | undefined =\n isStringNotNullishOrWhitespace(notes) && notes != null\n ? {\n notes,\n }\n : undefined;\n\n if (mode === LayerModalMode.EDIT && layerInstanceId) {\n dispatch(\n editLayerInCalculation(\n layerInstanceId,\n masterLayer,\n layerThickness,\n customReferenceLayerRequest,\n layerBridging,\n mechanicalFasteners,\n calculatedCorrectionFactor,\n airGapsCorrectionLevelOverride,\n layerNotes,\n vapourResistance,\n vapourResistivity\n )\n );\n\n onClose();\n } else if (mode === LayerModalMode.ADD && layerInstanceId) {\n dispatch(\n addLayerToCalculation(\n layerInstanceId,\n masterLayer,\n layerThickness,\n customReferenceLayerRequest,\n layerBridging,\n mechanicalFasteners,\n calculatedCorrectionFactor,\n airGapsCorrectionLevelOverride,\n layerNotes,\n vapourResistance,\n vapourResistivity\n )\n );\n\n clearAllDetails();\n\n setTabIndex(false);\n\n setLayerInstanceId(uuid());\n\n focusOnShortCodeField();\n }\n },\n [\n dispatch,\n mode,\n localState,\n notes,\n layerInstanceId,\n onClose,\n masterLayer,\n layerThickness,\n customReferenceLayer,\n bridgeMaterial,\n bridgeWidth,\n bridgeCentres,\n bridgeNonBridgedHeight,\n fasteners,\n fastenersCrossArea,\n fastenersNumber,\n calculatedCorrectionFactor,\n airGapsCorrectionLevelOverride,\n clearAllDetails,\n setTabIndex,\n focusOnShortCodeField,\n setLayerInstanceId,\n vapourResistance,\n vapourResistivity,\n ]\n );\n\n const handleDialogCancel = () => {\n dispatch(clearInterimCalculation());\n onClose();\n };\n\n const setLayerFromShortCode = React.useCallback(\n (shortCode: string, apiBridgeResponse: ApiLayerBridgingResponse | undefined) => {\n const layer = masterData.layers.find(layer => layer.shortCode.toLowerCase() === shortCode.toLowerCase());\n\n if (shortCode && layer) {\n setHasShortCodeError(false);\n\n setMasterLayer(layer, apiBridgeResponse);\n\n setShortCode(defaults.shortCode || '');\n\n focusOnThicknessField();\n } else {\n setHasShortCodeError(true);\n\n selectAllTextInShortCodeField();\n }\n },\n [\n masterData.layers,\n setMasterLayer,\n setShortCode,\n focusOnThicknessField,\n defaults.shortCode,\n setHasShortCodeError,\n selectAllTextInShortCodeField,\n ]\n );\n\n return (\n {\n if (mode === LayerModalMode.ADD) {\n focusOnShortCodeField();\n } else if (mode === LayerModalMode.EDIT) {\n focusOnThicknessField();\n }\n }}\n aria-labelledby=\"modal-layer-title\"\n >\n
\n
\n \n {mode === LayerModalMode.EDIT ? 'Edit Layer' : 'Add Layer'}\n \n
\n\n
\n \n \n\n {!customReferenceLayer?.isBlank && (\n \n )}\n \n
\n\n
\n \n \n \n \n \n\n \n \n {mode === LayerModalMode.EDIT ? 'Save' : 'Add'}\n \n \n \n \n
\n
\n \n );\n}\n\nexport function getLayerModelComponent(defaults: DefaultModalState) {\n return function LayerModal(props: Props) {\n return LayerModalWithDefaults(defaults, props);\n };\n}\n\nexport const LayerModal = getLayerModelComponent(defaultState);\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport * as ReactDnd from 'react-dnd';\nimport { MTableBodyRow } from 'material-table';\n\nimport { moveLayerInCalculation } from '../../../actions/calculationActions';\nimport styles from '../LayersTable.module.scss';\n\ntype Props = {\n disableDrag: boolean;\n renderProps: any;\n onLayerClick: (instanceId: string, tabIndex?: number | undefined) => void;\n};\n\nexport function LayersTableRow({ disableDrag, renderProps, onLayerClick }: Props) {\n const dispatch = useDispatch();\n\n const isInsideSurface = renderProps.data.name === 'Inside Surface';\n const isOutsideSurface = renderProps.data.name === 'Outside Surface';\n const isReadOnly = renderProps.data.isReadOnly;\n\n const [{ isDraggingThisRow }, drag] = ReactDnd.useDrag({\n item: { type: 'ROW', dragLayerInstanceId: renderProps.data.instanceId },\n collect: monitor => ({\n isDraggingThisRow: monitor.isDragging(),\n }),\n });\n\n const [{ isHovered }, drop] = ReactDnd.useDrop({\n accept: 'ROW',\n drop: (item: ReactDnd.DragObjectWithType & { dragLayerInstanceId: string }) => {\n dispatch(moveLayerInCalculation(item.dragLayerInstanceId, renderProps.data.instanceId));\n },\n collect: monitor => ({\n isHovered: monitor.isOver(),\n }),\n });\n\n return (\n
\n {!isInsideSurface && (\n \n {/* Arbitrarily large colSpan to ensure it is always full width */}\n \n \n )}\n\n onLayerClick(renderProps.data.instanceId), ref: disableDrag ? null : drag })}\n >\n \n \n
\n );\n}\n","import React, { forwardRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { uuid } from '../../common/uuid';\nimport MaterialTable, { Column, Icons, MTableCell, MTableHeader } from 'material-table';\nimport { Paper } from '@material-ui/core';\nimport {\n AddBox,\n ArrowDownward,\n Cancel,\n Check,\n ChevronLeft,\n ChevronRight,\n Clear,\n Edit,\n FileCopy,\n FilterList,\n FirstPage,\n LastPage,\n Remove,\n SaveAlt,\n Search,\n ViewColumn,\n Chat,\n} from '@material-ui/icons';\nimport classnames from 'classnames';\n\nimport styles from './LayersTable.module.scss';\nimport { CalculationLayer, Calculation } from '../../types/store/calculationTypes';\nimport { interimOrCurrentCalculationSelector } from '../../store/selectors';\nimport { duplicateLayerInCalculation, removeLayerFromCalculation } from '../../actions/calculationActions';\nimport { LayersTableRow } from './LayersTableRow/LayersTableRow';\nimport iconBridged from '../../assets/icons/bridged.svg';\nimport iconFastened from '../../assets/icons/fastened.svg';\nimport iconBridgedAndFastened from '../../assets/icons/bridged-and-fastened.svg';\n\nexport enum LayersTableMode {\n THERMAL = 0,\n CONDENSATION = 1,\n}\n\nexport type CalculationLayerDisplay = CalculationLayer & {\n dewpointTemperature: string;\n interfaceTemperature: string;\n peakCondensationAccumulationAmount: string;\n peakCondensationAccumulationAmountMonth: string;\n peakCondensationAmount: string;\n peakCondensationAmountMonth: string;\n};\n\nconst tableIcons: Icons = {\n Add: forwardRef((props, ref) => ),\n Check: forwardRef((props, ref) => ),\n Clear: forwardRef((props, ref) => ),\n Delete: forwardRef((props, ref) => ),\n DetailPanel: forwardRef((props, ref) => ),\n Edit: forwardRef((props, ref) => ),\n Export: forwardRef((props, ref) => ),\n Filter: forwardRef((props, ref) => ),\n FirstPage: forwardRef((props, ref) => ),\n LastPage: forwardRef((props, ref) => ),\n NextPage: forwardRef((props, ref) => ),\n PreviousPage: forwardRef((props, ref) => ),\n ResetSearch: forwardRef((props, ref) => ),\n Search: forwardRef((props, ref) => ),\n SortArrow: forwardRef((props, ref) => ),\n ThirdStateCheck: forwardRef((props, ref) => ),\n ViewColumn: forwardRef((props, ref) => ),\n};\n\nconst typesWithGroundAsOuterSurface = ['SolidGroundFloor', 'SuspendedFloor', 'BasementWall', 'BasementFloor'];\nconst typesWithSoilInterface = ['SolidGroundFloor', 'BasementWall', 'BasementFloor'];\n\nconst renderLabel = (text: string, unit: string) => (\n
\n {text}\n\n
({unit})
\n
\n);\n\nconst renderValueWithMonth = (value: string, month: string) => {\n if (value === '') {\n return '';\n }\n if (value === '0.0' || value === '-') {\n return '-';\n }\n return `${value} in ${month}`;\n};\n\nconst descriptionColumn = {\n title: 'Layer Description',\n field: 'name',\n};\n\nconst thermalColumns: Column[] = [\n descriptionColumn,\n {\n field: 'icon',\n render: ({ layerBridging, mechanicalFastener }) => {\n if (!layerBridging && !mechanicalFastener) {\n return null;\n }\n\n if (layerBridging && mechanicalFastener) {\n return (\n \n );\n }\n\n if (layerBridging) {\n return \"\";\n }\n\n if (mechanicalFastener) {\n return \"\";\n }\n },\n },\n {\n title: renderLabel('Thickness', 'mm'),\n field: 'thicknessMillimetres',\n type: 'numeric',\n },\n {\n title: renderLabel('Therm Cond', 'W/mK'),\n field: 'thermalConductivity',\n type: 'numeric',\n },\n {\n title: renderLabel('Therm Res', 'm²K/W'),\n field: 'thermalResistance',\n type: 'numeric',\n },\n {\n title:
Thermal Bridging
,\n render: ({ layerBridging }) => (\n
{layerBridging ? layerBridging.bridgeDescription : ''}
\n ),\n },\n];\n\nconst condensationColumns: Column[] = [\n descriptionColumn,\n {\n title: renderLabel('V. Resistivity', 'MNs/gm'),\n field: 'vapourResistivity',\n type: 'numeric',\n },\n {\n title: renderLabel('V. Resistance', 'MNs/g'),\n field: 'vapourResistance',\n type: 'numeric',\n },\n {\n title: renderLabel('Interface Temp', '°C'),\n field: 'interfaceTemperature',\n type: 'numeric',\n render: (rowdata: CalculationLayerDisplay) =>
{rowdata.interfaceTemperature}
,\n },\n {\n title: renderLabel('Dewpoint Temp', '°C'),\n field: 'dewpointTemperature',\n type: 'numeric',\n render: (rowdata: CalculationLayerDisplay) =>
{rowdata.dewpointTemperature}
,\n },\n {\n title: renderLabel('Worst Build-up (Gc)', 'g/m²'),\n render: (rowdata: CalculationLayerDisplay) => (\n
{renderValueWithMonth(rowdata.peakCondensationAmount, rowdata.peakCondensationAmountMonth)}
\n ),\n type: 'numeric',\n },\n {\n title: renderLabel('Peak Accumulation (Ma)', 'g/m²'),\n render: (rowdata: CalculationLayerDisplay) => (\n
{renderValueWithMonth(rowdata.peakCondensationAccumulationAmount, rowdata.peakCondensationAccumulationAmountMonth)}
\n ),\n type: 'numeric',\n },\n];\n\ntype Props = {\n layersTableMode: LayersTableMode;\n onLayerClick: (instanceId: string, tabIndex?: number | undefined) => void;\n isLocked?: boolean;\n};\n\nexport function LayersTable({ layersTableMode, onLayerClick, isLocked }: Props) {\n const dispatch = useDispatch();\n\n const calculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n\n const layers: CalculationLayerDisplay[] = [\n {\n id: 0,\n instanceId: uuid(),\n name: 'Inside Surface',\n thicknessMillimetres: '-',\n thermalConductivity: '-',\n thermalResistance: calculation?.applicationDetails?.insideSurfaceThermalResistance ?? '',\n insideEmissivity: '-',\n outsideEmissivity: '-',\n vapourResistance: '-',\n vapourResistivity: '-',\n interfaceTemperature: '',\n dewpointTemperature: '',\n layerNotes: undefined,\n peakCondensationAccumulationAmount: '',\n peakCondensationAccumulationAmountMonth: '',\n peakCondensationAmount: '',\n peakCondensationAmountMonth: '',\n },\n ...(calculation && calculation.layers\n ? calculation.layers.map((layer: CalculationLayer) => {\n const associatedInterface = calculation.interstitialInterfaces?.find(i => i.innerLayerInstanceId === layer.instanceId);\n return {\n id: layer.id,\n instanceId: layer.instanceId,\n name: layer.name,\n thicknessMillimetres: layer.thicknessMillimetres,\n thermalConductivity: layer.thermalConductivity,\n insideEmissivity: layer.insideEmissivity,\n outsideEmissivity: layer.outsideEmissivity,\n thermalResistance: layer.thermalResistance,\n layerBridging: layer.layerBridging,\n mechanicalFastener: layer.mechanicalFastener,\n vapourResistance: layer.vapourResistance || '-',\n vapourResistivity: layer.vapourResistivity || '-',\n dewpointTemperature: associatedInterface?.worstMonthDewpointTemperature || '-',\n interfaceTemperature: associatedInterface?.worstMonthInterfaceTemperature || '-',\n layerNotes: layer.layerNotes,\n peakCondensationAccumulationAmount: associatedInterface?.peakCondensationAccumulationAmount || '-',\n peakCondensationAccumulationAmountMonth: associatedInterface?.peakCondensationAccumulationAmountMonth || '-',\n peakCondensationAmount: associatedInterface?.peakCondensationAmount || '-',\n peakCondensationAmountMonth: associatedInterface?.peakCondensationAmountMonth || '-',\n isReadOnly: layer.isReadOnly,\n };\n })\n : []),\n {\n id: 0,\n instanceId: uuid(),\n name: typesWithGroundAsOuterSurface.includes(calculation?.applicationDetails?.type ?? '') ? 'Ground' : 'Outside Surface',\n thicknessMillimetres: '-',\n thermalConductivity: '-',\n thermalResistance: calculation?.applicationDetails?.outsideSurfaceThermalResistance ?? '',\n insideEmissivity: '-',\n outsideEmissivity: '-',\n vapourResistance: '-',\n vapourResistivity: '-',\n interfaceTemperature: '',\n dewpointTemperature: '',\n peakCondensationAccumulationAmount: '',\n peakCondensationAccumulationAmountMonth: '',\n peakCondensationAmount: '',\n peakCondensationAmountMonth: '',\n },\n ];\n\n const hideLastInterface =\n LayersTableMode.CONDENSATION && layers.length > 2 && !typesWithSoilInterface.includes(calculation?.applicationDetails?.type ?? '');\n\n return (\n ({\n icon: () =>
{layer.layerNotes?.notes !== '' && layer.layerNotes?.notes !== undefined ? : null}
,\n onClick: (event, layer: CalculationLayer | CalculationLayer[]) => {\n if (Array.isArray(layer)) return;\n\n onLayerClick(layer.instanceId, 4);\n },\n }),\n layer => ({\n icon: () => (\n
\n \n
\n ),\n hidden: isLocked || layer.isReadOnly,\n onClick: (event, layer: CalculationLayer | CalculationLayer[]) => {\n // Unlike selection, we're never expecting duplication of multiple records at once\n if (Array.isArray(layer)) return;\n\n if (layer.isReadOnly) return;\n\n dispatch(duplicateLayerInCalculation(layer.instanceId));\n },\n }),\n layer => ({\n icon: () => (\n
\n \n
\n ),\n hidden: isLocked || layer.isReadOnly,\n onClick: (event, layer: CalculationLayer | CalculationLayer[]) => {\n // Unlike selection, we're never expecting deletion of multiple records at once\n if (Array.isArray(layer)) return;\n\n if (layer.isReadOnly) return;\n\n dispatch(removeLayerFromCalculation(layer.instanceId));\n },\n }),\n ]}\n components={{\n Container: renderProps => (\n \n \n
\n ),\n Header: renderProps => (\n \n \n \n ),\n Row: renderProps => (\n \n ),\n Cell: renderProps => (\n \n \n \n ),\n }}\n />\n );\n}\n","import { callApi } from '../common/api';\nimport { AppDispatch } from '../store/store';\nimport { MasterDataType } from '../types/store/masterDataUploadTypes';\n\nconst utf8EncodeFile = async (file: File): Promise> =>\n new Promise(resolve => {\n const reader = new FileReader();\n reader.onload = resolve;\n reader.readAsText(file);\n });\n\nexport const uploadMasterData = (dataType: MasterDataType, file: File, businessUnitId: number) => {\n return async (dispatch: AppDispatch) => {\n await callApi(dispatch, 'POST', `/MasterDataUpload`, {\n masterDataType: dataType,\n csvFormData: (await utf8EncodeFile(file)).target?.result as string,\n businessUnitId,\n });\n };\n};\n","import { actionTypes } from '../../actions/actionTypes';\n\nexport enum MasterDataType {\n BALLAST_TYPES = 'Ballast Types',\n BRANDING = 'Branding',\n BRIDGE_MATERIALS = 'Bridge Materials',\n ENV_CON_BUILDING_REGIONS = 'E.C. Building Regions',\n ENV_CON_HUMIDITY_CLASSES = 'E.C. Humidity Classes',\n ENV_CON_RISK_LEVELS = 'E.C. Risk Levels',\n LAYERS = 'Layers',\n MECHANICAL_FASTENERS = 'Mechanical Fasteners',\n PRECIPITATION = 'Precipitation',\n PROJECT_REGIONS = 'Project Regions',\n PROJECT_USAGES = 'Project Usages',\n RAINSCREEN_CLADDING = 'Rainscreen Cladding',\n SOIL_TYPES = 'Soil Types',\n SALES_CONTACT_TEAMS = 'Sales Contact Teams',\n PROJECT_COUNTY_STATE = 'Project County State',\n PROJECT_STAGE = 'Project Stage',\n PRODUCT_SECTOR = 'Product Sector',\n CALCULATION_TITLE = 'Calculation Title',\n}\n\nexport type UploadMasterDataAction = {\n type: actionTypes.UPLOAD_MASTER_DATA;\n payload: {\n dataType: MasterDataType;\n file: File;\n };\n};\n","import React from 'react';\nimport {\n InputLabel,\n MenuItem,\n Select,\n Typography,\n} from '@material-ui/core';\nimport { BusinessUnitModel } from '../../../types/store/userProfileTypes';\n\ntype Props = {\n businessUnits: BusinessUnitModel[] | null | undefined;\n businessUnitId: number;\n setBusinessUnitId: (businessUnitId: number) => void;\n disabled?: boolean;\n};\n\nexport function BusinessUnitDropdown(props: Props) {\n return (<>\n \n Business Unit\n \n\n ) => props.setBusinessUnitId(value)}\n variant=\"outlined\"\n disabled={props.disabled}\n >\n {(props.businessUnits ?? []).map(businessUnit => {\n return (\n \n {businessUnit.name}\n \n  - Business Unit {businessUnit.businessUnitId} - {businessUnit.countryName}\n \n \n );\n })}\n \n );\n}\n","import React, { FormEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AxiosError } from 'axios';\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n InputLabel,\n MenuItem,\n Select,\n Typography,\n} from '@material-ui/core';\nimport { useDropzone } from 'react-dropzone';\nimport { Alert } from '@material-ui/lab';\n\nimport { uploadMasterData } from '../../actions/masterDataUploadActions';\nimport { MasterDataType } from '../../types/store/masterDataUploadTypes';\nimport { userProfileSelector } from '../../store/selectors';\nimport DescriptionOutlinedIcon from '@material-ui/icons/DescriptionOutlined';\nimport { BusinessUnitDropdown } from '../FormComponents/BusinessUnitDropdown/BusinessUnitDropdown';\nimport styles from '../MasterDataUploadModal/MasterDataUploadModal.module.scss';\nimport { AppDispatch } from '../../store/store';\n\ntype Props = {\n onClose: (forceWelcome?: boolean) => void;\n};\n\nenum UploadStatus {\n PENDING = 'PENDING',\n ERROR = 'ERROR',\n SUCCESS = 'SUCCESS',\n}\n\nexport function MasterDataUploadModal({ onClose }: Props) {\n const dispatch = useDispatch();\n\n const userProfile = useSelector(userProfileSelector);\n\n const [dataType, setDataType] = React.useState(MasterDataType.LAYERS);\n const [businessUnitId, setBusinessUnitId] = React.useState(userProfile?.primaryBusinessUnitId ?? -1);\n const [file, setFile] = React.useState(null);\n const [uploadStatus, setUploadStatus] = React.useState(null);\n const [errors, setErrors] = React.useState(null);\n\n const handleDataTypeChange = ({ target: { value } }: React.ChangeEvent) => {\n setDataType(value);\n };\n\n const onDrop = ([acceptedFile]: File[]) => {\n setFile(acceptedFile);\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: '.csv',\n multiple: false,\n disabled: uploadStatus === UploadStatus.PENDING,\n });\n\n const handleSubmit = React.useCallback(\n async (event: FormEvent) => {\n event.preventDefault();\n\n if (dataType && file) {\n try {\n setUploadStatus(UploadStatus.PENDING);\n\n await dispatch(uploadMasterData(dataType, file, businessUnitId));\n\n setUploadStatus(UploadStatus.SUCCESS);\n setFile(null);\n setErrors(null);\n } catch (e) {\n setUploadStatus(UploadStatus.ERROR);\n setFile(null);\n\n const responseData = (e as AxiosError)?.response?.data;\n const errorMessages = Array.isArray(responseData) ? responseData as string[] : null;\n console.error('uploadMasterData failed', errorMessages);\n setErrors(errorMessages);\n }\n }\n },\n [dispatch, dataType, file, businessUnitId]\n );\n\n return (\n onClose}\n aria-labelledby=\"modal-master-data-upload-title\"\n disableBackdropClick={uploadStatus === UploadStatus.PENDING}\n disableEscapeKeyDown={uploadStatus === UploadStatus.PENDING}\n >\n
\n
\n \n Upload Master Data\n \n
\n\n
\n \n {uploadStatus === UploadStatus.ERROR && !file && (\n \n An error has occurred, please try again.\n {errors && errors.length > 0 &&
    \n {errors.map(error =>
  • {error}
  • )}\n
}\n
\n )}\n\n {uploadStatus === UploadStatus.SUCCESS && !file && (\n \n The file has been uploaded. Please refresh the page to use the latest data or upload another dataset.\n \n )}\n\n \n \n \n \n\n \n
\n \n Master Data Type\n \n\n \n {Object.values(MasterDataType).map(masterDataType => {\n return (\n \n {masterDataType}\n \n );\n })}\n \n
\n
\n\n \n
\n
\n \n {!file &&\n (isDragActive ? (\n Drop the file here ...\n ) : (\n Drop a file here, or click to select a file\n ))}\n\n {file && (\n
\n \n \n {file.name} \n {uploadStatus === UploadStatus.PENDING ? 'is uploading...' : 'is ready to be uploaded'}\n \n
\n )}\n
\n
\n
\n
\n
\n
\n\n
\n \n \n \n onClose(true)}\n variant=\"outlined\"\n disabled={uploadStatus === UploadStatus.PENDING}\n >\n Cancel\n \n \n\n \n \n {uploadStatus === UploadStatus.PENDING ? : 'Upload'}\n \n \n \n \n
\n
\n \n );\n}\n","import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, Grid, Typography } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { createNewCalculation } from '../../actions/calculationActions';\nimport { userProfileSelector } from '../../store/selectors';\nimport { AppDispatch } from '../../store/store';\nimport { BusinessUnitDropdown } from '../FormComponents/BusinessUnitDropdown/BusinessUnitDropdown';\nimport modalStyles from '../LayerModal/LayerModal.module.scss';\nimport styles from './NewCalculationModal.module.scss';\n\ntype Props = {\n onClose: (forceWelcome?: boolean) => void;\n canClose: boolean;\n};\n\nconst none = -1;\n\nexport function NewCalculationModal({ onClose, canClose }: Props) {\n const dispatch = useDispatch();\n\n const userProfile = useSelector(userProfileSelector);\n const [businessUnitId, setBusinessUnitId] = useState(userProfile?.primaryBusinessUnitId ?? none);\n const [isCreating, setIsCreating] = useState(false);\n\n const handleCreate = async () => {\n setIsCreating(true);\n try {\n await dispatch(createNewCalculation(businessUnitId));\n onClose();\n } catch (e) {\n console.error('createNewCalculation client/server occured', e);\n setIsCreating(false);\n }\n };\n\n return (\n onClose}\n aria-labelledby=\"modal-new-calculation-title\"\n disableBackdropClick={!canClose}\n disableEscapeKeyDown={!canClose}\n >\n\n
\n \n Create Calculation\n \n
\n\n
\n \n \n \n \n \n \n \n
\n\n
\n \n \n {canClose && (\n \n onClose(true)}\n variant=\"outlined\"\n >\n Cancel\n \n \n )}\n\n \n }\n autoFocus\n >\n Create New\n \n \n \n \n
\n\n \n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n Avatar,\n InputLabel,\n TextField,\n Typography,\n Box,\n CircularProgress,\n ListItemAvatar,\n List,\n ListItem,\n Backdrop,\n } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React, { ChangeEvent, FormEvent, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { formatDistanceToNow } from 'date-fns';\n\nimport { openCalculation } from '../../actions/calculationActions';\nimport { callApi } from '../../common/api';\nimport { utcDateStringToDate } from '../../common/dates';\nimport { inactiveCalculationsSelector, interimOrCurrentCalculationSelector } from '../../store/selectors';\nimport { Calculation } from '../../types/store/calculationTypes';\nimport { InactiveCalculationsState } from '../../types/store/inactiveCalculationsTypes';\nimport modalStyles from '../LayerModal/LayerModal.module.scss';\nimport styles from './OpenCalculationModal.module.scss';\nimport { TechnicalCalculationModel } from './TechnicalCalculationModel';\nimport { AppDispatch } from '../../store/store';\n\ntype Props = {\n onClose: (forceWelcome?: boolean) => void;\n};\n\nexport function OpenCalculationModal({ onClose }: Props) {\n const dispatch = useDispatch();\n\n const calculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n const inactiveCalculations: InactiveCalculationsState = useSelector(inactiveCalculationsSelector);\n\n const [searchTerm, setSearchTerm] = React.useState('');\n const [error, setError] = React.useState(null);\n const [isOpening, setIsOpening] = React.useState(false);\n\n const [isLoading, setIsLoading] = React.useState(false);\n const [previousCalcs, setPreviousCalcs] = React.useState([]);\n\n const handleOpen = async (calculationId: string) => {\n const openCalculationIds = [calculation, ...inactiveCalculations].map(c => c && c.calculationId);\n\n if (openCalculationIds.includes(calculationId)) {\n setError('The requested calculation is already open, please try again.');\n return;\n }\n\n setIsOpening(true);\n try {\n await dispatch(openCalculation(calculationId));\n\n onClose();\n } catch (e) {\n const status = (e as any)?.response?.status;\n\n const message = status === 400 /* Bad Request */\n ? `Unable to load calculation. ${(e as any)?.response?.data?.message}.`\n : status === 404 /* Not Found */\n ? 'Your search did not match an existing calculation ID, please try again.'\n : 'An unexpected error occurred.';\n\n setError(message);\n setIsOpening(false);\n }\n }\n\n const handleSubmit = async (event: FormEvent) => {\n event.preventDefault();\n await handleOpen(searchTerm);\n };\n\n useEffect(() => {\n setIsLoading(true);\n callApi(dispatch, 'GET', '/calculations').then(result => {\n setPreviousCalcs(result ?? []);\n setIsLoading(false);\n }).catch(error => {\n console.error(error);\n setIsLoading(false);\n });\n }, [dispatch]);\n\n const calculationTitleIsSpecified = (calculation: TechnicalCalculationModel) =>\n calculation.calculationTitle?.length > 0 && calculation.calculationTitle !== calculation.applicationTypeName;\n\n return (\n onClose}\n aria-labelledby=\"modal-open-calculation-title\"\n >\n
\n
\n \n Open Calculation\n \n
\n\n \n \n \n\n
\n \n {error && (\n \n {error}\n \n )}\n\n \n \n \n Existing Calculation ID\n \n\n \n \n ) => setSearchTerm(event.target.value)}\n />\n \n\n \n }\n variant=\"contained\"\n color=\"primary\"\n disableElevation\n className={styles.openButton}\n >\n Open\n \n \n \n \n\n \n Recent Calculations\n\n {isLoading && }\n\n {!isLoading &&\n \n {previousCalcs.map(calculation => (\n await handleOpen(calculation.calculationId)}>\n \n {calculation.advisorId}\n \n
\n \n {calculation.calculationId}\n {calculationTitleIsSpecified(calculation) &&  - {calculation.calculationTitle}}\n \n {calculation.applicationTypeName} | {calculation.businessUnitName}\n {formatDistanceToNow(utcDateStringToDate(calculation.lastUpdated), { addSuffix: true })}\n
\n
\n ))}\n
\n }\n
\n
\n
\n
\n\n
\n \n \n \n \n \n \n \n
\n
\n \n );\n}\n","/**\n * Parses the input string, expected to be ISO format (YYYY-MM-DDTHH:mm:ss.sssZ) with or without trailing Z, and converts it to a Date.\n * It expects the input string to always be a UTC date, so ignores any timezone information from the input string, and always returns a UTC date.\n * This is to deal with the backend saving dates in UTC, and sending dates without timezone information, and Javascript's default being Local time.\n * The latest version of `date-fns` has a `parseJSON` which would have worked, but we can't pull that in because the Material UI library\n * is very out of date and conflicts with the latest version of date-fns, and updating Material UI is not feasible or appropriate for such a simple function.\n */\nexport function utcDateStringToDate(utcDateString: string) {\n const utcDateStringNoTz = /\\d+-\\d+-\\d+T\\d+:\\d+:\\d+\\.\\d+/.exec(utcDateString);\n return new Date(`${utcDateStringNoTz}Z`);\n}\n","import { Button, Dialog, DialogContent, DialogTitle, Grid, Typography } from '@material-ui/core';\nimport { Add, FolderOpen, Settings } from '@material-ui/icons';\nimport React from 'react';\nimport modalStyles from '../LayerModal/LayerModal.module.scss';\nimport styles from './WelcomeModal.module.scss';\n\nimport { UserProfileState } from '../../types/store/userProfileTypes';\nimport { useSelector } from 'react-redux';\nimport { userProfileSelector } from '../../store/selectors';\nimport { checkIsPowerUser } from '../../common/userProfile';\n\ntype Props = {\n onCreateNewCalculationClick: () => void;\n onMasterDataUploadClick: () => void;\n onOpenCalculationClick: () => void;\n};\n\nexport function WelcomeModal({ onCreateNewCalculationClick, onMasterDataUploadClick, onOpenCalculationClick }: Props) {\n\n const userProfile: UserProfileState = useSelector(userProfileSelector);\n const isPowerUser = checkIsPowerUser(userProfile);\n\n return (\n \n
\n \n Kingspan Insulation Calculation Services\n \n
\n\n
\n \n \n \n }\n >\n Create\n \n \n\n \n }\n >\n Open\n \n \n\n {isPowerUser && (\n \n }\n >\n Upload Master Data\n \n \n )}\n\n \n \n
\n \n );\n}\n","import { actionTypes } from './actionTypes';\nimport { AppDispatch } from '../store/store';\nimport { ApiResponseExportPdf } from '../types/store/pdfTypes';\nimport { callApi } from '../common/api';\nimport { lockCalculation } from './calculationActions';\n\nexport const exportPdf = (calculationId: string, brandId: number, shouldApplyWatermark: boolean) => {\n return async (dispatch: AppDispatch) => {\n const request = {\n filename: `${calculationId}.pdf`,\n calculationId: calculationId,\n showWatermark: shouldApplyWatermark,\n };\n\n const data = await callApi(dispatch, 'POST', `/PDF/${calculationId}/${brandId}`, request);\n\n if (!data) return;\n\n if (data.uploadSuccess) {\n dispatch(lockCalculation(calculationId));\n }\n\n dispatch({\n type: actionTypes.EXPORT_PDF,\n payload: {\n export: {\n uploadSuccess: data.uploadSuccess,\n error: data.error,\n url: data.url,\n pdfFile: data.pdfFile,\n fileName: `${calculationId}.pdf`,\n calculationId: calculationId,\n },\n },\n });\n };\n};\n","import React, { FormEvent } from 'react';\nimport download from 'downloadjs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n Typography,\n CircularProgress,\n InputLabel,\n MenuItem,\n Select,\n FormGroup,\n FormControlLabel,\n Checkbox,\n Tooltip,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport CloudOutlinedIcon from '@material-ui/icons/CloudOutlined';\nimport CloudDoneIcon from '@material-ui/icons/CloudDone';\nimport { without, uniq } from 'lodash';\n\nimport { exportPdf } from '../../actions/pdfActions';\nimport { MasterDataBranding } from '../../types/store/masterDataTypes';\nimport {\n masterDataBradingSelector,\n pdfExportsSelector,\n userProfileSelector,\n interimOrCurrentCalculationSelector,\n pdfPendingDownloadsSelector,\n inactiveCalculationsByBusinessUnitSelector,\n} from '../../store/selectors';\nimport { UserProfileState } from '../../types/store/userProfileTypes';\nimport modalStyles from '../LayerModal/LayerModal.module.scss';\nimport styles from './PdfModal.module.scss';\nimport { callApi } from '../../common/api';\nimport { Calculation } from '../../types/store/calculationTypes';\nimport { InactiveCalculationsState } from '../../types/store/inactiveCalculationsTypes';\nimport { actionTypes } from '../../actions/actionTypes';\nimport { ApiResponseExportPdf } from '../../types/store/pdfTypes';\n\ntype Props = {\n onClose: () => void;\n};\n\nenum PreviewStatus {\n PENDING = 'PENDING',\n ERROR = 'ERROR',\n SUCCESS = 'SUCCESS',\n}\n\nenum ExportStatus {\n PENDING = 'PENDING',\n ERROR = 'ERROR',\n SUCCESS = 'SUCCESS',\n}\n\nexport function PdfModal(props: Props) {\n const { onClose } = props;\n const dispatch = useDispatch();\n\n const exports = useSelector(pdfExportsSelector);\n const pendingDownloads = useSelector(pdfPendingDownloadsSelector);\n const branding: MasterDataBranding[] = useSelector(masterDataBradingSelector);\n const userProfile: UserProfileState = useSelector(userProfileSelector);\n const currentCalculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n const inactiveCalculations: InactiveCalculationsState = useSelector(inactiveCalculationsByBusinessUnitSelector);\n\n const [previewStatus, setPreviewStatus] = React.useState(null);\n const [exportStatus, setExportStatus] = React.useState(null);\n const [selectedCalculations, setSelectedCalculations] = React.useState(\n currentCalculation ? [currentCalculation.calculationId] : []\n );\n const [previewErrors, setPreviewErrors] = React.useState([]);\n const [exportErrors, setExportErrors] = React.useState([]);\n const [shouldApplyWatermark, setShouldApplyWatermark] = React.useState(false);\n\n const userGroup = branding.find(b => b.adGroups === userProfile?.primaryBusinessUnitId)?.id ?? branding[0]?.id ?? 0;\n const [brandId, setBrandId] = React.useState(userGroup);\n\n const changeTemplate = (event: React.ChangeEvent<{ value: unknown }>) => {\n setBrandId(event.target.value as number);\n };\n\n const countPreviewErrors = previewErrors.length;\n const countExportErrors = exportErrors.length;\n\n React.useEffect(() => {\n if (countPreviewErrors > 0) {\n setPreviewStatus(PreviewStatus.ERROR);\n }\n\n if (countExportErrors > 0) {\n setExportStatus(ExportStatus.ERROR);\n }\n }, [countPreviewErrors, countExportErrors]);\n\n const handlePreviewPdf = async () => {\n if (currentCalculation) {\n setPreviewErrors([]);\n setExportErrors([]);\n setPreviewStatus(PreviewStatus.PENDING);\n setExportStatus(null);\n\n try {\n await Promise.all(\n selectedCalculations.map(async selectedCalculation => {\n try {\n const data = await callApi(\n dispatch,\n 'GET',\n `/PDF/${selectedCalculation}/${brandId}?showWatermark=${shouldApplyWatermark}`,\n undefined,\n 'blob'\n );\n\n if (!data) return;\n\n const previewUrl = window.URL.createObjectURL(data);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n window.open(previewUrl, '_blank')!;\n\n window.URL.revokeObjectURL(previewUrl);\n } catch (e) {\n setPreviewErrors(prevState => [...prevState, selectedCalculation]);\n\n throw e;\n }\n })\n );\n\n setPreviewStatus(PreviewStatus.SUCCESS);\n } catch (e) { }\n }\n };\n\n React.useEffect(() => {\n pendingDownloads.forEach(({ uploadSuccess, pdfFile, fileName, calculationId }) => {\n if (uploadSuccess) {\n if (pdfFile && fileName) {\n download(pdfFile, fileName, 'application/pdf');\n }\n\n setExportStatus(ExportStatus.SUCCESS);\n } else {\n setExportErrors(prevState => uniq([...prevState, calculationId]));\n setExportStatus(ExportStatus.ERROR);\n }\n });\n }, [pendingDownloads]);\n\n const handleExportPdf = React.useCallback(\n async (event: FormEvent) => {\n event.preventDefault();\n\n setPreviewErrors([]);\n setExportErrors([]);\n setPreviewStatus(null);\n setExportStatus(ExportStatus.PENDING);\n\n try {\n await Promise.all(\n selectedCalculations.map(async selectedCalculation => {\n const exported = exports.find(e => e.calculationId === selectedCalculation);\n if (!exported?.uploadSuccess) {\n try {\n await dispatch(exportPdf(selectedCalculation, brandId, shouldApplyWatermark));\n\n dispatch({\n type: actionTypes.CLEAR_PENDING_PDF_DOWNLOADS,\n });\n } catch (e) {\n setExportErrors(prevState => [...prevState, selectedCalculation]);\n\n throw e;\n }\n }\n })\n );\n } catch (e) { }\n },\n [dispatch, brandId, exports, selectedCalculations, shouldApplyWatermark]\n );\n\n const updateCalculationsList = React.useCallback(\n (isChecked, calculationId) => {\n if (isChecked) {\n setSelectedCalculations(prevState => [...prevState, calculationId]);\n } else {\n setSelectedCalculations(prevState => without(prevState, calculationId));\n }\n },\n [setSelectedCalculations]\n );\n\n const areNoCalculationsSelected = selectedCalculations.length === 0;\n const areSomeNotAllCalculationsSelected =\n selectedCalculations.length !== 0 && selectedCalculations.length !== inactiveCalculations.length + 1;\n const areAllCalculationsSelected = selectedCalculations.length === inactiveCalculations.length + 1;\n const areOnlyExportedCalculationsSelected =\n !areNoCalculationsSelected && selectedCalculations.every(c => exports.find(e => e.calculationId === c)?.uploadSuccess);\n\n const disableExport =\n areNoCalculationsSelected ||\n areOnlyExportedCalculationsSelected ||\n previewStatus === PreviewStatus.PENDING ||\n exportStatus === ExportStatus.PENDING;\n\n const renderExportStatusIcon = (pdfExport?: ApiResponseExportPdf) =>\n pdfExport ? (\n \n \n \n \n \n ) : (\n \n \n \n \n \n );\n\n return (\n \n
\n
\n \n Export PDF\n \n
\n\n
\n \n {previewStatus === PreviewStatus.ERROR && (\n \n Could not generate a preview for the following calculation(s):\n
    \n {previewErrors.map(id => (\n
  • {id}
  • \n ))}\n
\n
\n )}\n\n {exportStatus === ExportStatus.ERROR && (\n \n Could not export the following calculation(s) to SharePoint:\n
    \n {exportErrors.map(id => (\n
  • {id}
  • \n ))}\n
\n
\n )}\n\n \n \n
\n
\n \n Select Calculations:\n \n }\n control={\n
\n {\n if (!currentCalculation) return;\n\n if (isChecked) {\n setSelectedCalculations(\n areSomeNotAllCalculationsSelected\n ? []\n : [currentCalculation.calculationId, ...inactiveCalculations.map(({ calculationId }) => calculationId)]\n );\n } else {\n setSelectedCalculations([]);\n }\n }}\n />\n
\n }\n />\n\n
\n\n {currentCalculation && (\n \n \n {currentCalculation.calculationId}\n (current)\n {renderExportStatusIcon(\n exports.find(pdf => pdf.uploadSuccess && pdf.calculationId === currentCalculation.calculationId)\n )}\n
\n }\n control={\n updateCalculationsList(isChecked, currentCalculation.calculationId)}\n />\n }\n />\n\n {inactiveCalculations.map(inactiveCalculation => (\n \n {inactiveCalculation.calculationId}\n {renderExportStatusIcon(\n exports.find(pdf => pdf.uploadSuccess && pdf.calculationId === inactiveCalculation.calculationId)\n )}\n
\n }\n control={\n \n updateCalculationsList(isChecked, inactiveCalculation.calculationId)\n }\n />\n }\n />\n ))}\n \n )}\n
\n \n \n \n \n Select Template:\n \n\n \n {branding.map(({ id, brandName, country }) => (\n \n {brandName} {country}\n \n ))}\n \n\n
\n setShouldApplyWatermark(isChecked)}\n />\n }\n />\n
\n
\n \n \n \n\n
\n \n \n \n \n Note: Exporting will lock the calculation\n \n \n \n \n \n\n \n \n {previewStatus === PreviewStatus.PENDING ? : 'Preview'}\n \n \n\n \n \n \n \n \n
\n
\n
\n );\n}\n","import React, { ChangeEvent, FormEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Box,\n Button,\n ButtonGroup,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { Alert, Autocomplete, createFilterOptions, CreateFilterOptionsConfig } from '@material-ui/lab';\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\n\nimport modalStyles from '../LayerModal/LayerModal.module.scss';\nimport styles from './ProjectInfoModal.module.scss';\nimport { buildingUsagesSelector, currentCalculationBusinessUnitIdSelector, interimOrCurrentCalculationSelector, projectCountyStateSelector, projectRegionsSelector, projectStageSelector } from '../../store/selectors';\nimport { Project } from '../../types/store/projectTypes';\nimport { associateProject } from '../../actions/projectActions';\nimport { callApi } from '../../common/api';\nimport { useDebounce } from '../Utilities/hooks/useDebounce';\nimport 'date-fns';\nimport DateFnsUtils from '@date-io/date-fns';\n\ntype Props = {\n onClose: () => void;\n};\n\ntype State = {\n newProject: Project | null;\n existingProject: Project | null;\n};\n\nconst config: CreateFilterOptionsConfig = {\n stringify: (option: Project) => option.name,\n};\n\nconst filter = createFilterOptions(config);\n\nexport function ProjectInfoModal({ onClose }: Props) {\n const dispatch = useDispatch();\n\n const calculation = useSelector(interimOrCurrentCalculationSelector);\n const currentCalculationBusinessUnitId: number | null = useSelector(currentCalculationBusinessUnitIdSelector);\n const projectUsages = useSelector(buildingUsagesSelector);\n const projectRegions = useSelector(projectRegionsSelector);\n const projectCountyStates = useSelector(projectCountyStateSelector);\n const projectStages = useSelector(projectStageSelector);\n\n const defaultState: State = {\n newProject: {\n id: null,\n name: '',\n displayId: '',\n type: '',\n businessUnitId: null,\n supportingInfo: '',\n size: '',\n projectUsage: '',\n projectUsageValue: '',\n buildingHeight: '',\n region: '',\n regionValue: '',\n enquiryType: '',\n projectStartDate: new Date().toDateString(),\n projectStage: '',\n projectStageValue: '',\n projectAddressLine1: '',\n projectAddressLine2: '',\n projectCity: '',\n projectCountyState: '',\n projectCountyStateValue: '',\n projectPostCode: '',\n },\n existingProject: null,\n };\n\n const [state, setState] = React.useState(defaultState);\n const [searchTerm, setSearchTerm] = React.useState('');\n const [existingProjects, setExistingProjects] = React.useState([]);\n const [error, setError] = React.useState(null);\n const [startDate, setStartDate] = React.useState(new Date());\n\n const disableButtons = calculation?.locked || (state.newProject ? !state.newProject.name : !state.existingProject?.name);\n\n const debouncedSearchTerm = useDebounce(searchTerm, 300);\n\n const updateField = (fieldName: string, value: string) => {\n setState(currentState => ({\n ...currentState,\n ...(state.newProject\n ? {\n newProject: {\n ...currentState.newProject!,\n [fieldName]: value,\n },\n }\n : {\n existingProject: {\n ...currentState.existingProject!,\n [fieldName]: value,\n },\n }),\n }));\n };\n\n const handleProjectNameChange = (project: Project | null) => {\n if (!project) {\n return setState(defaultState);\n }\n\n project.businessUnitId = currentCalculationBusinessUnitId;\n\n if (project.id != null) {\n setState(currentState => ({\n ...currentState,\n newProject: null,\n existingProject: project,\n }));\n setStartDate(project.projectStartDate ? new Date(project.projectStartDate) : new Date());\n } else {\n if (state.newProject) {\n setState(currentState => ({\n ...currentState,\n newProject: {\n ...currentState.newProject!,\n name: project.name,\n businessUnitId: project.businessUnitId,\n },\n existingProject: null,\n }));\n setStartDate(new Date());\n } else {\n setState(currentState => ({\n ...currentState,\n newProject: project,\n existingProject: null,\n }));\n setStartDate(project.projectStartDate ? new Date(project.projectStartDate) : new Date());\n }\n }\n }\n\n const handleSubmit = React.useCallback(\n async (event: FormEvent, shouldAssociateToAll: boolean) => {\n event.preventDefault();\n try {\n if (state.newProject) {\n state.newProject.projectStartDate = startDate?.toDateString() ?? '';\n await dispatch(associateProject(state.newProject, true, shouldAssociateToAll));\n } else if (state.existingProject) {\n state.existingProject.projectStartDate = startDate?.toDateString() ?? '';\n await dispatch(associateProject(state.existingProject, false, shouldAssociateToAll));\n }\n onClose();\n } catch (e) {\n setError('Your project could not be saved and associated, please try again.');\n }\n },\n [dispatch, state, onClose, startDate]\n );\n\n React.useEffect(() => {\n if (calculation?.project) {\n (async () => {\n const existingProject = await callApi(dispatch, 'GET', `/Project/${currentCalculationBusinessUnitId}/${calculation.project?.id}`);\n\n if (existingProject) {\n setState({\n newProject: null,\n existingProject,\n });\n setStartDate(existingProject.projectStartDate ? new Date(existingProject.projectStartDate) : null);\n }\n })();\n }\n }, [dispatch, calculation, currentCalculationBusinessUnitId]);\n\n\n React.useEffect(() => {\n if (debouncedSearchTerm) {\n (async () => {\n if (searchTerm.length < 3) {\n return setExistingProjects([]);\n }\n\n const existingProjects = await callApi(dispatch, 'GET', `/Project/search/${currentCalculationBusinessUnitId}/${debouncedSearchTerm}`);\n\n if (existingProjects) {\n setExistingProjects(existingProjects);\n }\n })();\n }\n }, [dispatch, searchTerm, debouncedSearchTerm, setExistingProjects, currentCalculationBusinessUnitId]);\n\n return (\n \n
handleSubmit(event, false)} noValidate>\n
\n \n Project Information\n \n
\n\n
\n \n {error && (\n \n {error}\n \n )}\n\n \n \n \n \n \n Project Name\n \n\n option.name}\n onInputChange={(event: ChangeEvent, searchTerm: string) => setSearchTerm(searchTerm)}\n onChange={(event: ChangeEvent<{}>, project: Project | null) => handleProjectNameChange(project)}\n value={state.newProject ?? state.existingProject}\n forcePopupIcon\n freeSolo\n renderOption={(project: Project) =>\n project.id != null ? (\n project.name\n ) : (\n \n {project.name}\n\n \n \n \n \n )\n }\n filterOptions={(options, params) => {\n const filtered = filter(options, params) as Project[];\n\n if (params.inputValue !== '') {\n const option: Project = state.newProject\n ? {\n ...state.newProject,\n name: params.inputValue,\n }\n : {\n ...defaultState.newProject!,\n name: params.inputValue,\n };\n\n filtered.push(option);\n }\n\n return filtered.reduce((acc, project) => {\n const isNewOption = project.id === null;\n const isAlreadyASuggestion = existingProjects.find(p => p.name.toLowerCase() === project.name.toLowerCase());\n\n return isNewOption && isAlreadyASuggestion ? acc : [...acc, project];\n }, []);\n }}\n renderInput={params => (\n \n )}\n />\n \n\n \n \n Project ID\n \n\n ) => updateField('displayId', value)}\n />\n \n \n\n \n \n \n Project Address Line 1\n \n\n ) => updateField('projectAddressLine1', value)}\n />\n \n\n \n \n Project Start Date\n \n\n \n \n \n \n \n \n \n\n \n \n \n Project Address Line 2\n \n\n ) => updateField('projectAddressLine2', value)}\n />\n \n\n \n \n Project Stage\n \n\n ) => {\n updateField('projectStage', value)\n updateField('projectStageValue', projectStages.find(ps => ps.id === value)?.code ?? '')\n }}\n variant=\"outlined\"\n >\n \n  \n \n\n {projectStages.map(({ id, code }) => (\n \n {code}\n \n ))}\n \n \n \n\n \n \n \n Project City\n \n\n ) => updateField('projectCity', value)}\n />\n \n\n \n \n Project County State\n \n\n ) => {\n updateField('projectCountyState', value)\n updateField('projectCountyStateValue', projectCountyStates.find(pcs => pcs.id === value)?.county ?? '')\n }}\n variant=\"outlined\"\n >\n \n  \n \n\n {projectCountyStates.map(({ id, county }) => (\n \n {county}\n \n ))}\n \n \n\n \n \n Project Postcode\n \n\n ) => updateField('projectPostCode', value)}\n />\n \n \n\n \n \n \n Project Usage\n \n\n ) => {\n updateField('projectUsage', value);\n updateField('projectUsageValue', projectUsages.find(pu => pu.id === value)?.name ?? '');\n }}\n variant=\"outlined\"\n >\n \n  \n \n\n {projectUsages.map(({ id, name }) => (\n \n {name}\n \n ))}\n \n \n\n \n \n Project Type\n \n\n ) => updateField('type', value)}\n variant=\"outlined\"\n >\n \n  \n \n\n {['New Build', 'Extension', 'Refurbishment'].map(projectType => (\n \n {projectType}\n \n ))}\n \n \n\n \n \n Region\n \n\n ) => {\n updateField('region', value);\n updateField('regionValue', projectRegions.find(pr => pr.id === value)?.name ?? '');\n }}\n variant=\"outlined\"\n >\n \n  \n \n\n {projectRegions.map(({ id, name }) => (\n \n {name}\n \n ))}\n \n \n \n\n \n \n \n Building Height\n \n\n \n \n ) => updateField('buildingHeight', value)}\n />\n \n\n \n
\n m\n
\n
\n
\n
\n\n \n Project Size\n\n
\n \n {['Small', 'Large (not in CRM)', 'Large (in CRM)'].map((size, index) => (\n updateField('size', size)}\n data-qa-id={`projectInfoProjectSizeButton${index}`}\n >\n {size}\n \n ))}\n \n
\n
\n
\n\n \n \n \n Project Supporting Information\n \n\n ) => updateField('supportingInfo', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n \n\n \n \n Source of Enquiry\n
\n \n {['Telephone', 'Email', 'Other', 'Website'].map((enquiryType, index) => (\n updateField('enquiryType', enquiryType)}\n data-qa-id={`projectInfoProjectEnquiryTypeButton${index}`}\n >\n {enquiryType}\n \n ))}\n \n
\n
\n
\n
\n
\n
\n
\n\n
\n \n \n \n \n \n\n \n handleSubmit(event, true)}\n color=\"primary\"\n variant=\"outlined\"\n disabled={disableButtons}\n >\n Associate to all\n \n \n\n \n \n Associate to current\n \n \n \n \n
\n
\n
\n );\n}\n","import { useDispatch, useSelector } from \"react-redux\";\nimport { Contact } from \"../../types/store/contactTypes\";\nimport { currentCalculationBusinessUnitIdSelector, interimOrCurrentCalculationSelector, salesContactTeamSelector } from \"../../store/selectors\";\nimport React, { ChangeEvent, FormEvent } from \"react\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport modalStyles from '../LayerModal/LayerModal.module.scss'\nimport styles from './ContactInfoModal.module.scss';\nimport { Alert, Autocomplete, CreateFilterOptionsConfig, createFilterOptions } from \"@material-ui/lab\";\nimport { useDebounce } from \"../Utilities/hooks/useDebounce\";\nimport { callApi } from \"../../common/api\";\nimport { associateContact } from \"../../actions/contactActions\";\n\ntype Props = {\n onClose: () => void;\n}\n\ntype State = {\n newContact: Contact | null;\n existingContact: Contact | null;\n}\n\nexport type ContactType = {\n id: number;\n typeName: string;\n}\n\nconst config: CreateFilterOptionsConfig = {\n stringify: (option: Contact) => option.email,\n};\n\nconst filter = createFilterOptions(config);\n\nexport function ContactInfoModal({ onClose }: Props) {\n const dispatch = useDispatch();\n\n const calculation = useSelector(interimOrCurrentCalculationSelector);\n const currentCalculationBusinessUnitId: number | null = useSelector(currentCalculationBusinessUnitIdSelector);\n const salesContactTeams = useSelector(salesContactTeamSelector);\n\n const contactTypes: ContactType[] = [\n {\"id\": 1, \"typeName\": \"Account Manager\"},\n {\"id\": 2, \"typeName\": \"Architect\"},\n {\"id\": 3, \"typeName\": \"Architectural Technologist\"},\n {\"id\": 4, \"typeName\": \"BER Assessor\"},\n {\"id\": 5, \"typeName\": \"Builder\"},\n {\"id\": 6, \"typeName\": \"Building Control\"},\n {\"id\": 7, \"typeName\": \"BUILDING STANDARDS\"},\n {\"id\": 8, \"typeName\": \"Civil Engineering (Infrastructure)\"},\n {\"id\": 9, \"typeName\": \"Civil Engineering (Utilities)\"},\n {\"id\": 10, \"typeName\": \"Community and Amenity\"},\n {\"id\": 11, \"typeName\": \"Construction Engineer\"},\n {\"id\": 12, \"typeName\": \"Consultant\"},\n {\"id\": 13, \"typeName\": \"Contractor\"},\n {\"id\": 14, \"typeName\": \"CPD Coordinator/Contact\"},\n {\"id\": 15, \"typeName\": \"Customer\"},\n {\"id\": 16, \"typeName\": \"Design Manager\"},\n {\"id\": 17, \"typeName\": \"Development Manager\"},\n {\"id\": 18, \"typeName\": \"Director\"},\n {\"id\": 19, \"typeName\": \"Distributor\"},\n {\"id\": 20, \"typeName\": \"Ductwork Installer\"},\n {\"id\": 21, \"typeName\": \"Education\"},\n {\"id\": 22, \"typeName\": \"End user / Owner\"},\n {\"id\": 23, \"typeName\": \"Energy Expert\"},\n {\"id\": 24, \"typeName\": \"Engineer\"},\n {\"id\": 25, \"typeName\": \"Fire consultant\"},\n {\"id\": 26, \"typeName\": \"Fire Expert\"},\n {\"id\": 27, \"typeName\": \"Group Purchasing Manager\"},\n {\"id\": 28, \"typeName\": \"Heritage Conservationist\"},\n {\"id\": 29, \"typeName\": \"Hotel and Leisure\"},\n {\"id\": 30, \"typeName\": \"Industrial\"},\n {\"id\": 31, \"typeName\": \"Koolduct Installer\"},\n {\"id\": 32, \"typeName\": \"Main Contractor\"},\n {\"id\": 33, \"typeName\": \"Mechanical Engineer\"},\n {\"id\": 34, \"typeName\": \"Medical and Scientific\"},\n {\"id\": 35, \"typeName\": \"Merchant\"},\n {\"id\": 36, \"typeName\": \"Moisture consultant\"},\n {\"id\": 37, \"typeName\": \"Offices/Commercial\"},\n {\"id\": 38, \"typeName\": \"Other\"},\n {\"id\": 39, \"typeName\": \"Price List Updates\"},\n {\"id\": 40, \"typeName\": \"Private Housing\"},\n {\"id\": 41, \"typeName\": \"Production\"},\n {\"id\": 42, \"typeName\": \"Production Director\"},\n {\"id\": 43, \"typeName\": \"Project Manager\"},\n {\"id\": 44, \"typeName\": \"Promoter\"},\n {\"id\": 45, \"typeName\": \"Property Services\"},\n {\"id\": 46, \"typeName\": \"Prospect\"},\n {\"id\": 47, \"typeName\": \"Purchasing Manager\"},\n {\"id\": 48, \"typeName\": \"Quantity Surveyor\"},\n {\"id\": 49, \"typeName\": \"Remodeler\"},\n {\"id\": 50, \"typeName\": \"Retail\"},\n {\"id\": 51, \"typeName\": \"Roofing Contractor\"},\n {\"id\": 52, \"typeName\": \"Social Housing\"},\n {\"id\": 53, \"typeName\": \"Specifier\"},\n {\"id\": 54, \"typeName\": \"Sub-Contractor\"},\n {\"id\": 55, \"typeName\": \"Supplier\"},\n {\"id\": 56, \"typeName\": \"Surveyor\"},\n {\"id\": 57, \"typeName\": \"System Suppliers\"},\n {\"id\": 58, \"typeName\": \"TEK Designer\"},\n {\"id\": 59, \"typeName\": \"Thermal Engineer\"}\n ];\n\n const defaultState: State = {\n newContact: {\n id: null,\n businessUnitId: currentCalculationBusinessUnitId,\n firstName: '',\n lastName: '',\n jobTitle: '',\n company: '',\n contactType: '',\n businessPhone: '',\n mobilePhone: '',\n email: '',\n salesContactTeam: '',\n salesContactTeamValue: '',\n companyPostCode: '',\n },\n existingContact: null,\n };\n\n const [state, setState] = React.useState(defaultState);\n const [searchTerm, setSearchTerm] = React.useState('');\n const [existingContact, setExistingContact] = React.useState([]);\n const [error, setError] = React.useState(null);\n\n const disableButtons = calculation?.locked || (state.newContact ? !state.newContact.email : !state.existingContact?.email);\n\n const debouncedSearchTerm = useDebounce(searchTerm, 300);\n\n const lookupContactType = (contactType: string) => {\n return contactTypes.find(ct => ct.typeName === contactType)?.id ?? contactTypes[0].id;\n }\n\n const updateField = (fieldName: string, value: string) => {\n setState(currentState => ({\n ...currentState,\n ...(state.newContact\n ? {\n newContact: {\n ...currentState.newContact!,\n [fieldName]: value,\n },\n }\n : {\n existingContact: {\n ...currentState.existingContact!,\n [fieldName]: value,\n },\n }),\n }));\n };\n\n const handleContactEmailChange = (contact: Contact | null) => {\n if (!contact) {\n return setState(defaultState);\n }\n\n if (contact.id != null) {\n setState(currentState => ({\n ...currentState,\n newContact: null,\n existingContact: contact,\n }));\n } else {\n if (state.newContact) {\n setState(currentState => ({\n ...currentState,\n newContact: {\n ...currentState.newContact!,\n email: contact.email,\n businessUnitId: currentCalculationBusinessUnitId,\n },\n existingContact: null,\n }));\n } else {\n setState(currentState => ({\n ...currentState,\n newContact: contact,\n existingContact: null,\n }));\n }\n }\n }\n\n const handleSubmit = React.useCallback(\n async (event: FormEvent, shouldAssociateToAll: boolean) => {\n event.preventDefault();\n try {\n if (state.newContact) {\n await dispatch(associateContact(state.newContact, true, shouldAssociateToAll));\n } else if (state.existingContact) {\n await dispatch(associateContact(state.existingContact, false, shouldAssociateToAll));\n }\n onClose();\n } catch (e) {\n setError('Your contact information could not be saved and associated, please try again.');\n }\n },\n [dispatch, state, onClose]\n );\n\n React.useEffect(() => {\n if (calculation?.contact) {\n (async () => {\n const existingContact = await callApi(dispatch, 'GET', `/Contact/${currentCalculationBusinessUnitId}/${calculation.contact?.id}`);\n\n if (existingContact) {\n setState({\n newContact: null,\n existingContact,\n });\n }\n })();\n }\n }, [dispatch, calculation, currentCalculationBusinessUnitId]);\n\n React.useEffect(() => {\n if (debouncedSearchTerm) {\n (async () => {\n if (searchTerm.length < 3) {\n return setExistingContact([]);\n }\n\n const existingCoontacts = await callApi(dispatch, 'GET', `/Contact/search/${currentCalculationBusinessUnitId}/${debouncedSearchTerm}`);\n\n if (existingCoontacts) {\n setExistingContact(existingCoontacts);\n }\n })();\n }\n }, [dispatch, searchTerm, debouncedSearchTerm, setExistingContact, currentCalculationBusinessUnitId]);\n\n return (\n \n
handleSubmit(event, false)} noValidate>\n
\n \n Contact Information\n \n
\n\n
\n \n {error && (\n \n {error}\n \n )}\n\n \n \n \n \n \n Email\n \n\n option.email}\n onInputChange={(event: ChangeEvent, searchTerm: string) => setSearchTerm(searchTerm)}\n onChange={(event: ChangeEvent<{}>, contact: Contact | null) => handleContactEmailChange(contact)}\n value={state.newContact ?? state.existingContact}\n forcePopupIcon\n freeSolo\n renderOption={(contact: Contact) =>\n contact.id != null ? (\n contact.email\n ) : (\n \n {contact.email}\n\n \n \n \n \n )\n }\n filterOptions={(options, params) => {\n const filtered = filter(options, params) as Contact[];\n\n if (params.inputValue !== '') {\n const option: Contact = state.newContact\n ? {\n ...state.newContact,\n email: params.inputValue,\n }\n : {\n ...defaultState.newContact!,\n email: params.inputValue,\n };\n\n filtered.push(option);\n }\n\n return filtered.reduce((acc, contact) => {\n const isNewOption = contact.id === null;\n const isAlreadyASuggestion = existingContact.find(p => p.email.toLowerCase() === contact.email.toLowerCase());\n\n return isNewOption && isAlreadyASuggestion ? acc : [...acc, contact];\n }, []);\n }}\n renderInput={params => (\n \n )}\n />\n \n\n \n \n First Name\n \n\n ) => updateField('firstName', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n\n \n \n Last Name\n \n\n ) => updateField('lastName', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n \n\n \n\n \n \n Job Title\n \n\n ) => updateField('jobTitle', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n\n \n \n Company\n \n\n ) => updateField('company', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n\n \n \n Company Postcode\n \n\n ) => updateField('companyPostCode', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n \n\n \n \n \n Contact Type\n \n\n ) => updateField('contactType', contactTypes.find(ct => ct.id === value)?.typeName ?? contactTypes[0].typeName)}\n variant=\"outlined\"\n >\n \n  \n \n\n {contactTypes.map(({ id, typeName }) => (\n \n {typeName}\n \n ))}\n \n \n\n \n \n Business Phone\n \n\n ) => updateField('businessPhone', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n\n \n \n Mobile Phone\n \n\n ) => updateField('mobilePhone', value)}\n inputProps={{\n maxLength: 255,\n }}\n />\n \n \n\n \n \n \n Sales Contact Team\n \n\n ) => {\n updateField('salesContactTeam', value)\n updateField('salesContactTeamValue', salesContactTeams.find(sct => sct.id === value)?.areaCode ?? '')\n }}\n variant=\"outlined\"\n >\n \n  \n \n\n {salesContactTeams.map(({ id, areaCode }) => (\n \n {areaCode}\n \n ))}\n \n \n \n \n \n \n
\n\n
\n \n \n \n \n \n\n \n handleSubmit(event, true)}\n color=\"primary\"\n variant=\"outlined\"\n disabled={disableButtons}\n >\n Associate to all\n \n \n\n \n \n Associate to current\n \n \n \n \n
\n
\n
\n );\n}\n\n","import { Button, Container, Fade, FormControlLabel, Grid, Switch } from '@material-ui/core';\nimport { AddCircle } from '@material-ui/icons';\nimport { useSnackbar } from 'notistack';\nimport React from 'react';\nimport { DndProvider } from 'react-dnd';\nimport Backend from 'react-dnd-html5-backend';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { changeActiveCalculation, closeActiveCalculation, copyCalculation } from '../../../actions/calculationActions';\nimport { checkIsPowerUser } from '../../../common/userProfile';\nimport { uuid } from '../../../common/uuid';\nimport {\n applicationTypeSelector,\n currentBuildingRegionNameSelector,\n currentCalculationBusinessUnitSelector,\n inactiveCalculationsSelector,\n interimOrCurrentCalculationSelector,\n isLoadingMasterDataSelector,\n saveSuccessSelector,\n userProfileSelector,\n} from '../../../store/selectors';\nimport { Calculation } from '../../../types/store/calculationTypes';\nimport { InactiveCalculationsState } from '../../../types/store/inactiveCalculationsTypes';\nimport { MasterDataApplicationType } from '../../../types/store/masterDataTypes';\nimport { UserProfileState } from '../../../types/store/userProfileTypes';\nimport { CalculationNavigation } from '../../CalculationNavigation/CalculationNavigation';\nimport { CalculationResults } from '../../CalculationResults/CalculationResults';\nimport { CondensationRiskModal } from '../../CondensationRiskModal/CondensationRiskModal';\nimport { ConstructionModal } from '../../ConstructionModal/ConstructionModal';\nimport { bridgingTabIndex, LayerModal, LayerModalMode, vapourTabIndex } from '../../LayerModal/LayerModal';\nimport { LayersTable, LayersTableMode } from '../../LayersTable/LayersTable';\nimport { MasterDataUploadModal } from '../../MasterDataUploadModal/MasterDataUploadModal';\nimport { NewCalculationModal } from '../../NewCalculationModal/NewCalculationModal';\nimport { OpenCalculationModal } from '../../OpenCalculationModal/OpenCalculationModal';\nimport { WelcomeModal } from '../../WelcomeModal/WelcomeModal';\nimport { PdfModal } from '../../PdfModal/PdfModal';\nimport { ProjectInfoModal } from '../../ProjectInfoModal/ProjectInfoModal';\nimport { VerticalAlign } from '../../Utilities/VerticalAlign/VerticalAlign';\nimport styles from './CalculationScreen.module.scss';\nimport { ContactInfoModal } from '../../ContactInfoModal/ContactInfoModal';\n\nconst getCondensationMessage = (calculation: Calculation | null) => {\n if (!calculation) {\n return '';\n }\n if (!calculation.envSettings) {\n return 'Not Set';\n }\n if (calculation.hasCondensation) {\n return 'Condensation';\n }\n return 'No Condensation';\n};\n\nexport function CalculationScreen() {\n const dispatch = useDispatch();\n\n const calculation: Calculation | null = useSelector(interimOrCurrentCalculationSelector);\n const applicationTypes: MasterDataApplicationType[] = useSelector(applicationTypeSelector);\n const inactiveCalculations: InactiveCalculationsState = useSelector(inactiveCalculationsSelector);\n const currentBuildingRegionName: string | undefined = useSelector(currentBuildingRegionNameSelector);\n const saveSuccess: boolean | null = useSelector(saveSuccessSelector);\n const userProfile: UserProfileState = useSelector(userProfileSelector);\n const isLoadingMasterData = useSelector(isLoadingMasterDataSelector);\n const currentCalculationBusinessUnit = useSelector(currentCalculationBusinessUnitSelector);\n\n const [isLayerModalOpen, setIsLayerModalOpen] = React.useState(false);\n const [layerModalLayerInstanceId, setLayerModalLayerInstanceId] = React.useState();\n const [layerModalMode, setLayerModalMode] = React.useState(LayerModalMode.ADD);\n const [isConstructionModalOpen, setIsConstructionModalOpen] = React.useState(false);\n const [isEnvConditionsModalOpen, setIsEnvConditionsModalOpen] = React.useState(false);\n const [layersTableMode, setLayersTableMode] = React.useState(LayersTableMode.THERMAL);\n const [isWelcomeModalOpen, setIsWelcomeModalOpen] = React.useState(true);\n const [isNewCalculationModalOpen, setIsNewCalculationModalOpen] = React.useState(false);\n const [isOpenCalculationModalOpen, setIsOpenCalculationModalOpen] = React.useState(false);\n const [canDismissNewCalculationModal, setCanDismissNewCalculationModal] = React.useState(false);\n const [isPrintPdfModalOpen, setIsPrintPdfModalOpen] = React.useState(false);\n const [isMasterDataUploadModalOpen, setIsMasterDataUploadModalOpen] = React.useState(false);\n const [isProjectInfoModalOpen, setIsProjectInfoModalOpen] = React.useState(false);\n const [isContactInfoModalOpen, setIsContactInfoModalOpen] = React.useState(false);\n const [layerModalInitialTabIndex, setLayerModalInitialTabIndex] = React.useState(false);\n\n const { enqueueSnackbar } = useSnackbar();\n\n const applicationType = applicationTypes.find(applicationType => applicationType.id === calculation?.applicationDetails.id)?.name;\n const activeCalculationId = calculation?.calculationId;\n\n React.useEffect(() => {\n if (saveSuccess) {\n enqueueSnackbar('Saved', { variant: 'success', autoHideDuration: 1500, TransitionComponent: Fade });\n }\n }, [enqueueSnackbar, saveSuccess]);\n\n const handleOpenEnvConditionsModal = () => {\n setIsEnvConditionsModalOpen(true);\n };\n\n const handleOpenConstructionModal = () => {\n setIsConstructionModalOpen(true);\n };\n\n const handleCreateNewCalculationModal = () => {\n setCanDismissNewCalculationModal(true);\n setIsNewCalculationModalOpen(true);\n };\n\n const handleOpenCalculationModal = () => {\n setIsOpenCalculationModalOpen(true);\n };\n\n const handleOpenPrintPdfModal = () => {\n setIsPrintPdfModalOpen(true);\n };\n\n const handleOpenMasterDataUploadModal = () => {\n setIsMasterDataUploadModalOpen(true);\n };\n\n const handleClosePrintPdfModal = () => {\n setIsPrintPdfModalOpen(false);\n };\n\n const handleOpenProjectInfoModal = () => {\n setIsProjectInfoModalOpen(true);\n };\n\n const handleCloseProjectInfoModal = () => {\n setIsProjectInfoModalOpen(false);\n };\n\n const handleOpenContactInfoModal = () => {\n setIsContactInfoModalOpen(true);\n }\n\n const handleCloseContactInfoModal = () => {\n setIsContactInfoModalOpen(false);\n }\n\n const handleOpenLayerModal = (mode: LayerModalMode, instanceId?: string, tabIndex?: number) => {\n if (instanceId) {\n setLayerModalLayerInstanceId(instanceId);\n } else {\n /*\n When the mode is add and there isn't a selected layer,\n we set the default now so that the interim calculation results for the layer\n can be accessed.\n */\n setLayerModalLayerInstanceId(uuid());\n }\n\n setLayerModalMode(mode);\n\n if (mode === LayerModalMode.ADD) {\n setLayerModalInitialTabIndex(false);\n } else if (tabIndex !== undefined) {\n setLayerModalInitialTabIndex(tabIndex);\n } else if (layersTableMode === LayersTableMode.CONDENSATION) {\n setLayerModalInitialTabIndex(vapourTabIndex);\n } else {\n setLayerModalInitialTabIndex(bridgingTabIndex);\n }\n\n setIsLayerModalOpen(true);\n };\n\n const handleCloseEnvConditionsModal = () => {\n setIsEnvConditionsModalOpen(false);\n };\n\n const handleCloseConstructionModal = () => {\n setIsConstructionModalOpen(false);\n };\n\n const handleCloseLayerModal = () => {\n setLayerModalLayerInstanceId(undefined);\n setIsLayerModalOpen(false);\n };\n\n const handleWelcomeModalCreateNewCalculation = () => {\n setIsWelcomeModalOpen(false);\n handleCreateNewCalculationModal();\n };\n\n const handleWelcomeModalOpenCalculation = () => {\n setIsWelcomeModalOpen(false);\n handleOpenCalculationModal();\n };\n\n const handleWelcomeModalUpload = () => {\n setIsWelcomeModalOpen(false);\n handleOpenMasterDataUploadModal();\n };\n\n const handleCloseNewCalculationModal = (forceWelcome?: boolean) => {\n setIsNewCalculationModalOpen(false);\n\n if (forceWelcome && calculationNavigationItems.length === 0) {\n setIsWelcomeModalOpen(true);\n }\n };\n\n const handleCloseOpenCalculationModal = (forceWelcome?: boolean) => {\n setIsOpenCalculationModalOpen(false);\n\n if (forceWelcome && calculationNavigationItems.length === 0) {\n setIsWelcomeModalOpen(true);\n }\n };\n\n const handleCloseMasterDataUploadModal = (forceWelcome?: boolean) => {\n setIsMasterDataUploadModalOpen(false);\n\n if (forceWelcome && calculationNavigationItems.length === 0) {\n setIsWelcomeModalOpen(true);\n }\n };\n\n const handleLayerTableModeSwitch = () => {\n setLayersTableMode(prevLayersTableMode =>\n prevLayersTableMode === LayersTableMode.THERMAL ? LayersTableMode.CONDENSATION : LayersTableMode.THERMAL\n );\n };\n\n const handleNavigateCalculation = React.useCallback(\n (_: any, selectedItem: string) => {\n if (selectedItem === activeCalculationId) return;\n\n dispatch(changeActiveCalculation(selectedItem));\n },\n [dispatch, activeCalculationId]\n );\n\n const getCalculationNavigationItems = (): string[] => {\n const unorderedCalculations = [...(calculation ? [calculation] : []), ...inactiveCalculations];\n const orderedCalculations = unorderedCalculations.sort((a, b) => (a.order > b.order ? 1 : -1));\n\n return orderedCalculations.map(c => c?.calculationId);\n };\n\n const calculationNavigationItems = getCalculationNavigationItems();\n\n const handleCloseCalculation = React.useCallback(() => {\n dispatch(closeActiveCalculation());\n\n // If there'll be no calculation left open the welcome modal automatically.\n if (calculationNavigationItems.length === 1) {\n setIsWelcomeModalOpen(true);\n }\n }, [dispatch, calculationNavigationItems]);\n\n const handleCopyCalculation = React.useCallback(() => {\n dispatch(copyCalculation());\n }, [dispatch]);\n\n // Power user groups are configurable so dynamically determine it\n const isPowerUser = checkIsPowerUser(userProfile);\n\n return (\n
\n \n \n\n \n \n \n \n\n \n \n
Construction Type
\n\n \n
\n\n \n
Env. Conditions
\n\n \n
\n\n \n
\n Project Info\n
\n\n \n
\n\n \n
\n Project Contact\n
\n\n \n
\n\n \n \n }\n label=\"Condensation\"\n labelPlacement=\"end\"\n />\n \n\n \n \n handleOpenLayerModal(LayerModalMode.ADD)}\n data-qa-id=\"addLayerButton\"\n variant=\"contained\"\n color=\"primary\"\n disableElevation\n fullWidth\n startIcon={}\n autoFocus\n disabled={calculation?.locked}\n >\n Add Layer\n \n \n \n
\n\n \n \n handleOpenLayerModal(LayerModalMode.EDIT, instanceId, tabIndex)}\n isLocked={calculation?.locked}\n />\n \n \n\n
\n
\n \n \n \n
\n \n
\n
\n\n {isPowerUser && (\n \n \n \n Upload\n \n \n \n )}\n\n \n \n \n Export\n \n \n \n\n \n \n \n Create\n \n \n \n\n \n \n \n Open\n \n \n \n\n
\n
\n
\n
\n\n {isConstructionModalOpen && }\n {isLayerModalOpen && (\n \n )}\n {isEnvConditionsModalOpen && }\n {isWelcomeModalOpen && }\n {isNewCalculationModalOpen && }\n {isOpenCalculationModalOpen && }\n {isPrintPdfModalOpen && }\n {isMasterDataUploadModalOpen && }\n {isProjectInfoModalOpen && }\n {isContactInfoModalOpen && }\n
\n );\n}\n","import { ApiState, ApiAction } from '../types/store/apiTypes';\nimport { actionTypes } from '../actions/actionTypes';\n\nconst initialState: ApiState = {\n isFirstCallSuccessful: false,\n isAuthenticated: true,\n isAuthorised: true,\n};\n\nexport const apiReducer = (state: ApiState = initialState, action: ApiAction) => {\n switch (action.type) {\n case actionTypes.API_CALL_SUCCESSFUL:\n return {\n isFirstCallSuccessful: true, // Set to true on successful call to create better experience when first visiting the application\n isAuthenticated: true,\n isAuthorised: true,\n };\n case actionTypes.SET_UNAUTHENTICATED:\n return {\n ...state,\n isAuthenticated: false,\n isAuthorised: false,\n };\n case actionTypes.SET_UNAUTHORISED:\n return {\n ...state,\n isAuthenticated: true,\n isAuthorised: false,\n };\n default:\n return state;\n }\n};\n","import { cloneDeep } from 'lodash';\n\nimport { actionTypes } from '../actions/actionTypes';\nimport { InactiveCalculationsAction, InactiveCalculationsState } from '../types/store/inactiveCalculationsTypes';\n\nconst initialState: InactiveCalculationsState = [];\n\nexport const inactiveCalculationsReducer = (state: InactiveCalculationsState = initialState, action: InactiveCalculationsAction) => {\n switch (action.type) {\n case actionTypes.CHANGE_ACTIVE_CALCULATION: {\n const newState = cloneDeep(state);\n const previousActiveCalculation = cloneDeep(action.payload.previousActiveCalculation);\n const indexOfCalculationToRemove = newState.findIndex(c => c.calculationId === action.payload.newActiveCalculation.calculationId);\n\n newState.splice(indexOfCalculationToRemove, 1);\n\n return [previousActiveCalculation, ...newState];\n }\n case actionTypes.MAKE_ALL_CALCULATIONS_INACTIVE: {\n return action.payload.previousActiveCalculation ? [action.payload.previousActiveCalculation, ...state] : state;\n }\n case actionTypes.CLOSE_ACTIVE_CALCULATION: {\n return action.payload.newInactiveCalculations;\n }\n case actionTypes.LOCK_CALCULATION: {\n if (!action.payload.isCurrentCalculation) {\n const newState = cloneDeep(state);\n const { calculation } = action.payload;\n return newState.map(calc => (calc.calculationId === calculation.calculationId ? { ...calculation, order: calc.order } : calc));\n } else {\n return state;\n }\n }\n case actionTypes.UPDATE_INACTIVE_CALCULATIONS_PROJECT: {\n return state.map(calculation => ({ ...calculation, project: action.payload.project }));\n }\n case actionTypes.UPDATE_INACTIVE_CALCULATIONS_CONTACT: {\n return state.map(calculation => ({ ...calculation, contact: action.payload.contact }));\n }\n default:\n return state;\n }\n};\n","import { Calculation, CalculationAction, CalculationState } from '../types/store/calculationTypes';\nimport { actionTypes } from '../actions/actionTypes';\n\nconst initialState: CalculationState = {\n currentCalculation: null,\n interimCalculation: null,\n savedSuccessfully: null,\n};\n\nexport const calculationReducer = (state: CalculationState = initialState, action: CalculationAction): CalculationState => {\n switch (action.type) {\n case actionTypes.CHANGE_ACTIVE_CALCULATION:\n return {\n ...state,\n currentCalculation: action.payload.newActiveCalculation,\n interimCalculation: null,\n };\n case actionTypes.MAKE_ALL_CALCULATIONS_INACTIVE:\n return {\n ...state,\n currentCalculation: null,\n interimCalculation: null,\n };\n case actionTypes.REGISTER_CALCULATION:\n return {\n ...state,\n currentCalculation: {\n ...action.payload.calculation,\n order: action.payload.order,\n },\n interimCalculation: null,\n };\n case actionTypes.CLOSE_ACTIVE_CALCULATION:\n return {\n ...state,\n currentCalculation: action.payload.newActiveCalculation || null,\n interimCalculation: null,\n };\n case actionTypes.SET_ACTIVE_CALCULATION_DATA:\n return {\n ...state,\n currentCalculation: {\n ...action.payload.newCalculationData,\n calculationId: action.payload.shouldUseExistingCalculationId\n ? action.payload.newCalculationData?.calculationId\n : state.currentCalculation?.calculationId,\n order: action.payload.order,\n } as Calculation,\n interimCalculation: null,\n };\n case actionTypes.LOCK_CALCULATION:\n if (action.payload.isCurrentCalculation) {\n return {\n ...state,\n currentCalculation: {\n ...state.currentCalculation,\n ...action.payload.calculation,\n } as Calculation,\n // Explicitly clearing interim calculation when current calculation is updated\n interimCalculation: null,\n };\n } else {\n return state;\n }\n case actionTypes.ADD_LAYER_TO_CALCULATION:\n case actionTypes.EDIT_LAYER_IN_CALCULATION:\n case actionTypes.INTERIM_MOVE_LAYER_IN_CALCULATION:\n case actionTypes.MOVE_LAYER_IN_CALCULATION:\n case actionTypes.DUPLICATE_LAYER_IN_CALCULATION:\n case actionTypes.REMOVE_LAYER_FROM_CALCULATION:\n case actionTypes.ADD_CONSTRUCTION_DETAILS_TO_CALCULATION:\n return {\n ...state,\n currentCalculation: action.payload.calculation,\n // Explicitly clearing interim calculation when current calculation is updated\n interimCalculation: null,\n };\n case actionTypes.ADD_LAYER_TO_INTERIM_CALCULATION:\n case actionTypes.EDIT_LAYER_IN_INTERIM_CALCULATION:\n return {\n ...state,\n interimCalculation: action.payload.calculation,\n };\n case actionTypes.CLEAR_INTERIM_CALCULATION:\n return {\n ...state,\n interimCalculation: null,\n };\n case actionTypes.UPDATE_CALCULATION_PROJECT:\n return {\n ...state,\n currentCalculation: {\n ...state.currentCalculation,\n project: action.payload.project,\n } as Calculation,\n interimCalculation: null,\n };\n case actionTypes.UPDATE_CALCULATION_CONTACT:\n return {\n ...state,\n currentCalculation: {\n ...state.currentCalculation,\n contact: action.payload.contact,\n } as Calculation,\n interimCalculation: null,\n };\n case actionTypes.EDIT_ENV_CONDITIONS:\n case actionTypes.EDIT_ENV_SETTINGS:\n return {\n ...state,\n interimCalculation: action.payload.calculation,\n };\n case actionTypes.SAVE_ENV_CONDITIONS:\n return {\n ...state,\n currentCalculation: action.payload.calculation,\n interimCalculation: null,\n };\n case actionTypes.SET_CALCULATION_SAVE_SUCCESS:\n return {\n ...state,\n savedSuccessfully: true,\n };\n case actionTypes.CLEAR_CALCULATION_SAVE_SUCCESS:\n return {\n ...state,\n savedSuccessfully: null,\n };\n default:\n return state;\n }\n};\n","import { getEmptyMasterData, MasterDataAction, MasterDataState } from '../types/store/masterDataTypes';\nimport { actionTypes } from '../actions/actionTypes';\n\nconst initialState: MasterDataState = {\n ...getEmptyMasterData(),\n isLoadingMasterData: false,\n};\n\nexport const masterDataReducer = (state: MasterDataState = initialState, action: MasterDataAction) => {\n switch (action.type) {\n case actionTypes.FETCH_MASTER_DATA:\n return {\n ...action.payload.masterData,\n isLoadingMasterData: state.isLoadingMasterData,\n };\n case actionTypes.SET_IS_LOADING_MASTER_DATA:\n return {\n ...state,\n isLoadingMasterData: action.payload.isLoadingMasterData,\n };\n default:\n return state;\n }\n};\n","import { cloneDeep } from 'lodash';\n\nimport { PdfState, PdfAction } from '../types/store/pdfTypes';\nimport { actionTypes } from '../actions/actionTypes';\n\nconst initialState: PdfState = {\n exports: [],\n pendingDownloads: [],\n};\n\nexport const pdfReducer = (state: PdfState = initialState, action: PdfAction) => {\n switch (action.type) {\n case actionTypes.EXPORT_PDF: {\n const pendingDownloads = [...state.pendingDownloads, action.payload.export];\n const existingIndex = state.exports.findIndex(r => r.calculationId === action.payload.export.calculationId);\n\n if (existingIndex === -1) {\n return {\n exports: [...state.exports, action.payload.export],\n pendingDownloads,\n };\n }\n\n const exports = cloneDeep(state.exports);\n exports.splice(existingIndex, 1, action.payload.export);\n\n return {\n exports,\n pendingDownloads,\n };\n }\n case actionTypes.CLEAR_PENDING_PDF_DOWNLOADS:\n return {\n ...state,\n pendingDownloads: [],\n };\n default:\n return state;\n }\n};\n","import { combineReducers } from 'redux';\n\nimport { apiReducer } from './apiReducer';\nimport { inactiveCalculationsReducer } from './inactiveCalculationsReducer';\nimport { calculationReducer } from './calculationReducer';\nimport { masterDataReducer } from './masterDataReducer';\nimport { pdfReducer } from './pdfReducer';\nimport { userProfileReducer } from './userProfileReducer';\n\nexport const reducers = combineReducers({\n api: apiReducer,\n inactiveCalculations: inactiveCalculationsReducer,\n calculation: calculationReducer,\n masterData: masterDataReducer,\n pdf: pdfReducer,\n userProfile: userProfileReducer,\n});\n","import { actionTypes } from '../actions/actionTypes';\nimport { UserProfileAction, UserProfileState } from '../types/store/userProfileTypes';\n\nconst initialState: UserProfileState = null;\n\nexport const userProfileReducer = (state: UserProfileState = initialState, action: UserProfileAction) => {\n switch (action.type) {\n case actionTypes.FETCH_USER_PROFILE:\n return action.payload.userProfile;\n default:\n return state;\n }\n};\n","import { createStore, applyMiddleware, AnyAction } from 'redux';\nimport thunk, { ThunkDispatch } from 'redux-thunk';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport reduxImmutableStateInvariant from 'redux-immutable-state-invariant';\n\nimport { reducers } from '../reducers/reducers';\n\nconst middleware: any[] = [thunk];\n\nif (process.env.NODE_ENV !== 'production') {\n middleware.push(reduxImmutableStateInvariant());\n}\n\nexport const store = createStore(reducers, composeWithDevTools(applyMiddleware(...middleware)));\n\n// Infer the `RootState` and `AppDispatch` types from the store itself\n// Note that we need to support ThunkDispatch, this enables the \"async function middleware\": https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware\nexport type RootState = ReturnType;\nexport type AppDispatch = (typeof store.dispatch) & ThunkDispatch;\n","import { ThemeOptions } from '@material-ui/core';\nimport { createMuiTheme } from '@material-ui/core/styles';\n\nimport themeStyles from './theme.module.scss';\nimport './overrides.module.scss';\n\nconst themeOptions: ThemeOptions = {\n breakpoints: {\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n values: {\n xs: parseInt(themeStyles.maxWidth),\n sm: parseInt(themeStyles.maxWidth),\n md: parseInt(themeStyles.maxWidth),\n lg: parseInt(themeStyles.maxWidth),\n xl: parseInt(themeStyles.maxWidth),\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};\n\nexport const theme = createMuiTheme(themeOptions);\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter, Redirect, Route, Switch } from 'react-router-dom';\nimport { CssBaseline } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/core/styles';\nimport { AuthenticationState, AzureAD, IAzureADFunctionProps } from 'react-aad-msal';\nimport { SnackbarProvider } from 'notistack';\nimport { ToastContainer } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.min.css';\n\nimport { Layout } from '../Layout/Layout';\nimport { CalculationScreen } from '../Screens/CalculationScreen/CalculationScreen';\nimport { store } from '../../store/store';\nimport { theme } from '../../theme/theme';\nimport { authProvider } from '../../auth/authProvider';\nimport { UnauthenticatedLandingPage } from '../LandingPages/UnauthenticatedLandingPage/UnauthenticatedLandingPage';\nimport { AuthorisingLandingPage } from '../LandingPages/AuthorisingLandingPage/AuthorisingLandingPage';\nimport styles from './App.module.scss';\n\nexport function App() {\n return (\n \n \n \n {({ authenticationState }: IAzureADFunctionProps) => (\n \n \n\n {/**\n * \"InProgress\" state covers the scenario where the user isn't\n * explicitly authenticated or unauthenticated but instead in limbo.\n */\n authenticationState === AuthenticationState.InProgress && }\n\n {/**\n * \"Unauthenticated\" state covers the scenario where the user has returned\n * from the Microsoft portal without successfully authenticating.\n */\n authenticationState === AuthenticationState.Unauthenticated && }\n\n {/**\n * \"Authenticated\" state covers the scenario where the user has returned\n * from the Microsoft portal having successfully authenticating. However,\n * we may still show an error landing pages from within the Layout\n * component if the API throws authentication or authorisation errors.\n */\n authenticationState === AuthenticationState.Authenticated && (\n \n \n \n \n \n \n\n \n \n \n \n )}\n \n )}\n \n \n \n \n );\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { App } from './components/App/App';\nimport { setAppConfig } from './config/config';\nimport { AppConfig } from './types/config/configTypes';\n\n(async function() {\n try {\n const configData = await fetch(`${process.env.PUBLIC_URL}/config.json`);\n const appConfig = (await configData.json()) as AppConfig;\n\n setAppConfig(appConfig);\n\n ReactDOM.render(, document.getElementById('root'));\n } catch (e) {\n console.error('App config could not be loaded');\n console.error(e);\n }\n})();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalHeader\":\"PdfModal_modalHeader__2Oxh3\",\"modalContent\":\"PdfModal_modalContent__1MUsu\",\"modalActions\":\"PdfModal_modalActions__1F7QO\",\"alert\":\"PdfModal_alert__2-7ed\",\"checkboxList\":\"PdfModal_checkboxList__3kqEq\",\"checkboxListLabelEmphasis\":\"PdfModal_checkboxListLabelEmphasis__1AN-u\",\"checkboxListLabel\":\"PdfModal_checkboxListLabel__2ja8Z\",\"raisedCheckboxContainer\":\"PdfModal_raisedCheckboxContainer__SexNx\",\"exportIconContainer\":\"PdfModal_exportIconContainer__3LXAy\",\"cloudIcon\":\"PdfModal_cloudIcon__1Xlwy\",\"cloudDoneIcon\":\"PdfModal_cloudDoneIcon__678rZ\",\"watermarkCheckboxContainer\":\"PdfModal_watermarkCheckboxContainer__21QO1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalHeader\":\"LayerModal_modalHeader__3pL1D\",\"modalContent\":\"LayerModal_modalContent__3CiFF\",\"modalActions\":\"LayerModal_modalActions__2JugK\",\"customLayerDetailsWrapper\":\"LayerModal_customLayerDetailsWrapper__3ej-j\",\"customLayerField\":\"LayerModal_customLayerField__1-LEr\",\"customLayerDetails\":\"LayerModal_customLayerDetails__2M5HK\",\"tabContent\":\"LayerModal_tabContent__25vrM\",\"customLayerFieldinputUnit\":\"LayerModal_customLayerFieldinputUnit__3VEz2\",\"layerResult\":\"LayerModal_layerResult__2sucp\",\"layerResultTitle\":\"LayerModal_layerResultTitle__17OYn\",\"layerResultValue\":\"LayerModal_layerResultValue__2baRk\",\"layerResultUnit\":\"LayerModal_layerResultUnit__2Qy3V\",\"tabs\":\"LayerModal_tabs__3v4hv\",\"tab\":\"LayerModal_tab__3vcMu\",\"tabbedContentContainer\":\"LayerModal_tabbedContentContainer__1brpW\",\"inputUnit\":\"LayerModal_inputUnit__2ekXI\",\"inputHint\":\"LayerModal_inputHint__aaIub\",\"tabContentResults\":\"LayerModal_tabContentResults__3FI3q\",\"tabContentResult\":\"LayerModal_tabContentResult__1ZakU\",\"tabContentResultValueUnitContainer\":\"LayerModal_tabContentResultValueUnitContainer__3LoVy\",\"tabContentResultValueUnitContainerLeft\":\"LayerModal_tabContentResultValueUnitContainerLeft__3hjbS\",\"tabContentResultValue\":\"LayerModal_tabContentResultValue__38cKV\",\"tabContentResultValueLink\":\"LayerModal_tabContentResultValueLink__1cGtk\",\"tabContentResultUnit\":\"LayerModal_tabContentResultUnit__38PHG\",\"multiButtonContainer\":\"LayerModal_multiButtonContainer__3JB4-\",\"multiButtonSelected\":\"LayerModal_multiButtonSelected__24Zjg\",\"relative\":\"LayerModal_relative__2g8uc\",\"standaloneUnit\":\"LayerModal_standaloneUnit__1arPP\",\"verticalDivider\":\"LayerModal_verticalDivider__1gS29\",\"layerNotesTabLabelIcon\":\"LayerModal_layerNotesTabLabelIcon__34d8U\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalHeader\":\"CondensationRiskModal_modalHeader__1Boxt\",\"modalContent\":\"CondensationRiskModal_modalContent__2Zsyq\",\"modalActions\":\"CondensationRiskModal_modalActions__1qZmb\",\"customLayerDetailsWrapper\":\"CondensationRiskModal_customLayerDetailsWrapper__2GJkS\",\"customLayerField\":\"CondensationRiskModal_customLayerField__10Ido\",\"customLayerDetails\":\"CondensationRiskModal_customLayerDetails__2TjaR\",\"tabContent\":\"CondensationRiskModal_tabContent__3SraB\",\"customLayerFieldinputUnit\":\"CondensationRiskModal_customLayerFieldinputUnit__315Be\",\"layerResult\":\"CondensationRiskModal_layerResult__1ZYse\",\"layerResultTitle\":\"CondensationRiskModal_layerResultTitle__3H1nl\",\"layerResultValue\":\"CondensationRiskModal_layerResultValue__2Nhju\",\"layerResultUnit\":\"CondensationRiskModal_layerResultUnit__hFzHO\",\"tabs\":\"CondensationRiskModal_tabs__3xJQd\",\"tab\":\"CondensationRiskModal_tab__3wzLC\",\"tabbedContentContainer\":\"CondensationRiskModal_tabbedContentContainer__33bjY\",\"inputUnit\":\"CondensationRiskModal_inputUnit__rSZoZ\",\"inputHint\":\"CondensationRiskModal_inputHint__2FhIu\",\"tabContentResults\":\"CondensationRiskModal_tabContentResults__3nELB\",\"tabContentResult\":\"CondensationRiskModal_tabContentResult__5Gkmw\",\"tabContentResultValueUnitContainer\":\"CondensationRiskModal_tabContentResultValueUnitContainer__2i94M\",\"tabContentResultValueUnitContainerLeft\":\"CondensationRiskModal_tabContentResultValueUnitContainerLeft__1SLp7\",\"tabContentResultValue\":\"CondensationRiskModal_tabContentResultValue__VEFdn\",\"tabContentResultValueLink\":\"CondensationRiskModal_tabContentResultValueLink__3JrXO\",\"tabContentResultUnit\":\"CondensationRiskModal_tabContentResultUnit__28Fmx\",\"multiButtonContainer\":\"CondensationRiskModal_multiButtonContainer__HSrT-\",\"multiButtonSelected\":\"CondensationRiskModal_multiButtonSelected__UElEu\",\"relative\":\"CondensationRiskModal_relative__7zokz\",\"standaloneUnit\":\"CondensationRiskModal_standaloneUnit__2VVQN\",\"verticalDivider\":\"CondensationRiskModal_verticalDivider__2rNHU\",\"layerNotesTabLabelIcon\":\"CondensationRiskModal_layerNotesTabLabelIcon__3ZYm1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"modalHeader\":\"MasterDataUploadModal_modalHeader__2lrvU\",\"modalContent\":\"MasterDataUploadModal_modalContent__34Ep-\",\"modalActions\":\"MasterDataUploadModal_modalActions__1MID4\",\"dropzoneContainer\":\"MasterDataUploadModal_dropzoneContainer__2LJCd\",\"dropzone\":\"MasterDataUploadModal_dropzone__15ida\",\"fileIcon\":\"MasterDataUploadModal_fileIcon__2TC8m\",\"fileName\":\"MasterDataUploadModal_fileName__1SNQy\",\"masterDataTypeContainer\":\"MasterDataUploadModal_masterDataTypeContainer__2qbgX\",\"alert\":\"MasterDataUploadModal_alert__QrWYg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\":\"CalculationScreen_page__pdoX2\",\"content\":\"CalculationScreen_content__grwvJ\",\"container\":\"CalculationScreen_container__1OAii\",\"tabContent\":\"CalculationScreen_tabContent__hioSD\",\"tabContentSelected\":\"CalculationScreen_tabContentSelected__h4OJE\",\"tabCloseButtonContainer\":\"CalculationScreen_tabCloseButtonContainer__2oqja\",\"tabCopyButtonContainer\":\"CalculationScreen_tabCopyButtonContainer__29zlv\",\"tabCopyButton\":\"CalculationScreen_tabCopyButton__28D4X\",\"tabCloseButton\":\"CalculationScreen_tabCloseButton__3NY6Y\",\"clipboardIcon\":\"CalculationScreen_clipboardIcon__3GGLk\",\"buttonLinkLabel\":\"CalculationScreen_buttonLinkLabel__1FYi9\",\"buttonLink\":\"CalculationScreen_buttonLink__l4b0Y\",\"navigationBarContainer\":\"CalculationScreen_navigationBarContainer__2stTa\",\"navigationBar\":\"CalculationScreen_navigationBar__2ujzv\",\"navigationBarDisabled\":\"CalculationScreen_navigationBarDisabled__21aou\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"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\",\"landingPageContainer\":\"LandingPage_landingPageContainer__2bPEc\",\"landingPage\":\"LandingPage_landingPage__3QYON\",\"logo\":\"LandingPage_logo__1z4MX\",\"loadingIconContainer\":\"LandingPage_loadingIconContainer__1WE7S\",\"titleContainer\":\"LandingPage_titleContainer__VqNO5\",\"title\":\"LandingPage_title__2UR25\",\"contentContainer\":\"LandingPage_contentContainer__2bmDl\",\"content\":\"LandingPage_content__zobQQ\",\"buttonContainer\":\"LandingPage_buttonContainer__1EZUl\"};"],"sourceRoot":""}