{"version":3,"sources":["Core/Stores/BaseStore.ts","Core/Views/Error2.tsx","Custom/Content/ProductSelector/diagram_overlap.png","Custom/Content/ProductSelector/diagram_delcote_delglaze.png","Custom/ViewModels/InitViewModel.ts","AppErrorBoundary.tsx","Core/Components/Loader.tsx","Core/Components/General/TextFieldMemo.tsx","Core/CoreIndex.tsx","Core/Utils/App/GoogleAnalyticsUtils.ts","Core/Components/Styles/index.ts","Core/Components/General/Show.tsx","Core/Utils/React/ElementId.ts","Core/Utils/Hooks/UseReactRouter.ts","Core/Utils/Hooks/UseTimeout.ts","Core/Utils/index.ts","Custom/Stores/Domain/AccountStores.ts","Custom/Models/Domain/UserAccess/QuoteUserDetailsDTO.ts","Custom/Stores/Domain/ErrorStore.ts","Custom/Stores/DomainStores.ts","Custom/Content/User/pricing_tool_banner_deep-768x346.jpg","Core/Utils/Utils.ts","Custom/Content/User/pricing_tool_banner_deep.jpg","Custom/Content/User/budget_quote_UPDATE4-300x69.png","Custom/Content/User/budget_quote_UPDATE4-370x85.png","Custom/Content/User/budget_quote_UPDATE4.png","Custom/Content/User/Oldham-Project-5.jpg","Custom/Content/User/Oldham-Project-5-300x200.jpg","Custom/Content/User/Oldham-Project-5-370x247.jpg","Custom/Content/User/marketing-consent-icon.png","Custom/Content/ProductSelector/key_a.png","Custom/Content/ProductSelector/key_b.png","Custom/Content/ProductSelector/gutter.png","Custom/Content/ProductSelector/highlight_delcote_gs.png","Custom/Content/ProductSelector/highlight_delcote_gs_hover.png","Custom/Content/ProductSelector/highlight_delcote_gs_selected.png","Custom/Content/ProductSelector/highlight_plygene.png","Custom/Content/ProductSelector/highlight_plygene_hover.png","Custom/Content/ProductSelector/highlight_plygene_selected.png","Custom/Content/ProductSelector/gutter_only_sprite.png","Custom/Content/ProductSelector/roof_only_sprite.png","Custom/Content/ProductSelector/roof_gutter_sprite.png","Core/ViewModels/ViewModelBase.ts","Custom/StylesAppSpecific/AppStyling.ts","Custom/Stores/index.ts","Custom/Models/index.js","Core/Stores/FormLockConcurrencyHubStore.ts","Core/Stores/CoreStore.ts","Custom/Stores/Stores.ts","Custom/Models/GenericIncludeDeleted.ts","Custom/Models/SortDirection.ts","serviceWorker.ts","Custom/Utils/sorting.ts","Custom/Utils/Utils.ts","Custom/Utils/window.ts","Custom/Utils/Validation.ts","Custom/Views/Layout.tsx","Custom/Views/UnsupportedBrowser.tsx","Custom/Views/UserAccess/UserPageHeader.tsx","Custom/Views/UserAccess/UserPageHeaderText.tsx","Core/ViewModels/AutoGridViewModel.ts","Core/Components/AutoGrid.tsx","Custom/Views/UserAccess/UserPageDescriptionGrid.tsx","Custom/Views/UserAccess/DescriptionBox.tsx","Custom/Views/UserAccess/DescriptionImagebox.tsx","Custom/Views/UserAccess/UserPageExplanationWrapper.tsx","Custom/Views/UserAccess/UserPageDescriptionControl.tsx","Custom/StylesAppSpecific/LinkVariants.ts","Custom/Views/UserAccess/BreadcrumbBox.tsx","Custom/Views/UserAccess/UserPageBreadcrumb.tsx","Custom/Views/UserAccess/UserAccessControl.tsx","Custom/StylesAppSpecific/TypographyVariants.ts","Core/Models/ModelBase.ts","Custom/Models/Domain/UserAccess/UserAccessModel.ts","Custom/ViewModels/UserAccessViewModel.ts","Custom/Views/UserAccess/BudgetQuoteBox.tsx","Custom/Views/UserAccess/ErrorBox.tsx","Custom/Views/Primitives/BQSPrimitivesStyle.ts","Custom/Views/Primitives/Buttons/BQSButton.tsx","Custom/Views/Primitives/Edits/BQSEdit.tsx","Custom/Views/UserAccess/UserPageDetails.tsx","Custom/Views/UserAccess/UserPage.tsx","Custom/Views/ProductSelector/ProductSelectorStyle.ts","Custom/StylesAppSpecific/EditVariants.ts","Custom/Views/ProductSelector/SubViews/EmailStyle.ts","Custom/Models/Domain/ProductSelector/Email.ts","Custom/ViewModels/ProductSelector/SubViewModels/EmailViewModel.ts","Custom/Views/Primitives/Row/BQSRow.tsx","Custom/Views/ProductSelector/SubViews/Email.tsx","Custom/Views/ProductSelector/SubViews/ResetStyle.ts","Custom/ViewModels/ProductSelector/SubViewModels/ResetViewModel.ts","Custom/Views/ProductSelector/SubViews/Reset.tsx","Custom/Views/ProductSelector/SubViews/GutterSystemStyle.ts","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/DelcoteProductsStyle.ts","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/DelcoteSubViews/DelcoteGSStyle.ts","Custom/Views/Primitives/Edits/BQSEditNumber.tsx","Custom/Views/Primitives/Selects/BQSSelect.tsx","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/DelcoteSubViews/DelcoteGS.tsx","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/DelcoteProducts.tsx","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/PlygeneProductsStyle.ts","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/PlygeneSubViews/PlygeneMoulded.tsx","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/PlygeneSubViews/PlygeneStandard.tsx","Custom/Views/Primitives/RadioButtons/BQSRadioButton.tsx","Custom/Views/Primitives/RadioButtons/BQSRadioButtons.tsx","Custom/Views/ProductSelector/SubViews/GutterSystemSubViews/PlygeneProducts.tsx","Custom/Views/ProductSelector/SubViews/GutterSystem.tsx","Custom/Views/ProductSelector/SubViews/ProductsStyle.ts","Custom/Views/ProductSelector/SubViews/Products.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemStyle.ts","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteProductsStyle.ts","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteSubViews/Delcote25Style.ts","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelglazeStyle.ts","Custom/Views/Primitives/CheckBoxes/BQSCheckBox.tsx","Custom/Views/Primitives/CheckBoxes/BQSCheckBoxes.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/Delglaze.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteSubViews/Delcote10.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteSubViews/Delcote25.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteSubViews/DelcoteAsbestosStyle.ts","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteSubViews/DelcoteAsbestos.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/DelcoteProducts.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/SeamsilProductsStyle.ts","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/SeamsilSubViews/Seamsil100Style.ts","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/SeamsilSubViews/Seamsil100.tsx","Custom/Views/ProductSelector/SubViews/RoofSystemSubViews/SeamsilProducts.tsx","Custom/Views/ProductSelector/SubViews/RoofSystem.tsx","Custom/Globals/AppUrls.ts","Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/DelcoteProductModels/DelcoteGS.ts","Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/DelcoteProducts.ts","Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/PlygeneProductModels/PlygeneMoulded.ts","Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/PlygeneProductModels/PlygeneStandard.ts","Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/PlygeneProducts.ts","Custom/Models/Domain/ProductSelector/SubModels/GutterSystem.ts","Custom/Models/Domain/ProductSelector/SubModels/Products.ts","Custom/Models/Domain/ProductSelector/SubModels/Quote.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProductModels/Delcote25.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProductModels/Delcote10.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProductModels/DelcoteAsbestos.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProducts.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/SeamsilProductModels/Seamsil100.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/SeamsilProducts.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/Delglaze.ts","Custom/Models/Domain/ProductSelector/SubModels/RoofSystem.ts","Custom/Models/Domain/ProductSelector/ProductSelectorModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/ProductsViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GuaranteeViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/DelcoteProductsViewModels/DelcoteGSViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/DelcoteProductsViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/PlygeneProductViewModels/PlygeneMouldedViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/PlygeneProductViewModels/PlygeneStandardViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/PlygeneProductsViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/ProductsCommonViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/QuoteItemViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/QuoteViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModels/Delcote10ViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModels/Delcote25ViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModels/DelcoteAsbestosViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/SeamsilProductsViewModels/Seamsil100ViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/SeamsilProductsViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel.ts","Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemViewModel.ts","Custom/ViewModels/ProductSelector/ProductSelectorViewModel.ts","Custom/Views/Primitives/Dialogs/BQSAlertDialogStyle.ts","Custom/Views/Primitives/Dialogs/BQSAlertDialog.tsx","Custom/Views/ProductSelector/ProductSelector.tsx","Custom/Views/Home.tsx","Custom/Views/CookieError.tsx","Core/Views/NotFound.tsx","AppRoutes.tsx","App.tsx","index.tsx","Core/ViewModels/index.ts","Core/Errors/HttpError.ts","Core/Errors/HttpForbiddenError.ts","Core/Errors/HttpUnauthorizedError.ts","Core/Utils/Axios/CheckHttpStatus.ts","Core/Errors/RequestError.ts","Core/Utils/Axios/HttpStatusToError.ts","Core/Utils/Axios/GetDefaultConfig.ts","Core/Utils/Axios/MergeDefaultConfig.ts","Core/Utils/Axios/index.ts","Core/Components/Styles/BaseStyles.ts"],"names":["BaseStore","stores","this","isLoadingCount","observable","computed","action","isLoaded","Container","styled","div","Error2","props","id","className","variant","color","error","href","defaultProps","module","exports","InitViewModel","MobX","InitData","getInitialState","a","Get","apiResult","runInAction","StoresInstance","init","payload","DataReady","wasSuccessful","afterUpdate","beforeUpdate","fieldName","value","ViewModelBase","AppErrorBoundary","state","hasError","info","console","log","toString","children","React","Loader","useState","show","setShow","useTimeout","delayBeforeShow","start","clear","useEffect","Grid","alignItems","container","direction","justify","spacing","style","minHeight","item","CircularProgress","Typography","loadingText","memo","rest","TextField","enforceActions","baseUrl","getBaseUrl","GlobalHistory","History","basename","listen","location","domain","coreStore","PageView","pathname","setTimeout","hash","window","element","document","querySelector","scrollIntoView","block","behavior","scrollTo","isDev","process","CoreIndex","viewModel","useObserver","IsLoading","IsErrored","sendEvent","args","GoogleAnalytics","event","pageview","path","trackerNames","title","Component","Error","cb","timeoutDelayMs","isTimeoutActive","setIsTimeoutActive","savedRefCallback","useRef","current","timeout","clearTimeout","stop","isActive","AccountStore","cookieName","initialState","useAdminGrids","appSettings","useAdminControlsLight","getUserState","isSubmitted","redirect","localStorage","removeItem","cookie","hasUserAccess","userEmail","e","indexOf","JSON","parse","retVal","undefined","getItem","data","parseCookie","email","projectName","displayName","telephone","company","allowMarketing","json","stringify","setItem","project","setUserState","ErrorStore","errorMessage1","errorMessage2","line1","line2","DomainStores","editableCopies","editableCopyRoutes","forEach","editableCopy","push","editableCopyRoute","showRoofOptions","showDelcoteGSOptions","showResetButton","content","errorDialogContent","openErrorDialog","getHistory","getParentObjectPath","split","getPath","splice","length","isEmptyOrWhitespace","text","trim","getApiUrl","apiurl","baseElements","getElementsByTagName","getAttribute","model","undoable","enableProxy","history","match","validatorStorage","getFromContainer","MetadataStorage","meta","validator","Validator","proxy","createNewProxy","self","Proxy","get","target","receiver","val","Reflect","bind","set","prop","newValue","tmpValue","retval","internalSetModel","getType","TCtor","getContext","createProxy","isModelValid","valid","dot","_get","Valid","parseObjectProperties","obj","k","hasOwnProperty","setDecorators","getTargetValidationMetadatas","validateDecorators","filter","propertyName","reverse","message","validated","some","t","validateValueByMetadata","getValue","constraints","isValid","errorMessage","url","config","setIsLoading","axios","getConfig","then","response","headers","post","accessToken","newTokenResult","setLoginState","jwt","logout","CheckHttpStatus","catch","setIsErrored","setErrors","status","Post","requestConfig","MergeDefaultConfig","Authorization","createViewModel","key","Date","setValue","submit","reset","_isString","_isBoolean","setError","getError","setValid","getValid","setDirty","getDirty","setTouched","getTouched","screenWidth","isMobile","isTablet","isDesktop","Errors","breakpointTheme","createMuiTheme","breakpoints","values","xs","sm","md","lg","xl","defaultTheme","typography","fontFamily","join","h1","fontSize","fontWeight","lineHeight","h2","h3","h4","h5","down","h6","subtitle1","letterSpacing","subtitle2","body1","body2","button","caption","overline","palette","background","paper","default","primary","main","contrastText","secondary","overrides","MuiFormControlLabel","label","MuiFormLabel","root","MuiInput","MuiInputAdornment","MuiInputLabel","MuiLink","__export","m","p","Object","defineProperty","require","FormLockConcurrencyHubStore","signalRConcurrencyHubConnection","domainStores","registerFormLocks","formType","send","formRef","dispose","HubConnectionBuilder","withUrl","accessTokenFactory","signalRAccessToken","withAutomaticReconnect","nextRetryDelayInMilliseconds","context","build","accountStatus","enabled","useFormLockConcurrency","autorun","connectionQueue","invoke","registeredForms","initalFormLocks","lockedBy","index","formLocks","locked","token","ref","forms","setForms","disposers","disposer","getResetFormLocks","registerForms","setInitialFormLocks","getIsHubConnected","form","myLockedForms","unlockForm","HubConnectionState","Connected","lockForm","lockedByName","Disconnected","cid","connectionId","serverSessionId","connectedServer","onreconnected","onreconnecting","intervalId","setInterval","clearInterval","setSignalRAccessToken","on","onLock","onUnlock","off","CoreStore","Init","addEventListener","setWidth","Stores","body","clientWidth","page","SendEvent","StoresContext","createContext","GenericIncludeDeleted","includeDeleted","SortDirection","Boolean","hostname","defaultValueResolver","sortBy","array","sortDirection","sorter","valueResolver","b","valueA","valueB","toLocaleLowerCase","sortValue","Desc","createSorter","sort","isNullOrUndefined","applicationHeight","MinusGtrZero","property","validationOptions","object","registerDecorator","name","constructor","options","validate","relatedPropertyName","relatedValue","Layout","handleResize","getElementById","offsetHeight","parent","postMessage","frameHeight","Utils","observer","MutationObserver","observe","attributes","childList","characterData","subtree","disconnect","removeEventListener","areas","columns","gap","rows","area","Main","UnsupportedBrowser","UserPageHeader","Box","pricing_tool_banner_deep768x346","pricing_tool_banner_deep","UserPageHeaderText","AutoGridViewModel","FormatAreas","map","_instance","AutoGrid","desktopColumns","setColumns","desktopRows","setRows","desktopArea","setArea","setView","tabletArea","mobileColumns","mobileRows","mobileArea","tabletColumns","tabletRows","height","paddingTop","padding","alignContent","justifyContent","justifyItems","justifySelf","display","gridTemplateColumns","gridTemplateRows","gridRowGap","rowGap","gridColumnGap","columnGap","gridTemplateAreas","UserPageDescriptionGrid","DescriptionBox","budget_quote_300x69","budget_quote_370x85","budget_quote","DescriptionImageBox","OldhamProject_5_300x200","Oldham_Project_5_370x247","OldhamProject_5","UserPageDescriptionWrapper","UserPageDescriptionControl","LinkVariants","makeStyles","theme","rulertel","textDecoration","pointer","emaillink","BreadcrumbBox","UserPageBreadcrumb","linkClasses","Breadcrumbs","aria-label","Link","UserAccessControl","marketingConsentIcon","TypographyVariants","bold","margin","userExplanation","gform_title","gform_description","marginBottom","gfield_label","gfield_description","paddingRight","textAlign","productSelectorh1","paddingBottom","productSelectorh2","productSelectorUnderlineh2","position","bottom","left","width","productSelectorbody1","ModelBase","Dirty","Touched","_set","UserAccessModel","IsNotEmpty","IsEmail","Length","IsPhoneNumber","toDto","UserAccessViewModel","accountStore","isInError","Store","Validate","errors","convertToDto","result","haveSubmitted","GetUseAdminGrids","GetUseAdminControlsLight","isFieldValid","BudgetQuoteBox","ErrorBox","BQSButtonStyle","backgroundColor","lighten","BQSCheckBoxesStyle","BQSCheckBoxStyle","BQSEditNumberStyle","transform","marginTop","border","BQSEditStyle","BQSRadioButtonsStyle","BQSRadioButtonStyle","BQSRowStyle","BQSSelectStyle","BQSButton","buttonClasses","onClick","execute","isSubmit","preventDefault","Button","classes","classNames","disabled","canExecute","startIcon","type","BQSEdit","editClasses","onChange","validationMessage","helperText","ReactHtmlParser","InputLabelProps","shrink","InputProps","disableUnderline","placeholder","isPassword","UserPageDetails","useContext","typopgraphyClasses","isInerror","isInErrorClass","setDisplayName","displayNameError","setEmail","emailError","setTelephone","telephoneError","setCompany","companyError","UserPage","ProductSelectorStyle","flexDirection","flex","EditVariants","bqsEditFlex","bqsEditNumberFlex","bqsEditNumberNoLabel","bqsEditNumberReadOnly","bqsEditNumberStandard","bqsEditNumberLarge","bqsKeyAAdornment","backgroundImage","KeyAImage","backgroundPosition","backgroundRepeat","backgroundSize","bqsKeyBAdornment","KeyBImage","bqsSuperScriptAdornment","EmailStyle","borderBottom","bqsEditRow","up","maxWidth","bqsButton","EmailModel","EmailViewModel","callback","productSelectorModel","domainStore","errorStore","sendEmailCallback","setHaveSubmitted","productErrors","setEmailData","resetUser","BQSRow","rowClasses","getClassName","childrenWithProps","Children","child","cloneElement","Fragment","renderChildrenWithProps","Email","sendEmail","editVariants","typopgraphyVariants","emailStyle","setProjectName","projectNameError","canExecuteSend","ResetStyle","bqsResetButton","right","ResetViewModel","Reset","GutterSystemStyle","products","gutterimage","radioButtons","radioButton","borderRadius","marginRight","radioButtonPlygene","PlygeneCheckedImage","PlygeneImage","PlygeneHoverImage","radioButtonDelcote","DelcoteGSCheckedImage","DelcoteGSImage","DelcoteGSHoverImage","DelcoteProductsStyle","specificationLink","DelcoteGSStyle","editsContainer","selectContainer","textContainer","basecoatSelection","BQSEditNumber","Number","onBlur","min","minimumValue","max","maximumValue","renderEndAdornment","endAdornment","InputAdornment","renderStartAdornment","startAdornment","inputProps","BQSSelect","selectClasses","showColourPDFLink","showColourLink","getDisplayName","Autocomplete","disableClearable","getOptionLabel","groupBy","renderInput","params","DelcoteGS","delcoteGSStyle","setTopcoatColour","option","group","colours","topcoatColourSelection","basecoatColourSelection","commonViewModel","setGutterLengthMeterage","gutterLengthMeterage","setGirth","girth","setGutterJoints","gutterJoints","DelcoteProducts","delcoteProductsStyle","canDisplaySubstrateUndefined","DelcoteGSViewModel","PlygeneProductsStyle","PlygeneMoulded","PlygeneStandard","BQSRadioButton","radioButtonClasses","FormControlLabel","control","Radio","labelPlacement","displayNamePlacement","BQSRadioButtons","isValidationMessageNotEmpty","FormControl","component","FormLabel","RadioGroup","row","FormHelperText","PlygeneProducts","plygeneProductsStyle","setProductSelection","productSelection","canDisplayMoulded","PlygeneMouldedViewModel","canDisplayStandard","PlygeneStandardViewModel","GutterSystem","gutterSystemStyle","CardMedia","image","GutterImage","canDisplayPlygeneProducts","ProductsCommonViewModel","PlygeneProductsViewModel","canDisplayDelcoteProducts","DelcoteProductsViewModel","gutterOnlySpriteUrl","GutterOnlySprite","roofOnlySpriteUrl","RoofOnlySprite","roofGutterSpriteUrl","RoofGutterSprite","ProductsStyle","radioButtonRoofOnly","radioButtonGutterOnly","radioButtonRoofGutter","Products","productsStyle","RoofSystemStyle","Delcote25Style","flexWrap","overlapimage","delcotedelglazeimage","DelglazeStyle","BQSCheckBox","checkBoxClasses","checked","Checkbox","isSelected","BQSCheckBoxes","FormGroup","Delglaze","delglazeStyle","setDelglazeProductRequired","productRequired","canDisplayDelglazeRooflightAreaMeterage","setRooflightSquareMeterage","rooflightSquareMeterage","Delcote10","delcote10Style","DiagramOverlapImage","setOverlapMeterage","overlapMeterage","setEndlapMeterage","endlapMeterage","setProfileCorrectionPercentage","profileCorrectionPercentage","DiagramDelcoteDelglazeImage","setRoofSquareMeterage","roofSquareMeterage","setFixingCount","fixingCount","setRidgeFlashingsEtcMeterage","ridgeFlashingsEtcMeterage","setDelcoteTopcoatColour","topcoatColours","colourValidationMessage","delglazeViewModel","Delcote25","delcote25Style","DelcoteAsbestosStyle","DelcoteAsbestos","delcoteAsbestosStyle","canDisplayMetal10","Delcote10ViewModel","canDisplayMetal25","Delcote25ViewModel","canDisplayFibreCement","DelcoteAsbestosViewModel","SeamsilProductsStyle","Seamsil100Style","Seamsil100","seamsil100Style","SeamsilProducts","seamsilProductsStyle","Seamsil100ViewModel","RoofSystem","roofSystemStyle","canDisplayDelcote","DelglazeViewModel","canDisplaySeamsil","SeamsilProductsViewModel","Server","Admin","ResetFailedLoginAttemptsCount","Quote","CalculateQuote","GetProductData","SendEmail","DelcoteGSModel","replace","local","specialColours","colour","variantId","variantName","utils","Asc","basecoatColourId","basecoatColourName","boltsPerJoint","topcoatColourId","topcoatColourName","version","DelcoteProductsModel","delcoteGSModel","delcoteGS","PlygeneMouldedModel","PlygeneStandardModel","PlygeneProductsModel","plygeneMouldedModel","plygeneStandardModel","plygeneMoulded","plygeneStandard","GutterSystemModel","delcoteProductsModel","plygeneProductsModel","guarantee","delcoteProducts","plygeneProducts","ProductsModel","QuoteModel","gutterProducts","roofProducts","gutterQuoteItems","roofQuoteItems","Delcote25Model","ValidatePromise","basecoatColours","newColour","baseIndex","findIndex","Delcote10Model","colourId","colourName","DelcoteAsbestosModel","delcote10Model","delcote25Model","delcoteAsbestosModel","delcote10","delcote25","delcoteAsbestos","Seamsil100Model","SeamsilProductsModel","seamsil100Model","seamsil100","DelglazeModel","RoofSystemModel","seamsilProductsModel","delglazeModel","getProductSelection","seamsilProducts","delglaze","ProductSelectorModel","gutterSystemModel","productsModel","quoteModel","roofSystemModel","setSubmitted","gutterSystemSelected","roofSystemSelected","validationErrors","gutterSystem","roofSystem","quoteRequestGutter","delcoteGSGutterCoating","plygeneMouldedGutterLiningSystem","plygeneStandardGutterLiningSystem","quoteRequestRoof","delcote10MetalRoofCoating","delcote25MetalRoofCoating","delcoteAsbestosRoofCoating","delglazeRooflightTreatment","ProductsViewModel","find","GuaranteesViewModel","generateQuote","fromDto","SetErrorMessage","selection","oldTopcoatColourSelection","delcoteGSViewModel","plygeneMouldedViewModel","plygeneStandardViewModel","GutterSystemViewModel","delcoteProductsViewModel","plygeneProductsViewModel","productsCommonViewModel","updateSource","originalSource","QuoteItemViewModel","canEditUnits","productName","productStackUnit","unitPrice","toFixed","units","QuoteViewModel","gutterSystemViewModel","productViewModels","product","gp","includes","totalPrice","priceOnApplication","HasSubmitted","netRoofSquareMeterage","delcote10ViewModel","delcote25ViewModel","delcoteAsbestosViewModel","seamsil100ViewModel","c","setTopcoatColourSelection","RoofSystemViewModel","seamsilProductsViewModel","ProductSelectorViewModel","guaranteesViewModel","productViewModel","quoteViewModel","roofSystemViewModel","getProductData","fromProductDataDto","delcoteGSColours","delcote10TopcoatColours","delcote25BasecoatColours","delcote25TopcoatColours","delcoteAsbestosBasecoatColours","delcoteAsbestosTopcoatColours","seamsil100TopcoatColours","setShowSendEmail","userDetails","getUserDetailsForEmail","request","clearQuote","canShowSendEmail","BQSAlertDialogStyle","minWidth","titletext","description","btn","BQSAlertDialog","bqsAlertDialogStyle","Dialog","open","canDisplay","onClose","aria-labelledby","aria-describedby","DialogTitle","DialogContent","DialogContentText","displayContentLine1","displayContentLine2","DialogActions","ProductSelector","productSelectorStyle","canDisplayRoofSystem","canDisplayGutterSystem","canDisplayResetSection","Close","Section1","Section2","Home","storesContext","IE11","CookieError","xmlns","viewBox","fill","d","RouterLink","to","NotFound","AppRoutes","exact","setConfig","showReactDomPatchNotification","App","StylesProvider","injectFirst","CssBaseline","ReactDOM","render","navigator","serviceWorker","ready","registration","unregister","HttpError","httpStatusCode","targetPrototype","prototype","setPrototypeOf","HttpForbiddenError","HttpUnauthorizedError","httpStatusText","statusText","GetDefaultConfig","validateStatus","baseURL","configs","_merge","SuperDiv","pb","pt","mt","mb","inline","frGetter","CSSGrid","flow","minRowHeight","formatAreas","Cell","top","center","middle","ShoothillPaper","BounceAnimation","Paper","keyframes","DotWrapper","Dot","delay","Row1040","LeftBox"],"mappings":"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","file":"static/js/main.59f19bce.chunk.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport { Stores } from \"../../Custom/Stores/Stores\";\r\n// Libs\r\n\r\n// App\r\nimport { observable, computed, action } from \"mobx\";\r\n\r\nexport class BaseStore {\r\n public stores: Stores | null | undefined;\r\n @observable protected isLoadingCount = 0;\r\n @observable public isLoaded = true;\r\n @computed public get isLoading() {\r\n return this.isLoadingCount > 0;\r\n }\r\n public constructor(stores?: Stores) {\r\n if (stores) this.stores = stores;\r\n }\r\n\r\n @action protected setIsLoading = () => {\r\n this.isLoadingCount++;\r\n this.isLoaded = false;\r\n };\r\n @action protected unsetIsLoading = () => {\r\n this.isLoadingCount--;\r\n if (this.isLoadingCount === 0) {\r\n this.isLoaded = true;\r\n }\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport \"./Error.scss\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport HomeIcon from \"@material-ui/icons/HomeOutlined\";\r\nimport { defaultTheme } from \"../../Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const Container = styled.div`\r\n height: 100vh;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n background: #333333;\r\n\r\n #error {\r\n margin-bottom: 1rem;\r\n font-size: 2rem;\r\n font-weight: 500;\r\n text-transform: uppercase;\r\n letter-spacing: 0.075em;\r\n color: #c94d4d;\r\n -webkit-animation: pulse 4s infinite alternate;\r\n animation: pulse 4s infinite alternate;\r\n position: relative;\r\n }\r\n @-webkit-keyframes pulse {\r\n from {\r\n opacity: 0.5;\r\n }\r\n 50% {\r\n opacity: 0.5;\r\n }\r\n }\r\n @keyframes pulse {\r\n from {\r\n opacity: 0.5;\r\n }\r\n 50% {\r\n opacity: 0.5;\r\n }\r\n }\r\n #error::before {\r\n content: \"\";\r\n width: 0.75rem;\r\n height: 50vh;\r\n margin-bottom: 0.75em;\r\n position: absolute;\r\n left: 50%;\r\n bottom: 100%;\r\n -webkit-transform: translateX(-50%);\r\n transform: translateX(-50%);\r\n background: -webkit-gradient(linear, left top, left bottom, color-stop(60%, rgba(255, 255, 255, 0.1)), to(transparent));\r\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0.1) 60%, transparent 100%);\r\n }\r\n\r\n #desc {\r\n margin: 2em 0 1em;\r\n }\r\n\r\n .error-num,\r\n .error-num__clip,\r\n .error-num__clip::before,\r\n .error-num__clip-left {\r\n position: relative;\r\n font-size: 10rem;\r\n font-family: \"Oswald\";\r\n letter-spacing: -0.01em;\r\n color: white;\r\n -webkit-animation: colorSplit 1.25s steps(2, end) infinite;\r\n animation: colorSplit 1.25s steps(2, end) infinite;\r\n }\r\n @-webkit-keyframes colorSplit {\r\n 25% {\r\n text-shadow: -0.02em 0 0 #ed008c, 0.025em 0 0 #0087ef;\r\n }\r\n 75% {\r\n text-shadow: -0.035em 0 0 #ed008c, 0.04em 0 0 #0087ef;\r\n }\r\n }\r\n @keyframes colorSplit {\r\n 25% {\r\n text-shadow: -0.02em 0 0 #ed008c, 0.025em 0 0 #0087ef;\r\n }\r\n 75% {\r\n text-shadow: -0.035em 0 0 #ed008c, 0.04em 0 0 #0087ef;\r\n }\r\n }\r\n .error-num__clip,\r\n .error-num__clip::before,\r\n .error-num__clip-left {\r\n position: absolute;\r\n top: 0;\r\n left: -2px;\r\n z-index: 10;\r\n color: #333;\r\n overflow: visible;\r\n -webkit-clip-path: polygon(0% 0%, 100% 0, 100% 25%, 0 25%, 0 30%, 100% 30%, 100% 50%, 0 50%, 0 60%, 100% 60%, 100% 65%, 0 65%, 0 80%, 100% 80%, 100% 85%, 0 85%, 0% 0%);\r\n clip-path: polygon(0% 0%, 100% 0, 100% 25%, 0 25%, 0 30%, 100% 30%, 100% 50%, 0 50%, 0 60%, 100% 60%, 100% 65%, 0 65%, 0 80%, 100% 80%, 100% 85%, 0 85%, 0% 0%);\r\n -webkit-animation: glitch 1s steps(2, start) infinite;\r\n animation: glitch 1s steps(2, start) infinite;\r\n }\r\n @-webkit-keyframes glitch {\r\n 30% {\r\n left: 0;\r\n }\r\n to {\r\n left: 0;\r\n }\r\n }\r\n @keyframes glitch {\r\n 30% {\r\n left: 0;\r\n }\r\n to {\r\n left: 0;\r\n }\r\n }\r\n .error-num__clip::before,\r\n .error-num__clip-left::before {\r\n content: \"500\";\r\n left: 0.05em;\r\n color: white;\r\n z-index: 9;\r\n -webkit-clip-path: polygon(0% 0%, 100% 0, 100% 26%, 0 26%, 0 29%, 100% 29%, 100% 51%, 0 51%, 0 59%, 100% 59%, 100% 66%, 0 66%, 0 79%, 100% 79%, 100% 86%, 0 86%, 0% 0%);\r\n clip-path: polygon(0% 0%, 100% 0, 100% 26%, 0 26%, 0 29%, 100% 29%, 100% 51%, 0 51%, 0 59%, 100% 59%, 100% 66%, 0 66%, 0 79%, 100% 79%, 100% 86%, 0 86%, 0% 0%);\r\n }\r\n`;\r\ntype Props = {\r\n error?: string;\r\n};\r\nexport const Error2: React.FC = (props: Props) => {\r\n return (\r\n \r\n
Error
\r\n
\r\n 500\r\n
500
\r\n
\r\n \r\n Uh oh, there seems to be a problem.\r\n \r\n \r\n {props.error}\r\n \r\n \r\n Let me help you find{\" \"}\r\n \r\n \r\n way out\r\n \r\n {/**/}\r\n {/*\t*/}\r\n {/*\t\ta way out*/}\r\n {/*\t*/}\r\n {/**/}\r\n
\r\n );\r\n};\r\nError2.defaultProps = {\r\n error: \"Unknown error\",\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/diagram_overlap.007b9d8e.png\";","module.exports = __webpack_public_path__ + \"static/media/diagram_delcote_delglaze.fb42bebb.png\";","import * as MobX from \"mobx\";\r\nimport { InitialState } from \"../Models\";\r\nimport { AccountStatus, ApiResult } from \"Core/Models\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\nimport { runInAction } from \"mobx\";\r\nimport { StoresInstance } from \"../Stores\";\r\n\r\nexport class InitViewModel extends ViewModelBase {\r\n @MobX.observable\r\n public DataReady: boolean = false;\r\n public InitData: InitialState = {} as InitialState;\r\n constructor() {\r\n super({});\r\n }\r\n\r\n public getInitialState = async (): Promise => {\r\n let apiResult = await this.Get(\"/api/initialstate/getinitialstatejson\");\r\n runInAction(() => {\r\n StoresInstance.init(apiResult.payload);\r\n this.InitData = apiResult.payload;\r\n this.DataReady = true;\r\n });\r\n return apiResult.wasSuccessful;\r\n };\r\n\r\n public isFieldValid(fieldName: \"emailAddress\" | \"password\", value: any): boolean {\r\n return true;\r\n }\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n}\r\n","import * as MobX from \"mobx\";\r\nimport * as React from \"react\";\r\nimport * as ReactRouterDom from \"react-router-dom\";\r\nimport { getHistory } from \"./Core/Utils/Utils\";\r\nimport { Error2 } from \"./Core/Views/Error2\";\r\n\r\ninterface ErrorBoundaryProps {\r\n hasError: boolean;\r\n error: string;\r\n}\r\nexport class AppErrorBoundary extends React.Component<{}, ErrorBoundaryProps> {\r\n //@MobX.observable private error: any | undefined = undefined;\r\n constructor(props: ErrorBoundaryProps) {\r\n super(props);\r\n this.state = { hasError: false, error: \"\" };\r\n }\r\n static getDerivedStateFromError(error: any) {\r\n // Update state so the next render will show the fallback UI.\r\n return { hasError: true, error: error.toString() };\r\n }\r\n public componentDidCatch(error: any, info: any) {\r\n //this.setError(error.toString());\r\n console.log(\"Error => \" + error.toString());\r\n }\r\n\r\n public render() {\r\n // AJ: ErrorBoundaries don't catch event/promise errors... so no point handling them here...\r\n // AJ: https://reactjs.org/docs/error-boundaries.html#how-about-event-handlers\r\n if (this.state.hasError) {\r\n return (\r\n \r\n // return (\r\n // \t
\r\n // \t\t
\r\n // \t\t\t×\r\n // \t\t\t

App Crashed

\r\n // \t\t\t

Something has gone horribly wrong.

\r\n // \t\t\t{this.state.error}\r\n // \t\t
\r\n // \t
\r\n );\r\n //getHistory().push(\"/unknownerror\");\r\n //return ;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n\r\n //@MobX.action private setError = (error: any) => (this.error = error);\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { Grid, CircularProgress, Typography } from \"@material-ui/core\";\r\nimport { useTimeout } from \"Core/Utils\";\r\n\r\ninterface Props {\r\n delayBeforeShow?: number;\r\n loadingText?: string;\r\n}\r\n\r\nexport const Loader = (props: Props) => {\r\n const [show, setShow] = useState(false);\r\n const { start, clear } = useTimeout(() => {\r\n setShow(true);\r\n }, props.delayBeforeShow);\r\n\r\n useEffect(() => {\r\n start();\r\n return () => {\r\n clear();\r\n };\r\n }, []);\r\n\r\n if (show) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.loadingText}\r\n \r\n \r\n );\r\n } else return <>;\r\n};\r\n\r\nLoader.defaultProps = {\r\n delayBeforeShow: 0,\r\n loadingText: \"Loading...\",\r\n};\r\n","import React from \"react\";\r\nimport { TextField } from \"@material-ui/core\";\r\nimport { TextFieldProps } from \"@material-ui/core/TextField\";\r\n\r\nexport const TextFieldMemo = React.memo((props: TextFieldProps) => {\r\n const { children, ...rest } = props;\r\n return {children};\r\n});\r\n","//EN Do not remove default theme from here\r\nimport \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\n//EN: To support IE 11\r\n// Uncomment the two lines below\r\n// Revert MobX to 4.12.0\r\n// Delete node_modules directory and reinstall\r\n//import \"react-app-polyfill/ie11\";\r\n//import \"react-app-polyfill/stable\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport * as MobX from \"mobx\";\r\nimport \"index.scss\";\r\nimport App from \"App\";\r\nimport * as History from \"history\";\r\nimport { StoresInstance } from \"../Custom/Stores\";\r\nimport { getBaseUrl } from \"./Utils/Utils\";\r\nimport { InitViewModel } from \"../Custom/ViewModels/InitViewModel\";\r\nimport { AppErrorBoundary } from \"../AppErrorBoundary\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport { Error2 } from \"./Views/Error2\";\r\nimport { Loader } from \"./Components\";\r\n\r\nMobX.configure({ enforceActions: \"observed\" });\r\n\r\nconst baseUrl: string | undefined = getBaseUrl();\r\nexport const GlobalHistory = History.createBrowserHistory({\r\n basename: baseUrl,\r\n});\r\nGlobalHistory.listen((location: any) => {\r\n if (StoresInstance && StoresInstance.domain) {\r\n StoresInstance.coreStore.PageView(location.pathname);\r\n }\r\n // Use setTimeout to make sure this runs after React Router's own listener\r\n setTimeout(() => {\r\n // Keep default behavior of restoring scroll position when user:\r\n // - clicked back button\r\n // - clicked on a link that programmatically calls `history.goBack()`\r\n // - manually changed the URL in the address bar (here we might want\r\n // to scroll to top, but we can't differentiate it from the others)\r\n if (location.action === \"POP\") {\r\n return;\r\n }\r\n // In all other cases, check fragment/scroll to top\r\n let hash = window.location.hash;\r\n if (hash) {\r\n let element = document.querySelector(hash);\r\n if (element) {\r\n element.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\r\n }\r\n } else {\r\n window.scrollTo(0, 0);\r\n }\r\n });\r\n});\r\n\r\nexport const IsDevMode: boolean = process.env.NODE_ENV === \"development\";\r\n(window as any).isDev = IsDevMode;\r\n// const devTools: JSX.Element | null = isDev ? : null;\r\n\r\ntype Props = {\r\n children: React.ReactNode;\r\n};\r\nexport const CoreIndex: React.FC = (props: Props) => {\r\n const [viewModel] = useState(() => new InitViewModel());\r\n useEffect(() => {\r\n let _ = viewModel.getInitialState();\r\n }, []);\r\n\r\n const getRender = () => {\r\n if (viewModel.IsLoading) {\r\n // EN: Delayed in code behind so we can see the loading text\r\n return ;\r\n } else if (viewModel.IsErrored) {\r\n return ;\r\n }\r\n\r\n if (viewModel.DataReady) {\r\n return {props.children};\r\n }\r\n return <>;\r\n };\r\n\r\n return useObserver(() => {\r\n return <>{getRender()};\r\n });\r\n};\r\n","import GoogleAnalytics, { EventArgs, FieldsObject, TrackerNames } from \"react-ga\";\r\n\r\n//export { EventArgs, FieldsObject, TrackerNames };\r\n\r\n// GoogleAnalytics.initialize([\r\n// \t{\r\n// \t\ttrackingId: \"UA-1852243-71\", //UA-1852243-67\r\n// \t\tgaOptions: {\r\n// \t\t\tname: \"PPEExchange\",\r\n// \t\t},\r\n// \t},\r\n// ]);\r\nexport const Init = (UA: string) => {\r\n GoogleAnalytics.initialize(UA);\r\n GoogleAnalytics.set({ anonymizeIp: true });\r\n};\r\n\r\n///\r\n/// sendEvent\r\n///\r\n///https://developers.google.com/analytics/devguides/collection/analyticsjs/events\r\nexport const sendEvent = (args: EventArgs) => {\r\n //let eventArgs: EventArgs = {\r\n // category: category,\r\n // action: action,\r\n // label: label,\r\n // nonInteraction: nonInteraction,\r\n // transport: transport,\r\n // value: value\r\n //};\r\n //if (args != undefined && args.transport == undefined) {\r\n // `args.transport` must be either one of these values: `beacon`, `xhr` or `image`\r\n // args.transport = window.location.pathname;\r\n //}\r\n\r\n GoogleAnalytics.event(args);\r\n};\r\n\r\n///\r\n/// set\r\n///\r\nexport const set = (fieldsObject: FieldsObject, trackerNames?: TrackerNames) => {\r\n GoogleAnalytics.set({\r\n fieldsObject,\r\n trackerNames,\r\n });\r\n};\r\n\r\n///\r\n/// pageview\r\n///\r\nexport const pageview = (path: string, trackerNames?: TrackerNames, title?: string): void => {\r\n GoogleAnalytics.pageview(path);\r\n};\r\n","export * from \"./BaseStyles\";\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport { Box } from \"@material-ui/core\";\r\n\r\ninterface Props {\r\n iff: boolean;\r\n renderToDom?: boolean;\r\n}\r\nexport const Show: React.FC = (props) => {\r\n if (props.iff) {\r\n return <>{props.children};\r\n } else if (props.renderToDom) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n }\r\n return <>;\r\n};\r\nShow.defaultProps = {\r\n iff: false,\r\n renderToDom: false,\r\n};\r\n","import React from \"react\";\r\n\r\nlet defaultPrefix = \"id\";\r\nlet lastId = 0;\r\n\r\nexport interface Props {\r\n defaultPrefix?: string;\r\n}\r\n\r\nexport class ResetElementIdGenerator extends React.Component {\r\n public constructor(props: Props) {\r\n super(props);\r\n\r\n lastId = 0;\r\n\r\n if (props.defaultPrefix != null) {\r\n defaultPrefix = props.defaultPrefix;\r\n }\r\n }\r\n\r\n public render() {\r\n return null;\r\n }\r\n}\r\n\r\nexport const getElementId = (prefix?: string) => `${prefix || defaultPrefix}_${++lastId}`;\r\n","import { LocationState } from \"history\";\r\nimport { Context, useContext, useEffect } from \"react\";\r\nimport { __RouterContext, RouteComponentProps, StaticContext } from \"react-router\";\r\nimport { useForceUpdate } from \"./UseForceUpdate\";\r\n\r\ntype AnyContext = Context>;\r\n\r\nconst INCORRECT_VERSION_ERROR: Error = new Error(\"use-react-router may only be used with react-router@^5.\");\r\n\r\nconst MISSING_CONTEXT_ERROR: Error = new Error(\"useReactRouter may only be called within a context.\");\r\n\r\nexport function useRouter

(): RouteComponentProps {\r\n // If this version of react-router does not support Context,\r\n if (!__RouterContext) {\r\n throw INCORRECT_VERSION_ERROR;\r\n }\r\n\r\n // If the react-router Context is not a parent Component,\r\n const context: RouteComponentProps = useContext>((__RouterContext as AnyContext) as Context>);\r\n if (!context) {\r\n throw MISSING_CONTEXT_ERROR;\r\n }\r\n\r\n const forceUpdate: VoidFunction = useForceUpdate();\r\n useEffect((): VoidFunction => context.history.listen(forceUpdate), [context]);\r\n return context;\r\n}\r\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\ninterface UseTimeoutHandler {\r\n start: () => any;\r\n clear: () => any;\r\n stop: () => any;\r\n isActive: boolean;\r\n}\r\n/**\r\n *\r\n * @param cb\r\n * @param timeoutDelayMs\r\n *\r\n * Usage: const { start, clear } = useTimeout(doAlert, 2000);\r\n *\r\n */\r\nfunction useTimeout(cb: () => void, timeoutDelayMs: number = 0): UseTimeoutHandler {\r\n const [isTimeoutActive, setIsTimeoutActive] = useState(false);\r\n const savedRefCallback = useRef<() => any>();\r\n\r\n useEffect(() => {\r\n savedRefCallback.current = cb;\r\n }, [cb]);\r\n\r\n function clear() {\r\n setIsTimeoutActive(false);\r\n }\r\n\r\n function start() {\r\n setIsTimeoutActive(true);\r\n }\r\n\r\n useEffect(() => {\r\n function callback() {\r\n savedRefCallback.current && savedRefCallback.current();\r\n clear();\r\n }\r\n\r\n if (isTimeoutActive) {\r\n const timeout = window.setTimeout(callback, timeoutDelayMs);\r\n return () => {\r\n window.clearTimeout(timeout);\r\n };\r\n }\r\n }, [isTimeoutActive]);\r\n\r\n return {\r\n clear,\r\n start,\r\n stop: clear,\r\n isActive: isTimeoutActive,\r\n };\r\n}\r\n\r\nexport { useTimeout };\r\n","import * as Axios from \"./Axios\";\r\nexport { Axios };\r\nexport * from \"./App\";\r\nexport * from \"./Axios\";\r\nexport * from \"./Format\";\r\nexport * from \"./React\";\r\nexport * from \"./Search\";\r\nexport * from \"./Hooks\";\r\n","import * as Utils from \"Core/Utils/Utils\";\r\n// App\r\nimport { BaseStore } from \"../../../Core/Stores/BaseStore\";\r\nimport { action, computed, observable } from \"mobx\";\r\nimport { Stores } from \"../Stores\";\r\nimport { InitialState } from \"Custom/Models\";\r\nimport { UserAccessModelDTO } from \"Custom/Models/Domain/UserAccess/UserAccessModel\";\r\nimport { QuoteUserDetailsDTO, GetDefaultQuoteUserDetailsDTO } from \"Custom/Models/Domain/UserAccess/QuoteUserDetailsDTO\";\r\n\r\nexport class AccountStore extends BaseStore {\r\n private readonly cookieName: string = \".bsqauth\";\r\n @observable public hasUserAccess: boolean = false;\r\n @observable public userEmail: string = \"\";\r\n @observable public projectName: string = \"\";\r\n\r\n @observable public useAdminGrids: boolean = false;\r\n @observable public useAdminControlsLight: boolean = false;\r\n @observable public isSubmitted: boolean = false;\r\n\r\n public constructor() {\r\n super();\r\n }\r\n\r\n public init(stores: Stores, initialState: InitialState) {\r\n this.useAdminGrids = initialState.appSettings.useAdminGrids === \"true\";\r\n this.useAdminControlsLight = initialState.appSettings.useAdminControlsLight === \"true\";\r\n // see if we have data already\r\n const data = this.getUserState();\r\n }\r\n\r\n @action\r\n public Logout = (redirect: boolean = false): void => {\r\n try {\r\n localStorage.removeItem(this.cookieName);\r\n document.cookie = \".refreshtoken= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\r\n this.hasUserAccess = false;\r\n this.userEmail = \"\";\r\n\r\n if (redirect) {\r\n window.location.href = \"/\";\r\n }\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n };\r\n\r\n @action\r\n private parseCookie = (cookie: string): UserAccessModelDTO | undefined => {\r\n let retVal: UserAccessModelDTO | undefined = undefined;\r\n retVal = JSON.parse(cookie);\r\n return retVal;\r\n };\r\n\r\n @action\r\n public getUserState = () => {\r\n let retVal: UserAccessModelDTO | undefined = undefined;\r\n try {\r\n let cookie: string = localStorage.getItem(this.cookieName) as string;\r\n\r\n if (cookie && cookie !== \"undefined\" && cookie !== \"null\") {\r\n const data: UserAccessModelDTO | undefined = this.parseCookie(cookie);\r\n\r\n if (data === undefined) {\r\n this.hasUserAccess = false;\r\n retVal = data;\r\n return;\r\n }\r\n\r\n this.hasUserAccess = true;\r\n this.userEmail = data.email;\r\n }\r\n return retVal;\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n };\r\n\r\n @action\r\n public getUserDetailsForEmail = () => {\r\n try {\r\n let retVal: QuoteUserDetailsDTO = GetDefaultQuoteUserDetailsDTO();\r\n let cookie: string = localStorage.getItem(this.cookieName) as string;\r\n\r\n if (cookie && cookie !== \"undefined\" && cookie !== \"null\") {\r\n const data: UserAccessModelDTO | undefined = this.parseCookie(cookie);\r\n\r\n if (data === undefined) {\r\n this.hasUserAccess = false;\r\n return retVal;\r\n }\r\n\r\n retVal.allowMarketing = data.allowMarketing;\r\n retVal.email = data.email;\r\n retVal.displayName = data.displayName;\r\n retVal.projectName = this.projectName;\r\n retVal.telephone = data.telephone;\r\n retVal.company = data.company;\r\n }\r\n return retVal;\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n };\r\n\r\n @action\r\n public setUserState = (data: UserAccessModelDTO) => {\r\n try {\r\n localStorage.removeItem(this.cookieName);\r\n document.cookie = \".refreshtoken= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\r\n this.hasUserAccess = false;\r\n\r\n if (data !== undefined) {\r\n const json = JSON.stringify(data);\r\n localStorage.setItem(this.cookieName, json);\r\n this.hasUserAccess = true;\r\n this.userEmail = data.email;\r\n }\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n };\r\n\r\n @action\r\n public setEmailData = (email: string, project: string) => {\r\n try {\r\n let cookie: string = localStorage.getItem(this.cookieName) as string;\r\n\r\n if (cookie && cookie !== \"undefined\" && cookie !== \"null\") {\r\n const data: UserAccessModelDTO | undefined = this.parseCookie(cookie);\r\n\r\n if (data === undefined) {\r\n this.hasUserAccess = false;\r\n return;\r\n }\r\n // CMR Question asked as to whether we should do this or not.\r\n this.userEmail = email;\r\n data.email = email;\r\n this.projectName = project;\r\n this.setUserState(data);\r\n }\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n };\r\n\r\n @computed get GetUseAdminGrids(): boolean {\r\n return this.useAdminGrids;\r\n }\r\n\r\n @computed get GetUseAdminControlsLight(): boolean {\r\n return this.useAdminControlsLight;\r\n }\r\n\r\n @computed get HasSubmitted(): boolean {\r\n return this.isSubmitted;\r\n }\r\n\r\n @action\r\n public setSubmitted = (value: boolean): void => {\r\n this.isSubmitted = value;\r\n };\r\n\r\n @action\r\n public resetUser = (): void => {\r\n localStorage.removeItem(this.cookieName);\r\n document.cookie = \".refreshtoken= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\r\n this.hasUserAccess = false;\r\n this.userEmail = \"\";\r\n };\r\n}\r\n","import { UserAccessModelDTO } from \"./UserAccessModel\";\r\n\r\nexport interface QuoteUserDetailsDTO extends UserAccessModelDTO {\r\n projectName: string;\r\n}\r\n\r\nexport const GetDefaultQuoteUserDetailsDTO = (): QuoteUserDetailsDTO => {\r\n const retVal: QuoteUserDetailsDTO = {\r\n projectName: \"\",\r\n email: \"\",\r\n displayName: \"\",\r\n telephone: \"\",\r\n company: \"\",\r\n allowMarketing: false,\r\n };\r\n return retVal;\r\n};\r\n","// App\r\nimport { BaseStore } from \"../../../Core/Stores/BaseStore\";\r\nimport { action, observable } from \"mobx\";\r\nimport { Stores } from \"../Stores\";\r\nimport { InitialState } from \"Custom/Models\";\r\n\r\nexport class ErrorStore extends BaseStore {\r\n @observable public hasError: boolean = false;\r\n @observable public title: string = \"\";\r\n @observable public errorMessage1: string = \"\";\r\n @observable public errorMessage2: string = \"\";\r\n\r\n /* @observable public hasError: boolean = true;\r\n @observable public title: string = \"Test\";\r\n @observable public errorMessage1: string = \"This is an error message\";\r\n @observable public errorMessage2: string = \"This is the secondary error message\"; */\r\n\r\n public constructor() {\r\n super();\r\n }\r\n\r\n public init(stores: Stores, initialState: InitialState) {}\r\n\r\n @action\r\n public Close = (): void => {\r\n this.errorMessage1 = \"\";\r\n this.errorMessage2 = \"\";\r\n this.hasError = false;\r\n };\r\n\r\n @action\r\n public SetErrorMessage = (title: string, line1: string, line2: string): void => {\r\n this.title = title;\r\n this.errorMessage1 = line1;\r\n this.errorMessage2 = line2;\r\n this.hasError = true;\r\n };\r\n}\r\n","import * as GoogleAnalytics from \"Core/Utils/App/GoogleAnalyticsUtils\";\r\nimport * as Models from \"../Models\";\r\nimport { action, computed, observable, runInAction } from \"mobx\";\r\nimport * as MobX from \"mobx\";\r\nimport { AccountStore, ErrorStore } from \"./Domain\";\r\nimport { EditableCopy } from \"../Models/EditableCopy\";\r\nimport { EditableCopyRoute } from \"../Models/EditableCopyRoute\";\r\nimport { Stores } from \"./Stores\";\r\n\r\nexport class DomainStores {\r\n @observable public openSnackBar = false;\r\n @observable public openErrorDialog = false;\r\n @observable public errorDialogContent: string = \"\";\r\n @observable public snackBarContent: string = \"\";\r\n @observable public editableCopies = MobX.observable([]);\r\n @observable public editableCopyRoutes = MobX.observable([]);\r\n public AccountStore: AccountStore = new AccountStore();\r\n public ErrorStore: ErrorStore = new ErrorStore();\r\n @observable public showRoofOptions = false;\r\n @observable public showDelcoteGSOptions = false;\r\n @observable public showResetButton = false;\r\n\r\n public init(stores: Stores, initialState: Models.InitialState) {\r\n this.editableCopies.clear();\r\n this.editableCopyRoutes.clear();\r\n initialState.editableCopies.forEach((editableCopy) => {\r\n this.editableCopies.push(editableCopy);\r\n });\r\n initialState.editableCopyRoutes.forEach((editableCopyRoute) => {\r\n this.editableCopyRoutes.push(editableCopyRoute);\r\n });\r\n this.AccountStore.init(stores, initialState);\r\n this.showRoofOptions = initialState.showRoofOptions;\r\n this.showDelcoteGSOptions = initialState.showDelcoteGSOptions;\r\n this.showResetButton = initialState.showResetButton;\r\n }\r\n\r\n @action\r\n public ShowErrorDialog(content: string) {\r\n this.errorDialogContent = content;\r\n this.openErrorDialog = true;\r\n }\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/pricing_tool_banner_deep-768x346.3c4a6214.jpg\";","import \"url-search-params-polyfill\";\r\nimport { getPath } from \"ts-object-path\";\r\nimport { History, LocationState } from \"history\";\r\nimport { StoresInstance } from \"../../Custom/Stores\";\r\nimport { AccountStatus } from \"../Models\";\r\nimport { GlobalHistory } from \"Core/CoreIndex\";\r\n\r\nexport type FieldType = Omit<\r\n T,\r\n | \"Errors\"\r\n | \"Dirty\"\r\n | \"Touched\"\r\n | \"Valid\"\r\n | \"getError\"\r\n | \"setError\"\r\n | \"getDirty\"\r\n | \"setDirty\"\r\n | \"getTouched\"\r\n | \"setTouched\"\r\n | \"getValid\"\r\n | \"setValid\"\r\n | \"getValue\"\r\n | \"setValue\"\r\n | \"fromDto\"\r\n | \"toDto\"\r\n>;\r\n\r\nexport const nameofFactory = () => (name: keyof T) => name;\r\n\r\nfunction _isNil(value: any) {\r\n return value == null;\r\n}\r\n\r\nexport const getHistory = (): History => {\r\n return GlobalHistory;\r\n};\r\n\r\nexport const setLoginState = (apiResult: AccountStatus) => {\r\n // StoresInstance.domain.AccountStore.getLoginState(apiResult);\r\n};\r\n\r\nexport const getJWT = () => {\r\n //return StoresInstance.domain.AccountStore.getJwt();\r\n};\r\n\r\nexport const getParentObjectPath = (fieldName: string, action: \"Errors\" | \"Valid\" | \"Dirty\" | \"Touched\"): string[] => {\r\n let path: string[] = [];\r\n if (typeof fieldName === \"string\") {\r\n path = fieldName.split(\".\");\r\n } else {\r\n path = getPath(fieldName) as string[];\r\n // (fieldName as any).forEach((key: any) => {\r\n // \tpath.push(key);\r\n // });\r\n }\r\n path.splice(path.length - 1, 0, action);\r\n return path;\r\n};\r\n\r\nexport const generateID = function () {\r\n // Math.random should be unique because of its seeding algorithm.\r\n // Convert it to base 36 (numbers + letters), and grab the first 9 characters\r\n // after the decimal.\r\n return \"_\" + Math.random().toString(36).substr(2, 9);\r\n};\r\n\r\n/**\r\n * Test if a string is null, undefined, or empty.\r\n *\r\n * @param {string | undefined | null} text\r\n *\r\n * @returns true if null, undefined or empty, otherwise false.\r\n */\r\nexport const isNullOrEmpty = (text: string | undefined | null): boolean => {\r\n return text === undefined || text === null || text.length === 0;\r\n};\r\n\r\n/**\r\n * Test if a string is null, undefined, empty, or whitespace.\r\n *\r\n * @param {string | undefined | null} text\r\n *\r\n * @returns true if null, undefined, empty, or whitespace otherwise false.\r\n */\r\nexport const isEmptyOrWhitespace = (text: string | undefined | null): boolean => {\r\n return text === undefined || text === null || text.trim().length < 1;\r\n};\r\n\r\nexport const sortByString = (a: string | undefined, b: string | undefined, options?: Intl.CollatorOptions) => {\r\n if (a === undefined && b === undefined) {\r\n return 0;\r\n }\r\n if (a === undefined) {\r\n return -1;\r\n }\r\n if (b === undefined) {\r\n return 1;\r\n }\r\n\r\n return a.localeCompare(b, undefined, options);\r\n};\r\n\r\nexport const coalesce = (...args: (TArg | undefined)[]) => {\r\n for (const arg of args) {\r\n if (_isNil(arg) === false) {\r\n return arg;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\nexport const getApiUrl = (): string => (window as any).apiurl;\r\n\r\nexport const getImageUrl = (imageUrl: string): string => {\r\n return getApiUrl() + imageUrl;\r\n};\r\n\r\nexport const getBaseUrl = (): string | undefined => {\r\n const baseElements = document.getElementsByTagName(\"base\");\r\n\r\n if (baseElements.length === 0) {\r\n throw new Error(\"Base element not found\");\r\n }\r\n\r\n if (baseElements.length > 1) {\r\n throw new Error(\"Multiple base elements found\");\r\n }\r\n\r\n const baseElement = baseElements[0];\r\n const baseUrl = baseElement.getAttribute(\"href\");\r\n\r\n if (baseUrl === undefined) {\r\n throw new Error(\"Base element 'href' attribute not found.\");\r\n }\r\n\r\n let retVal: string | undefined;\r\n if (baseUrl !== null) {\r\n retVal = baseUrl;\r\n }\r\n return retVal;\r\n};\r\n\r\nexport const parseJwt = (token: string) => {\r\n const base64Url = token.split(\".\")[1];\r\n let retval = \"\";\r\n try {\r\n const base64 = decodeURIComponent(\r\n atob(base64Url)\r\n .split(\"\")\r\n .map((c) => {\r\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\r\n })\r\n .join(\"\"),\r\n );\r\n retval = JSON.parse(base64);\r\n // eslint-disable-next-line no-empty\r\n } catch {}\r\n\r\n return retval;\r\n};\r\n\r\nexport const getCookie: (cname: string) => string = (cname: string): string => {\r\n var name: string = cname + \"=\";\r\n var decodedCookie: string = decodeURIComponent(document.cookie);\r\n var ca: string[] = decodedCookie.split(\";\");\r\n for (var i: number = 0; i < ca.length; i++) {\r\n var c: string = ca[i];\r\n while (c.charAt(0) === \" \") {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n};\r\n\r\nexport const getUrlSearchParams: () => URLSearchParams = () => {\r\n return new URLSearchParams(window.location.search);\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/pricing_tool_banner_deep.5ff7f38f.jpg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAABVCAYAAABU+m8zAAAABHNCSVQICAgIfAhkiAAAHcZJREFUeF7tnXmsXVX1x8+DQkGgdLCVQksrlYIlMv1+xR8anOIQQxyjxmgco0bjiFMMjqhRwVnjHwbjnJg44BQlcVZCAtZQwJ+t0F+hExZK6TxROvzWZ3u/z/1297nn3Hfvfe/c+9ZOmrb37LP32t99znets9bae48ctVJ4cQQcAUfAERhYBEacyAd27lxwR8ARcAQCAk7k/iA4Ao6AIzDgCDiRD/gEuviOgCPgCDiR+zPgCDgCjsCAI+BEPuAT6OI7Ao6AI+BE7s+AI+AIOAIDjoAT+YBPoIvvCDgCjoATuT8DjoAj4AgMOAJO5AM+gS6+I+AIOAJO5P4MOAKOgCMw4Ag4kQ/4BLr4joAj4Ag4kfsz4Ag4Ao7AgCPgRD7gE+jiOwKOgCPgRO7PgCPgCDgCA45AKZHvufXW4sj+/QM+PBd/EBE4bvr04tTLLx9E0V1mR2BSEBhD5LtvuqnYcPXVxe6bb54UYbxTRyBG4NQnPrFYdN11xWlXXOHAOAKOQBsEApEf3rmzWP/+9xdbrr/ewXIEGofAvDe9qVh07bXF8aef3jjZXCBHoAkIBCLfceONxT+vvLIJ8rgMjkAWgaU33FDMfuELHR1HwBHIIBCI/Lazzy4ObtrkADkCjUXghHnziv+6//7GyteNYLv+/Odw+ykXXVQcP3NmN035vVMUgZF9q1cfvWPZsik6fB/2ICFw0apVxcnnnz9IIpfKenjHjmLjNdcU93/5y2PqzH3Na4rFX/xiR4S+609/KjZ97GPFMvubsmLWrGLBRz9azH/XuxqH1eYvfanYZONevn17pWxrX/va4pDhdN7PflZZt5sK+26/vXjUxRd308Qx9zInq57xjOJ/jhzpabtljY1s/cEPjq55xSsmpDPvxBHoBoEl3/xmMdde7mEod15ySVHYueeLjdhmPO1pYUgPr1tXBPKymNWFK1fWHmZK5A9++9uhzemLF9duY6IqosC2GTHXmUcI9oBh0k+XWopdr3CYcCJ/4Prrj95jwSQvjkDTEVj8la8UZ7ztbU0Xs4CAINEyNwlEu86s5UuNpHJ17jTrEPJaYFY2BdfLjKc+NRD9w+vXF9MXLRpD0ikZxf1zD+SJxcnvKIkyF45cPNMsqNzOQqVNCmMsa1N1ppmraO8ddxRqE1m4lravvuOxxbLXwUEPBvftsz7BlrFutq+e+e985zFYIzv9brH5QKFSwFlFY+P/nWLWeCI/zQZ62lOeUvky7Tcg9915Z5i0iS5nfvjDocvdf/lLsbvlf5xoGby/3iPQdCLnWV/19KcHsqWUBWhXmbUMkYk8UqQgeshHVvktxx1X4HLZa1Y6xLjLnuv46yQlctpHCWCV43LZ9vOfhy4gU1wVyHfBH/84SqbIfdeLXlQcMnfHSUbOWMEnPfaxxXk//WlW0dAm7UCC3EMh8w2XkCxt9UvbkOBeI80LzN3AfbEbCLKkbwvVhb7jsVGPscllBA5nGCFvM7lUd9EXvjDGhbTuqquKB7/1reKUlquE9k60GOBF1k+qNFGmtB9kbNVXX3E7yMz4wEMKSHKTSRWUlbU/93WvCxgEpTPRrpVOLXJIUkRZ51Xd+p3vFJve974wgRNV/vvgwdDVvz7xifDHy3Ag0HQix/+7/t3vHgV71vOfn/Xv4sNeYmRT5jJISSAQ2DveMUr8kMidl15aXHLPPcEqriLyTR//+BilAkE+aO/lJffeG2RF+WAJLzEFonKXfRFAbvoqiJ8g7qfNVJngE172hz+MKhDqXHjbbYH8sMQh0lTWlaYwZr3gBaNjg1QhRurmiHzuq189KqdwUB9BAdocoDBE2vSHorjUxpr7+sm5VmiDPzH5p5ghN8pV+DC+O2ycxCX4M3REzgOAtlrz7GdPGJk3gcj5cplnbgAeShQZGAxTOe93vwtfOxOpKJtO5BDJ2te/vpLIcZ1guZYFI3NEvnzbtjFEhNV9hhEGyqCKyGOrFuEgy5XnnDMaiENRpNY3JInlKws1JXL83BcmzzQWLs875JaSsO6PZa0iuxyRS3mpPXAAS/7w71mGR4prXCd9B3NEXlYfnFAaFBRpGshk/vkDZlVj6zUXjHRjkd/1rGdlXRdyvzzGrAgt4phI67gJRB5/uZTh1OvJnMj2nMiPRRur7B9GJrgU+ZzHdZKzuhXQhDxzBUKESGOXQkoakA2uE0izUyKnT0iJNkXqMzLuUqz92EqXrGUkze+0xz11iXytuSP0ZZBikSPydji0I/IcwdNfGZFLScYyYYXzJUXJyY1yu9/mfGiIXIOHyBd+7nPhv/ir73rmMyeEa7ohcj4ne2E9O5H3fqqbbpFrxHIjlCEgl0AuC0fXYv+6SDdur1dETpsrzIqGfOtmh0Cw+PBTdwVEhw8bi7gOkUuJyDXSLZHjDsFlhP9fbhTwRLny9ZDL4skReU7RysLmyyhgNnv2qBtJcuPCIQ4BlkNhkccTIlLlt7+deGIAE2tF5F72sEOox82YURzZtStLrARcsfwpBFZRFPLDVxE5vsuTLQCjctCCPzt+8Ysg2+P/+teizK+PTKc/73mj96X9ckGB4DmvelXxaPOhUTa+5z0hiq6CrO0Kn6cnX3hhkIeH/eCGDWOCxvSx36w+xqu6VW3SH/KHYFcmAK12wBQ8aD9VaPHcLTAFzfgf+t73RoeSmyvueZSNBby7DYAPCpG3ndzWRblh8LMq0EaQkbzy2A9M9X4TOZYkFibuCcgc8ttoZE2wNUd+IZBp9xAAhLQhTcZD4FPuljpEztikFOgbHGiX4GjOPVOFA+1BwgR3+VpBoR4w3/j51mZZFo6UCZY29VFE/H2bPbczLHYAHrwHjC/OzVc+POMHI+TeZQpEmUhDReQM8Al33x0eXYhs1fLlIVCqYCnEXlb4dIewUkuewMiCz342+4A9YOlpmz/5yeLiLVtCs6k75zFvf3sx3/qHtNIiJcA1HtC7zW0kIoPcFts+NLmHmvu2fPWro77iWHGVja1s3MG/aGNDASBDSKEiFcwe7O32cOJr58GjD7lrkO283/42KMmqknOHxH2SzQCJU8CevuiTvinIhYKiIBNjV33NMUqLEgJlNhbkU7saC7718cQNhonIA15GEKS+8TeF5wtCU1655hOyS4OOEAv1qcs8QRzKGInzyJWVkeZtp23GspTJEcsTngGbY/qC+HBdzDPZ4yAjcqX9prLSDjJChFxjPGonlb0KB8mn/POQXsgiqZGRYpmRbFmhb8bBu4A7jDEwJsia+xknhJ7Oi+SmH65JqdEPYwnk30ohrXo3u73eFx85LzEW5VwL9snaEKl2Q+Sxq6Zs4JAOZE+JiRwiloVcBVrs0+Ye7o2Lcnnj3+h37UtfGki2quRIl5dn6W9+Ewh843vfOyb2wAM2z5QQfwga89XQCyKn3XOtzxF70Mv6ZL5y8Y12PnLwX2SY8ZWzycYSZyxpLLQLXlISVZhxfdiIvM6Ym1gHQqVMFEnVxQBChYRTgwvreqHJXGcRUt2+mlavKyKvO5gHzGKVpTZeIpflqT63G0lgCWPdyeWRpkWKgGIFAFHyO9a7SrC4v/GNkIJFgdS4Hn9RSDHQp4iJ69wnd8q6N74xuGUonfrIsaqxHNrFEVAqc9/61jDeXhA5ffLg8/VRlh4q3FPSLSNyuaewuIVF7jlhTuZ/6EPF/y5dWjubyYm87hvX33pNJXKCxEHhtxb3CAVW0eIWqRsD6C96/Wm970SOe4KXWgtzxkvkS3784wLftgg1l/aWkr2IHPeOtPTqyy7L+tyxFJ+wZk1wZUBqEAx+4Edb3mpM7uk0cN/jV6wISoCx0n6nRC65/259Vi2gQnEgU7dE3kmfzBkuFeRTKSPyoBBNwdUJbC8z3PCxx0q13WPuRN4fEui0VVwGlKZZuLw7YVWsBR0VD8L9ge8+zi3vdLyDUL8rIt/63e+O8ZFqwFh5M410ZeHyu6zV8RI5fm9IE7fG3889txRbEZ0If+cvfxlcERSs+LUveUnpvbHljgWKe6BOnws///kC/ztFbpNOLHLux+dch/x4QHvhWhlPn7GiKSNy5qnKGtcEgBFB0HZzEk+WE/kgUMrkyohvW3GHsES/lbM/uVL1v/euiLwqPzr2L8vKxc87nmCnfM9VaYxxn1jk1A9uCytVueyxRU/dTlawaqqESSdE3mlOdi+Cnd30yVjL7kc2XCpk2lSV4JKqcCc5kVeh6NcdAXuN+rEgaMzL13IFyCon9bAOkcsdIuIWkVdZ1QTalvzoR6PE3QmRx/fiJ1cOfCcPilw3U5HI+XrBIifbhlhEnUJdxU+q6rtFXoWQX5+qCPSdyGNCk19bRN7Ook8tcP0/9kPnJi3tj+Ck0hGr7o3dMhDyUoKB5jOvuq9KjqovF/rlM7COi0EBWLUpV0sd/zoY6quEPoNyfcMbyp9928iIMs32BgHDOL7QziLvNBul7svnRF4XKa831RDoK5ErvU0piLzgEJbS+eJslhj4mIxlkcfBzjKiUMaE8sRFWspJpw8Ca1jbaYldMrk+y4KkZQ9MJxY5fZNzXSeDQ+3GygGCriJPKQBhUqtPI/IZz3lOMW3OnGKR4bZy7tzR4ZYROfOEn7KtghjnW+ZEPk7g/LahR6ArIk9XLMZoEbzDH65sET61FaSUhUx92oDQVdJFOyLV2H+Nv30zKYTRfVyHDKU0aE+kxW+yrvmd6DbZElpKHa8S5VNf6Xhpn+REE+CNC5k0Z1ga3Qbb0z1eCRm7aWLlgZJJU/2U+ULedTs3A+M4x9xGBJFjIoc8WRrMb2WFOAHjieMEZOnstqg+gehsMSI/0/JvT7etFdgadKsd7KBSRuTCrOorhOdC23/WfcucyOsi5fWmGgJdEXknYJXlWKsN0hO15J7fIH7cGnFwM3Z9xPeR+SArHCJGicREzr/DVpm4MNqcxA5JpwtY0j7DkvnW6se4XwVz4xWiSmeU8uAaBHa7nT+ZFhGgVqemZM91fP+sXMV3HxOlFNV2W6GWbhmslZuntZYsoyzk4pJbpnRLAluJO+/Nbw6ph3stVXCDbdG699Zbg+gh68UWfeWUB5iRtRSveI3HS/okqZ0o07r+ce53Iu/kjfO6UwmBvhM56YKQY7qCL07ZiwGHwPksx5rPLdFvtx86JL7erEulG6ZZKpAopATJiOzTyc4RadUe7GVjxH0B6abKo8wNooVJQYGZYmO/E/59qmV3QLpShnHWiuSXtU79sKdJS6GhbFA84AJ5plvPxlY+17jvRLP4+XP8KacUu2yrhHlveUvo5hE7/HiNKcR9tpXndNsgia8ccnRJ8SSIjfzKNSeVE9y4Tv+xPKwkBedOt8B1Ip9K1ORj7QSBjom87glBWNK8wO0WuIhYIQ0IHOLaYUvdsUaxoFnmTxpbukKQ+yBjbSwFScT3dnJCEOORHFqhCaGlliaW7RyzJCHV2PrfY+Nst8xcsorMGY/GWDZRGrtIGBwfsq+FeFOwMtdFfC+EHuOHYmE+cqcm6T7NBX1u/8lPijl2z1nRfhFHDxwo1tpvO264IQRBwURjS09kAqeZNo+QvDbNYp7ofzwHjQwjkfPsyCXHszLb8Co7Iq7seSk7Pi1XPz6mrROi6HXdTmTudd/D2F7HRD6MIGhMrDSUpd5pcHMicclZ5H3p33zk8z/4wTFErn7utd3yHvr+90Me+ESVYSJyHRXGF0t8+DJfd/GRaXWwDTvxmbJdXuMUrqYsr89tH1tnrJNVh10pMXbSfVwmS56036EnclnbDLzqDM84c0X7rTRlomI5mkDkyLP5M58pNl97bXFk794JgWlYiDxsk2quKazv9OAGHRenI9PqAoulXYdknMjrIjq2Hlvodjon4+tpfHcNPZEDy3hy0J3IDbg2Frkety1f+1qx+dOfLh5pbR08vsew3l2DQORhX+rWRm5lbhId+pselSYUOC+Tcl5ra1cOS2DTp7i028aWeuGottb2w2Fb2tbe+CmRY2niTivbUCpsx9raCE7tbLrmmlF5tGVu2J62ddA5faVKBQtc13VSfXwIc+4JoF+5ncJS+9YYVLdKNhQmbey0vrmffrXtbxWmaR+MWeNSO9TRuHAVciA0+5mXlXjO4vbjLYg1JsatMcdY6rrOIphv/eGKmxJEHrtMyjI0lBUi/3edBTb16Kf3tZpikWtku2wr3PW2K6NOj+/9iP/dYtOJXKf7aPzxgckxJmVHkqkOyuDuF784HMVWdkBBuxOCZNXTP88z7emM0JjIOUxirx0eUbahlOTgoAvIBFmOt7gIfn0duYYchyy+RfqrSBIFEh9KgeKCxJBB8hAsP2xupdyZoOCAbDttD3H2Jhdh0reOx9NhGCjLUtnsYAjiNygpCJA9WBgr9TkViV0StfGXDphIzwTVvuIcJC0cGCd/5NLSGaHIhKuRsedKPGej747JI4WmLzUdNgKZg7kUPu2DJeMJe0DZmIT1yL7Vq4/esWxZv969RrQb53QjENpMmR1YI/jFY61HGmI/FrT0CoymETnj2nPLLcV6yzQC136Vi1atKk4+//x+Nd91uzpdXg2Rnpmzutmhj728y6zgmLw7JXIRUpkbQESO0m1H4oxhhRFn6q+HSO63jKOYyKkbEzKn9FBwG6Un3QsbMICMckQuwopPsdcp9Trtp45s7dwh4ABR8tVDKTvRSPKmbZUdU9fuYO0qImeuOS4uPUJPMjBmTjKKnxudkzpy5PDhoys4Um3fvq4f5CY3UJYKmMpcttq0SWMjK4cc7Kotb7uWuYZrhT6O7N9fHNy48d9HhFmqKWmKvS4jJ51UXLZnTzFivsqmFlmwki89sk2/517oeEzB2jQyJHjZKZFT///sXo4cyxUdrYalGhNlWlcEnB52nMqTG0t8CHF8snzcRzviDEfJmVWfKjrawnVxulnDuVPsU5k11uBWwYpuuVaQI7XAcyQZy5sSeTzGuB5WOus5cgqqishphzooWU4lil0rkjd1sfH7w3ac3chRK/+yoNWGq69u6vvRM7lG0wxtQpVqSOOkLxIIZQFL38mxZ6OZgIbaEPnRQ4dCeuKOX/86PHiPbNr0ny2N+5DJcvanPlWc+YEPTMCgu+tCLzIvos5zTFukDr7pstPjV5lLgNW7WLR6gVNC5bAE3ApY9nEGiKy65ea2KCNyvkiph3xle4qX9VuHyGN5IDz8y6m7oYrIaSN3ApG+nFeec87oV4HGmVM+WPJyUeBawVWjdolFQJa0yRmlZcqP9nNEXjau2NKP5yBH5DniB3vJjPLiqwEZGTNfWmnhyyYQORfWvPzlxUM//GF3T7HfPVwIZIj8kfvuK04466wwztVPelJY8dnvFMTZtof80iF7Njl+7BQj48fZp3KcN77uqqsCyccny+PPhXzkixWZLvjIR44hch0cHPt/+Y1CP3Kt0Bany3MIQ2rl6SFGRuqpX37n0z/1kWPtxqQbE7kOe0ApycIOv9nYOWQ5Z7lKGV1gPvL40GSIWv+vIxsBzThAmioPlMx6w1tB3HYHZaTusNy4wFmnEeXaCqRtXxo6P5T6/zClTXwBHPg/gdn4SyQm/5zbBqzAf5TImaTdN90ULPPdN988XITkoxkfAgmRb+U0H1uav9D2tJlh+7rsNGt87Stf2bf0w1Mvv7xYZF+Lp11xxfjkb/BdkBIukH22QEpZHFhhuDxCwN2+aiAyyFcuG+rxfz6lKbzwqUXO73LNEFDUfjY6AT4OdgYiMRJAoeB7TQsycp126It2IZ1d9vUa+8jbETltYlXiW6cfCuOEYGm/LNipgK3GHA44ZpuK1ulEOdm4Lv+9xgaOyMf/kT/1MaMQuIY13m4hFvJDwigSZAePeFzcG7JPOOM3OWpOuEomFj+iPMJh0xxObn+Dg8YETsgcrHJ7BoizUJ/r/yTQab5yviS4rtOPxhB5PJF7bE8NfJ9epi4CB81dcshiJ7Ns18qtX/96MW327OLkJUuKbb/6VbHguusCMOztMpsj+HroTjlu+vQCEp8KhZcTKwzC5WUV6UBksZUb0vvIGrF6+Ij5vw4azq2SlHVHPerLkk1Xdsr1ADHkiEzt6KR45JMVyPzkDjzOySN3AX/HWRexxZ3Ot8aMKygeQ0yMYFcmm5SaZKTfNC0S9wq/lZFvLBPjhjzjdoQPf4Nhu/GoLdoJJG5YKvtE90nhcD2s9DX54nmJXUXcAy4h/VCulanw0vgYO0PggO2O+JBtssXaTQJ3J7S2sd35+98XR6dNK0598pPDV9yILduf+dzndta413YEJhmBspTDSRZrXN07kY8Ltqlx0xHLEtlu7pM5L3vZmAEfPXy4uM+CjzPNd81uiCeQq2u+Uy+OwCAhgLsEMlcK4iDJnsraOCKPV2Pxbz4vyAMvy7lNB8RnC/dwL59k2sdioicJOfhsKvvU0qdm3XFNpPxavNGuzwNr1xY7bryxmHXllcGH6sURGDQEcF/lXDaDNg7kbRSR48tCS57RWr2EgFpZRYpbLiCTgk4wJybvySJyAiss2Z1IIge7Or6+qgeVSHlZEKrqXr/uCDgCE49AY4hcEd2y5cJoT0qcCpWDS0Q+WQQ+8VP4nx57RcC9amcysfC+HYGphEBjiJzPeUpVLiepOFieELU2oSGdh6XEypNVNJj2iDLjaiGnlNQuFMYMy92M80vJ22W5ckgJam0jmkbw6RMlwiIAFmvstUVEbFgjhYEs3EtqGC4dIti4TbDIw4pHu4+8WeShHaWFKY1I9yIzroo4txfrnvZDXes3LGIwGYRV2LjH/mjBA20oLQ0FqPsW2sZLcXScnGVhQsqTNvxxIp9KFOBjHQYEGkPkECWrrtql77BsGdcBW4BCokrPwv3CNdwBqWtFBKc9Gpg06kDUEKo2oYn3hKYtAiAxma+0Psn5pH/9LoUCYad7P8RyQMLxfSJXpXGxyILNgCRD2EHPxsI9sazIjiKiX0g8/eqICZg2WCqsvFvdp9WG5DDTvtKx4j6dyIfh1fYxTCUEGkPk5HPGxNLObZLbS0LEGee40oZyb1OXDP0tNELHik39ysoXje9hie7ybduOybWlHUhff0tuyQNpP876SC18WdGQMSSaylDWrtpP++P3mIBzZAyZgx19av+JGGd9dUgpTqUXwcfqCAwyAo0h8jq+bcgLUuTvNBjXjsi17WQ8URAdQVVcLpDaMcVWNcYLMsqsVP1O/3H9mMhz6U0xkef2laBduUdye05UEXnuOmOM97pOxyxXVdU+0YP8wLvsjsAwItAYIg/uEduDWPsQpGDH7pMcqY6HyCFI+ayrJhfXSm6TIxFmGZFDjukpMPpS0NdDGZGjrHKELMs6VRAxLu2IPOyqZpZ5uspNGDqRVz0Nft0RaBYCjSFyYOHT/iQjzPSUDYhLrhd86L0ichFl6vpI3TPIlm5cJDKWW6SMyFEUBDbjIG68zFZLnlOrO7b02VtBmIjEcQul8YQYl9T3j7woFS13JviqTfq5JozBxH3kzXpJXRpHoAqBRhE5wmqHMjJLKNpvFx+yiKuXRB4ySowUtcEQm9RAumn2DH3yG8RNhkfYs8LcLwpilhE5RK3N3+kj7JHROrWkjkUOBspaCcrDjtMqO5wX8taeJwSD8c9rg57QlwVrpTDC9qIcbmCBVsidbBvFKJzIq14bv+4INAuBxhG54IF4KHz+py6AfkCY2+gn7icmt5zFXkemeBvOOvXL6gSCNvLN+c75nRIHV9v1i2Lhi6Hdzm/dyOr3OgKOQP8RaCyR93/onfUwWVZq2XJ5MktyvvfORuW1HQFHYBgQcCKvOYuTReTKnU8tbKxyJ/Kak+fVHIEhR8CJvOYE19lIqmZTHVVTcFM+fPnYCXa6O6QjKL2yIzC0CDiRD9DU9srHPkBDdlEdAUegBgJO5DVA8iqOgCPgCDQZASfyJs+Oy+YIOAKOQA0EnMhrgORVHAFHwBFoMgJO5E2eHZfNEXAEHIEaCDiR1wDJqzgCjoAj0GQEnMibPDsumyPgCDgCNRBwIq8BkldxBBwBR6DJCDiRN3l2XDZHwBFwBGog4EReAySv4gg4Ao5AkxFwIm/y7LhsjoAj4AjUQMCJvAZIXsURcAQcgSYj4ETe5Nlx2RwBR8ARqIGAE3kNkLyKI+AIOAJNRsCJvMmz47I5Ao6AI1ADASfyGiB5FUfAEXAEmoyAE3mTZ8dlcwQcAUegBgL/DyoK1Ecz+vXeAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/budget_quote_UPDATE4.dda9cdf2.png\";","module.exports = __webpack_public_path__ + \"static/media/Oldham-Project-5.50f992a5.jpg\";","module.exports = \"data:image/jpeg;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/Oldham-Project-5-370x247.2d534d9e.jpg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/gutter.291300e8.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/gutter_only_sprite.5177c915.png\";","module.exports = __webpack_public_path__ + \"static/media/roof_only_sprite.52a4e579.png\";","module.exports = __webpack_public_path__ + \"static/media/roof_gutter_sprite.28c17842.png\";","import { AccountStatus, ApiResult, ModelBase } from \"../Models\";\r\nimport { CheckHttpStatus, MergeDefaultConfig } from \"../Utils/Axios\";\r\nimport { FieldType, getHistory, getParentObjectPath } from \"../Utils/Utils\";\r\nimport { History, LocationState } from \"history\";\r\nimport { MetadataStorage, Validator, getFromContainer, validate, validateOrReject } from \"class-validator\";\r\nimport { ObjPathProxy, createProxy } from \"ts-object-path\";\r\nimport { action, computed, observable, runInAction } from \"mobx\";\r\nimport axios, * as Axios from \"axios\";\r\n\r\nimport { IModel } from \"Core/Models/IModel\";\r\nimport { IViewModel } from \"Core/ViewModels/IViewModel\";\r\nimport { ValidationMetadata } from \"class-validator/metadata/ValidationMetadata\";\r\nimport { get as _get } from \"lodash-es\";\r\nimport { isBoolean as _isBoolean } from \"lodash-es\";\r\nimport { isString as _isString } from \"lodash-es\";\r\nimport { set as _set } from \"lodash-es\";\r\nimport { createViewModel } from \"mobx-utils\";\r\nimport dot from \"dot-object\";\r\nimport { match } from \"react-router\";\r\nimport { Stores, StoresInstance } from \"../../Custom/Stores\";\r\nimport { constants } from \"os\";\r\n//import { StoresInstance } from \"../../Custom/Stores\";\r\n\r\n//Give typing and intellisense to the field names\r\n\r\nexport type ValidationResponse = {\r\n isValid: boolean;\r\n errorMessage: string;\r\n};\r\nexport type Create = new (...args: any[]) => T;\r\nexport abstract class ViewModelBase = any> implements IViewModel {\r\n public model: T = {} as T;\r\n\r\n @observable public IsLoading: boolean = false;\r\n @observable public IsErrored = false;\r\n @observable public Errors: string = \"\";\r\n @observable public Valid: boolean = false;\r\n\r\n @action protected setIsLoading = (state: boolean) => (this.IsLoading = state);\r\n @action protected setIsErrored = (state: boolean) => (this.IsErrored = state);\r\n @action protected setErrors = (state: string) => (this.Errors = state);\r\n\r\n public history: History;\r\n public location: LocationState = {} as LocationState;\r\n public match = {} as match<{}>;\r\n\r\n public validatorStorage: MetadataStorage = getFromContainer(MetadataStorage);\r\n private meta = {} as ValidationMetadata[];\r\n private validator = new Validator();\r\n private proxy: T = {} as T;\r\n\r\n protected constructor(model: T, undoable: boolean = false, enableProxy: boolean = true) {\r\n this.history = getHistory();\r\n\r\n if (model) {\r\n if (enableProxy) {\r\n this.createNewProxy(model, undoable);\r\n } else {\r\n this.internalSetModel(model, undoable);\r\n }\r\n }\r\n (window as any).model = model;\r\n }\r\n\r\n public createNewProxy = (model: T, undoable: boolean) => {\r\n let self: IViewModel = this;\r\n this.proxy = new Proxy(model, {\r\n get(target: any, value: any, receiver: any) {\r\n let val = Reflect.get(target, value, receiver); // (1)\r\n return typeof value == \"function\" ? val.bind(target) : val;\r\n },\r\n set(target: any, prop: any, value: any, receiver: any) {\r\n let newValue = value;\r\n if (typeof self[\"beforeUpdate\"] === \"function\") {\r\n let tmpValue = self[\"beforeUpdate\"](prop, value);\r\n if (tmpValue !== null && tmpValue !== undefined) {\r\n newValue = tmpValue;\r\n }\r\n }\r\n let retval = Reflect.set(target, prop, newValue, receiver); // (1)\r\n if (typeof self[\"afterUpdate\"] === \"function\") {\r\n self[\"afterUpdate\"](prop, newValue);\r\n }\r\n return retval;\r\n },\r\n });\r\n this.internalSetModel(this.proxy, undoable);\r\n };\r\n\r\n private getType = (TCtor: new (...args: any[]) => T) => {\r\n return typeof TCtor;\r\n };\r\n\r\n //This must be overriden in any class that extends this base class\r\n abstract isFieldValid(fieldName: keyof FieldType, value: any): boolean;\r\n abstract beforeUpdate?(fieldName: keyof FieldType, value: any): any;\r\n abstract afterUpdate?(fieldName: keyof FieldType, value: any): void;\r\n\r\n @computed\r\n public get getModel(): T {\r\n return this.model;\r\n }\r\n @computed\r\n public get screenWidth(): number {\r\n return StoresInstance.coreStore.screenWidth;\r\n }\r\n @computed\r\n public get isMobile(): boolean {\r\n return StoresInstance.coreStore.isMobile;\r\n }\r\n @computed\r\n public get isTablet(): boolean {\r\n return StoresInstance.coreStore.isTablet;\r\n }\r\n @computed\r\n public get isDesktop(): boolean {\r\n return StoresInstance.coreStore.isDesktop;\r\n }\r\n @computed\r\n public get isLoggedIn(): boolean {\r\n return StoresInstance.domain.AccountStore.hasUserAccess;\r\n }\r\n private internalSetModel(model: T, undoable: boolean = false) {\r\n if (undoable) {\r\n //This is a helper method to make the model undoable. You must call submit on the model to save changes\r\n this.model = createViewModel(model);\r\n return;\r\n }\r\n this.model = model;\r\n }\r\n\r\n public setModel(model: T, undoable: boolean = false) {\r\n for (let key in model) {\r\n if (model.hasOwnProperty(key)) {\r\n if (this.getValue(key as any) instanceof Date) {\r\n this.setValue(key as any, new Date(model[key] as any));\r\n } else {\r\n this.setValue(key as any, model[key]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public getContext = (): ObjPathProxy => {\r\n return createProxy();\r\n };\r\n\r\n public saveModel(): void {\r\n (this.model as any).submit();\r\n }\r\n\r\n public resetModel(): void {\r\n (this.model as any).reset();\r\n }\r\n\r\n @action\r\n public setValue(fieldName: keyof FieldType, value: TR) {\r\n this.model.setValue(fieldName, value);\r\n }\r\n\r\n public getValue(fieldName: keyof FieldType): TR {\r\n let value = this.model.getValue(fieldName);\r\n if (value === null) {\r\n if (_isString(value)) {\r\n ((value as any) as string) = \"\";\r\n } else if (_isBoolean(value)) {\r\n ((value as any) as boolean) = false;\r\n }\r\n this.model.setValue(fieldName, value);\r\n }\r\n return value;\r\n }\r\n\r\n @action\r\n public setError(fieldName: keyof FieldType | string, value: string) {\r\n this.model.setError(fieldName, value);\r\n }\r\n\r\n public getError(fieldName: keyof FieldType | string) {\r\n return this.model.getError(fieldName);\r\n }\r\n\r\n @action\r\n public setValid(fieldName: keyof FieldType | string, value: boolean): void {\r\n this.model.setValid(fieldName, value);\r\n }\r\n\r\n public getValid(fieldName: keyof FieldType | string): boolean {\r\n return this.model.getValid(fieldName);\r\n }\r\n\r\n @action\r\n public setDirty(fieldName: keyof FieldType | string, value: boolean): void {\r\n this.model.setDirty(fieldName, value);\r\n }\r\n\r\n public getDirty(fieldName: keyof FieldType | string): boolean {\r\n return this.model.getDirty(fieldName);\r\n }\r\n\r\n @action\r\n public setTouched(fieldName: keyof FieldType | string, value: boolean): void {\r\n this.model.setTouched(fieldName, value);\r\n }\r\n\r\n public getTouched(fieldName: keyof FieldType | string): boolean {\r\n return this.model.getTouched(fieldName);\r\n }\r\n\r\n public isModelValid = () => {\r\n let valid = true;\r\n //EN: Flatten the object into dot notation so we can iterate over nested objects\r\n let target = dot.dot(this.model);\r\n for (let prop in target) {\r\n if (prop.indexOf(\"Errors.\") < 0 && prop.indexOf(\"Dirty.\") < 0 && prop.indexOf(\"Touched.\") < 0 && prop.indexOf(\"Valid.\") < 0) {\r\n if (prop != \"getParentObjectPath\") {\r\n this[\"isFieldValid\"](prop as any, _get(this.model, prop));\r\n }\r\n }\r\n }\r\n\r\n // //Run through again checking properties of model\r\n for (let prop in target) {\r\n if (prop.indexOf(\"Errors.\") < 0 && prop.indexOf(\"Dirty.\") < 0 && prop.indexOf(\"Touched.\") < 0 && prop.indexOf(\"Valid.\") < 0) {\r\n if (valid) {\r\n let path = getParentObjectPath(prop, \"Valid\");\r\n valid = _get(this.model, path);\r\n }\r\n }\r\n }\r\n runInAction(() => {\r\n this.Valid = valid;\r\n });\r\n return valid;\r\n };\r\n\r\n private parseObjectProperties = (obj: any, parse: any) => {\r\n for (let k in obj) {\r\n if (typeof obj[k] === \"object\" && obj[k] !== null) {\r\n this.parseObjectProperties(obj[k], parse);\r\n } else if (obj.hasOwnProperty(k)) {\r\n parse(obj, k);\r\n }\r\n }\r\n };\r\n\r\n public setDecorators = (model: any) => {\r\n this.meta = this.validatorStorage.getTargetValidationMetadatas(model, \"\");\r\n };\r\n\r\n public validateDecorators = (fieldName: keyof FieldType): ValidationResponse => {\r\n let target = this.meta.filter((a) => a.propertyName === fieldName).reverse();\r\n let message = \"\";\r\n if (target && target.length > 0) {\r\n let validated = false;\r\n target.some((t: ValidationMetadata) => {\r\n validated = this.validator.validateValueByMetadata(this.getValue(fieldName), t!);\r\n if (t.message) {\r\n message = t.message.toString();\r\n } else if (t.constraints.length > 0) {\r\n message = t.constraints[0].message;\r\n }\r\n return !validated;\r\n });\r\n //let vp = this.validator.length(\"\", 1, 10);\r\n //let ve = new ValidationExecutor(this.validator);\r\n //let promise = await validate(target!);\r\n return { isValid: validated, errorMessage: validated ? \"\" : message.toString() };\r\n } else {\r\n //No decorators found so presume no validation required\r\n return { isValid: true, errorMessage: \"\" };\r\n }\r\n };\r\n\r\n Get = >(\r\n url: string,\r\n //model?: any,\r\n config?: Axios.AxiosRequestConfig,\r\n ): Promise> => {\r\n this.setIsLoading(true);\r\n const postPromise = axios\r\n .get>(url, this.getConfig(config))\r\n .then(async (response) => {\r\n if (response.headers[\"token-expired\"]) {\r\n let newTokenResult = await axios.post>(\"/api/account/refresh\", {\r\n accessToken: localStorage.getItem(\".auth\"),\r\n });\r\n this.setLoginState(newTokenResult.data.payload);\r\n if (newTokenResult.data.payload.jwt === \"\") {\r\n //Go to session expired page\r\n window.location.href = \"/sessionexpired\";\r\n //return false;\r\n }\r\n //Make the original call again\r\n response = await axios.get>(url, this.getConfig(config));\r\n } else if (response.headers[\"unauthorized\"]) {\r\n this.logout();\r\n }\r\n CheckHttpStatus(response);\r\n this.setIsLoading(false);\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n this.setIsErrored(true);\r\n this.setIsLoading(false);\r\n this.setErrors(error);\r\n if (error.response.status === 401) {\r\n this.logout();\r\n }\r\n return { wasSuccessful: false };\r\n });\r\n\r\n return postPromise as Promise>;\r\n };\r\n\r\n Post = >(url: string, model?: any, config?: Axios.AxiosRequestConfig): Promise> => {\r\n this.setIsLoading(true);\r\n const postPromise = axios\r\n .post>(url, model, this.getConfig(config))\r\n .then(async (response) => {\r\n if (response.headers[\"token-expired\"]) {\r\n try {\r\n let newTokenResult = await axios.post>(\"/api/account/refresh\", {\r\n accessToken: localStorage.getItem(\".auth\"),\r\n });\r\n this.setLoginState(newTokenResult.data.payload);\r\n if (newTokenResult.data.payload.jwt === \"\") {\r\n //Go to session expired page\r\n window.location.href = \"/sessionexpired\";\r\n }\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n\r\n response = await axios.post>(url, model, this.getConfig(config));\r\n } else if (response.headers[\"unauthorized\"]) {\r\n this.logout();\r\n }\r\n CheckHttpStatus(response);\r\n this.setIsLoading(false);\r\n\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n this.setIsErrored(true);\r\n this.setIsLoading(false);\r\n this.setErrors(error);\r\n if (error.response.status === 401) {\r\n this.logout();\r\n }\r\n return { wasSuccessful: false };\r\n });\r\n\r\n return postPromise as Promise>;\r\n };\r\n\r\n setLoginState = (apiResult: AccountStatus) => {\r\n try {\r\n localStorage.setItem(\".auth\", apiResult.jwt as string);\r\n //EN: Hack at the moment so that we do not get cicular references\r\n // let stores = (window as any).Stores as Stores;\r\n // if (stores) {\r\n // \tstores.domain.AccountStore.getLoginState(apiResult);\r\n // }\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n };\r\n logout = () => {\r\n //(window as any).Stores.domain.AccountStore.Logout();\r\n this.history.push(\"/logout\");\r\n };\r\n getConfig = (config?: Axios.AxiosRequestConfig) => {\r\n const requestConfig = MergeDefaultConfig(config);\r\n //Sets the bearer on every header if available\r\n //Note: You might need to remove this bearer if calling 3rd party api's\r\n\r\n try {\r\n let jwt = localStorage.getItem(\".auth\") as string;\r\n if (jwt && jwt.length > 0) {\r\n requestConfig.headers = {\r\n Authorization: \"Bearer \" + jwt,\r\n \"content-type\": \"application/json\",\r\n };\r\n } else {\r\n requestConfig.headers = {\r\n \"content-type\": \"application/json\",\r\n };\r\n }\r\n } catch (e) {\r\n if (window.location.href.indexOf(\"/cookieerror\") === -1) {\r\n window.location.href = \"/cookieerror\";\r\n }\r\n }\r\n\r\n return requestConfig;\r\n };\r\n}\r\n","import { MUIPrimitives } from \"./../Views/MUIPrimitives\";\r\nimport { coreTheme } from \"./../../Core/Components/Styles/CoreStyling\";\r\nimport { createMuiTheme, Theme, ThemeOptions } from \"@material-ui/core/styles\";\r\nimport createBreakpoints from \"@material-ui/core/styles/createBreakpoints\";\r\nimport { colors } from \"@material-ui/core\";\r\nimport { Palette } from \"@material-ui/core/styles/createPalette\";\r\n\r\n//Define your custom breakpoints here or accept the default values which are the standard common breakpoints\r\n\r\nexport const breakpointTheme = createMuiTheme({\r\n breakpoints: {\r\n values: {\r\n xs: 0,\r\n sm: 600,\r\n md: 767,\r\n lg: 1024,\r\n xl: 1920,\r\n },\r\n },\r\n});\r\n\r\n//Add your specific app styling here\r\ndeclare module \"@material-ui/core\" {\r\n export interface Theme {\r\n app: {\r\n colors: {\r\n success: {\r\n dark: string;\r\n light: string;\r\n };\r\n };\r\n };\r\n }\r\n}\r\n\r\nexport const defaultTheme = createMuiTheme({\r\n typography: {\r\n fontFamily: [\"Nexa Regular\", \"Montserrat\", \"Roboto Condensed\", \"Helvetica\", \"Arial\", \"sans-serif\"].join(\",\"),\r\n // h1 - used by product selector\r\n h1: {\r\n fontFamily: \"Nexa Light\",\r\n fontSize: \"44px\",\r\n fontWeight: \"normal\",\r\n lineHeight: \"1.167\",\r\n },\r\n // h2 - used by product selector\r\n h2: {\r\n fontFamily: \"Nexa Bold\",\r\n fontSize: \"20.25px\",\r\n fontWeight: \"normal\",\r\n lineHeight: \"1.3\",\r\n },\r\n h3: {\r\n fontFamily: \"Nexa Bold\",\r\n fontSize: \"1.25rem\",\r\n fontWeight: \"normal\",\r\n },\r\n // h4 - used by product selector\r\n h4: {\r\n fontFamily: \"Nexa Bold\",\r\n fontSize: \"18.75px\",\r\n fontWeight: \"normal\",\r\n lineHeight: \"1.5\",\r\n },\r\n h5: {\r\n fontSize: \"0.83rem\",\r\n fontWeight: \"bold\",\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n //fontSize: \"0.55em\",\r\n },\r\n },\r\n h6: {\r\n fontSize: \"0.67rem\",\r\n fontWeight: \"bold\",\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n //fontSize: \"0.47em\",\r\n },\r\n },\r\n subtitle1: {\r\n fontSize: \"1rem\",\r\n fontWeight: 300,\r\n //lineHeight: `${1.8 * referenceFontSize}vw`,\r\n letterSpacing: \"-0.4px\",\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n //fontSize: \"1em\",\r\n //lineHeight: `${1.8 * referenceFontSize}vw`,\r\n //letterSpacing: \"-0.4px\",\r\n },\r\n },\r\n subtitle2: {\r\n fontSize: \"0.875rem\",\r\n //fontWeight: 300,\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n // fontSize: \"0.8em\",\r\n },\r\n },\r\n body1: {\r\n fontSize: \"1rem\",\r\n //fontWeight: 300,\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n // fontSize: \"0.8em\",\r\n },\r\n },\r\n // body2 - used by product selector\r\n body2: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"12px\",\r\n lineHeight: \"1.6\",\r\n },\r\n button: {\r\n fontSize: \"0.875rem\",\r\n //fontWeight: 300,\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n // fontSize: \"0.8em\",\r\n },\r\n },\r\n caption: {\r\n fontSize: \"0.75rem\",\r\n //fontWeight: 300,\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n // fontSize: \"0.8em\",\r\n },\r\n },\r\n overline: {\r\n fontSize: \"0.75rem\",\r\n //fontWeight: 300,\r\n [breakpointTheme.breakpoints.down(\"lg\")]: {\r\n // fontSize: \"0.8em\",\r\n },\r\n },\r\n },\r\n palette: {\r\n background: { paper: \"#fff\", default: \"#fff\" },\r\n primary: {\r\n main: \"#000000\",\r\n contrastText: \"#FFFFFF\",\r\n },\r\n secondary: {\r\n main: \"#c12631\",\r\n contrastText: \"#FFFFFF\",\r\n },\r\n },\r\n overrides: {\r\n MuiFormControlLabel: {\r\n label: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"14px\",\r\n },\r\n },\r\n MuiFormLabel: {\r\n root: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"14px\",\r\n },\r\n },\r\n MuiInput: {\r\n root: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"14px\",\r\n },\r\n },\r\n MuiInputAdornment: {\r\n root: {\r\n fontFamily: \"Nexa\",\r\n },\r\n },\r\n MuiInputLabel: {\r\n root: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"14px\",\r\n },\r\n },\r\n MuiLink: {\r\n root: {\r\n fontSize: \"14px\",\r\n },\r\n },\r\n },\r\n});\r\n","export * from \"./DomainStores\";\r\nexport * from \"./Stores\";\r\n","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__export(require(\"./GenericIncludeDeleted\"));\r\n__export(require(\"./SortDirection\"));\r\n","import { BaseStore } from \"./BaseStore\";\r\nimport { observable, autorun, action, computed, observe, runInAction, when } from \"mobx\";\r\nimport { Stores, StoresInstance } from \"../../Custom/Stores/Stores\";\r\nimport { LockForm } from \"../Models\";\r\nimport { Disposer } from \"../Models\";\r\nimport { DomainStores } from \"../../Custom/Stores/DomainStores\";\r\nimport { InitialState } from \"../../Custom/Models\";\r\nimport axios, { AxiosResponse } from \"axios\";\r\nimport { ApiResult } from \"Core/Models/ApiResult\";\r\nimport { HubConnection, HubConnectionBuilder, HubConnectionState, RetryContext } from \"@microsoft/signalr\";\r\n\r\nexport class FormLockConcurrencyHubStore extends BaseStore {\r\n private signalRConcurrencyHubConnection: HubConnection;\r\n private domainStores?: DomainStores;\r\n\r\n @observable private formLocks = observable<{ [ref: string]: { locked: boolean; lockedBy: string; id: string } }>({}); // Keep track of who by and if all form types are locked\r\n @observable private formRef = \"\"; // The form ref the client is currently tracking\r\n @observable private disposers: Disposer[] = []; // Disposers to unregister from notifications\r\n @observable private connectionQueue: (() => void)[] = []; // Queue of callbacks to invoke when the connection is started\r\n @observable private registeredForms: number[] = []; // Keep track of which forms the client has registered to recieve notification for\r\n @observable private cid: string = \"\"; // The current connection id\r\n @observable private myLockedForms: number[] = []; // The forms the client intents to be locked (to keep track of which forms should be re-claimed if the server goes down)\r\n @observable private signalRAccessToken: string = \"\";\r\n @observable private connectedServer: string = \"\";\r\n @observable private enabled: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.signalRConcurrencyHubConnection = new HubConnectionBuilder()\r\n .withUrl(`/hubs/concurrency/formlock`, { accessTokenFactory: () => this.signalRAccessToken }) // Access token to allow authentication, also allows server to get the username of the client\r\n .withAutomaticReconnect({\r\n nextRetryDelayInMilliseconds: (context: RetryContext) => {\r\n return 1000;\r\n },\r\n }) // Don't stop attempting to reconnect\r\n .build();\r\n }\r\n\r\n public init(stores: Stores, initialState: InitialState) {\r\n this.domainStores = stores.domain;\r\n this.signalRAccessToken = initialState.accountStatus.signalRAccessToken;\r\n this.enabled = initialState.appSettings.useFormLockConcurrency === \"true\";\r\n\r\n autorun(() => {\r\n /* if (this.domainStores!.AccountStore.IsLoggedIn && this.signalRAccessToken) {\r\n this.connect();\r\n } else {\r\n if (this.enabled) {\r\n axios.post(`/api/account/GetSignalRToken`).then((apiResult: AxiosResponse>) => {\r\n if (apiResult.status === 200 && apiResult.data && apiResult.data.wasSuccessful) {\r\n this.setSignalRAccessToken(apiResult.data.payload);\r\n }\r\n });\r\n } else {\r\n this.disconnect();\r\n }\r\n } */\r\n });\r\n }\r\n\r\n @action\r\n public enqueueToConnectionQueue(cb: () => void) {\r\n this.connectionQueue.push(cb);\r\n }\r\n\r\n @action\r\n private setInitialFormLocks() {\r\n this.signalRConcurrencyHubConnection.invoke(`GetAreFormsLockedAsync`, this.registeredForms, this.formRef).then((initalFormLocks: string[]) => {\r\n initalFormLocks.forEach((lockedBy: string, index: number) => {\r\n runInAction(() => {\r\n this.formLocks[this.registeredForms[index]] = { locked: lockedBy !== \"\", lockedBy: lockedBy, id: \"\" };\r\n });\r\n });\r\n });\r\n }\r\n\r\n @action\r\n public setSignalRAccessToken(token: string) {\r\n this.signalRAccessToken = token;\r\n }\r\n\r\n // Track a new set of forms\r\n @action\r\n public setFormsInfo(ref: string, forms: number[]) {\r\n // Create callback\r\n const setForms = () => {\r\n // Dispose to unregister from any previous notifications\r\n this.disposers.forEach((disposer) => {\r\n disposer.dispose();\r\n });\r\n // Reset disposers\r\n this.disposers = [];\r\n // Reset which forms are locked\r\n this.formLocks = this.getResetFormLocks;\r\n // Set the reference for the new forms\r\n this.formRef = ref;\r\n // Set new forms as the registered forms\r\n this.registeredForms = forms;\r\n // Register for notifications for new forms\r\n this.registerForms();\r\n // Get which forms are already locked\r\n this.setInitialFormLocks();\r\n };\r\n\r\n // If the connection to the server is ready, run the above callback\r\n if (this.getIsHubConnected) {\r\n setForms();\r\n } else {\r\n // Otherwise, add it to a queue to invoke when it becomes ready\r\n this.connectionQueue.push(setForms);\r\n }\r\n }\r\n\r\n @action\r\n private registerForms() {\r\n // Register for notifications for all form types in list\r\n this.registeredForms.forEach((form) => {\r\n this.disposers.push(this.registerFormLocks(form));\r\n });\r\n }\r\n\r\n @computed\r\n public get getIsHubConnected() {\r\n return this.signalRConcurrencyHubConnection.state === HubConnectionState.Connected;\r\n }\r\n\r\n @computed\r\n private get getResetFormLocks() {\r\n // The observable dictionary for tracking locked form types\r\n return observable<{ [ref: string]: { locked: boolean; lockedBy: string; id: string } }>({});\r\n }\r\n\r\n @action\r\n private onLock = (lockForm: LockForm) => {\r\n // Handle message from server to lock a form type\r\n this.formLocks[lockForm.formType] = { locked: true, lockedBy: lockForm.lockedByName, id: lockForm.id };\r\n };\r\n\r\n @action\r\n private onUnlock = (lockForm: LockForm) => {\r\n // Handle message from server to unlock a form type\r\n this.formLocks[lockForm.formType] = { ...this.formLocks[lockForm.formType], locked: false };\r\n };\r\n\r\n @computed\r\n public get getFormRef() {\r\n return this.formRef;\r\n }\r\n\r\n // Try to lock the form if not already, returning a promise which will resolve to a boolean indicating if this client now has the form type locked\r\n @action\r\n public async lockForm(formType: number) {\r\n let success = await this.signalRConcurrencyHubConnection.invoke(`TryLockFormForEditing`, formType, this.formRef);\r\n if (success) {\r\n // CMR Don't need form locking?\r\n // Wait for notification from the server to be added to the formLocks dictionary for verification\r\n /* await when(() => this.formLocks[formType] && this.formLocks[formType].locked && this.formLocks[formType].lockedBy === this.domainStores!.AccountStore.);\r\n // Add it to the list of forms locked by this client\r\n this.myLockedForms.push(formType); */\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n @action\r\n public async forceUnlockForm(formType: number, formRef: string) {\r\n await this.signalRConcurrencyHubConnection.invoke(`ForceUnlockForm`, formType, formRef);\r\n }\r\n\r\n @action\r\n public unlockAllForms() {\r\n this.myLockedForms.forEach((form) => {\r\n this.unlockForm(form);\r\n });\r\n }\r\n\r\n // Unlock a form type\r\n @action\r\n public unlockForm(formType: number) {\r\n this.signalRConcurrencyHubConnection.send(`UnlockForm`, this.formLocks[formType].id);\r\n // Remove from list of forms locked by this client\r\n this.myLockedForms.splice(this.myLockedForms.indexOf(formType), 1);\r\n }\r\n\r\n public getLocker(formType: number) {\r\n let form = this.formLocks[formType];\r\n return form ? form.lockedBy : \"\";\r\n }\r\n\r\n public getIsFormLocked(formType: number) {\r\n let form = this.formLocks[formType];\r\n // Don't include if the form is locked by this client\r\n // CMR Don't need return form ? form.locked && form.lockedBy !== this.domainStores!.AccountStore.DisplayName : false;\r\n return false;\r\n }\r\n\r\n // Register for notifications for a form type\r\n private registerFormLocks = (formType: number): Disposer => {\r\n this.signalRConcurrencyHubConnection.send(`JoinFormLockGroup`, formType, this.formRef).catch((error) => {\r\n console.error(`Failed to \"JoinFormLockGroup\": ${error}`);\r\n });\r\n\r\n // Return a disposer to unregister from the notifications\r\n return {\r\n dispose: () => {\r\n if (this.signalRConcurrencyHubConnection !== null && this.signalRConcurrencyHubConnection !== undefined) {\r\n this.signalRConcurrencyHubConnection.send(`LeaveFormLockGroup`, formType, this.formRef).catch((error) => {\r\n console.error(`Failed to \"LeaveFormLockGroup\": ${error}`);\r\n });\r\n }\r\n },\r\n };\r\n };\r\n\r\n // Connect to the server\r\n @action\r\n private connect = () => {\r\n // Make sure client isn't already connected\r\n if (this.signalRConcurrencyHubConnection.state === HubConnectionState.Disconnected) {\r\n this.signalRConcurrencyHubConnection.start().then(() => {\r\n // Connection established\r\n // Track the connection id of this connection\r\n this.cid = this.signalRConcurrencyHubConnection.connectionId!;\r\n\r\n this.signalRConcurrencyHubConnection.invoke(`GetServerSessionId`).then((serverSessionId: string) => {\r\n runInAction(() => {\r\n this.connectedServer = serverSessionId;\r\n });\r\n });\r\n // Add handler for if the server goes down and needs to reconnect\r\n this.signalRConcurrencyHubConnection.onreconnected(() => {\r\n // Register for notifications on the forms on new connection\r\n this.registerForms();\r\n // Send a reconnection message to handle which forms are locked by this client\r\n this.signalRConcurrencyHubConnection.send(`Reconnected`, this.cid, this.myLockedForms, this.connectedServer);\r\n // Track the connection id of this new connection\r\n this.cid = this.signalRConcurrencyHubConnection.connectionId!;\r\n // Get which forms are already locked\r\n this.setInitialFormLocks();\r\n });\r\n this.signalRConcurrencyHubConnection.onreconnecting(() => {\r\n let intervalId = window.setInterval(() => {\r\n axios.post(`/api/account/GetSignalRToken`).then((apiResult: AxiosResponse>) => {\r\n if (apiResult.status === 200 && apiResult.data && apiResult.data.wasSuccessful) {\r\n window.clearInterval(intervalId);\r\n this.setSignalRAccessToken(apiResult.data.payload);\r\n }\r\n });\r\n }, 1000);\r\n });\r\n // Register handlers for lock & unlock notifications\r\n this.signalRConcurrencyHubConnection.on(`LockForm`, this.onLock);\r\n this.signalRConcurrencyHubConnection.on(`UnlockForm`, this.onUnlock);\r\n // Invoke any callbacks in the connection queue\r\n this.connectionQueue.forEach((cb) => {\r\n runInAction(() => {\r\n cb();\r\n });\r\n });\r\n });\r\n }\r\n };\r\n\r\n // Disconnect from the server\r\n @action\r\n private disconnect = () => {\r\n // Make sure client isn't already disconnected\r\n if (this.signalRConcurrencyHubConnection.state === HubConnectionState.Connected) {\r\n // Unregister handlers for lock & unlock notifications\r\n this.signalRConcurrencyHubConnection.off(`LockForm`, this.onLock);\r\n this.signalRConcurrencyHubConnection.off(`UnlockForm`, this.onUnlock);\r\n // Stop the connection\r\n this.signalRConcurrencyHubConnection.stop();\r\n }\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\r\nimport { observable, runInAction } from \"mobx\";\r\nimport { defaultTheme } from \"../../Custom/StylesAppSpecific/AppStyling\";\r\nimport * as GoogleAnalytics from \"../Utils/App/GoogleAnalyticsUtils\";\r\nimport { EventArgs } from \"react-ga\";\r\nimport { FormLockConcurrencyHubStore } from \"./FormLockConcurrencyHubStore\";\r\nimport { Stores } from \"../../Custom/Stores\";\r\nimport { InitialState } from \"../../Custom/Models\";\r\nimport * as MobX from \"mobx\";\r\n\r\nexport class CoreStore {\r\n @observable public screenWidth = 0;\r\n @observable public isMobile = false;\r\n @observable public isTablet = false;\r\n @observable public isDesktop = false;\r\n public FormLockConcurrencyHubStore = new FormLockConcurrencyHubStore();\r\n\r\n public constructor() {}\r\n\r\n public Init = (stores: Stores, initialState: InitialState) => {\r\n //GoogleAnalytics.Init(\"UA-1852243-71\");\r\n window.addEventListener(\"resize\", () => {\r\n this.setWidth();\r\n });\r\n this.setWidth();\r\n this.FormLockConcurrencyHubStore.init(stores, initialState);\r\n\r\n //this.domain.History = history;\r\n // EN: For debugging\r\n (window as any).Stores = stores;\r\n (window as any).MobX = MobX;\r\n };\r\n\r\n private setWidth = () => {\r\n runInAction(() => {\r\n this.screenWidth = document.body.clientWidth;\r\n this.isMobile = this.screenWidth <= defaultTheme.breakpoints.values[\"md\"];\r\n this.isTablet = this.screenWidth > defaultTheme.breakpoints.values[\"md\"] && this.screenWidth <= defaultTheme.breakpoints.values[\"lg\"];\r\n this.isDesktop = this.screenWidth > defaultTheme.breakpoints.values[\"lg\"];\r\n // document.body.classList.remove(\"mobile\");\r\n // document.body.classList.remove(\"tablet\");\r\n // document.body.classList.remove(\"desktop\");\r\n // if (this.isMobile) {\r\n // \tdocument.body.classList.add(\"mobile\");\r\n // \tdocument.body.classList.remove(\"tablet\");\r\n // \tdocument.body.classList.remove(\"desktop\");\r\n // }\r\n // if (this.isTablet) {\r\n // \tdocument.body.classList.add(\"tablet\");\r\n // \tdocument.body.classList.remove(\"mobile\");\r\n // \tdocument.body.classList.remove(\"desktop\");\r\n // }\r\n // if (this.isDesktop) {\r\n // \tdocument.body.classList.add(\"desktop\");\r\n // \tdocument.body.classList.remove(\"mobile\");\r\n // \tdocument.body.classList.remove(\"tablet\");\r\n // }\r\n });\r\n //console.log(`Screen Mobile=${this.isMobile}, Tablet=${this.isTablet},Desktop=${this.isDesktop}`);\r\n };\r\n\r\n public PageView = (page: string) => {\r\n GoogleAnalytics.pageview(page);\r\n };\r\n\r\n public SendEvent = (args: EventArgs) => {\r\n GoogleAnalytics.sendEvent(args);\r\n };\r\n}\r\n","import { DomainStores } from \"./DomainStores\";\r\n/* eslint-disable @typescript-eslint/no-parameter-properties */\r\nimport * as Models from \"../Models\";\r\nimport * as MobX from \"mobx\";\r\nimport React, { createContext } from \"react\";\r\nimport { CoreStore } from \"../../Core/Stores/CoreStore\";\r\n\r\nexport class Stores {\r\n public coreStore: CoreStore = new CoreStore();\r\n public domain: DomainStores = new DomainStores();\r\n\r\n public constructor() {}\r\n\r\n public init(initialState: Models.InitialState) {\r\n this.coreStore.Init(this, initialState);\r\n this.domain.init(this, initialState);\r\n }\r\n}\r\nexport const StoresInstance = new Stores();\r\nexport const StoresContext: React.Context = createContext(StoresInstance);\r\n","export class GenericIncludeDeleted {\r\n public includeDeleted: boolean = false;\r\n}\r\n","export enum SortDirection {\r\n None = 0,\r\n Asc = 1,\r\n Desc = 2,\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL((process as { env: { [key: string]: string } }).env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\"This web app is being served cache-first by a service \" + \"worker. To learn more, visit https://bit.ly/CRA-PWA\");\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\"New content is available and will be used when all \" + \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\");\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\");\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error(\"Error during service worker registration:\", error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get(\"content-type\");\r\n if (response.status === 404 || (contentType != null && contentType.indexOf(\"javascript\") === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\"No internet connection found. App is running in offline mode.\");\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import _get from \"lodash/get\";\r\nimport { SortDirection, SortingProperty } from \"Custom/Models\";\r\n\r\nexport type SortValueResolver = (item: TItem, key: string) => TValue;\r\nexport const defaultValueResolver: SortValueResolver = (item, key) => _get(item, key);\r\n\r\nexport const createSorter = (sortBy: string, sortDirection: SortDirection, valueResolver: SortValueResolver = defaultValueResolver) => {\r\n return (a: TArray, b: TArray) => {\r\n let valueA: TValue | string = valueResolver(a, sortBy);\r\n let valueB: TValue | string = valueResolver(b, sortBy);\r\n\r\n if (valueA !== null && typeof valueA === \"string\") {\r\n valueA = valueA.toLocaleLowerCase();\r\n }\r\n\r\n if (valueB !== null && typeof valueB === \"string\") {\r\n valueB = valueB.toLocaleLowerCase();\r\n }\r\n\r\n let sortValue = 0;\r\n\r\n if (valueA < valueB || (valueA === null && valueB !== null)) {\r\n sortValue = -1;\r\n } else if (valueA > valueB || (valueA !== null && valueB === null)) {\r\n sortValue = 1;\r\n }\r\n\r\n if (sortValue != 0 && sortDirection === SortDirection.Desc) {\r\n sortValue *= -1;\r\n }\r\n\r\n return sortValue;\r\n };\r\n};\r\n\r\nexport const sortBy = (array: TArray[], sortBy: string, sortDirection: SortDirection) => {\r\n const sorter = createSorter(sortBy, sortDirection);\r\n const sortedArray = array.sort(sorter);\r\n\r\n return sortedArray;\r\n};\r\n\r\nexport const sortByIncludingChildren = (\r\n array: TArray[],\r\n sortBy: string,\r\n sortDirection: SortDirection,\r\n // eslint-disable-next-line prettier/prettier\r\n callback: (sortBy: string, a: TArray, b: TArray) => { A: TArray; B: TArray },\r\n) => {\r\n const sorter = (a: TArray, b: TArray) => {\r\n //TODO: AJ: Type detection for \"smart\" sorting\r\n //AJ: https://stackoverflow.com/questions/32968332/how-do-i-prevent-the-error-index-signature-of-object-type-implicitly-has-an-an\r\n const inputs = callback(sortBy, a, b);\r\n let valueA: TArray | string = inputs.A;\r\n let valueB: TArray | string = inputs.B;\r\n\r\n let sortValue = 0;\r\n\r\n if (valueA !== null && typeof valueA === \"string\") {\r\n valueA = valueA.toLocaleLowerCase();\r\n }\r\n\r\n if (valueB !== null && typeof valueB === \"string\") {\r\n valueB = valueB.toLocaleLowerCase();\r\n }\r\n\r\n if (valueA < valueB || (valueA === null && valueB !== null)) {\r\n sortValue = -1;\r\n } else if (valueA > valueB || (valueA !== null && valueB === null)) {\r\n sortValue = 1;\r\n }\r\n\r\n if (sortValue != 0 && sortDirection === SortDirection.Desc) {\r\n sortValue *= -1;\r\n }\r\n\r\n return sortValue;\r\n };\r\n\r\n const sortedArray = array.sort(sorter);\r\n\r\n return sortedArray;\r\n};\r\n\r\nexport const multiSortBy = (\r\n array: any[],\r\n sortBys: string[],\r\n sortDirections: { [Key: string]: SortDirection },\r\n valueResolver: SortValueResolver = defaultValueResolver,\r\n) => {\r\n const sorter = createMultiSorter(sortBys, sortDirections);\r\n const sortedArray = array.sort(sorter);\r\n\r\n return sortedArray;\r\n};\r\n\r\nexport const createMultiSorter = (\r\n sortBys: string[],\r\n sortDirections: { [Key: string]: SortDirection },\r\n valueResolver: SortValueResolver = defaultValueResolver,\r\n) => {\r\n const sortings = sortBys.map((sortBy) => ({\r\n sortBy: sortBy,\r\n sortDirection: sortDirections[sortBy],\r\n }));\r\n\r\n return createSortingSorter(sortings, valueResolver);\r\n};\r\n\r\nexport const createSortingSorter = (sortings: SortingProperty[], valueResolver: SortValueResolver = defaultValueResolver) => (\r\n a: any,\r\n b: any,\r\n) => {\r\n let result = 0;\r\n\r\n for (const sorting of sortings) {\r\n let valueA: TValue | string = valueResolver(a, sorting.sortBy);\r\n let valueB: TValue | string = valueResolver(b, sorting.sortBy);\r\n\r\n if (valueA !== null && typeof valueA === \"string\") {\r\n valueA = valueA.toLocaleLowerCase();\r\n }\r\n\r\n if (valueB !== null && typeof valueB === \"string\") {\r\n valueB = valueB.toLocaleLowerCase();\r\n }\r\n\r\n result = valueA > valueB || (valueA !== null && valueB === null) ? 1 : valueA < valueB || (valueA === null && valueB !== null) ? -1 : 0;\r\n\r\n result = sorting.sortDirection === SortDirection.Asc ? result : sorting.sortDirection === SortDirection.Desc ? result * -1 : 0;\r\n\r\n if (result !== 0) break;\r\n }\r\n\r\n return result;\r\n};\r\n","// eslint-disable-next-line prettier/prettier\r\nexport function isNullOrUndefined(obj: T | null | undefined): obj is null | undefined {\r\n return typeof obj === \"undefined\" || obj === null;\r\n}\r\n","export let applicationHeight: number;\r\nexport const sendPostMessage = (document: any) => {\r\n if (applicationHeight !== document.getElementById(\"bqs-wrapper\").offsetHeight) {\r\n applicationHeight = document.getElementById(\"bqs-wrapper\").offsetHeight;\r\n\r\n window.parent.postMessage(\r\n {\r\n frameHeight: applicationHeight,\r\n },\r\n \"*\",\r\n );\r\n //console.log(applicationHeight); // check the message is being sent correctly\r\n }\r\n};\r\n","import { registerDecorator, ValidationOptions, ValidationArguments } from \"class-validator\";\r\n\r\nexport function MinusGtrZero(property: string, validationOptions?: ValidationOptions) {\r\n return function (object: Object, propertyName: string) {\r\n registerDecorator({\r\n name: \"minusGtrZero\",\r\n target: object.constructor,\r\n propertyName: propertyName,\r\n constraints: [property],\r\n options: validationOptions,\r\n validator: {\r\n validate(value: any, args: ValidationArguments) {\r\n const [relatedPropertyName]: string[] = args.constraints;\r\n const relatedValue: number = (args.object as any)[relatedPropertyName];\r\n const retVal: boolean = typeof value === \"number\" && typeof relatedValue === \"number\" && value - relatedValue >= 0;\r\n return retVal;\r\n },\r\n },\r\n });\r\n };\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { CSSGrid, Cell } from \"../../Core/Components/Styles\";\r\nimport * as Utils from \"./../Utils\";\r\n\r\n//EN: use empty generic type to get default react props\r\nexport const Layout: React.FC<{}> = (props) => {\r\n useEffect(() => {\r\n let handleResize = () => {\r\n Utils.sendPostMessage(window.document);\r\n };\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n window.addEventListener(\"onload\", handleResize);\r\n\r\n var observer = new MutationObserver(handleResize);\r\n observer.observe(document.body, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true,\r\n });\r\n\r\n return () => {\r\n observer.disconnect();\r\n window.removeEventListener(\"resize\", handleResize);\r\n window.removeEventListener(\"onload\", handleResize);\r\n };\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n

{props.children}
\r\n \r\n \r\n \r\n );\r\n};\r\n","import React from \"react\";\r\nimport { styled } from \"../../Core/Base\";\r\n\r\nconst spriteWidth = \"132px\";\r\nconst spriteHeight = \"132px\";\r\nconst wellBackground = \"#f3f3f3\";\r\nconst textColor = \"#595959\";\r\nconst goodBg = \"#f8f8f8\";\r\nconst bestBg = \"#f0f0f0\";\r\n\r\nconst Main = styled.div`\r\n padding-top: 70px;\r\n\r\n body.unsupported {\r\n background: #f2f2f3;\r\n width: 100%;\r\n }\r\n .unsupported .container2 {\r\n width: 100%;\r\n min-width: 300px;\r\n }\r\n .unsupported-browser {\r\n background: #fff;\r\n margin: 35px auto;\r\n width: 100%;\r\n box-shadow: 0 0 5px #cacace;\r\n position: relative;\r\n padding: 20px 30px;\r\n text-align: left;\r\n }\r\n .unsupported-browser h1 {\r\n font-size: 2em;\r\n font-weight: 0;\r\n }\r\n .unsupported-browser h2 {\r\n border: 0;\r\n }\r\n .unsupported-browser li {\r\n margin-bottom: 5px;\r\n }\r\n .unsupported-browser li a {\r\n color: inherit;\r\n }\r\n .unsupported-browser li a:hover {\r\n color: #007bc3;\r\n }\r\n .unsupported hr {\r\n margin-top: 50px;\r\n }\r\n .unsupported-message {\r\n font-size: 0.9em;\r\n margin-top: 40px;\r\n margin-bottom: 30px;\r\n }\r\n .unsupported-message li {\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nexport const UnsupportedBrowser: React.FC = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Please upgrade your browser in order to use PPE Exchange

\r\n
\r\n

\r\n We built PPE Exchange using the latest technology which improves the look of the site, increases the speed of the site, and gives you a better\r\n experience with new features and functions. Unfortunately, your browser does not support these technologies.\r\n

\r\n
\r\n

Please download one of these free and up-to-date browsers:

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

I can't update my browser

\r\n
\r\n
    \r\n
  • Ask your system administrator to update your browser if you cannot install updates yourself.
  • \r\n
  • \r\n If you can't change your browser because of compatibility issues, think about installing a second browser for utilization of this site\r\n and keep the old one for compatibility.\r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nimport pricing_tool_banner_deep768x346 from \"Custom/Content/User/pricing_tool_banner_deep-768x346.jpg\";\r\nimport pricing_tool_banner_deep from \"Custom/Content/User/pricing_tool_banner_deep.jpg\";\r\n\r\nexport const UserPageHeader: any = styled(Box)`\r\n background-color: #fff;\r\n height: 300px;\r\n min-width: \"100%\";\r\n background-attachment: scroll;\r\n background-size: cover;\r\n background-repeat: none !important; // Why does material UI overwrite this?\r\n background-origin: padding-box;\r\n background-position-x: center;\r\n background-position-y: center;\r\n display: block;\r\n padding-left: 15px;\r\n padding-right: 15px;\r\n background-size: auto;\r\n\r\n @media only screen and (max-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) {\r\n height: 200px;\r\n background-image: url(${pricing_tool_banner_deep768x346});\r\n background-size: cover;\r\n background-repeat: none !important; // Why does material UI overwrite this?\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) and (max-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n height: 200px;\r\n background-image: url(${pricing_tool_banner_deep768x346});\r\n background-size: cover;\r\n background-repeat: none !important; // Why does material UI overwrite this?\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n height: 300px;\r\n background-image: url(${pricing_tool_banner_deep});\r\n }\r\n`;\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const UserPageHeaderText: any = styled(Box)`\r\n min-height: 200px;\r\n position: relative;\r\n left: 15px;\r\n font-weight: 500;\r\n font-style: normal;\r\n font-size: 36px;\r\n font-family: \"Nexa Light\";\r\n color: #ffffff;\r\n margin: 0 auto 0 auto;\r\n width: 100%;\r\n max-width: 1140px;\r\n\r\n @media only screen and (max-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) {\r\n height: 200px;\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) and (max-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n height: 200px;\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n height: 300px;\r\n }\r\n\r\n .quickquote {\r\n position: absolute;\r\n bottom: 40px;\r\n line-height: 52.8px;\r\n // background-color: green;\r\n }\r\n`;\r\n","import { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\nimport { FieldType } from \"../Utils/Utils\";\r\n\r\n//extend viewmodel base and passing your model as the generic type\r\nexport class AutoGridViewModel extends ViewModelBase {\r\n //Singleton instance of class\r\n private static _instance: AutoGridViewModel;\r\n public static get Instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n constructor() {\r\n super(null, false);\r\n }\r\n\r\n public FormatAreas = (areas: string[]) => {\r\n if (areas && areas.length > 0) {\r\n return areas.map((area) => `\"${area}\"`).join(\" \");\r\n }\r\n return \"\";\r\n };\r\n\r\n //This must be present in your viewmodel. Just return true if you dont need to validate anything.\r\n //keyof BlankModel & string lets you add type checking to the fieldName\r\n //I am using the validator package to make checking easier https://www.npmjs.com/package/validator\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, useMediaQuery } from \"@material-ui/core\";\r\nimport { StoresInstance } from \"Custom/Stores\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport { autorun } from \"mobx\";\r\nimport { AutoGridViewModel } from \"../ViewModels/AutoGridViewModel\";\r\n\r\n//type AutoGridProps = React.ComponentType & {\r\ntype AutoGridProps = {\r\n id?: string;\r\n height?: string | number;\r\n columns?: string;\r\n mobileColumns?: string;\r\n tabletColumns?: string;\r\n desktopColumns?: string;\r\n mobileRows?: string;\r\n tabletRows?: string;\r\n desktopRows?: string;\r\n mobileArea?: string[];\r\n tabletArea?: string[];\r\n desktopArea?: string[];\r\n columnGap?: string | number;\r\n rowGap?: string | number;\r\n children?: React.ReactNode;\r\n paddingTop?: string | number;\r\n padding?: string | number;\r\n justifyContent?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\r\n justifyItems?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\r\n justifySelf?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\r\n alignContent?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\r\n alignItems?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\r\n} & React.HTMLAttributes;\r\nexport const AutoGrid: React.FC = (props: AutoGridProps) => {\r\n const [viewModel] = useState(() => new AutoGridViewModel());\r\n const [columns, setColumns] = React.useState(props.desktopColumns);\r\n const [rows, setRows] = React.useState(props.desktopRows);\r\n const [area, setArea] = React.useState(props.desktopArea!);\r\n const [view, setView] = React.useState(\"desktop\");\r\n\r\n useEffect(() => {\r\n autorun(() => {\r\n //\tconsole.log(StoresInstance.domain.screenWidth);\r\n let tabletArea = props.tabletArea === undefined ? props.desktopArea : props.tabletArea;\r\n if (StoresInstance.coreStore.isMobile) {\r\n setColumns(props.mobileColumns!);\r\n setRows(props.mobileRows!);\r\n setArea(props.mobileArea!);\r\n setView(\"mobile\");\r\n } else if (StoresInstance.coreStore.isTablet) {\r\n setColumns(props.tabletColumns!);\r\n setRows(props.tabletRows!);\r\n setArea(tabletArea!);\r\n setView(\"tablet\");\r\n } else if (StoresInstance.coreStore.isDesktop) {\r\n setColumns(props.desktopColumns!);\r\n setRows(props.desktopRows!);\r\n setArea(props.desktopArea!);\r\n setView(\"desktop\");\r\n }\r\n });\r\n }, []);\r\n\r\n return useObserver(() => (\r\n <>\r\n \r\n {props.children}\r\n \r\n \r\n ));\r\n};\r\nAutoGrid.defaultProps = {\r\n columnGap: \"1em\",\r\n rowGap: \"0.5em\",\r\n //paddingTop: \"0\",\r\n mobileColumns: \"1fr\",\r\n //tabletColumns: \"1fr 1fr\",\r\n //desktopColumns: \"1fr 1fr 1fr 1fr\",\r\n justifyContent: \"normal\",\r\n alignContent: \"normal\",\r\n};\r\n","import styled from \"styled-components\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nimport { AutoGrid } from \"Core/Components/AutoGrid\";\r\n\r\nexport const UserPageDescriptionGrid: any = styled(AutoGrid)`\r\n font-family: \"Nexa Light\";\r\n padding: 60px 15px;\r\n width: 100%;\r\n max-width: 1140px;\r\n margin: 0 auto;\r\n`;\r\n","import Box from \"@material-ui/core/Box\";\r\nimport budget_quote_300x69 from \"Custom/Content/User/budget_quote_UPDATE4-300x69.png\";\r\nimport budget_quote_370x85 from \"Custom/Content/User/budget_quote_UPDATE4-370x85.png\";\r\nimport budget_quote from \"Custom/Content/User/budget_quote_UPDATE4.png\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\nimport styled from \"styled-components\";\r\n\r\nexport const DescriptionBox: any = styled(Box)`\r\n padding: 15px;\r\n\r\n .sectiontitle {\r\n font-weight: 700;\r\n font-size: 15px;\r\n }\r\n\r\n ul {\r\n font-family: \"Helvetica Neue\", Helvetica, sans-serif;\r\n font-weight: 300;\r\n font-size: 15px;\r\n line-height: 24px;\r\n }\r\n\r\n .bugetQuote {\r\n background-position-x: 0%;\r\n background-position-y: 0%;\r\n background-size: auto;\r\n background-repeat: no-repeat;\r\n background-origin: padding-box;\r\n }\r\n\r\n .budgetcaption {\r\n font-size: 15px;\r\n line-height: 24px;\r\n padding: 15px 0;\r\n }\r\n\r\n .descriptionGutter,\r\n .descriptionRoof {\r\n padding-bottom: 15px;\r\n }\r\n\r\n @media only screen and (max-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) {\r\n .bugetQuote {\r\n background-image: url(${budget_quote_300x69});\r\n height: 65px;\r\n }\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) and (max-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n .bugetQuote {\r\n background-image: url(${budget_quote_370x85});\r\n height: 85px;\r\n }\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n .bugetQuote {\r\n background-image: url(${budget_quote});\r\n max-width: 720px;\r\n height: 110px;\r\n }\r\n }\r\n`;\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\nimport OldhamProject_5 from \"Custom/Content/User/Oldham-Project-5.jpg\";\r\nimport OldhamProject_5_300x200 from \"Custom/Content/User/Oldham-Project-5-300x200.jpg\";\r\nimport Oldham_Project_5_370x247 from \"Custom/Content/User/Oldham-Project-5-370x247.jpg\";\r\n\r\nexport const DescriptionImageBox: any = styled(Box)`\r\n background-position-x: 0%;\r\n background-position-y: 0%;\r\n background-size: auto;\r\n background-repeat: no-repeat;\r\n background-origin: padding-box;\r\n\r\n @media only screen and (max-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) {\r\n background-image: url(${OldhamProject_5_300x200});\r\n height: 115px;\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) and (max-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n background-image: url(${Oldham_Project_5_370x247});\r\n height: 115px;\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n background-image: url(${OldhamProject_5});\r\n }\r\n`;\r\n","import styled from \"styled-components\";\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nexport const UserPageExplanationWrapper: any = styled(Box)`\r\n width: 100%;\r\n background-color: #f2f1f1;\r\n padding: 60px 15px;\r\n\r\n /* Really don't like using a stylized autogrid ignores the styles so have to wrap it. */\r\n #userpagegrid {\r\n width: 100%;\r\n max-width: 1140px;\r\n margin: 0 auto;\r\n }\r\n`;\r\n\r\nexport const UserPageDescriptionWrapper: any = styled(Box)`\r\n width: 100%;\r\n padding: 60px 15px 30px 15px;\r\n\r\n /* Really don't like using a stylized autogrid ignores the styles so have to wrap it. */\r\n #descriptiongrid {\r\n width: 100%;\r\n max-width: 1140px;\r\n margin: 0 auto;\r\n }\r\n`;\r\n","import { Box, Typography } from \"@material-ui/core\";\r\nimport React from \"react\";\r\n\r\nimport { UserPageDescriptionGrid } from \"./UserPageDescriptionGrid\";\r\nimport { DescriptionBox } from \"./DescriptionBox\";\r\nimport { DescriptionImageBox } from \"./DescriptionImagebox\";\r\nimport { UserPageDescriptionWrapper } from \"./UserPageExplanationWrapper\";\r\n\r\nexport const UserPageDescriptionControl: React.FunctionComponent = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Budget quote provides project pricing for roof coatings and gutter refurbishment systems: Seamsil®, Delcote ®, Delglaze ®, Plygene® and Delcote GS\r\n \r\n \r\n\r\n {/* \r\n \r\n Gutter refurbishment\r\n \r\n
    \r\n
  • Plygene® gutterline system
  • \r\n
  • Delcote GS gutter coating system
  • \r\n
\r\n
*/}\r\n {/* \r\n \r\n Roof refurbishment\r\n \r\n
    \r\n
  • Seamsil® cut edge corrosion system
  • \r\n
  • Delcote® architectural full roof coating system
  • \r\n
  • Delglaze® rooflight system
  • \r\n
\r\n
*/}\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n","import { makeStyles } from \"@material-ui/core\";\r\n\r\nexport const LinkVariants = makeStyles((theme) => ({\r\n rulertel: {\r\n color: \"#c70101\",\r\n fontSize: \"20px\",\r\n fontWeight: 700,\r\n lineHeight: \"20px\",\r\n textDecoration: \"none\",\r\n pointer: \"cursor\",\r\n },\r\n emaillink: {\r\n color: \"#c70101\",\r\n fontSize: \"17px\",\r\n lineHeight: \"20px\",\r\n textDecoration: \"none\",\r\n pointer: \"cursor\",\r\n },\r\n}));\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const BreadcrumbBox: any = styled(Box)`\r\n width: 100%;\r\n display: flex;\r\n height: 54px;\r\n align-items: center;\r\n justify-content: center;\r\n border-bottom-color: rgb(189, 190, 193);\r\n border-bottom-style: solid;\r\n border-bottom-width: 1px;\r\n\r\n .breadcrumb-wrapper {\r\n padding: 0 15px;\r\n width: 100%;\r\n max-width: 1140px;\r\n display: flex;\r\n flex: 1 0 1;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n vertical-align: middle;\r\n\r\n .contact {\r\n display: flex;\r\n flex-direction: row;\r\n }\r\n }\r\n`;\r\n\r\nexport const BreadcrumbEmptyBox: any = styled(Box)`\r\n width: 100%;\r\n height: 54px;\r\n`;\r\n","import { Box, Breadcrumbs, Button, Fade, FormControl, Link, Paper, Typography } from \"@material-ui/core\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { LinkVariants } from \"Custom/StylesAppSpecific/LinkVariants\";\r\nimport { BreadcrumbBox } from \"./BreadcrumbBox\";\r\n\r\nexport const UserPageBreadcrumb: React.FunctionComponent = () => {\r\n const linkClasses = LinkVariants();\r\n\r\n //useEffect below only gets run on initial render\r\n useEffect(() => {\r\n /* // *optional* passing the router into the viewmodel so we can navigate from there\r\n console.log(\"First render\");\r\n //This gets run when the page is exited\r\n return () => {\r\n console.log(\"Unmounting user detail breadcrumb\");\r\n }; */\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Home\r\n \r\n Quick, accurate quotes\r\n \r\n \r\n Call now  \r\n \r\n +44 (0)1298 812371\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nimport marketingConsentIcon from \"Custom/Content/User/marketing-consent-icon.png\";\r\n\r\nexport const UserAccessControl: any = styled(Box)`\r\n position: relative;\r\n font-weight: 500;\r\n font-style: normal;\r\n font-size: 36px;\r\n font-family: \"Nexa Light\";\r\n color: black;\r\n\r\n @media only screen and (max-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) {\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.md + \"px\"}) and (max-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n }\r\n @media only screen and (min-width: ${breakpointTheme.breakpoints.values.lg + \"px\"}) {\r\n }\r\n\r\n .marketingconsenttext {\r\n padding-right: 16px;\r\n float: left;\r\n }\r\n\r\n .marketingconsenticon {\r\n background-origin: padding-box;\r\n background-position-x: center;\r\n background-position-y: center;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n background-image: url(${marketingConsentIcon});\r\n display: block;\r\n min-height: 70px;\r\n min-width: 70px;\r\n float: right;\r\n }\r\n`;\r\n","import { makeStyles } from \"@material-ui/core\";\r\n\r\nexport const TypographyVariants = makeStyles((theme) => ({\r\n bold: {\r\n fontWeight: 700,\r\n },\r\n title: {\r\n color: \"rgb(34, 34, 34)\",\r\n fontSize: \"1rem\",\r\n fontWeight: 600,\r\n lineHeight: \"25.6px\",\r\n margin: \"15px 0 0 0\",\r\n },\r\n userExplanation: {\r\n paddingTop: \"15px\",\r\n fontSize: \"15px\",\r\n lineHeight: \"24px\",\r\n },\r\n rulertel: {\r\n color: \"#c70101\",\r\n },\r\n gform_title: {\r\n /* fontSize: \"1.25rem\",\r\n fontWeight: 700,\r\n fontFamily: \"Nexa Bold\", */\r\n },\r\n gform_description: {\r\n fontSize: \"1rem\",\r\n fontWeight: 400,\r\n marginBottom: \"16px\",\r\n lineHeight: \"24px\",\r\n },\r\n gfield_label: {\r\n color: \"#c70101\",\r\n fontWeight: 600,\r\n fontSize: \"1rem\",\r\n },\r\n gfield_description: {\r\n fontSize: \"0.81rem\",\r\n lineHeight: \"19.4px\",\r\n paddingRight: \"16px\",\r\n textAlign: \"left\",\r\n },\r\n productSelectorh1: {\r\n paddingBottom: \"15px\",\r\n },\r\n productSelectorh2: {\r\n paddingBottom: \"10px\",\r\n },\r\n productSelectorUnderlineh2: {\r\n position: \"relative\",\r\n marginBottom: \"30px\",\r\n \"&::before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n bottom: \"-15px\",\r\n left: \"0\",\r\n width: \"80px\",\r\n height: \"3px\",\r\n background: \"#000\",\r\n },\r\n },\r\n productSelectorbody1: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"14px\",\r\n },\r\n}));\r\n","import { observable, action } from \"mobx\";\r\nimport { set as _set } from \"lodash-es\";\r\nimport { get as _get } from \"lodash-es\";\r\nimport { IModel } from \"./IModel\";\r\nimport { InputValuesDirty, InputValuesTouched, InputValuesErrors, InputValuesValidity } from \"./IModel\";\r\nimport { FieldType, getParentObjectPath } from \"../Utils/Utils\";\r\n\r\nexport abstract class ModelBase implements IModel {\r\n @observable public Errors = {} as InputValuesErrors;\r\n @observable public Valid = {} as InputValuesValidity;\r\n @observable public Dirty = {} as InputValuesDirty;\r\n @observable public Touched = {} as InputValuesTouched;\r\n\r\n abstract fromDto(model: TDTO): void;\r\n abstract toDto(model: T): void;\r\n\r\n constructor() {\r\n //Loop through added properties setting their default values\r\n for (let prop in this) {\r\n if (prop != \"Errors\" && prop != \"Valid\" && prop != \"Dirty\" && prop != \"Touched\") {\r\n // @ts-ignore\r\n this.Errors[prop] = \"\";\r\n // @ts-ignore\r\n this.Valid[prop] = true;\r\n // @ts-ignore\r\n this.Dirty[prop] = false;\r\n // @ts-ignore\r\n this.Touched[prop] = false;\r\n }\r\n }\r\n }\r\n\r\n @action\r\n public setValue(fieldName: keyof FieldType, value: TR): void {\r\n _set(this, fieldName as any, value);\r\n }\r\n\r\n public getValue(fieldName: keyof FieldType): TR {\r\n return _get(this, fieldName as any);\r\n }\r\n\r\n @action\r\n public setError(fieldName: keyof FieldType, value: string): void {\r\n let path = getParentObjectPath(fieldName as any, \"Errors\");\r\n _set(this, path, value);\r\n }\r\n\r\n public getError(fieldName: keyof FieldType): string {\r\n let path = getParentObjectPath(fieldName as any, \"Errors\");\r\n return _get(this, path);\r\n }\r\n\r\n @action\r\n public setValid(fieldName: keyof FieldType, value: boolean): void {\r\n let path = getParentObjectPath(fieldName as any, \"Valid\");\r\n _set(this, path, value);\r\n }\r\n\r\n public getValid(fieldName: keyof FieldType): boolean {\r\n let path = getParentObjectPath(fieldName as any, \"Valid\");\r\n return _get(this, path);\r\n }\r\n\r\n @action\r\n public setDirty(fieldName: keyof FieldType, value: boolean): void {\r\n let path = getParentObjectPath(fieldName as any, \"Dirty\");\r\n _set(this, path, value);\r\n }\r\n\r\n public getDirty(fieldName: keyof FieldType): boolean {\r\n let path = getParentObjectPath(fieldName as any, \"Dirty\");\r\n return _get(this, path);\r\n }\r\n\r\n @action\r\n public setTouched(fieldName: keyof FieldType, value: boolean): void {\r\n let path = getParentObjectPath(fieldName as any, \"Touched\");\r\n _set(this, path, value);\r\n }\r\n\r\n public getTouched(fieldName: keyof FieldType): boolean {\r\n let path = getParentObjectPath(fieldName as any, \"Touched\");\r\n return _get(this, path);\r\n }\r\n}\r\n","import { action, computed, observable } from \"mobx\";\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\nimport { IsPhoneNumber, Length, IsEmail, IsNotEmpty } from \"class-validator\";\r\n\r\nexport class UserAccessModel extends ModelBase {\r\n @observable\r\n @IsNotEmpty({ message: \"Email is required\" })\r\n @IsEmail({}, { message: \"Email address format is not correct\" })\r\n @Length(1, 256, { message: \"Email address length is not correct\" })\r\n public email: string = \"\";\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Name is required\" })\r\n @Length(1, 128, { message: \"Name address length is not correct\" })\r\n public displayName: string = \"\";\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Telephone is required\" })\r\n @IsPhoneNumber(\"GB\", { message: \"Telephone number is not correct\" })\r\n public telephone: string = \"\";\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Company name is required\" })\r\n @Length(1, 128, { message: \"Company length is not correct\" })\r\n public company: string = \"\";\r\n\r\n @observable public allowMarketing: boolean = false;\r\n\r\n fromDto(model: UserAccessModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n toDto(model: UserAccessModel): UserAccessModelDTO {\r\n const retVal: UserAccessModelDTO = {\r\n allowMarketing: this.allowMarketing,\r\n company: this.company,\r\n displayName: this.displayName,\r\n email: this.email,\r\n telephone: this.telephone,\r\n };\r\n return retVal;\r\n }\r\n\r\n convertToDto(): UserAccessModelDTO {\r\n return this.toDto(this);\r\n }\r\n\r\n @action setCompany = (value: string): void => {\r\n this.company = value;\r\n };\r\n}\r\n\r\nexport interface UserAccessModelDTO {\r\n email: string;\r\n displayName: string;\r\n telephone: string;\r\n company: string;\r\n allowMarketing: boolean;\r\n}\r\n","import { action, computed, observable } from \"mobx\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\nimport { UserAccessModel } from \"Custom/Models/Domain/UserAccess/UserAccessModel\";\r\nimport { validate, ValidationError } from \"class-validator\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { StoresInstance } from \"Custom/Stores/Stores\";\r\nimport { AccountStore } from \"Custom/Stores/Domain\";\r\n\r\nexport default class UserAccessViewModel extends ViewModelBase {\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n\r\n constructor() {\r\n super(new UserAccessModel());\r\n this.setDecorators(UserAccessModel);\r\n }\r\n\r\n @observable\r\n public haveSubmitted = false;\r\n\r\n @action\r\n setallowMarketing = (value: boolean) => {\r\n this.model.allowMarketing = value;\r\n };\r\n\r\n @computed get telephone(): string {\r\n return this.model.telephone;\r\n }\r\n\r\n @action setTelephone = (value: string): void => {\r\n this.model.telephone = value;\r\n };\r\n\r\n @computed\r\n public get telephoneError(): string {\r\n const result = this.validateDecorators(\"telephone\");\r\n return !this.haveSubmitted ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @computed\r\n public get displayNameError(): string {\r\n const result = this.validateDecorators(\"displayName\");\r\n return !this.haveSubmitted ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @computed\r\n public get emailError(): string {\r\n const result = this.validateDecorators(\"email\");\r\n return !this.haveSubmitted ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @computed\r\n public get companyError(): string {\r\n const result = this.validateDecorators(\"company\");\r\n return !this.haveSubmitted ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @computed get displayName(): string {\r\n return this.model.displayName;\r\n }\r\n\r\n @action setDisplayName = (value: string): void => {\r\n this.model.displayName = value;\r\n };\r\n\r\n @computed get allowMarketing(): boolean {\r\n return this.model.allowMarketing;\r\n }\r\n\r\n @action setAllowMarketing = (value: boolean): void => {\r\n this.model.allowMarketing = value;\r\n };\r\n\r\n @computed get company(): string {\r\n return this.model.company;\r\n }\r\n\r\n @action setCompany = (value: string): void => {\r\n this.model.company = value;\r\n };\r\n\r\n @computed get email(): string {\r\n return this.model.email;\r\n }\r\n\r\n @action setEmail = (value: string): void => {\r\n this.model.email = value;\r\n };\r\n\r\n @computed get GetUseAdminGrids(): boolean {\r\n return this.accountStore.GetUseAdminGrids;\r\n }\r\n\r\n @computed get GetUseAdminControlsLight(): boolean {\r\n return this.accountStore.GetUseAdminControlsLight;\r\n }\r\n\r\n @computed get isInerror(): boolean {\r\n let retVal: boolean = false;\r\n for (let key in this.model) {\r\n if (this.isFieldValid(key as any) === false) {\r\n retVal = true;\r\n break;\r\n }\r\n }\r\n return !this.haveSubmitted ? false : retVal;\r\n }\r\n\r\n //This must be present in your viewmodel. Just return true if you dont need to validate anything.\r\n //keyof BlankModel & string lets you add type checking to the fieldName\r\n //I am using the validator package to make checking easier https://www.npmjs.com/package/validator\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\r\n\r\n //You need to this two properties after validation\r\n this.setError(fieldName, errorMessage);\r\n this.setValid(fieldName, isValid);\r\n\r\n return isValid;\r\n }\r\n\r\n @action\r\n Validate = (): Promise => {\r\n this.haveSubmitted = true;\r\n let promise = validate(this.model).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n };\r\n\r\n isInError = (fieldName: string): boolean => {\r\n let isValid = this.getValid(fieldName);\r\n return !isValid;\r\n };\r\n\r\n @action\r\n isInErrorClass = (fieldName: \"email\" | \"telephone\" | \"displayName\" | \"company\"): string => {\r\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\r\n return !this.haveSubmitted ? \"\" : isValid ? \"\" : \"inerror\";\r\n };\r\n\r\n //@action\r\n Store = () => {\r\n this.Validate().then((errors) => {\r\n if (errors.length === 0) {\r\n this.accountStore.setUserState(this.model.convertToDto());\r\n }\r\n });\r\n };\r\n}\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const BudgetQuoteBox: any = styled(Box)`\r\n width: 100%;\r\n display: flex;\r\n flex: 1 0 1;\r\n flex-direction: column;\r\n padding: 30px 0 60px 0;\r\n\r\n .BQSEdit {\r\n .MuiInputLabel-root,\r\n label {\r\n font-family: \"Nexa Light\";\r\n }\r\n min-width: 300px;\r\n }\r\n\r\n .form-wrapper {\r\n padding: 0 15px;\r\n width: 100%;\r\n max-width: 1140px;\r\n display: flex;\r\n flex: 1 0 1;\r\n flex-direction: column;\r\n margin: 0 auto;\r\n }\r\n\r\n .user-consent {\r\n display: flex;\r\n flex: 1 0 1;\r\n flex-direction: row;\r\n padding-top: 15px;\r\n }\r\n\r\n .inerror {\r\n background-color: rgba(255, 223, 224, 0.25);\r\n margin-bottom: 6px !important;\r\n border-top: 1px solid #c89797;\r\n border-bottom: 1px solid #c89797;\r\n padding-bottom: 6px;\r\n padding-top: 8px;\r\n }\r\n\r\n /* can't see how to do this with overides */\r\n .MuiFormHelperText-root {\r\n &.Mui-error {\r\n color: #790000;\r\n font-weight: 700;\r\n letter-spacing: normal;\r\n }\r\n }\r\n\r\n .submitRow {\r\n min-width: 100%;\r\n display: flex;\r\n flex: 1 0 0;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n\r\n .BQSButton {\r\n max-width: 52px;\r\n }\r\n }\r\n`;\r\n","import styled from \"styled-components\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const ErrorBox: any = styled(Box)`\r\n width: 100%;\r\n display: flex;\r\n // height: 54px;\r\n align-items: center;\r\n justify-content: center;\r\n color: #790000;\r\n font-size: 1rem;\r\n font-weight: 700;\r\n margin-bottom: 25px;\r\n border-top: 2px solid #790000;\r\n border-bottom: 2px solid #790000;\r\n padding: 16px 0 16px 0;\r\n clear: both;\r\n text-align: center;\r\n`;\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nconst hOffsetRem = \"0.75\";\r\n\r\n// Buttons\r\nexport const BQSButtonStyle = makeStyles((theme) => ({\r\n root: {\r\n backgroundColor: \"#C12631\",\r\n color: \"white\",\r\n fontSize: \"1rem\",\r\n margin: `0 ${hOffsetRem}rem`,\r\n padding: \"6px 18px\",\r\n \"&:hover\": {\r\n backgroundColor: lighten(\"#C12631\", 0.2),\r\n },\r\n },\r\n}));\r\n\r\n// CheckBoxes\r\nexport const BQSCheckBoxesStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0.5rem -${hOffsetRem}rem`,\r\n \"& legend\": {\r\n margin: `0 ${hOffsetRem}rem 0.5rem ${hOffsetRem}rem`,\r\n },\r\n },\r\n}));\r\n\r\nexport const BQSCheckBoxStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0 ${hOffsetRem}rem 0 0`,\r\n \"& .MuiCheckbox-root\": {\r\n padding: \"6px 9px\",\r\n },\r\n },\r\n}));\r\n\r\n// Edits\r\nexport const BQSEditNumberStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0.5rem ${hOffsetRem}rem`,\r\n \"& label\": {},\r\n \"& label.MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 0) scale(1)\",\r\n },\r\n \"& div.MuiInput-root\": {\r\n marginTop: \"1.5rem\",\r\n },\r\n \"& input.MuiInput-input\": {\r\n backgroundColor: \"white\",\r\n border: \"1px solid #5F5D5E\",\r\n padding: \"5px 8px 3px 8px\",\r\n },\r\n },\r\n}));\r\n\r\nexport const BQSEditStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0.5rem ${hOffsetRem}rem`,\r\n \"& label\": {},\r\n \"& label.MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 0) scale(1)\",\r\n },\r\n \"& div.MuiInput-root\": {\r\n marginTop: \"1.5rem\",\r\n },\r\n \"& input.MuiInput-input\": {\r\n backgroundColor: \"white\",\r\n border: \"1px solid #5F5D5E\",\r\n padding: \"5px 8px 3px 8px\",\r\n },\r\n },\r\n}));\r\n\r\n// Radio Buttons\r\nexport const BQSRadioButtonsStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0.5rem -${hOffsetRem}rem`,\r\n \"& legend\": {\r\n margin: `0 ${hOffsetRem}rem 0.5rem ${hOffsetRem}rem`,\r\n },\r\n },\r\n}));\r\n\r\nexport const BQSRadioButtonStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0 ${hOffsetRem}rem 0 0`,\r\n \"& .MuiRadio-root\": {\r\n padding: \"6px 9px\",\r\n },\r\n },\r\n}));\r\n\r\n// Rows\r\nexport const BQSRowStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0 -${hOffsetRem}rem`,\r\n },\r\n}));\r\n\r\n// Selects\r\nexport const BQSSelectStyle = makeStyles((theme) => ({\r\n root: {\r\n margin: `0.5rem ${hOffsetRem}rem`,\r\n \"& label\": {},\r\n \"& label.MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 0) scale(1)\",\r\n },\r\n \"& div.MuiInput-root\": {\r\n backgroundColor: \"white\",\r\n border: \"1px solid #5F5D5E\",\r\n marginTop: \"1.5rem\",\r\n },\r\n \"& input.MuiAutocomplete-input\": {\r\n padding: \"5px 8px 3px 8px !important\",\r\n },\r\n },\r\n}));\r\n","// Libraries\r\nimport { Button } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSButtonStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n execute: () => void;\r\n canExecute?: boolean;\r\n isSubmit?: boolean;\r\n startIcon?: React.ReactNode;\r\n}\r\n\r\nexport const BQSButton: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const buttonClasses = BQSButtonStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSButton: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const getType = (): \"button\" | \"submit\" | \"reset\" => {\r\n return !isNullOrUndefined(props.isSubmit) && props.isSubmit ? \"submit\" : \"button\";\r\n };\r\n\r\n const isDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.canExecute) ? !props.canExecute : false;\r\n };\r\n\r\n const onClick = (event: React.MouseEvent): void => {\r\n props.execute();\r\n\r\n if (!isNullOrUndefined(props.isSubmit) && props.isSubmit) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { TextField } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSEditStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n execute: (value: string) => void;\r\n canExecute?: boolean;\r\n isPassword?: boolean;\r\n placeholder?: string;\r\n maxLength?: number;\r\n value: string;\r\n validationMessage?: string;\r\n fieldName?: string;\r\n}\r\n\r\nexport const BQSEdit: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editClasses = BQSEditStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSEdit: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const getDisplayName = (): ReactElement[] | string => {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n };\r\n\r\n const getPlaceholder = (): string => {\r\n return !isEmptyOrWhitespace(props.placeholder) ? props.placeholder! : \"\";\r\n };\r\n\r\n const getType = (): string => {\r\n return !isNullOrUndefined(props.isPassword) && props.isPassword ? \"password\" : \"text\";\r\n };\r\n\r\n const getValidationMessage = (): string => {\r\n return !isEmptyOrWhitespace(props.validationMessage) ? props.validationMessage! : \"\";\r\n };\r\n\r\n const getValue = (): string => {\r\n return props.value;\r\n };\r\n\r\n const isDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.canExecute) ? !props.canExecute : false;\r\n };\r\n\r\n const isValidationMessageNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.validationMessage);\r\n };\r\n\r\n const onChange = (event: React.ChangeEvent): void => {\r\n props.execute(event.target.value);\r\n };\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { Box, Typography } from \"@material-ui/core\";\r\nimport React, { useContext, useEffect, useLayoutEffect, useState } from \"react\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport UserAccessViewModel from \"Custom/ViewModels/UserAccessViewModel\";\r\nimport { BudgetQuoteBox } from \"./BudgetQuoteBox\";\r\nimport { ErrorBox } from \"./ErrorBox\";\r\nimport { BQSButton } from \"../Primitives/Buttons/BQSButton\";\r\nimport { BQSEdit } from \"Custom/Views/Primitives/Edits/BQSEdit\";\r\nimport { BQSCheckBox } from \"Custom/Views/Primitives/CheckBoxes/BQSCheckBox\";\r\nimport { ValidationError } from \"class-validator\";\r\nimport { Stores, StoresContext } from \"Custom/Stores\";\r\n\r\nexport const UserPageDetails: React.FunctionComponent = () => {\r\n const storesContext = useContext(StoresContext);\r\n const typopgraphyClasses = TypographyVariants();\r\n const [viewModel] = useState(() => new UserAccessViewModel());\r\n\r\n const submit = () => {\r\n viewModel.Store();\r\n };\r\n\r\n /* useLayoutEffect(() => {\r\n alert(storesContext.domain.AccountStore.hasUserAccess);\r\n }, [storesContext.domain.AccountStore.hasUserAccess]); */\r\n\r\n useEffect(() => {\r\n /* let count = viewModel.model.Errors.length;\r\n setErrorCount(viewModel.model.Errors.length); */\r\n }, [viewModel.model.Errors]);\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n \r\n Access the budget quote\r\n \r\n \r\n \r\n \r\n To access the budget quote please complete the following details.\r\n \r\n \r\n\r\n {viewModel.isInerror && There was a problem with your submission. Errors have been highlighted below.}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n By submitting this form you consent to us storing your data for the sole purpose of providing you with a quotation.\r\n \r\n \r\n \r\n {/* \r\n \r\n We need you to say YES\r\n \r\n \r\n \r\n \r\n \r\n From time to time we may want to send you marketing emails about new training courses we are offering, new CPDs, new products or services, changes to\r\n products and services. We will always treat your permission details with the utmost confidentiality and never sell them to other companies for marketing\r\n purposes.\r\n \r\n \r\n \r\n \r\n \r\n \r\n To allow us to do this please tick yes.\r\n \r\n \r\n */}\r\n \r\n {\r\n submit();\r\n }}\r\n />\r\n \r\n \r\n \r\n ));\r\n};\r\n","import React, { useEffect } from \"react\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\n\r\nimport { UserPageHeader } from \"./UserPageHeader\";\r\nimport { UserPageHeaderText } from \"./UserPageHeaderText\";\r\nimport { UserPageExplanationControl } from \"./UserPageExplanationControl\";\r\nimport { UserPageDescriptionControl } from \"./UserPageDescriptionControl\";\r\n\r\nimport { UserPageBreadcrumb } from \"./UserPageBreadcrumb\";\r\nimport { UserAccessControl } from \"./UserAccessControl\";\r\nimport { UserPageDetails } from \"./UserPageDetails\";\r\n\r\nexport const UserPage: React.FunctionComponent = () => {\r\n //useEffect below only gets run on initial render\r\n useEffect(() => {\r\n // *optional* passing the router into the viewmodel so we can navigate from there\r\n console.log(\"First render\");\r\n //This gets run when the page is exited\r\n return () => {\r\n console.log(\"Unmounting user access control\");\r\n };\r\n }, []);\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n
Quick, accurate quotes
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n ));\r\n};\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const ProductSelectorStyle = makeStyles((theme) => ({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n flex: \"1\",\r\n fontFamily: \"Nexa\",\r\n margin: \"15px\",\r\n \"& a\": {\r\n color: \"#c70101\",\r\n textDecoration: \"none\",\r\n \"&:hover\": {\r\n textDecoration: \"underline\",\r\n },\r\n },\r\n },\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\nimport KeyAImage from \"Custom/Content/ProductSelector/key_a.png\";\r\nimport KeyBImage from \"Custom/Content/ProductSelector/key_b.png\";\r\n\r\nexport const EditVariants = makeStyles((theme) => ({\r\n bqsEditFlex: {\r\n flex: \"1\",\r\n \"& div\": {\r\n \"& input\": {},\r\n },\r\n },\r\n bqsEditNumberFlex: {\r\n flex: \"1\",\r\n \"& div\": {\r\n \"& input\": {\r\n width: \"80px\",\r\n },\r\n },\r\n },\r\n bqsEditNumberNoLabel: {\r\n \"& div\": {\r\n marginTop: \"0 !important\",\r\n \"& input\": {\r\n width: \"80px\",\r\n },\r\n },\r\n },\r\n bqsEditNumberReadOnly: {\r\n \"& label:not(.Mui-error)\": {\r\n color: \"#333333 !important\",\r\n },\r\n \"& div\": {\r\n color: \"#333333 !important\",\r\n \"& input\": {\r\n backgroundColor: \"transparent !important\",\r\n border: \"1px solid #aaaaaa !important\",\r\n color: \"#333333 !important\",\r\n width: \"80px\",\r\n },\r\n },\r\n },\r\n bqsEditNumberStandard: {\r\n width: \"160px\",\r\n \"& div\": {\r\n \"& input\": {\r\n width: \"80px\",\r\n },\r\n },\r\n },\r\n bqsEditNumberLarge: {\r\n width: \"175px\",\r\n \"& div\": {\r\n \"& input\": {\r\n width: \"80px\",\r\n },\r\n },\r\n },\r\n bqsKeyAAdornment: {\r\n backgroundImage: `url(${KeyAImage})`,\r\n backgroundPosition: \"center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"contain\",\r\n height: \"25px\",\r\n width: \"25px\",\r\n },\r\n bqsKeyBAdornment: {\r\n backgroundImage: `url(${KeyBImage})`,\r\n backgroundPosition: \"center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"contain\",\r\n height: \"25px\",\r\n width: \"25px\",\r\n },\r\n bqsSuperScriptAdornment: {\r\n marginBottom: \"3px\",\r\n },\r\n}));\r\n","import { lighten, makeStyles } from \"@material-ui/core\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const EmailStyle = makeStyles((theme) => ({\r\n root: {\r\n paddingBottom: \"2rem\",\r\n borderBottom: \"3px solid #000\",\r\n \"& > p\": {\r\n margin: \"0.5rem 0\",\r\n },\r\n },\r\n bqsEditRow: {\r\n display: \"flex\",\r\n [breakpointTheme.breakpoints.up(\"sm\")]: {\r\n \"& > div\": {\r\n \"& > div\": {\r\n maxWidth: \"300px\",\r\n },\r\n },\r\n },\r\n },\r\n bqsButton: {\r\n margin: \"1rem 0.75rem !important\",\r\n },\r\n}));\r\n","import { action, computed, observable } from \"mobx\";\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\nimport { IsPhoneNumber, Length, IsEmail, IsNotEmpty } from \"class-validator\";\r\n\r\nexport interface EmailModelDTO {\r\n email: string;\r\n projectName: string;\r\n}\r\n\r\nexport class EmailModel extends ModelBase {\r\n @observable\r\n @IsNotEmpty({ message: \"Email is required\" })\r\n @IsEmail({}, { message: \"Email address format is not correct\" })\r\n @Length(1, 256, { message: \"Email address length is not correct\" })\r\n public email: string = \"\";\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Project name is required\" })\r\n @Length(1, 256, { message: \"Project name length is not correct\" })\r\n public projectName: string = \"\";\r\n\r\n fromDto(model: EmailModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n toDto(model: EmailModel): EmailModelDTO {\r\n const retVal: EmailModelDTO = {\r\n email: this.email,\r\n projectName: this.projectName,\r\n };\r\n return retVal;\r\n }\r\n}\r\n","import { action, computed, observable } from \"mobx\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\nimport { EmailModel } from \"Custom/Models/Domain/ProductSelector/Email\";\r\nimport { validate, ValidationError } from \"class-validator\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { StoresInstance } from \"Custom/Stores/Stores\";\r\nimport { AccountStore, ErrorStore } from \"Custom/Stores/Domain\";\r\nimport { DomainStores } from \"Custom/Stores\";\r\nimport { ProductSelectorModel } from \"Custom/Models/Domain/ProductSelector/ProductSelectorModel\";\r\n\r\nexport default class EmailViewModel extends ViewModelBase {\r\n private productSelectorModel: ProductSelectorModel;\r\n private domainStore: DomainStores = StoresInstance.domain;\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n private errorStore: ErrorStore = StoresInstance.domain.ErrorStore;\r\n private sendEmailCallback: () => Promise;\r\n\r\n constructor(callback: () => Promise, productSelectorModel: ProductSelectorModel) {\r\n super(new EmailModel());\r\n this.setDecorators(EmailModel);\r\n\r\n this.model.email = this.accountStore.userEmail;\r\n this.sendEmailCallback = callback;\r\n this.productSelectorModel = productSelectorModel;\r\n }\r\n\r\n @observable\r\n public haveSubmitted = false;\r\n\r\n @action\r\n public setHaveSubmitted = (value: boolean): void => {\r\n this.haveSubmitted = value;\r\n };\r\n\r\n @computed\r\n public get projectName(): string {\r\n return this.model.projectName;\r\n }\r\n\r\n @computed\r\n public get showResetButton(): boolean {\r\n return this.domainStore.showResetButton;\r\n }\r\n\r\n @action\r\n public setProjectName = (value: string): void => {\r\n this.model.projectName = value;\r\n };\r\n\r\n @computed\r\n public get email(): string {\r\n return this.model.email;\r\n }\r\n\r\n @computed\r\n public get projectNameError(): string {\r\n const result = this.validateDecorators(\"projectName\");\r\n return !this.haveSubmitted ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @action\r\n public sendEmail = async (): Promise => {\r\n this.setHaveSubmitted(true);\r\n\r\n const productErrors = await this.productSelectorModel.Validate();\r\n const localErrors = await validate(this.model);\r\n\r\n if (localErrors.length === 0 && productErrors.length === 0) {\r\n this.accountStore.setEmailData(this.model.email, this.model.projectName);\r\n await this.sendEmailCallback();\r\n } else {\r\n console.log(\"validation failed\");\r\n }\r\n };\r\n\r\n @action\r\n public reset = async (): Promise => {\r\n this.accountStore.resetUser();\r\n };\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\r\n\r\n // You need to this two properties after validation\r\n this.setError(fieldName, errorMessage);\r\n this.setValid(fieldName, isValid);\r\n\r\n return isValid;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSRowStyle } from \"./../BQSPrimitivesStyle\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n}\r\n\r\nexport const BQSRow: React.FC = (props: any) => {\r\n // #region Code Behind\r\n\r\n const rowClasses = BQSRowStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSRow: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n [`${rowClasses.root}`]: true,\r\n });\r\n };\r\n\r\n const renderChildrenWithProps = (): JSX.Element => {\r\n const childrenWithProps = React.Children.map(props.children, (child) => {\r\n return React.cloneElement(child as React.ReactElement, {});\r\n });\r\n\r\n return {childrenWithProps};\r\n };\r\n\r\n // #region Code Behind\r\n\r\n // #region Render Result\r\n return useObserver(() =>
{renderChildrenWithProps()}
);\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { useState } from \"react\";\r\n\r\n// Custom\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { EmailStyle } from \"./EmailStyle\";\r\nimport EmailViewModel from \"Custom/ViewModels/ProductSelector/SubViewModels/EmailViewModel\";\r\nimport { BQSButton } from \"Custom/Views/Primitives/Buttons/BQSButton\";\r\nimport { BQSEdit } from \"Custom/Views/Primitives/Edits/BQSEdit\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\nimport { ProductSelectorModel } from \"Custom/Models/Domain/ProductSelector/ProductSelectorModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n canExecuteSend: boolean;\r\n sendEmail: () => Promise;\r\n productSelectorModel: ProductSelectorModel;\r\n}\r\n\r\nexport const Email: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const [viewModel] = useState(() => new EmailViewModel(props.sendEmail, props.productSelectorModel));\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const emailStyle = EmailStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n Request Quotation\r\n \r\n Request a quotation from the Sharmans' Support team.\r\n \r\n \r\n \r\n \r\n \r\n For further support, please contact our Sales team: Email info@hdsharman.co.uk or call{\" \"}\r\n 01298 875003.\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { lighten, makeStyles } from \"@material-ui/core\";\r\nimport { breakpointTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const ResetStyle = makeStyles((theme) => ({\r\n root: {\r\n paddingTop: \"2rem\",\r\n paddingBottom: \"2rem\",\r\n borderBottom: \"3px solid #000\",\r\n \"& > p\": {\r\n margin: \"0.5rem 0\",\r\n },\r\n },\r\n bqsResetButton: {\r\n margin: \"1rem 0.75rem !important\",\r\n backgroundColor: \"#33cc33\",\r\n right: \"0\",\r\n \"&:hover\": {\r\n backgroundColor: lighten(\"#33cc33\", 0.2),\r\n },\r\n },\r\n}));\r\n","import { action, computed, observable } from \"mobx\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\nimport { EmailModel } from \"Custom/Models/Domain/ProductSelector/Email\";\r\nimport { validate, ValidationError } from \"class-validator\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { StoresInstance } from \"Custom/Stores/Stores\";\r\nimport { AccountStore, ErrorStore } from \"Custom/Stores/Domain\";\r\nimport { DomainStores } from \"Custom/Stores\";\r\n\r\nexport default class ResetViewModel extends ViewModelBase {\r\n isFieldValid(fieldName: never, value: any): boolean {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n private domainStore: DomainStores = StoresInstance.domain;\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n\r\n constructor() {\r\n super(null, false);\r\n }\r\n\r\n @computed\r\n public get showResetButton(): boolean {\r\n return this.domainStore.showResetButton;\r\n }\r\n\r\n @action\r\n public reset = async (): Promise => {\r\n this.accountStore.resetUser();\r\n };\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { useState } from \"react\";\r\n\r\n// Custom\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { ResetStyle } from \"./ResetStyle\";\r\nimport ResetViewModel from \"Custom/ViewModels/ProductSelector/SubViewModels/ResetViewModel\";\r\nimport { BQSButton } from \"Custom/Views/Primitives/Buttons/BQSButton\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n}\r\n\r\nexport const Reset: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const [viewModel] = useState(() => new ResetViewModel());\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const emailStyle = ResetStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n Reset this quote and return to the enter customer details page\r\n \r\n \r\n {viewModel.showResetButton === true && (\r\n \r\n )}\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\nimport DelcoteGSImage from \"Custom/Content/ProductSelector/highlight_delcote_gs.png\";\r\nimport DelcoteGSHoverImage from \"Custom/Content/ProductSelector/highlight_delcote_gs_hover.png\";\r\nimport DelcoteGSCheckedImage from \"Custom/Content/ProductSelector/highlight_delcote_gs_selected.png\";\r\nimport PlygeneImage from \"Custom/Content/ProductSelector/highlight_plygene.png\";\r\nimport PlygeneHoverImage from \"Custom/Content/ProductSelector/highlight_plygene_hover.png\";\r\nimport PlygeneCheckedImage from \"Custom/Content/ProductSelector/highlight_plygene_selected.png\";\r\n\r\nexport const GutterSystemStyle = makeStyles((theme) => ({\r\n root: {\r\n backgroundColor: \"#F4F5F5\",\r\n marginBottom: \"2.5rem\",\r\n padding: \"40px 15px\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n padding: \"40px\",\r\n },\r\n [theme.breakpoints.up(\"lg\")]: {\r\n padding: \"20px 60px\",\r\n },\r\n },\r\n products: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flex: \"1\",\r\n flexDirection: \"column\",\r\n margin: \"0 0.75rem\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n gutterimage: {\r\n backgroundSize: \"contain\",\r\n height: \"100%\",\r\n minHeight: \"250px\",\r\n width: \"auto\",\r\n },\r\n radioButtons: {\r\n display: \"flex\",\r\n \"& > div\": {\r\n flex: \"1\",\r\n flexDirection: \"column\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n marginBottom: \"2.5rem\",\r\n \"& > div\": {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n },\r\n radioButton: {\r\n flex: \"1\",\r\n margin: \"0 0.75rem 10px 0.75rem\",\r\n maxWidth: \"490px\",\r\n \"& > span.MuiButtonBase-root\": {\r\n backgroundPosition: \"top left\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"contain\",\r\n borderRadius: \"0\",\r\n height: \"205px\",\r\n width: \"100%\",\r\n \"& > span.MuiIconButton-label\": {\r\n display: \"none\",\r\n },\r\n },\r\n \"& > span.MuiFormControlLabel-label\": {\r\n fontFamily: \"Nexa Bold\",\r\n fontSize: \"18.75px\",\r\n marginBottom: \"7.5px\",\r\n marginRight: \"auto\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n margin: \"0 0.75rem\",\r\n maxWidth: \"395px\",\r\n \"& > span.MuiButtonBase-root\": {\r\n backgroundPosition: \"top center\",\r\n height: \"166px\",\r\n },\r\n },\r\n [theme.breakpoints.up(\"lg\")]: {\r\n maxWidth: \"490px\",\r\n \"& > div\": {\r\n flexDirection: \"row\",\r\n },\r\n \"& > span.MuiButtonBase-root\": {\r\n height: \"205px\",\r\n },\r\n },\r\n },\r\n radioButtonPlygene: {\r\n \"& > span.MuiButtonBase-root.Mui-checked\": {\r\n backgroundImage: `url(${PlygeneCheckedImage})`,\r\n },\r\n \"& > span.MuiButtonBase-root:not(.Mui-checked)\": {\r\n backgroundImage: `url(${PlygeneImage})`,\r\n \"&:hover\": {\r\n backgroundImage: `url(${PlygeneHoverImage})`,\r\n },\r\n },\r\n },\r\n radioButtonDelcote: {\r\n \"& > span.MuiButtonBase-root.Mui-checked\": {\r\n backgroundImage: `url(${DelcoteGSCheckedImage})`,\r\n },\r\n \"& > span.MuiButtonBase-root:not(.Mui-checked)\": {\r\n backgroundImage: `url(${DelcoteGSImage})`,\r\n \"&:hover\": {\r\n backgroundImage: `url(${DelcoteGSHoverImage})`,\r\n },\r\n },\r\n },\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const DelcoteProductsStyle = makeStyles((theme) => ({\r\n root: {},\r\n specificationLink: {\r\n marginBottom: \"15px\",\r\n },\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const DelcoteGSStyle = makeStyles((theme) => ({\r\n root: {},\r\n editsContainer: {\r\n display: \"flex\",\r\n },\r\n selectContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n textContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n \"& p\": {\r\n margin: \"0.5rem 0.75rem\",\r\n },\r\n },\r\n basecoatSelection: {\r\n fontFamily: \"Nexa\",\r\n fontSize: \"14px\",\r\n },\r\n}));\r\n","// Libraries\r\nimport { InputAdornment, TextField } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSEditNumberStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n endAdornment?: string;\r\n execute: (value: number) => void;\r\n canExecute?: boolean;\r\n minimumValue?: number;\r\n maximumValue?: number;\r\n placeholder?: string;\r\n startAdornment?: string;\r\n stepValue?: number;\r\n value?: number;\r\n validationMessage?: string;\r\n}\r\n\r\nexport const BQSEditNumber: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const classes = BQSEditNumberStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSEditNumber: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const isEndAdornmentNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.endAdornment);\r\n };\r\n\r\n const isStartAdornmentNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.startAdornment);\r\n };\r\n\r\n const isDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.canExecute) ? !props.canExecute : false;\r\n };\r\n\r\n const isValidationMessageNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.validationMessage);\r\n };\r\n\r\n const getDisplayName = (): ReactElement[] | string => {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n };\r\n\r\n const getPlaceholder = (): string => {\r\n return !isEmptyOrWhitespace(props.placeholder) ? props.placeholder! : \"\";\r\n };\r\n\r\n const getValidationMessage = (): string => {\r\n return !isEmptyOrWhitespace(props.validationMessage) ? props.validationMessage! : \"\";\r\n };\r\n\r\n const getValue = (): string => {\r\n return !isNullOrUndefined(props.value) ? props.value.toString() : \"\";\r\n };\r\n\r\n const onChange = (event: React.ChangeEvent): void => {\r\n props.execute(Number(event.target.value));\r\n };\r\n\r\n const onBlur = (): void => {\r\n const value = props.value;\r\n const min = props.minimumValue;\r\n const max = props.maximumValue;\r\n\r\n if (!isNullOrUndefined(value) && !isNullOrUndefined(min) && value < min) {\r\n props.execute(min);\r\n }\r\n\r\n if (!isNullOrUndefined(value) && !isNullOrUndefined(max) && value > max) {\r\n props.execute(max);\r\n }\r\n };\r\n\r\n const renderEndAdornment = (): React.ReactNode => {\r\n return isEndAdornmentNotEmpty() ? {ReactHtmlParser(props.endAdornment!)} : ;\r\n };\r\n\r\n const renderStartAdornment = (): React.ReactNode => {\r\n return isStartAdornmentNotEmpty() ? {ReactHtmlParser(props.startAdornment!)} : ;\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, Link, TextField } from \"@material-ui/core\";\r\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSSelectStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n disableClearable?: boolean;\r\n displayName: string;\r\n execute: (value: any) => void;\r\n getOptionLabel: (option: any) => string;\r\n groupBy?: (option: any) => string;\r\n canExecute?: boolean;\r\n options: any[];\r\n value: any;\r\n validationMessage?: string;\r\n showColourLink?: boolean;\r\n}\r\n\r\nexport const BQSSelect: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const selectClasses = BQSSelectStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSSelect: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const showColourPDFLink: boolean = props.showColourLink === undefined || props.showColourLink === null ? false : props.showColourLink;\r\n\r\n const getDisplayName = (): React.ReactNode => {\r\n if (showColourPDFLink === false) {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n } else {\r\n const displayName: any = !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n\r\n return (\r\n \r\n {displayName} (\r\n \r\n \r\n coatings chart\r\n \r\n \r\n )\r\n \r\n );\r\n }\r\n };\r\n\r\n /* const getCoatingsChart = (): ReactElement => {\r\n return showColourPDFLink == true ? (\r\n \r\n \r\n (Coatings chart)\r\n \r\n \r\n ) : (\r\n \"\"\r\n );\r\n }; */\r\n\r\n const getValidationMessage = (): string => {\r\n return !isEmptyOrWhitespace(props.validationMessage) ? props.validationMessage! : \"\";\r\n };\r\n\r\n const isClearableDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.disableClearable) ? props.disableClearable : false;\r\n };\r\n\r\n const isDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.canExecute) ? !props.canExecute : false;\r\n };\r\n\r\n const isValidationMessageNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.validationMessage);\r\n };\r\n\r\n const onChange = (e: any, value: any): void => {\r\n props.execute(value);\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Public Interface\r\n\r\n return useObserver(() => (\r\n (\r\n \r\n )}\r\n value={props.value}\r\n />\r\n ));\r\n\r\n // #endregion Public Interface\r\n};\r\n","// Libraries\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { DelcoteGSStyle } from \"./DelcoteGSStyle\";\r\n\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelcoteGSViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/DelcoteProductsViewModels/DelcoteGSViewModel\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\nimport { BQSSelect } from \"Custom/Views/Primitives/Selects/BQSSelect\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n viewModel: DelcoteGSViewModel;\r\n}\r\n\r\nexport const DelcoteGS: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n const delcoteGSStyle = DelcoteGSStyle();\r\n const editVariants = EditVariants();\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n return useObserver(() => (\r\n \r\n \r\n option.title}\r\n groupBy={(option) => option.group}\r\n options={props.viewModel.colours}\r\n value={props.viewModel.topcoatColourSelection}\r\n showColourLink={true}\r\n />\r\n \r\n \r\n \r\n Basecoat colour option will be {props.viewModel.basecoatColourSelection.title}\r\n \r\n \r\n \r\n `}\r\n value={props.viewModel.gutterLengthMeterage}\r\n />\r\n `}\r\n value={props.viewModel.girth}\r\n />\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, Link } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { DelcoteProductsStyle } from \"./DelcoteProductsStyle\";\r\n\r\nimport { DelcoteGS } from \"./DelcoteSubViews/DelcoteGS\";\r\n\r\nimport { DelcoteProductsViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/DelcoteProductsViewModel\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/ProductsCommonViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n viewModel: DelcoteProductsViewModel;\r\n}\r\n\r\nexport const DelcoteProducts: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const delcoteProductsStyle = DelcoteProductsStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n View system specification\r\n \r\n \r\n {props.viewModel.canDisplaySubstrateUndefined && }\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const PlygeneProductsStyle = makeStyles((theme) => ({\r\n root: {},\r\n specificationLink: {\r\n marginBottom: \"15px\",\r\n },\r\n}));\r\n","// Libraries\r\nimport { Box } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { PlygeneMouldedViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/PlygeneProductViewModels/PlygeneMouldedViewModel\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n viewModel: PlygeneMouldedViewModel;\r\n}\r\n\r\nexport const PlygeneMoulded: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n `}\r\n value={props.viewModel.gutterLengthMeterage}\r\n />\r\n `}\r\n value={props.viewModel.girth}\r\n />\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { PlygeneStandardViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/PlygeneProductViewModels/PlygeneStandardViewModel\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n viewModel: PlygeneStandardViewModel;\r\n}\r\n\r\nexport const PlygeneStandard: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n `}\r\n value={props.viewModel.gutterLengthMeterage}\r\n />\r\n `}\r\n value={props.viewModel.girth}\r\n />\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { FormControlLabel, Radio } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSRadioButtonStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n displayNamePlacement?: string;\r\n canExecute?: boolean;\r\n value: any;\r\n}\r\n\r\nexport const BQSRadioButton: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const radioButtonClasses = BQSRadioButtonStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSRadioButton: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const getDisplayName = (): ReactElement[] | string => {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n };\r\n\r\n const getDisplayNamePlacement = (): \"bottom\" | \"top\" | \"end\" | \"start\" => {\r\n return !isEmptyOrWhitespace(props.displayNamePlacement) ? (props.displayNamePlacement! as \"bottom\" | \"top\" | \"end\" | \"start\") : \"end\";\r\n };\r\n\r\n const getValue = (): string => {\r\n return !isNullOrUndefined(props.value) ? props.value.toString() : \"\";\r\n };\r\n\r\n const isDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.canExecute) ? !props.canExecute : false;\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n }\r\n disabled={isDisabled()}\r\n label={getDisplayName()}\r\n labelPlacement={getDisplayNamePlacement()}\r\n value={getValue()}\r\n />\r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { FormControl, RadioGroup, FormHelperText, FormLabel } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSRadioButtonsStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n execute: (value: any) => void;\r\n row?: boolean;\r\n value: any;\r\n validationMessage?: string;\r\n}\r\n\r\nexport const BQSRadioButtons: React.FC = (props: any) => {\r\n // #region Code Behind\r\n\r\n const radioButtonClasses = BQSRadioButtonsStyle();\r\n\r\n const displayGroupAsRow = (): boolean => {\r\n return !isNullOrUndefined(props.row) ? props.row : true;\r\n };\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSRadioButtons: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const getDisplayName = (): ReactElement[] | string => {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n };\r\n\r\n const canDisplayName = (): boolean => {\r\n return !isEmptyOrWhitespace(props.displayName);\r\n };\r\n\r\n const getValidationMessage = (): string => {\r\n return !isEmptyOrWhitespace(props.validationMessage) ? props.validationMessage! : \"\";\r\n };\r\n\r\n const getValue = (): string => {\r\n return !isNullOrUndefined(props.value) ? props.value.toString() : \"\";\r\n };\r\n\r\n const isValidationMessageNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.validationMessage);\r\n };\r\n\r\n const renderChildrenWithProps = (): JSX.Element => {\r\n const childrenWithProps = React.Children.map(props.children, (child) => {\r\n return React.cloneElement(child as React.ReactElement, {});\r\n });\r\n\r\n return {childrenWithProps};\r\n };\r\n\r\n const onChange = (event: any) => {\r\n props.execute(event.target.value);\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Public Interface\r\n\r\n return useObserver(() => (\r\n \r\n {canDisplayName() && {getDisplayName()}}\r\n \r\n {renderChildrenWithProps()}\r\n \r\n {isValidationMessageNotEmpty() && {getValidationMessage()}}\r\n \r\n ));\r\n\r\n // #endregion Public Interface\r\n};\r\n","// Libraries\r\nimport { Box, Link } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { PlygeneProductsStyle } from \"./PlygeneProductsStyle\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { PlygeneMoulded } from \"./PlygeneSubViews/PlygeneMoulded\";\r\nimport { PlygeneStandard } from \"./PlygeneSubViews/PlygeneStandard\";\r\n\r\nimport { BQSRadioButton } from \"./../../../Primitives/RadioButtons/BQSRadioButton\";\r\nimport { BQSRadioButtons } from \"./../../../Primitives/RadioButtons/BQSRadioButtons\";\r\n\r\nimport { PlygeneProductsViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/PlygeneProductsViewModel\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemSubViewModels/ProductsCommonViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n viewModel: PlygeneProductsViewModel;\r\n}\r\n\r\nexport const PlygeneProducts: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const plygeneProductsStyle = PlygeneProductsStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n View system specification\r\n \r\n \r\n \r\n \r\n {props.viewModel.products.map((item) => (\r\n \r\n ))}\r\n \r\n {props.viewModel.canDisplayMoulded && }\r\n {props.viewModel.canDisplayStandard && }\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, CardMedia, Typography } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { useState } from \"react\";\r\n\r\n// Custom\r\nimport GutterImage from \"Custom/Content/ProductSelector/gutter.png\";\r\n\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { GutterSystemStyle } from \"./GutterSystemStyle\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { DelcoteProducts } from \"./GutterSystemSubViews/DelcoteProducts\";\r\nimport { PlygeneProducts } from \"./GutterSystemSubViews/PlygeneProducts\";\r\n\r\nimport { BQSRadioButton } from \"./../../Primitives/RadioButtons/BQSRadioButton\";\r\nimport { BQSRadioButtons } from \"./../../Primitives/RadioButtons/BQSRadioButtons\";\r\nimport { BQSRow } from \"./../../Primitives/Row/BQSRow\";\r\n\r\nimport { GutterSystemViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n viewModel: GutterSystemViewModel;\r\n}\r\n\r\nexport const GutterSystem: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const typopgraphyVariants = TypographyVariants();\r\n const gutterSystemStyle = GutterSystemStyle();\r\n\r\n const getClassName = (value: string): string => {\r\n return classNames({\r\n [`${gutterSystemStyle.radioButton}`]: true,\r\n [`${gutterSystemStyle.radioButtonPlygene}`]: value === \"id_plygene\",\r\n [`${gutterSystemStyle.radioButtonDelcote}`]: value === \"id_delcotegs\",\r\n });\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n Choose your gutter system\r\n \r\n \r\n {props.viewModel.products.map((item) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.viewModel.canDisplayPlygeneProducts && (\r\n \r\n )}\r\n {props.viewModel.canDisplayDelcoteProducts && (\r\n \r\n )}\r\n \r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\nimport GutterOnlySprite from \"Custom/Content/ProductSelector/gutter_only_sprite.png\";\r\nimport RoofOnlySprite from \"Custom/Content/ProductSelector/roof_only_sprite.png\";\r\nimport RoofGutterSprite from \"Custom/Content/ProductSelector/roof_gutter_sprite.png\";\r\n\r\nconst gutterOnlySpriteUrl = `url(${GutterOnlySprite})`;\r\nconst roofOnlySpriteUrl = `url(${RoofOnlySprite})`;\r\nconst roofGutterSpriteUrl = `url(${RoofGutterSprite})`;\r\n\r\nexport const ProductsStyle = makeStyles((theme) => ({\r\n root: {\r\n marginBottom: \"0\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n marginBottom: \"2.5rem\",\r\n },\r\n },\r\n radioButtons: {\r\n display: \"flex\",\r\n \"& > div\": {\r\n flex: \"1\",\r\n flexDirection: \"column\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n \"& > div\": {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n },\r\n radioButton: {\r\n flex: \"1\",\r\n margin: \"0 0.75rem 10px 0.75rem\",\r\n maxWidth: \"350px\",\r\n \"& > span.MuiButtonBase-root\": {\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"300%\",\r\n borderRadius: \"0\",\r\n height: \"197px\",\r\n width: \"100%\",\r\n \"& > span.MuiIconButton-label\": {\r\n display: \"none\",\r\n },\r\n },\r\n \"& > span.MuiFormControlLabel-label\": {\r\n fontFamily: \"Nexa Bold\",\r\n fontSize: \"18.75px\",\r\n marginBottom: \"7.5px\",\r\n marginRight: \"auto\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n margin: \"0 0.75rem\",\r\n maxWidth: \"312px\",\r\n \"& > span.MuiButtonBase-root\": {\r\n height: \"176px\",\r\n },\r\n },\r\n [theme.breakpoints.up(\"lg\")]: {\r\n maxWidth: \"350px\",\r\n \"& > div\": {\r\n flexDirection: \"row\",\r\n },\r\n \"& > span.MuiButtonBase-root\": {\r\n height: \"197px\",\r\n },\r\n },\r\n },\r\n radioButtonRoofOnly: {\r\n \"& > span.MuiButtonBase-root\": {\r\n backgroundImage: roofOnlySpriteUrl,\r\n },\r\n \"& > span.MuiButtonBase-root:not(.Mui-checked)\": {\r\n backgroundPosition: \"0 0\",\r\n \"&:hover\": {\r\n backgroundPosition: \"50% 0\",\r\n },\r\n },\r\n \"& > span.MuiButtonBase-root.Mui-checked\": {\r\n backgroundPosition: \"100% 0\",\r\n },\r\n },\r\n radioButtonGutterOnly: {\r\n \"& > span.MuiButtonBase-root\": {\r\n backgroundImage: gutterOnlySpriteUrl,\r\n },\r\n \"& > span.MuiButtonBase-root:not(.Mui-checked)\": {\r\n backgroundPosition: \"0 0\",\r\n \"&:hover\": {\r\n backgroundPosition: \"50% 0\",\r\n },\r\n },\r\n \"& > span.MuiButtonBase-root.Mui-checked\": {\r\n backgroundPosition: \"100% 0\",\r\n },\r\n },\r\n radioButtonRoofGutter: {\r\n \"& > span.MuiButtonBase-root\": {\r\n backgroundImage: roofGutterSpriteUrl,\r\n },\r\n \"& > span.MuiButtonBase-root:not(.Mui-checked)\": {\r\n backgroundPosition: \"0 0\",\r\n \"&:hover\": {\r\n backgroundPosition: \"50% 0\",\r\n },\r\n },\r\n \"& > span.MuiButtonBase-root.Mui-checked\": {\r\n backgroundPosition: \"100% 0\",\r\n },\r\n },\r\n}));\r\n","// Libraries\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { useState } from \"react\";\r\n\r\n// Custom\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { ProductsStyle } from \"./ProductsStyle\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { BQSRadioButton } from \"./../../Primitives/RadioButtons/BQSRadioButton\";\r\nimport { BQSRadioButtons } from \"./../../Primitives/RadioButtons/BQSRadioButtons\";\r\n\r\nimport { ProductsViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/ProductsViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n viewModel: ProductsViewModel;\r\n}\r\n\r\nexport const Products: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const typopgraphyVariants = TypographyVariants();\r\n const productsStyle = ProductsStyle();\r\n\r\n const getClassName = (value: string): string => {\r\n return classNames({\r\n [`${productsStyle.radioButton}`]: true,\r\n [`${productsStyle.radioButtonRoofOnly}`]: value === \"id_roofsystem_only\",\r\n [`${productsStyle.radioButtonGutterOnly}`]: value === \"id_guttersystem_only\",\r\n [`${productsStyle.radioButtonRoofGutter}`]: value === \"id_roofandgutter\",\r\n });\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n Budget quote\r\n \r\n \r\n What are you calculating?\r\n \r\n \r\n {props.viewModel.products.map((item) => (\r\n \r\n ))}\r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { makeStyles } from \"@material-ui/core\";\r\n\r\nexport const RoofSystemStyle = makeStyles((theme) => ({\r\n root: {\r\n backgroundColor: \"#F4F5F5\",\r\n marginBottom: \"2.5rem\",\r\n padding: \"40px 15px\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n padding: \"40px\",\r\n },\r\n [theme.breakpoints.up(\"lg\")]: {\r\n padding: \"20px 60px\",\r\n },\r\n },\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const DelcoteProductsStyle = makeStyles((theme) => ({\r\n root: {},\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const Delcote25Style = makeStyles((theme) => ({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n margin: \"-0.75rem 0\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n margin: \"0.75rem -0.75rem\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flex: \"1\",\r\n flexDirection: \"column\",\r\n margin: \"0 0.75rem\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n },\r\n editsContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n selectContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n textContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n \"& p\": {\r\n margin: \"0.5rem 0\",\r\n },\r\n },\r\n overlapimage: {\r\n backgroundSize: \"contain\",\r\n height: \"100%\",\r\n minHeight: \"230px\",\r\n width: \"auto\",\r\n },\r\n delcotedelglazeimage: {\r\n backgroundSize: \"contain\",\r\n height: \"100%\",\r\n minHeight: \"230px\",\r\n width: \"auto\",\r\n },\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const DelglazeStyle = makeStyles((theme) => ({\r\n root: {\r\n marginTop: \"1.5rem\",\r\n },\r\n}));\r\n","// Libraries\r\nimport { Checkbox, FormControlLabel } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSCheckBoxStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n displayNamePlacement?: string;\r\n execute: (value: boolean) => void;\r\n canExecute?: boolean;\r\n isSelected: boolean;\r\n}\r\n\r\nexport const BQSCheckBox: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const checkBoxClasses = BQSCheckBoxStyle();\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSCheckBox: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const getDisplayName = (): ReactElement[] | string => {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n };\r\n\r\n const getDisplayNamePlacement = (): \"bottom\" | \"top\" | \"end\" | \"start\" => {\r\n return !isEmptyOrWhitespace(props.displayNamePlacement) ? (props.displayNamePlacement! as \"bottom\" | \"top\" | \"end\" | \"start\") : \"end\";\r\n };\r\n\r\n const isChecked = (): boolean => {\r\n return props.isSelected;\r\n };\r\n\r\n const isDisabled = (): boolean => {\r\n return !isNullOrUndefined(props.canExecute) ? !props.canExecute : false;\r\n };\r\n\r\n const onChange = (event: any, checked: boolean): void => {\r\n props.execute(checked);\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n }\r\n label={getDisplayName()}\r\n labelPlacement={getDisplayNamePlacement()}\r\n />\r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { FormControl, FormGroup, FormHelperText, FormLabel } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { ReactElement } from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\n// Core\r\nimport { isEmptyOrWhitespace } from \"../../../../Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { BQSCheckBoxesStyle } from \"./../BQSPrimitivesStyle\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n displayName: string;\r\n row?: boolean;\r\n validationMessage?: string;\r\n}\r\n\r\nexport const BQSCheckBoxes: React.FC = (props: any) => {\r\n // #region Code Behind\r\n\r\n const checkBoxClasses = BQSCheckBoxesStyle();\r\n\r\n const displayGroupAsRow = (): boolean => {\r\n return !isNullOrUndefined(props.row) ? props.row : true;\r\n };\r\n\r\n const getClassName = (): string => {\r\n return classNames({\r\n BQSCheckBoxes: true,\r\n [`${props.className}`]: !isEmptyOrWhitespace(props.className),\r\n });\r\n };\r\n\r\n const getDisplayName = (): ReactElement[] | string => {\r\n return !isEmptyOrWhitespace(props.displayName) ? ReactHtmlParser(props.displayName) : \"\";\r\n };\r\n\r\n const canDisplayName = (): boolean => {\r\n return !isEmptyOrWhitespace(props.displayName);\r\n };\r\n\r\n const getValidationMessage = (): string => {\r\n return !isEmptyOrWhitespace(props.validationMessage) ? props.validationMessage! : \"\";\r\n };\r\n\r\n const isValidationMessageNotEmpty = (): boolean => {\r\n return !isEmptyOrWhitespace(props.validationMessage);\r\n };\r\n\r\n const renderChildrenWithProps = (): JSX.Element => {\r\n const childrenWithProps = React.Children.map(props.children, (child) => {\r\n return React.cloneElement(child as React.ReactElement, {});\r\n });\r\n\r\n return {childrenWithProps};\r\n };\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Public Interface\r\n\r\n return useObserver(() => (\r\n \r\n {canDisplayName() && {getDisplayName()}}\r\n {renderChildrenWithProps()}\r\n {isValidationMessageNotEmpty() && {getValidationMessage()}}\r\n \r\n ));\r\n\r\n // #endregion Public Interface\r\n};\r\n","// Libraries\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { DelglazeStyle } from \"./DelglazeStyle\";\r\n\r\nimport { BQSCheckBox } from \"Custom/Views/Primitives/CheckBoxes/BQSCheckBox\";\r\nimport { BQSCheckBoxes } from \"Custom/Views/Primitives/CheckBoxes/BQSCheckBoxes\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\n\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n viewModel: DelglazeViewModel;\r\n}\r\n\r\nexport const Delglaze: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const delglazeStyle = DelglazeStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n Delglaze rooflight coating system\r\n \r\n \r\n \r\n \r\n view system specification)\"\r\n execute={props.commonViewModel.setDelglazeProductRequired}\r\n isSelected={props.viewModel.productRequired}\r\n />\r\n \r\n \r\n {props.commonViewModel.canDisplayDelglazeRooflightAreaMeterage && (\r\n \r\n m2 of rooflights`}\r\n execute={props.commonViewModel.setRooflightSquareMeterage}\r\n minimumValue={0}\r\n value={props.viewModel.rooflightSquareMeterage}\r\n />\r\n \r\n )}\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, CardMedia, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport DiagramOverlapImage from \"Custom/Content/ProductSelector/diagram_overlap.png\";\r\nimport DiagramDelcoteDelglazeImage from \"Custom/Content/ProductSelector/diagram_delcote_delglaze.png\";\r\n\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { Delcote25Style } from \"./Delcote25Style\";\r\n\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { Delcote10ViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModels/Delcote10ViewModel\";\r\nimport { Delglaze } from \"../Delglaze\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\nimport { BQSSelect } from \"Custom/Views/Primitives/Selects/BQSSelect\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n delglazeViewModel: DelglazeViewModel;\r\n viewModel: Delcote10ViewModel;\r\n}\r\n\r\nexport const Delcote10: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const delcote10Style = Delcote25Style();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n \r\n Set your overlap and end lap treatment length\r\n \r\n \r\n \r\n \r\n \r\n `}\r\n value={props.viewModel.overlapMeterage}\r\n />\r\n `}\r\n value={props.viewModel.endlapMeterage}\r\n />\r\n \r\n \r\n \r\n All measurements in this calculator should be inputted as linear meterage (end to end) not including the roof profile. The area of the roof will be\r\n increased using the profile correction entered in the field below. If unsure, use 20%.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Delcote full roof coating system\r\n \r\n \r\n \r\n \r\n \r\n 2 of roof to coat\"\r\n execute={props.commonViewModel.setRoofSquareMeterage}\r\n minimumValue={0}\r\n startAdornment={`
`}\r\n value={props.viewModel.roofSquareMeterage}\r\n />\r\n 2 of roof lights\"\r\n execute={props.commonViewModel.setRooflightSquareMeterage}\r\n minimumValue={0}\r\n startAdornment={`
`}\r\n value={props.viewModel.rooflightSquareMeterage}\r\n />\r\n {/* 2\"\r\n endAdornment={`
m2
`}\r\n execute={() => {}}\r\n validationMessage={props.viewModel.netRoofSquareMeterageValidationMessage}\r\n value={props.viewModel.netRoofSquareMeterage}\r\n /> */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n option.title}\r\n groupBy={(option) => option.group}\r\n options={props.viewModel.topcoatColours}\r\n value={props.viewModel.topcoatColourSelection}\r\n validationMessage={props.viewModel.colourValidationMessage}\r\n showColourLink={true}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, CardMedia, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport DiagramOverlapImage from \"Custom/Content/ProductSelector/diagram_overlap.png\";\r\nimport DiagramDelcoteDelglazeImage from \"Custom/Content/ProductSelector/diagram_delcote_delglaze.png\";\r\n\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { Delcote25Style } from \"./Delcote25Style\";\r\n\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { Delcote25ViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModels/Delcote25ViewModel\";\r\nimport { Delglaze } from \"./../Delglaze\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\nimport { BQSSelect } from \"Custom/Views/Primitives/Selects/BQSSelect\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n delglazeViewModel: DelglazeViewModel;\r\n viewModel: Delcote25ViewModel;\r\n}\r\n\r\nexport const Delcote25: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const delcote25Style = Delcote25Style();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n \r\n Set your overlap and end lap treatment length\r\n \r\n \r\n \r\n \r\n \r\n `}\r\n value={props.viewModel.overlapMeterage}\r\n />\r\n `}\r\n value={props.viewModel.endlapMeterage}\r\n />\r\n \r\n \r\n \r\n All measurements in this calculator should be inputted as linear (end to end) not including the roof profile. The area of the roof will be increased\r\n using the profile correction entered in the field below.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Delcote full roof coating system\r\n \r\n \r\n \r\n \r\n \r\n 2 of roof to coat\"\r\n execute={props.commonViewModel.setRoofSquareMeterage}\r\n minimumValue={0}\r\n startAdornment={`
`}\r\n value={props.viewModel.roofSquareMeterage}\r\n />\r\n 2 of roof lights\"\r\n execute={props.commonViewModel.setRooflightSquareMeterage}\r\n minimumValue={0}\r\n startAdornment={`
`}\r\n value={props.viewModel.rooflightSquareMeterage}\r\n />\r\n {/* 2\"\r\n endAdornment={`
m2
`}\r\n execute={() => {}}\r\n validationMessage={props.viewModel.netRoofSquareMeterageValidationMessage}\r\n value={props.viewModel.netRoofSquareMeterage}\r\n /> */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n option.title}\r\n groupBy={(option) => option.group}\r\n options={props.viewModel.topcoatColours}\r\n value={props.viewModel.topcoatColourSelection}\r\n validationMessage={props.viewModel.colourValidationMessage}\r\n showColourLink={true}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const DelcoteAsbestosStyle = makeStyles((theme) => ({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n margin: \"-0.75rem 0\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n margin: \"0.75rem -0.75rem\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flex: \"1\",\r\n flexDirection: \"column\",\r\n margin: \"0 0.75rem\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n },\r\n editsContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n selectContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n textContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n \"& p\": {\r\n margin: \"0.5rem 0\",\r\n },\r\n },\r\n delcotedelglazeimage: {\r\n backgroundSize: \"contain\",\r\n height: \"100%\",\r\n minHeight: \"230px\",\r\n width: \"auto\",\r\n },\r\n}));\r\n","// Libraries\r\nimport { Box, CardMedia, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport DiagramDelcoteDelglazeImage from \"Custom/Content/ProductSelector/diagram_delcote_delglaze.png\";\r\n\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { DelcoteAsbestosStyle } from \"./DelcoteAsbestosStyle\";\r\n\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { DelcoteAsbestosViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModels/DelcoteAsbestosViewModel\";\r\nimport { Delglaze } from \"./../Delglaze\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\nimport { BQSSelect } from \"Custom/Views/Primitives/Selects/BQSSelect\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n delglazeViewModel: DelglazeViewModel;\r\n viewModel: DelcoteAsbestosViewModel;\r\n}\r\n\r\nexport const DelcoteAsbestos: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const delcoteAsbestosStyle = DelcoteAsbestosStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n \r\n Delcote full roof coating system\r\n \r\n \r\n \r\n \r\n \r\n 2 of roof to coat\"\r\n execute={props.commonViewModel.setRoofSquareMeterage}\r\n minimumValue={0}\r\n startAdornment={`
`}\r\n value={props.viewModel.roofSquareMeterage}\r\n />\r\n 2 of roof lights\"\r\n execute={props.commonViewModel.setRooflightSquareMeterage}\r\n minimumValue={0}\r\n startAdornment={`
`}\r\n value={props.viewModel.rooflightSquareMeterage}\r\n />\r\n {/* 2\"\r\n endAdornment={`
m2
`}\r\n execute={() => {}}\r\n validationMessage={props.viewModel.netRoofSquareMeterageValidationMessage}\r\n value={props.viewModel.netRoofSquareMeterage}\r\n /> */}\r\n
\r\n \r\n \r\n All measurements in this calculator should be inputted as linear (end to end) not including the roof profile. The area of the roof will be increased\r\n using the profile correction entered in the field below.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n option.title}\r\n groupBy={(option) => option.group}\r\n options={props.viewModel.topcoatColours}\r\n value={props.viewModel.topcoatColourSelection}\r\n validationMessage={props.viewModel.colourValidationMessage}\r\n showColourLink={true}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { DelcoteProductsStyle } from \"./DelcoteProductsStyle\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { Delcote10 } from \"./DelcoteSubViews/Delcote10\";\r\nimport { Delcote25 } from \"./DelcoteSubViews/Delcote25\";\r\nimport { DelcoteAsbestos } from \"./DelcoteSubViews/DelcoteAsbestos\";\r\n\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { DelcoteProductsViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelcoteProductsViewModel\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n delglazeViewModel: DelglazeViewModel;\r\n viewModel: DelcoteProductsViewModel;\r\n}\r\n\r\nexport const DelcoteProducts: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const delcoteProductsStyle = DelcoteProductsStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n {/* \r\n {props.viewModel.products.map((item) => (\r\n \r\n ))}\r\n */}\r\n {props.viewModel.canDisplayMetal10 && (\r\n \r\n )}\r\n {props.viewModel.canDisplayMetal25 && (\r\n \r\n )}\r\n {props.viewModel.canDisplayFibreCement && (\r\n \r\n )}\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const SeamsilProductsStyle = makeStyles((theme) => ({\r\n root: {},\r\n}));\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const Seamsil100Style = makeStyles((theme) => ({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n margin: \"-0.75rem 0\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n margin: \"0.75rem -0.75rem\",\r\n \"& > div\": {\r\n display: \"flex\",\r\n flex: \"1\",\r\n flexDirection: \"column\",\r\n margin: \"0 0.75rem\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n },\r\n editsContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n selectContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n textContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n \"& p\": {\r\n margin: \"0.5rem 0\",\r\n },\r\n },\r\n overlapimage: {\r\n backgroundSize: \"contain\",\r\n height: \"100%\",\r\n minHeight: \"230px\",\r\n width: \"auto\",\r\n },\r\n}));\r\n","// Libraries\r\nimport { Box, CardMedia, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport DiagramOverlapImage from \"Custom/Content/ProductSelector/diagram_overlap.png\";\r\n\r\nimport { EditVariants } from \"Custom/StylesAppSpecific/EditVariants\";\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { Seamsil100Style } from \"./Seamsil100Style\";\r\n\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { Seamsil100ViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/SeamsilProductsViewModels/Seamsil100ViewModel\";\r\nimport { Delglaze } from \"./../Delglaze\";\r\nimport { BQSEditNumber } from \"Custom/Views/Primitives/Edits/BQSEditNumber\";\r\nimport { BQSRow } from \"Custom/Views/Primitives/Row/BQSRow\";\r\nimport { BQSSelect } from \"Custom/Views/Primitives/Selects/BQSSelect\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n delglazeViewModel: DelglazeViewModel;\r\n viewModel: Seamsil100ViewModel;\r\n}\r\n\r\nexport const Seamsil100: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const editVariants = EditVariants();\r\n const typopgraphyVariants = TypographyVariants();\r\n const seamsil100Style = Seamsil100Style();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n \r\n \r\n Set your overlap and end lap treatment length\r\n \r\n \r\n \r\n \r\n \r\n `}\r\n value={props.viewModel.overlapMeterage}\r\n />\r\n `}\r\n value={props.viewModel.endlapMeterage}\r\n />\r\n \r\n \r\n \r\n All measurements in this calculator should be inputted as linear (end to end) not including the roof profile. The area of the roof will be increased\r\n using the profile correction entered in the field below.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n option.title}\r\n options={props.viewModel.colours}\r\n groupBy={(option) => option.group}\r\n value={props.viewModel.topcoatColourSelection}\r\n validationMessage={props.viewModel.colourValidationMessage}\r\n showColourLink={true}\r\n />\r\n \r\n {/* */}\r\n \r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\n// Custom\r\nimport { SeamsilProductsStyle } from \"./SeamsilProductsStyle\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { Delglaze } from \"./Delglaze\";\r\nimport { Seamsil100 } from \"./SeamsilSubViews/Seamsil100\";\r\n\r\nimport { DelglazeViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/DelglazeViewModel\";\r\nimport { SeamsilProductsViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/SeamsilProductsViewModel\";\r\nimport { ProductsCommonViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemSubViewModels/ProductsCommonViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n commonViewModel: ProductsCommonViewModel;\r\n delglazeViewModel: DelglazeViewModel;\r\n viewModel: SeamsilProductsViewModel;\r\n}\r\n\r\nexport const SeamsilProducts: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const seamsilProductsStyle = SeamsilProductsStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n {props.viewModel.canDisplaySubstrateUndefined && (\r\n \r\n )}\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { useState } from \"react\";\r\n\r\n// Custom\r\nimport { TypographyVariants } from \"Custom/StylesAppSpecific/TypographyVariants\";\r\nimport { RoofSystemStyle } from \"./RoofSystemStyle\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { DelcoteProducts } from \"./RoofSystemSubViews/DelcoteProducts\";\r\nimport { SeamsilProducts } from \"./RoofSystemSubViews/SeamsilProducts\";\r\n\r\nimport { BQSRadioButton } from \"./../../Primitives/RadioButtons/BQSRadioButton\";\r\nimport { BQSRadioButtons } from \"./../../Primitives/RadioButtons/BQSRadioButtons\";\r\n\r\nimport { RoofSystemViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/RoofSystemViewModel\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n viewModel: RoofSystemViewModel;\r\n}\r\n\r\nexport const RoofSystem: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const typopgraphyVariants = TypographyVariants();\r\n const roofSystemStyle = RoofSystemStyle();\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n Choose your roof refurbishment system\r\n \r\n \r\n {props.viewModel.products.map((item) => (\r\n \r\n ))}\r\n \r\n {props.viewModel.canDisplayDelcote && (\r\n \r\n )}\r\n {props.viewModel.canDisplaySeamsil && (\r\n \r\n )}\r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","export const Client = {\r\n Root: \"/\",\r\n};\r\n\r\nexport const Server = {\r\n Api: {\r\n Admin: {\r\n ResetFailedLoginAttemptsCount: \"./api/user/ResetLoginAttempts\",\r\n },\r\n Quote: {\r\n CalculateQuote: \"/api/bqs/CalculateQuote\",\r\n GetProductData: \"/api/bqs/GetProductData\",\r\n SendEmail: \"/api/bqs/SendEmail\",\r\n },\r\n },\r\n};\r\n\r\nexport const Admin = {\r\n Root: \"/admin\",\r\n};\r\n","// Libraries\r\nimport { action, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { ColourSelection, SortDirection } from \"Custom/Models\";\r\nimport * as utils from \"Custom/Utils\";\r\n\r\nexport class DelcoteGSModel extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n // eslint-disable-next-line prettier/prettier\r\n public basecoatColourSelection: any = null;\r\n\r\n @observable\r\n public colours = observable([]);\r\n\r\n @observable\r\n public boltsPerJoint: number = 0;\r\n\r\n @observable\r\n public girth: number = 0;\r\n\r\n @observable\r\n public gutterJoints: number = 0;\r\n\r\n @observable\r\n public gutterLengthMeterage: number = 0;\r\n\r\n @observable\r\n public topcoatColourSelection: any = null;\r\n\r\n // #region Model Properties\r\n\r\n @action\r\n public fromProductDataDto(colours: any[]): void {\r\n if (colours.length >= 2) {\r\n this.colours.replace([]);\r\n\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of colours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.colours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.colours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n this.basecoatColourSelection = this.colours[1];\r\n this.topcoatColourSelection = this.colours[0];\r\n }\r\n }\r\n\r\n @action\r\n public fromDto(model: DelcoteGSModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): DelcoteGSModelDTO {\r\n return {\r\n basecoatColourId: this.basecoatColourSelection.value,\r\n basecoatColourName: this.basecoatColourSelection.title,\r\n boltsPerJoint: this.boltsPerJoint,\r\n girth: this.girth,\r\n gutterJoints: this.gutterJoints,\r\n gutterLengthMeterage: this.gutterLengthMeterage,\r\n topcoatColourId: this.topcoatColourSelection.value,\r\n topcoatColourName: this.topcoatColourSelection.title,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface DelcoteGSModelDTO {\r\n basecoatColourId: number;\r\n basecoatColourName: string;\r\n boltsPerJoint: number;\r\n girth: number;\r\n gutterJoints: number;\r\n gutterLengthMeterage: number;\r\n topcoatColourId: number;\r\n topcoatColourName: string;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\n// Custom\r\nimport { DelcoteGSModel, DelcoteGSModelDTO } from \"./DelcoteProductModels/DelcoteGS\";\r\n\r\nexport class DelcoteProductsModel extends ModelBase {\r\n private delcoteGSModel: DelcoteGSModel;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.delcoteGSModel = new DelcoteGSModel();\r\n\r\n this.products.push({ title: \"Substrate Undefined\", value: \"id_delcotesubstrateundefined\" });\r\n\r\n this.productSelection = this.products[0];\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get DelcoteGSModel(): DelcoteGSModel {\r\n return this.delcoteGSModel;\r\n }\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n public productSelection: any = undefined;\r\n\r\n // #endregion Model Properties\r\n\r\n public fromDto(model: DelcoteProductsModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): DelcoteProductsModelDTO {\r\n return {\r\n delcoteGS: this.productSelection.value === \"id_delcotesubstrateundefined\" ? this.DelcoteGSModel.toDto() : undefined,\r\n };\r\n }\r\n}\r\n\r\nexport interface DelcoteProductsModelDTO {\r\n delcoteGS?: DelcoteGSModelDTO;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\nexport class PlygeneMouldedModel extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n public gutterLengthMeterage: number = 0;\r\n\r\n @observable\r\n public girth: number = 0;\r\n\r\n // #region Model Properties\r\n\r\n public fromDto(model: PlygeneMouldedModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): PlygeneMouldedModelDTO {\r\n return {\r\n girth: this.girth,\r\n gutterLengthMeterage: this.gutterLengthMeterage,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface PlygeneMouldedModelDTO {\r\n girth: number;\r\n gutterLengthMeterage: number;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\nexport class PlygeneStandardModel extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n public gutterLengthMeterage: number = 0;\r\n\r\n @observable\r\n public girth: number = 0;\r\n\r\n // #region Model Properties\r\n\r\n public fromDto(model: PlygenStandardModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): PlygenStandardModelDTO {\r\n return {\r\n girth: this.girth,\r\n gutterLengthMeterage: this.gutterLengthMeterage,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface PlygenStandardModelDTO {\r\n girth: number;\r\n gutterLengthMeterage: number;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\n// Custom\r\nimport { PlygeneMouldedModel, PlygeneMouldedModelDTO } from \"./PlygeneProductModels/PlygeneMoulded\";\r\nimport { PlygeneStandardModel, PlygenStandardModelDTO } from \"./PlygeneProductModels/PlygeneStandard\";\r\n\r\nexport class PlygeneProductsModel extends ModelBase {\r\n private plygeneMouldedModel: PlygeneMouldedModel;\r\n private plygeneStandardModel: PlygeneStandardModel;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.plygeneMouldedModel = new PlygeneMouldedModel();\r\n this.plygeneStandardModel = new PlygeneStandardModel();\r\n\r\n this.products.push({ title: \"Bespoke moulded components\", value: \"id_plygenemoulded\" });\r\n this.products.push({ title: \"Standard stop ends and outlets\", value: \"id_plygenestandard\" });\r\n\r\n this.productSelection = this.products[0];\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get PlygeneMouldedModel(): PlygeneMouldedModel {\r\n return this.plygeneMouldedModel;\r\n }\r\n\r\n public get PlygeneStandardModel(): PlygeneStandardModel {\r\n return this.plygeneStandardModel;\r\n }\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n public productSelection: any = undefined;\r\n\r\n // #endregion Model Properties\r\n\r\n public fromDto(model: PlygeneProductsModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): PlygeneProductsModelDTO {\r\n return {\r\n plygeneMoulded: this.productSelection.value === \"id_plygenemoulded\" ? this.PlygeneMouldedModel.toDto() : undefined,\r\n plygeneStandard: this.productSelection.value === \"id_plygenestandard\" ? this.plygeneStandardModel.toDto() : undefined,\r\n };\r\n }\r\n}\r\n\r\nexport interface PlygeneProductsModelDTO {\r\n plygeneMoulded?: PlygeneMouldedModelDTO;\r\n plygeneStandard?: PlygenStandardModelDTO;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\nimport { StoresInstance } from \"Custom/Stores\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\n// Custom\r\nimport { DelcoteProductsModel, DelcoteProductsModelDTO } from \"./GutterSystemSubModels/DelcoteProducts\";\r\nimport { PlygeneProductsModel, PlygeneProductsModelDTO } from \"./GutterSystemSubModels/PlygeneProducts\";\r\nimport { validate, ValidationError } from \"class-validator\";\r\n\r\nexport class GutterSystemModel extends ModelBase {\r\n private delcoteProductsModel: DelcoteProductsModel;\r\n private plygeneProductsModel: PlygeneProductsModel;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.delcoteProductsModel = new DelcoteProductsModel();\r\n this.plygeneProductsModel = new PlygeneProductsModel();\r\n\r\n this.products.push({ title: \"Plygene gutterline\", value: \"id_plygene\", guarantee: \"Plygene gutterline system\" });\r\n\r\n if (StoresInstance.domain.showDelcoteGSOptions === true) {\r\n this.products.push({ title: \"Delcote GS\", value: \"id_delcotegs\", guarantee: \"Delcote GS gutter coating system\" });\r\n }\r\n\r\n this.productSelection = this.products[0];\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get DelcoteProducts(): DelcoteProductsModel {\r\n return this.delcoteProductsModel;\r\n }\r\n\r\n public get PlygeneProducts(): PlygeneProductsModel {\r\n return this.plygeneProductsModel;\r\n }\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n public productSelection: any = undefined;\r\n\r\n // #region Model Properties\r\n\r\n public fromDto(model: GutterSystemModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): GutterSystemModelDTO {\r\n return {\r\n delcoteProducts: this.productSelection.value === \"id_delcotegs\" ? this.DelcoteProducts.toDto() : undefined,\r\n plygeneProducts: this.productSelection.value === \"id_plygene\" ? this.PlygeneProducts.toDto() : undefined,\r\n };\r\n }\r\n\r\n public Validate = (): Promise => {\r\n if (this.productSelection.value === \"id_delcotegs\") {\r\n let promise = validate(this.delcoteProductsModel).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n } else {\r\n let promise = validate(this.plygeneProductsModel).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n }\r\n };\r\n}\r\n\r\nexport interface GutterSystemModelDTO {\r\n delcoteProducts?: DelcoteProductsModelDTO;\r\n plygeneProducts?: PlygeneProductsModelDTO;\r\n}\r\n","import { StoresInstance } from \"Custom/Stores\";\r\n// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\nexport class ProductsModel extends ModelBase {\r\n constructor() {\r\n super();\r\n\r\n const showRoofSystem: boolean = StoresInstance.domain.showRoofOptions;\r\n\r\n if (showRoofSystem === true) {\r\n this.products.push({ title: \"Roof system\", value: \"id_roofsystem_only\" });\r\n }\r\n\r\n this.products.push({ title: \"Gutter system\", value: \"id_guttersystem_only\" });\r\n\r\n /* if (showRoofSystem === true) {\r\n this.products.push({ title: \"Roof and gutter system\", value: \"id_roofandgutter\" });\r\n } */\r\n this.productSelection = this.products[0];\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n public productSelection: any = undefined;\r\n\r\n // #region Model Properties\r\n\r\n public fromDto(model: ProductsModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(model: ProductsModel): ProductsModelDTO {\r\n return {};\r\n }\r\n}\r\n\r\nexport interface ProductsModelDTO {}\r\n","// Libraries\r\nimport { action, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { isEmptyOrWhitespace } from \"Core/Utils/Utils\";\r\n\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\"; // Custom\r\n\r\nexport class QuoteModel extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n public gutterProducts = observable([]);\r\n\r\n @observable\r\n public roofProducts = observable([]);\r\n\r\n // #endregion Model Properties\r\n\r\n @action\r\n public fromDto(model: QuoteModelDTO): void {\r\n this.gutterProducts.replace([]);\r\n this.roofProducts.replace([]);\r\n\r\n if (!isNullOrUndefined(model.gutterQuoteItems)) {\r\n this.gutterProducts.replace(model.gutterQuoteItems);\r\n }\r\n\r\n if (!isNullOrUndefined(model.roofQuoteItems)) {\r\n this.roofProducts.replace(model.roofQuoteItems);\r\n }\r\n }\r\n\r\n public toDto(): QuoteModelDTO {\r\n const gutterQuoteItems: any[] = this.gutterProducts;\r\n const roofQuoteItems: any[] = this.roofProducts;\r\n\r\n return {\r\n gutterQuoteItems: JSON.parse(JSON.stringify(gutterQuoteItems)),\r\n roofQuoteItems: JSON.parse(JSON.stringify(roofQuoteItems)),\r\n };\r\n }\r\n}\r\n\r\nexport interface QuoteModelDTO {\r\n gutterQuoteItems: any[];\r\n roofQuoteItems: any[];\r\n}\r\n","// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { ColourSelection, SortDirection } from \"Custom/Models\";\r\nimport * as utils from \"Custom/Utils\";\r\nimport { IsNegative, IsNotEmpty, ValidatePromise } from \"class-validator\";\r\n\r\nexport class Delcote25Model extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n @observable\r\n // eslint-disable-next-line prettier/prettier\r\n public basecoatColours = observable([]);\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Topcoat colour is required\" })\r\n public basecoatColourSelection: ColourSelection | undefined = undefined;\r\n\r\n @observable\r\n public endlapMeterage: number = 0;\r\n\r\n @observable\r\n public fixingCount: number = 0;\r\n\r\n @observable\r\n public overlapMeterage: number = 0;\r\n\r\n @observable\r\n public profileCorrectionPercentage: number = 20;\r\n\r\n @observable\r\n public ridgeFlashingsEtcMeterage: number = 0;\r\n\r\n @observable\r\n public rooflightSquareMeterage: number = 0;\r\n\r\n @observable\r\n @utils.MinusGtrZero(\"rooflightSquareMeterage\", {\r\n message: \"Cannot be negative\",\r\n })\r\n @ValidatePromise()\r\n public roofSquareMeterage: number = 0;\r\n\r\n @observable\r\n public topcoatColours = observable([]);\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Topcoat colour is required\" })\r\n public topcoatColourSelection: ColourSelection | undefined = undefined;\r\n\r\n @action\r\n public setTopcoatColourSelection = (newColour: ColourSelection | undefined): void => {\r\n this.topcoatColourSelection = newColour;\r\n let baseIndex: number = -1;\r\n // #5497 Delcote basecoat colour shoula always be \"albany grey\" unless the topcoat is \"albany grey\" in which case it should be \"goosewing grey\"\r\n if (newColour !== undefined) {\r\n if (newColour.title.toLocaleLowerCase() === \"albany grey\") {\r\n baseIndex = this.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"goosewing grey\");\r\n } else {\r\n baseIndex = this.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"albany grey\");\r\n }\r\n\r\n if (baseIndex != -1) {\r\n this.basecoatColourSelection = this.basecoatColours[baseIndex];\r\n } else {\r\n this.basecoatColourSelection = this.basecoatColours[0];\r\n }\r\n } else {\r\n // be undefined\r\n this.basecoatColourSelection = newColour;\r\n }\r\n };\r\n\r\n // #endregion Model Properties\r\n\r\n @action\r\n public fromProductDataDto(basecoatColours: any[], topcoatColours: any[]): void {\r\n if (basecoatColours.length > 0) {\r\n this.basecoatColours.replace([]);\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of basecoatColours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.basecoatColours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.basecoatColours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n }\r\n\r\n if (topcoatColours.length > 0) {\r\n this.topcoatColours.replace([]);\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of topcoatColours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.topcoatColours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.topcoatColours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n }\r\n }\r\n\r\n @action\r\n public fromDto(model: Delcote25ModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): Delcote25ModelDTO {\r\n return {\r\n basecoatColourId: this.basecoatColourSelection!.value,\r\n basecoatColourName: this.basecoatColourSelection!.title,\r\n endlapMeterage: this.endlapMeterage,\r\n fixingCount: this.fixingCount,\r\n overlapMeterage: this.overlapMeterage,\r\n profileCorrectionPercentage: this.profileCorrectionPercentage,\r\n ridgeFlashingsEtcMeterage: this.ridgeFlashingsEtcMeterage,\r\n rooflightSquareMeterage: this.rooflightSquareMeterage,\r\n roofSquareMeterage: this.roofSquareMeterage,\r\n topcoatColourId: this.topcoatColourSelection!.value,\r\n topcoatColourName: this.topcoatColourSelection!.title,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface Delcote25ModelDTO {\r\n basecoatColourId: number;\r\n basecoatColourName: string;\r\n endlapMeterage: number;\r\n fixingCount: number;\r\n overlapMeterage: number;\r\n profileCorrectionPercentage: number;\r\n ridgeFlashingsEtcMeterage: number;\r\n rooflightSquareMeterage: number;\r\n roofSquareMeterage: number;\r\n topcoatColourId: number;\r\n topcoatColourName: string;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { action, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { ColourSelection, SortDirection } from \"Custom/Models\";\r\nimport * as utils from \"Custom/Utils\";\r\nimport { IsNegative, IsNotEmpty, ValidatePromise } from \"class-validator\";\r\n\r\nexport class Delcote10Model extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n @observable\r\n public endlapMeterage: number = 0;\r\n\r\n @observable\r\n public fixingCount: number = 0;\r\n\r\n @observable\r\n public overlapMeterage: number = 0;\r\n\r\n @observable\r\n public profileCorrectionPercentage: number = 20;\r\n\r\n @observable\r\n public ridgeFlashingsEtcMeterage: number = 0;\r\n\r\n @observable\r\n public rooflightSquareMeterage: number = 0;\r\n\r\n @observable\r\n @utils.MinusGtrZero(\"rooflightSquareMeterage\", {\r\n message: \"Cannot be negative\",\r\n })\r\n @ValidatePromise()\r\n public roofSquareMeterage: number = 0;\r\n\r\n @observable\r\n public topcoatColours = observable([]);\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Topcoat colour is required\" })\r\n public topcoatColourSelection: ColourSelection | undefined = undefined;\r\n\r\n @action\r\n public setTopcoatColourSelection = (newColour: ColourSelection | undefined): void => {\r\n this.topcoatColourSelection = newColour;\r\n };\r\n\r\n // #endregion Model Properties\r\n\r\n @action\r\n public fromProductDataDto(topcoatColours: any[]): void {\r\n if (topcoatColours.length > 0) {\r\n this.topcoatColours.replace([]);\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of topcoatColours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.topcoatColours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.topcoatColours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n }\r\n }\r\n\r\n @action\r\n public fromDto(model: Delcote10ModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): Delcote10ModelDTO {\r\n return {\r\n endlapMeterage: this.endlapMeterage,\r\n fixingCount: this.fixingCount,\r\n overlapMeterage: this.overlapMeterage,\r\n profileCorrectionPercentage: this.profileCorrectionPercentage,\r\n ridgeFlashingsEtcMeterage: this.ridgeFlashingsEtcMeterage,\r\n rooflightSquareMeterage: this.rooflightSquareMeterage,\r\n roofSquareMeterage: this.roofSquareMeterage,\r\n colourId: this.topcoatColourSelection!.value,\r\n colourName: this.topcoatColourSelection!.title,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface Delcote10ModelDTO {\r\n endlapMeterage: number;\r\n fixingCount: number;\r\n overlapMeterage: number;\r\n profileCorrectionPercentage: number;\r\n ridgeFlashingsEtcMeterage: number;\r\n rooflightSquareMeterage: number;\r\n roofSquareMeterage: number;\r\n colourId: number;\r\n colourName: string;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { action, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { SortDirection, ColourSelection } from \"Custom/Models\";\r\nimport * as utils from \"Custom/Utils\";\r\nimport { IsNotEmpty } from \"class-validator\";\r\n\r\nexport class DelcoteAsbestosModel extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n @observable\r\n // eslint-disable-next-line prettier/prettier\r\n public basecoatColours = observable([]);\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Topcoat colour is required\" })\r\n public basecoatColourSelection: ColourSelection | undefined = undefined;\r\n\r\n @observable\r\n public fixingCount: number = 0;\r\n\r\n @observable\r\n public rooflightSquareMeterage: number = 0;\r\n\r\n @observable\r\n @utils.MinusGtrZero(\"rooflightSquareMeterage\", {\r\n message: \"Cannot be negative\",\r\n })\r\n public roofSquareMeterage: number = 0;\r\n\r\n @observable\r\n public profileCorrectionPercentage: number = 20;\r\n\r\n @observable\r\n public topcoatColours = observable([]);\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Topcoat colour is required\" })\r\n public topcoatColourSelection: ColourSelection | undefined = undefined;\r\n\r\n @action\r\n public setTopcoatColourSelection = (newColour: ColourSelection | undefined): void => {\r\n this.topcoatColourSelection = newColour;\r\n let baseIndex: number = -1;\r\n // #5497 Delcote basecoat colour shoula always be \"albany grey\" unless the topcoat is \"albany grey\" in which case it should be \"goosewing grey\"\r\n if (newColour !== undefined) {\r\n if (newColour.title.toLocaleLowerCase() === \"albany grey\") {\r\n baseIndex = this.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"goosewing grey\");\r\n } else {\r\n baseIndex = this.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"albany grey\");\r\n }\r\n\r\n if (baseIndex != -1) {\r\n this.basecoatColourSelection = this.basecoatColours[baseIndex];\r\n } else {\r\n this.basecoatColourSelection = this.basecoatColours[0];\r\n }\r\n } else {\r\n // be undefined\r\n this.basecoatColourSelection = newColour;\r\n }\r\n };\r\n\r\n // #endregion Model Properties\r\n\r\n @action\r\n public fromProductDataDto(basecoatColours: any[], topcoatColours: any[]): void {\r\n if (basecoatColours.length > 0) {\r\n this.basecoatColours.replace([]);\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of basecoatColours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.basecoatColours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.basecoatColours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n }\r\n\r\n if (topcoatColours.length > 0) {\r\n this.topcoatColours.replace([]);\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of topcoatColours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.topcoatColours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.topcoatColours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n }\r\n }\r\n\r\n @action\r\n public fromDto(model: DelcoteAsbestosModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): DelcoteAsbestosModelDTO {\r\n return {\r\n basecoatColourId: this.basecoatColourSelection!.value,\r\n basecoatColourName: this.basecoatColourSelection!.title,\r\n fixingCount: this.fixingCount,\r\n profileCorrectionPercentage: this.profileCorrectionPercentage,\r\n rooflightSquareMeterage: this.rooflightSquareMeterage,\r\n roofSquareMeterage: this.roofSquareMeterage,\r\n topcoatColourId: this.topcoatColourSelection!.value,\r\n topcoatColourName: this.topcoatColourSelection!.title,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface DelcoteAsbestosModelDTO {\r\n basecoatColourId: number;\r\n basecoatColourName: string;\r\n fixingCount: number;\r\n profileCorrectionPercentage: number;\r\n rooflightSquareMeterage: number;\r\n roofSquareMeterage: number;\r\n topcoatColourId: number;\r\n topcoatColourName: string;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\n// Custom\r\nimport { Delcote25Model, Delcote25ModelDTO } from \"./DelcoteProductModels/Delcote25\";\r\nimport { Delcote10Model, Delcote10ModelDTO } from \"./DelcoteProductModels/Delcote10\";\r\nimport { DelcoteAsbestosModel, DelcoteAsbestosModelDTO } from \"./DelcoteProductModels/DelcoteAsbestos\";\r\n\r\nexport class DelcoteProductsModel extends ModelBase {\r\n private delcote10Model: Delcote10Model;\r\n private delcote25Model: Delcote25Model;\r\n private delcoteAsbestosModel: DelcoteAsbestosModel;\r\n\r\n constructor() {\r\n super();\r\n this.delcote10Model = new Delcote10Model();\r\n this.delcote25Model = new Delcote25Model();\r\n this.delcoteAsbestosModel = new DelcoteAsbestosModel();\r\n\r\n this.products.push({\r\n title:\r\n \"Delcote 10 Metal roof coating – Single coat 10 Year System Guarantee (view system specification)\",\r\n value: \"id_delcotesubstratemetal10\",\r\n });\r\n\r\n this.products.push({\r\n title:\r\n \"Delcote 25 Metal roof coating – Dual coat 25 Year System Guarantee (view system specification)\",\r\n value: \"id_delcotesubstratemetal25\",\r\n });\r\n\r\n this.products.push({\r\n title:\r\n \"Delcote 25 Fibre cement roof coating – Dual coat 25 Year System Guarantee (view system specification)\",\r\n value: \"id_delcotesubstratefibrecement\",\r\n });\r\n\r\n // this.productSelection = this.products[1]; // Delcote 25 Metal\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get Delcote10Model(): Delcote10Model {\r\n return this.delcote10Model;\r\n }\r\n\r\n public get Delcote25Model(): Delcote25Model {\r\n return this.delcote25Model;\r\n }\r\n\r\n public get DelcoteAsbestosModel(): DelcoteAsbestosModel {\r\n return this.delcoteAsbestosModel;\r\n }\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n private productSelection: any = undefined;\r\n\r\n @computed\r\n public get getProductSelection(): any {\r\n return this.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: any) => {\r\n this.productSelection = value;\r\n };\r\n\r\n // #endregion Model Properties\r\n\r\n public fromDto(model: DelcoteProductsModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): DelcoteProductsModelDTO {\r\n return {\r\n delcote10: this.productSelection.value === \"id_delcotesubstratemetal10\" ? this.Delcote10Model.toDto() : undefined,\r\n delcote25: this.productSelection.value === \"id_delcotesubstratemetal25\" ? this.Delcote25Model.toDto() : undefined,\r\n delcoteAsbestos: this.productSelection.value === \"id_delcotesubstratefibrecement\" ? this.DelcoteAsbestosModel.toDto() : undefined,\r\n };\r\n }\r\n}\r\n\r\nexport interface DelcoteProductsModelDTO {\r\n delcote10?: Delcote10ModelDTO;\r\n delcote25?: Delcote25ModelDTO;\r\n delcoteAsbestos?: DelcoteAsbestosModelDTO;\r\n}\r\n","// Libraries\r\nimport { action, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { ColourSelection, SortDirection } from \"Custom/Models\";\r\nimport * as utils from \"Custom/Utils\";\r\nimport { IsNotEmpty } from \"class-validator\";\r\n\r\nexport class Seamsil100Model extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n // eslint-disable-next-line prettier/prettier\r\n public colours = observable([]);\r\n\r\n @observable\r\n public endlapMeterage: number = 0;\r\n\r\n @observable\r\n public overlapMeterage: number = 0;\r\n\r\n @observable\r\n public profileCorrectionPercentage: number = 20;\r\n\r\n @observable\r\n public ridgeFlashingsEtcMeterage: number = 0;\r\n\r\n @observable\r\n @IsNotEmpty({ message: \"Topcoat colour is required\" })\r\n public topcoatColourSelection: any = null;\r\n\r\n // #endregion Model Properties\r\n\r\n @action\r\n public fromProductDataDto(colours: any[]): void {\r\n if (colours.length >= 2) {\r\n this.colours.replace([]);\r\n let local: ColourSelection[] = [];\r\n let specialColours: ColourSelection[] = [];\r\n for (const colour of colours) {\r\n if (colour.variantId === -1) {\r\n specialColours.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Special colours\",\r\n });\r\n } else {\r\n local.push({\r\n title: colour.variantName,\r\n value: colour.variantId,\r\n group: \"Colours\",\r\n });\r\n }\r\n }\r\n\r\n this.colours.replace(utils.sortBy(local, \"title\", SortDirection.Asc));\r\n this.colours.push(...utils.sortBy(specialColours, \"title\", SortDirection.Asc));\r\n //this.topcoatColourSelection = this.colours[0];\r\n }\r\n }\r\n\r\n @action\r\n public fromDto(model: Seamsil100ModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): Seamsil100ModelDTO {\r\n return {\r\n endlapMeterage: this.endlapMeterage,\r\n overlapMeterage: this.overlapMeterage,\r\n profileCorrectionPercentage: this.profileCorrectionPercentage,\r\n ridgeFlashingsEtcMeterage: this.ridgeFlashingsEtcMeterage,\r\n topcoatColourId: this.topcoatColourSelection.value,\r\n topcoatColourName: this.topcoatColourSelection.title,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface Seamsil100ModelDTO {\r\n endlapMeterage: number;\r\n overlapMeterage: number;\r\n profileCorrectionPercentage: number;\r\n ridgeFlashingsEtcMeterage: number;\r\n topcoatColourId: number;\r\n topcoatColourName: string;\r\n version: number;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\nimport { Seamsil100Model, Seamsil100ModelDTO } from \"./SeamsilProductModels/Seamsil100\";\r\n\r\nexport class SeamsilProductsModel extends ModelBase {\r\n private seamsil100Model: Seamsil100Model;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.seamsil100Model = new Seamsil100Model();\r\n\r\n this.products.push({ title: \"Seamsil 100\", value: \"id_seamsilsubstrateundefined\" });\r\n\r\n this.productSelection = this.products[0];\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get Seamsil100Model(): Seamsil100Model {\r\n return this.seamsil100Model;\r\n }\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n public productSelection: any = undefined;\r\n\r\n // #endregion Model Properties\r\n\r\n public fromDto(model: SeamsilProductsModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): SeamsilProductsModelDTO {\r\n return {\r\n seamsil100: this.productSelection.value === \"id_seamsilsubstrateundefined\" ? this.Seamsil100Model.toDto() : undefined,\r\n };\r\n }\r\n}\r\n\r\nexport interface SeamsilProductsModelDTO {\r\n seamsil100?: Seamsil100ModelDTO;\r\n}\r\n","// Libraries\r\nimport { observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\nexport class DelglazeModel extends ModelBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n @observable\r\n public profileCorrectionPercentage: number = 20;\r\n\r\n @observable\r\n public productRequired: boolean = false;\r\n\r\n @observable\r\n public rooflightSquareMeterage: number = 0;\r\n\r\n // #endregion Model Properties\r\n\r\n public fromDto(model: DelglazeModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): DelglazeModelDTO {\r\n return {\r\n profileCorrectionPercentage: this.profileCorrectionPercentage,\r\n rooflightSquareMeterage: this.rooflightSquareMeterage,\r\n version: 2,\r\n };\r\n }\r\n}\r\n\r\nexport interface DelglazeModelDTO {\r\n profileCorrectionPercentage: number;\r\n rooflightSquareMeterage: number;\r\n version: number;\r\n}\r\n","import { Products } from \"./../../../../Views/ProductSelector/SubViews/Products\";\r\n// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\n// Custom\r\nimport { DelcoteProductsModel, DelcoteProductsModelDTO } from \"./RoofSystemSubModels/DelcoteProducts\";\r\nimport { SeamsilProductsModel, SeamsilProductsModelDTO } from \"./RoofSystemSubModels/SeamsilProducts\";\r\nimport { DelglazeModel, DelglazeModelDTO } from \"./RoofSystemSubModels/Delglaze\";\r\nimport { validate, ValidationError } from \"class-validator\";\r\n\r\nexport class RoofSystemModel extends ModelBase {\r\n private delcoteProductsModel: DelcoteProductsModel;\r\n private seamsilProductsModel: SeamsilProductsModel;\r\n private delglazeModel: DelglazeModel;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.delcoteProductsModel = new DelcoteProductsModel();\r\n this.seamsilProductsModel = new SeamsilProductsModel();\r\n this.delglazeModel = new DelglazeModel();\r\n\r\n this.products.push({\r\n title:\r\n \"Seamsil 100 cut edge corrosion system (view system specification)\",\r\n value: \"id_seamsil\",\r\n guarantee: \"Seamsil 100 cut edge corrosion system\",\r\n });\r\n\r\n // Add the three delcote items in.\r\n this.products.push(...this.delcoteProductsModel.products);\r\n this.productSelection = this.products[0];\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get DelcoteProducts(): DelcoteProductsModel {\r\n return this.delcoteProductsModel;\r\n }\r\n\r\n public get SeamsilProducts(): SeamsilProductsModel {\r\n return this.seamsilProductsModel;\r\n }\r\n\r\n public get DelglazeModel(): DelglazeModel {\r\n return this.delglazeModel;\r\n }\r\n\r\n @observable\r\n public products = observable([]);\r\n\r\n @observable\r\n private productSelection: any = undefined;\r\n\r\n @computed public get getProductSelection() {\r\n return this.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection(value: any) {\r\n this.productSelection = value;\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public fromDto(model: RoofSystemModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): RoofSystemModelDTO {\r\n return {\r\n delcoteProducts:\r\n this.productSelection.value === \"id_delcotesubstratemetal10\" ||\r\n this.productSelection.value === \"id_delcotesubstratemetal25\" ||\r\n this.productSelection.value === \"id_delcotesubstratefibrecement\"\r\n ? this.DelcoteProducts.toDto()\r\n : undefined,\r\n seamsilProducts: this.productSelection.value === \"id_seamsil\" ? this.SeamsilProducts.toDto() : undefined,\r\n delglaze: this.DelglazeModel.productRequired ? this.DelglazeModel.toDto() : undefined,\r\n };\r\n }\r\n\r\n public Validate = (): Promise => {\r\n if (this.productSelection.value === \"id_seamsil\") {\r\n let promise = validate(this.SeamsilProducts.Seamsil100Model).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n } else if (this.DelcoteProducts.getProductSelection.value === \"id_delcotesubstratemetal25\") {\r\n let promise = validate(this.DelcoteProducts.Delcote25Model).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n } else if (this.DelcoteProducts.getProductSelection.value === \"id_delcotesubstratemetal10\") {\r\n let promise = validate(this.DelcoteProducts.Delcote10Model).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n } else {\r\n //if (this.DelcoteProducts.productSelection.value === \"id_delcotesubstratefibrecement\") {\r\n let promise = validate(this.DelcoteProducts.DelcoteAsbestosModel).then((errors) => {\r\n // errors is an array of validation errors\r\n let retVal: ValidationError[] = [];\r\n if (errors.length > 0) {\r\n retVal = errors;\r\n console.log(\"validation failed\");\r\n } else {\r\n console.log(\"validation succeed\");\r\n }\r\n\r\n return retVal;\r\n });\r\n\r\n return promise;\r\n }\r\n };\r\n}\r\n\r\nexport interface RoofSystemModelDTO {\r\n delcoteProducts?: DelcoteProductsModelDTO;\r\n seamsilProducts?: SeamsilProductsModelDTO;\r\n delglaze?: DelglazeModelDTO;\r\n}\r\n","// Libraries\r\nimport { ValidationError } from \"class-validator\";\r\nimport { action, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { StoresInstance } from \"Core/Base\";\r\nimport { ModelBase } from \"Core/Models/ModelBase\";\r\n\r\n// Custom\r\nimport { AccountStore } from \"Custom/Stores/Domain\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\n\r\nimport { GutterSystemModel } from \"./SubModels/GutterSystem\";\r\nimport { ProductsModel } from \"./SubModels/Products\";\r\nimport { QuoteModel } from \"./SubModels/Quote\";\r\nimport { RoofSystemModel } from \"./SubModels/RoofSystem\";\r\nimport { DelcoteGSModelDTO } from \"./SubModels/GutterSystemSubModels/DelcoteProductModels/DelcoteGS\";\r\nimport { PlygeneMouldedModelDTO } from \"./SubModels/GutterSystemSubModels/PlygeneProductModels/PlygeneMoulded\";\r\nimport { PlygenStandardModelDTO } from \"./SubModels/GutterSystemSubModels/PlygeneProductModels/PlygeneStandard\";\r\nimport { Delcote10ModelDTO } from \"./SubModels/RoofSystemSubModels/DelcoteProductModels/Delcote10\";\r\nimport { Delcote25ModelDTO } from \"./SubModels/RoofSystemSubModels/DelcoteProductModels/Delcote25\";\r\nimport { DelcoteAsbestosModelDTO } from \"./SubModels/RoofSystemSubModels/DelcoteProductModels/DelcoteAsbestos\";\r\nimport { DelglazeModelDTO } from \"./SubModels/RoofSystemSubModels/Delglaze\";\r\nimport { Seamsil100ModelDTO } from \"./SubModels/RoofSystemSubModels/SeamsilProductModels/Seamsil100\";\r\n\r\nexport class ProductSelectorModel extends ModelBase {\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n private gutterSystemModel: GutterSystemModel;\r\n private productsModel: ProductsModel;\r\n private quoteModel: QuoteModel;\r\n private roofSystemModel: RoofSystemModel;\r\n\r\n @observable haveSubmitted: boolean = true;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.gutterSystemModel = new GutterSystemModel();\r\n this.productsModel = new ProductsModel();\r\n this.quoteModel = new QuoteModel();\r\n this.roofSystemModel = new RoofSystemModel();\r\n }\r\n\r\n // #region Model Properties\r\n\r\n public get GutterSystem(): GutterSystemModel {\r\n return this.gutterSystemModel;\r\n }\r\n\r\n public get Products(): ProductsModel {\r\n return this.productsModel;\r\n }\r\n\r\n public get Quote(): QuoteModel {\r\n return this.quoteModel;\r\n }\r\n\r\n public get RoofSystem(): RoofSystemModel {\r\n return this.roofSystemModel;\r\n }\r\n\r\n // #endregion Model Properties\r\n\r\n public fromDto(model: ProductsModelDTO): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public toDto(): ProductsModelDTO {\r\n const gutterSystem =\r\n this.Products.productSelection.value === \"id_guttersystem_only\" || this.Products.productSelection.value === \"id_roofandgutter\" ? this.GutterSystem.toDto() : undefined;\r\n\r\n const roofSystem =\r\n this.Products.productSelection.value === \"id_roofsystem_only\" || this.Products.productSelection.value === \"id_roofandgutter\" ? this.RoofSystem.toDto() : undefined;\r\n\r\n return {\r\n quoteRequestGutter: !isNullOrUndefined(gutterSystem)\r\n ? {\r\n delcoteGSGutterCoating: gutterSystem?.delcoteProducts?.delcoteGS,\r\n plygeneMouldedGutterLiningSystem: gutterSystem?.plygeneProducts?.plygeneMoulded,\r\n plygeneStandardGutterLiningSystem: gutterSystem?.plygeneProducts?.plygeneStandard,\r\n }\r\n : undefined,\r\n quoteRequestRoof: !isNullOrUndefined(roofSystem)\r\n ? {\r\n delcote10MetalRoofCoating: roofSystem?.delcoteProducts?.delcote10,\r\n delcote25MetalRoofCoating: roofSystem?.delcoteProducts?.delcote25,\r\n delcoteAsbestosRoofCoating: roofSystem?.delcoteProducts?.delcoteAsbestos,\r\n delglazeRooflightTreatment: roofSystem?.delglaze,\r\n seamsil100: roofSystem?.seamsilProducts?.seamsil100,\r\n }\r\n : undefined,\r\n };\r\n }\r\n\r\n @action\r\n private setHaveSubmitted = (value: boolean) => {\r\n this.haveSubmitted = value;\r\n };\r\n\r\n public Validate = async (): Promise => {\r\n this.setHaveSubmitted(true);\r\n this.accountStore.setSubmitted(true);\r\n\r\n const gutterSystemSelected = this.Products.productSelection.value === \"id_guttersystem_only\" || this.Products.productSelection.value === \"id_roofandgutter\";\r\n const roofSystemSelected = this.Products.productSelection.value === \"id_roofsystem_only\" || this.Products.productSelection.value === \"id_roofandgutter\";\r\n const validationErrors: ValidationError[] = [];\r\n\r\n if (gutterSystemSelected) {\r\n const errors = await this.gutterSystemModel.Validate();\r\n\r\n if (errors.length > 0) {\r\n validationErrors.push(...errors);\r\n }\r\n }\r\n\r\n if (roofSystemSelected) {\r\n const errors = await this.roofSystemModel.Validate();\r\n\r\n if (errors.length > 0) {\r\n validationErrors.push(...errors);\r\n }\r\n }\r\n\r\n return validationErrors;\r\n };\r\n}\r\n\r\nexport interface ProductsModelDTO {\r\n quoteRequestGutter?: QuoteRequestGutter;\r\n quoteRequestRoof?: QuoteRequestRoof;\r\n}\r\n\r\ninterface QuoteRequestGutter {\r\n delcoteGSGutterCoating?: DelcoteGSModelDTO;\r\n plygeneMouldedGutterLiningSystem?: PlygeneMouldedModelDTO;\r\n plygeneStandardGutterLiningSystem?: PlygenStandardModelDTO;\r\n}\r\n\r\ninterface QuoteRequestRoof {\r\n delcote10MetalRoofCoating?: Delcote10ModelDTO;\r\n delcote25MetalRoofCoating?: Delcote25ModelDTO;\r\n delcoteAsbestosRoofCoating?: DelcoteAsbestosModelDTO;\r\n delglazeRooflightTreatment?: DelglazeModelDTO;\r\n seamsil100?: Seamsil100ModelDTO;\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { ViewModelBase } from \"Core/ViewModels\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { ProductsModel } from \"Custom/Models/Domain/ProductSelector/SubModels/Products\";\r\n\r\nexport class ProductsViewModel extends ViewModelBase {\r\n constructor(model: ProductsModel) {\r\n super(model);\r\n }\r\n\r\n // #region Product Selection\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string): void => {\r\n this.model.productSelection = this.model.products.find((item: any) => {\r\n return item.value.toString() === value;\r\n });\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Roof System\r\n\r\n @computed\r\n public get canDisplayRoofSystem(): boolean {\r\n return (\r\n !isNullOrUndefined(this.model.productSelection) &&\r\n (this.model.productSelection.value === \"id_roofsystem_only\" || this.model.productSelection.value === \"id_roofandgutter\")\r\n );\r\n }\r\n\r\n // #endregion Roof System\r\n\r\n // #region Gutter System\r\n\r\n @computed\r\n public get canDisplayGutterSystem(): boolean {\r\n return (\r\n !isNullOrUndefined(this.productSelection) && (this.model.productSelection.value === \"id_guttersystem_only\" || this.model.productSelection.value === \"id_roofandgutter\")\r\n );\r\n }\r\n\r\n // #endregion Gutter System\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { ViewModelBase } from \"Core/ViewModels\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { Server } from \"Custom/Globals/AppUrls\";\r\nimport { ProductSelectorModel } from \"Custom/Models/Domain/ProductSelector/ProductSelectorModel\";\r\nimport { StoresInstance } from \"Custom/Stores/Stores\";\r\nimport { ErrorStore } from \"Custom/Stores/Domain\";\r\n\r\nexport class GuaranteesViewModel extends ViewModelBase {\r\n private productSelectorModel: ProductSelectorModel;\r\n public errorStore: ErrorStore = StoresInstance.domain.ErrorStore;\r\n\r\n constructor(productSelectorModel: ProductSelectorModel) {\r\n super({});\r\n\r\n this.productSelectorModel = productSelectorModel;\r\n }\r\n\r\n @computed\r\n public get guarantees(): string[] {\r\n const retVal: string[] = [];\r\n\r\n if (!isNullOrUndefined(this.productSelectorModel.Products.productSelection)) {\r\n // Roof system guarantee.\r\n if (\r\n this.productSelectorModel.Products.productSelection.value === \"id_roofsystem_only\" ||\r\n this.productSelectorModel.Products.productSelection.value === \"id_roofandgutter\"\r\n ) {\r\n retVal.push(this.productSelectorModel.RoofSystem.getProductSelection.guarantee);\r\n\r\n // Delglaze guarantee.\r\n if (this.productSelectorModel.RoofSystem.DelglazeModel.productRequired) {\r\n retVal.push(\"Delglaze rooflight coating system\");\r\n }\r\n }\r\n\r\n // Gutter system guarantee.\r\n if (\r\n this.productSelectorModel.Products.productSelection.value === \"id_guttersystem_only\" ||\r\n this.productSelectorModel.Products.productSelection.value === \"id_roofandgutter\"\r\n ) {\r\n retVal.push(this.productSelectorModel.GutterSystem.productSelection.guarantee);\r\n }\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n @action\r\n public calculateQuote = async (): Promise => {\r\n const errors = await this.productSelectorModel.Validate();\r\n\r\n if (errors.length === 0) {\r\n this.generateQuote();\r\n }\r\n };\r\n\r\n @action\r\n private generateQuote = async (): Promise => {\r\n try {\r\n const apiResult = await this.Post(Server.Api.Quote.CalculateQuote, this.productSelectorModel.toDto());\r\n\r\n if (apiResult.wasSuccessful) {\r\n this.productSelectorModel.Quote.fromDto(apiResult.payload);\r\n } else {\r\n // Error\r\n this.errorStore.SetErrorMessage(\"Calculate Quote\", \"There appears to be an issue getting your quote.\", \"Please try again later or talk to support\");\r\n }\r\n } catch (exception) {\r\n // Catch\r\n this.errorStore.SetErrorMessage(\"Calculate Quote\", \"There appears to be an issue the quote for you.\", \"Please try again later or talk to support\");\r\n } finally {\r\n // Finally\r\n }\r\n };\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { DelcoteGSModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/DelcoteProductModels/DelcoteGS\";\r\n\r\nexport class DelcoteGSViewModel extends ViewModelBase {\r\n constructor(model: DelcoteGSModel) {\r\n super(model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @computed\r\n public get basecoatColourSelection(): any {\r\n return this.model.basecoatColourSelection;\r\n }\r\n\r\n @computed\r\n public get boltsPerJoint(): number {\r\n return this.model.boltsPerJoint;\r\n }\r\n\r\n @computed\r\n public get colours(): any[] {\r\n return this.model.colours;\r\n }\r\n\r\n @computed\r\n public get girth(): number {\r\n return this.model.girth;\r\n }\r\n\r\n @computed\r\n public get gutterJoints(): number {\r\n return this.model.gutterJoints;\r\n }\r\n\r\n @computed\r\n public get gutterLengthMeterage(): number {\r\n return this.model.gutterLengthMeterage;\r\n }\r\n\r\n @computed\r\n public get topcoatColourSelection(): any {\r\n return this.model.topcoatColourSelection;\r\n }\r\n\r\n @action\r\n public setBoltsPerJoint = (value: number) => {\r\n this.model.boltsPerJoint = value;\r\n };\r\n\r\n @action\r\n public setGirth = (value: number): void => {\r\n this.model.girth = value;\r\n };\r\n\r\n @action\r\n public setGutterJoints = (value: number): void => {\r\n this.model.gutterJoints = value;\r\n };\r\n\r\n @action\r\n public setGutterLengthMeterage = (value: number): void => {\r\n this.model.gutterLengthMeterage = value;\r\n };\r\n\r\n @action\r\n public setTopcoatColour = (selection: any): void => {\r\n const oldTopcoatColourSelection = this.model.topcoatColourSelection;\r\n\r\n if (oldTopcoatColourSelection !== selection) {\r\n this.model.topcoatColourSelection = selection;\r\n this.model.basecoatColourSelection = oldTopcoatColourSelection;\r\n }\r\n };\r\n\r\n // #region Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { DelcoteProductsModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/DelcoteProducts\";\r\nimport { DelcoteGSViewModel } from \"./DelcoteProductsViewModels/DelcoteGSViewModel\";\r\n\r\nexport class DelcoteProductsViewModel extends ViewModelBase {\r\n private delcoteGSViewModel: DelcoteGSViewModel;\r\n\r\n constructor(model: DelcoteProductsModel) {\r\n super(model);\r\n\r\n this.delcoteGSViewModel = new DelcoteGSViewModel(this.model.DelcoteGSModel);\r\n }\r\n\r\n // #region Product Selection\r\n\r\n public get DelcoteGSViewModel(): DelcoteGSViewModel {\r\n return this.delcoteGSViewModel;\r\n }\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string): void => {\r\n this.model.productSelection = this.model.products.find((item: any) => {\r\n return item.value.toString() === value;\r\n });\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Substrate Undefined\r\n\r\n @computed\r\n public get canDisplaySubstrateUndefined(): boolean {\r\n return !isNullOrUndefined(this.model.productSelection) && this.model.productSelection.value === \"id_delcotesubstrateundefined\";\r\n }\r\n\r\n // #endregion Substrate Undefined\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { PlygeneMouldedModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/PlygeneProductModels/PlygeneMoulded\";\r\n\r\nexport class PlygeneMouldedViewModel extends ViewModelBase {\r\n constructor(model: PlygeneMouldedModel) {\r\n super(model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @computed\r\n public get gutterLengthMeterage(): number {\r\n return this.model.gutterLengthMeterage;\r\n }\r\n\r\n @computed\r\n public get girth(): number {\r\n return this.model.girth;\r\n }\r\n\r\n @action\r\n public setGutterLengthMeterage = (value: number): void => {\r\n this.model.gutterLengthMeterage = value;\r\n };\r\n\r\n @action\r\n public setGirth = (value: number): void => {\r\n this.model.girth = value;\r\n };\r\n\r\n // #region Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { PlygeneStandardModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/PlygeneProductModels/PlygeneStandard\";\r\n\r\nexport class PlygeneStandardViewModel extends ViewModelBase {\r\n constructor(model: PlygeneStandardModel) {\r\n super(model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @computed\r\n public get gutterLengthMeterage(): number {\r\n return this.model.gutterLengthMeterage;\r\n }\r\n\r\n @computed\r\n public get girth(): number {\r\n return this.model.girth;\r\n }\r\n\r\n @action\r\n public setGutterLengthMeterage = (value: number): void => {\r\n this.model.gutterLengthMeterage = value;\r\n };\r\n\r\n @action\r\n public setGirth = (value: number): void => {\r\n this.model.girth = value;\r\n };\r\n\r\n // #region Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { PlygeneProductsModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystemSubModels/PlygeneProducts\";\r\nimport { PlygeneMouldedViewModel } from \"./PlygeneProductViewModels/PlygeneMouldedViewModel\";\r\nimport { PlygeneStandardViewModel } from \"./PlygeneProductViewModels/PlygeneStandardViewModel\";\r\n\r\nexport class PlygeneProductsViewModel extends ViewModelBase {\r\n private plygeneMouldedViewModel: PlygeneMouldedViewModel;\r\n private plygeneStandardViewModel: PlygeneStandardViewModel;\r\n\r\n constructor(model: PlygeneProductsModel) {\r\n super(model);\r\n\r\n this.plygeneMouldedViewModel = new PlygeneMouldedViewModel(this.model.PlygeneMouldedModel);\r\n this.plygeneStandardViewModel = new PlygeneStandardViewModel(this.model.PlygeneStandardModel);\r\n }\r\n\r\n // #region Product Selection\r\n\r\n public get PlygeneMouldedViewModel(): PlygeneMouldedViewModel {\r\n return this.plygeneMouldedViewModel;\r\n }\r\n\r\n public get PlygeneStandardViewModel(): PlygeneStandardViewModel {\r\n return this.plygeneStandardViewModel;\r\n }\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string): void => {\r\n this.model.productSelection = this.model.products.find((item: any) => {\r\n return item.value.toString() === value;\r\n });\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Moulded\r\n\r\n @computed\r\n public get canDisplayMoulded(): boolean {\r\n return !isNullOrUndefined(this.model.productSelection) && this.model.productSelection.value === \"id_plygenemoulded\";\r\n }\r\n\r\n // #endregion Moulded\r\n\r\n // #region Standard\r\n\r\n @computed\r\n public get canDisplayStandard(): boolean {\r\n return !isNullOrUndefined(this.model.productSelection) && this.model.productSelection.value === \"id_plygenestandard\";\r\n }\r\n\r\n // #endregion Standard\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action } from \"mobx\";\r\n\r\n// Custom\r\nimport { GutterSystemModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystem\";\r\n\r\nexport class ProductsCommonViewModel {\r\n private model: GutterSystemModel;\r\n\r\n constructor(model: GutterSystemModel) {\r\n this.model = model;\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @action\r\n public setGutterLengthMeterage = (value: number): void => {\r\n this.model.DelcoteProducts.DelcoteGSModel.gutterLengthMeterage = value;\r\n this.model.PlygeneProducts.PlygeneMouldedModel.gutterLengthMeterage = value;\r\n this.model.PlygeneProducts.PlygeneStandardModel.gutterLengthMeterage = value;\r\n };\r\n\r\n @action\r\n public setGirth = (value: number): void => {\r\n this.model.DelcoteProducts.DelcoteGSModel.girth = value;\r\n this.model.PlygeneProducts.PlygeneMouldedModel.girth = value;\r\n this.model.PlygeneProducts.PlygeneStandardModel.girth = value;\r\n };\r\n\r\n // #region Product Properties\r\n}\r\n","/* eslint-disable prettier/prettier */\r\n// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { GutterSystemModel } from \"Custom/Models/Domain/ProductSelector/SubModels/GutterSystem\";\r\n\r\nimport { DelcoteProductsViewModel } from \"./GutterSystemSubViewModels/DelcoteProductsViewModel\";\r\nimport { PlygeneProductsViewModel } from \"./GutterSystemSubViewModels/PlygeneProductsViewModel\";\r\nimport { ProductsCommonViewModel } from \"./GutterSystemSubViewModels/ProductsCommonViewModel\";\r\n\r\nexport class GutterSystemViewModel extends ViewModelBase {\r\n private delcoteProductsViewModel: DelcoteProductsViewModel;\r\n private plygeneProductsViewModel: PlygeneProductsViewModel;\r\n private productsCommonViewModel: ProductsCommonViewModel;\r\n\r\n @observable originalSource: string = \"id_plygene\";\r\n\r\n constructor(model: GutterSystemModel) {\r\n super(model);\r\n\r\n this.delcoteProductsViewModel = new DelcoteProductsViewModel(model.DelcoteProducts);\r\n this.plygeneProductsViewModel = new PlygeneProductsViewModel(model.PlygeneProducts);\r\n this.productsCommonViewModel = new ProductsCommonViewModel(model);\r\n }\r\n\r\n // #region Subviewmodel Properties\r\n\r\n public get DelcoteProductsViewModel(): DelcoteProductsViewModel {\r\n return this.delcoteProductsViewModel;\r\n }\r\n\r\n public get PlygeneProductsViewModel(): PlygeneProductsViewModel {\r\n return this.plygeneProductsViewModel;\r\n }\r\n\r\n public get ProductsCommonViewModel(): ProductsCommonViewModel {\r\n return this.productsCommonViewModel;\r\n }\r\n\r\n // #endregion Subviewmodel Properties\r\n\r\n // #region Product Selection\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string, updateSource: boolean = true): void => {\r\n this.model.productSelection = this.model.products.find((item): any => {\r\n return item.value.toString() === value;\r\n });\r\n\r\n if (updateSource === true)\r\n {\r\n this.originalSource = value;\r\n }\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Plygene\r\n\r\n @computed\r\n public get canDisplayPlygeneProducts(): boolean {\r\n return !isNullOrUndefined(this.model.productSelection) && this.model.productSelection.value === \"id_plygene\";\r\n }\r\n\r\n // #endregion Plygene\r\n\r\n // #region Delcote GS\r\n\r\n @computed\r\n public get canDisplayDelcoteProducts(): boolean {\r\n return !isNullOrUndefined(this.model.productSelection) && this.model.productSelection.value === \"id_delcotegs\";\r\n }\r\n\r\n // #endregion Delcote GS\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { ViewModelBase } from \"Core/ViewModels\";\r\nimport { FieldType, isEmptyOrWhitespace } from \"Core/Utils/Utils\";\r\n\r\nexport class QuoteItemViewModel extends ViewModelBase {\r\n constructor(model: any) {\r\n super(model);\r\n }\r\n\r\n // #region Quote Item Properties\r\n\r\n @computed\r\n public get canEditUnits(): boolean {\r\n return this.model.canEditUnits;\r\n }\r\n\r\n @computed\r\n public get product(): string {\r\n return isEmptyOrWhitespace(this.model.variantName) ? this.model.productName : `${this.model.productName} (${this.model.variantName})`;\r\n }\r\n\r\n @computed\r\n public get stockUnit(): string {\r\n return this.model.productStackUnit;\r\n }\r\n\r\n @computed\r\n public get unitPrice(): string {\r\n let retVal: string = \"POA\";\r\n if (this.model.unitPrice >= 0) {\r\n retVal = `£${this.model.unitPrice.toFixed(2)}`;\r\n }\r\n return retVal;\r\n }\r\n\r\n @computed\r\n public get units(): number {\r\n return this.model.units;\r\n }\r\n\r\n @computed\r\n public get price(): string {\r\n let retVal: string = \"POA\";\r\n if (this.model.unitPrice >= 0) {\r\n retVal = `£${(this.model.unitPrice * this.model.units).toFixed(2)}`;\r\n }\r\n return retVal;\r\n }\r\n\r\n @action\r\n public setUnits = (value: number) => {\r\n this.model.units = value;\r\n };\r\n\r\n @action\r\n public setUnitsZero = () => {\r\n this.model.units = 0;\r\n };\r\n\r\n // #endregiopn Quote Item Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","import { GutterSystemViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/GutterSystemViewModel\";\r\n// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { ViewModelBase } from \"Core/ViewModels\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { QuoteModel } from \"Custom/Models/Domain/ProductSelector/SubModels/Quote\";\r\nimport { QuoteItemViewModel } from \"Custom/ViewModels/ProductSelector/SubViewModels/QuoteItemViewModel\";\r\n\r\nexport class QuoteViewModel extends ViewModelBase {\r\n private gutterSystemViewModel: GutterSystemViewModel;\r\n\r\n constructor(model: QuoteModel, gutterSystemViewModel: GutterSystemViewModel) {\r\n super(model);\r\n this.gutterSystemViewModel = gutterSystemViewModel;\r\n }\r\n\r\n // #region Gutter Quote\r\n\r\n @computed\r\n public get gutterProductViewModels(): QuoteItemViewModel[] {\r\n const productViewModels = [];\r\n\r\n for (const product of this.model.gutterProducts) {\r\n productViewModels.push(new QuoteItemViewModel(product));\r\n }\r\n\r\n return productViewModels;\r\n }\r\n\r\n @computed\r\n public get canDisplayGutterProductsDelcoteGS(): boolean {\r\n return this.model.gutterProducts.length > 0 && this.model.gutterProducts.findIndex((gp) => gp.productName.includes(\"Delcote\")) !== -1;\r\n }\r\n\r\n @computed\r\n public get canDisplayGutterProductsPlygene(): boolean {\r\n return this.model.gutterProducts.length > 0 && this.model.gutterProducts.findIndex((gp) => gp.productName.includes(\"Plygene\")) !== -1;\r\n }\r\n\r\n @computed\r\n public get delcoteGSChosen(): boolean {\r\n return this.gutterSystemViewModel.productSelection.value === \"id_delcotegs\";\r\n }\r\n\r\n @computed\r\n public get delcoteGSReverted(): boolean {\r\n return this.gutterSystemViewModel.productSelection.value === \"id_plygene\" && this.gutterSystemViewModel.originalSource === \"id_delcotegs\";\r\n }\r\n\r\n @computed\r\n public get totalGutterProductsPrice(): string {\r\n let retVal: string = \"POA\";\r\n let totalPrice: number = 0.0;\r\n let priceOnApplication: boolean = false;\r\n\r\n for (const product of this.model.gutterProducts) {\r\n if (product.unitPrice >= 0) {\r\n totalPrice += product.units * product.unitPrice;\r\n } else {\r\n priceOnApplication = true;\r\n }\r\n }\r\n\r\n if (priceOnApplication === false) {\r\n retVal = `£${totalPrice.toFixed(2)}`;\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n // #endregion Gutter Quote\r\n\r\n // #region Roof Quote\r\n\r\n @computed\r\n public get roofProductViewModels(): QuoteItemViewModel[] {\r\n const productViewModels = [];\r\n\r\n for (const product of this.model.roofProducts) {\r\n productViewModels.push(new QuoteItemViewModel(product));\r\n }\r\n\r\n return productViewModels;\r\n }\r\n\r\n @computed\r\n public get canDisplayRoofProducts(): boolean {\r\n return this.model.roofProducts.length > 0;\r\n }\r\n\r\n @computed\r\n public get totalRoofProductsPrice(): string {\r\n let retVal: string = \"POA\";\r\n let totalPrice: number = 0.0;\r\n let priceOnApplication: boolean = false;\r\n\r\n for (const product of this.model.roofProducts) {\r\n if (product.unitPrice >= 0) {\r\n totalPrice += product.units * product.unitPrice;\r\n } else {\r\n priceOnApplication = true;\r\n }\r\n }\r\n\r\n if (priceOnApplication === false) {\r\n retVal = `£${totalPrice.toFixed(2)}`;\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n // #endregion Roof Quote\r\n\r\n // #region Total Price\r\n\r\n @computed\r\n public get totalProductsPrice(): string {\r\n let retVal: string = \"POA\";\r\n let totalPrice: number = 0.0;\r\n let priceOnApplication: boolean = false;\r\n\r\n for (const product of this.model.gutterProducts) {\r\n if (product.unitPrice >= 0) {\r\n totalPrice += product.units * product.unitPrice;\r\n } else {\r\n priceOnApplication = true;\r\n }\r\n }\r\n\r\n for (const product of this.model.roofProducts) {\r\n if (product.unitPrice >= 0) {\r\n totalPrice += product.units * product.unitPrice;\r\n } else {\r\n priceOnApplication = true;\r\n }\r\n }\r\n\r\n if (priceOnApplication === false) {\r\n retVal = `£${totalPrice.toFixed(2)}`;\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n // #endregion Total Price\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\nimport { AccountStore } from \"Custom/Stores/Domain\";\r\nimport { StoresInstance } from \"Core/Base\";\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { Delcote10Model } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProductModels/Delcote10\";\r\n\r\nexport class Delcote10ViewModel extends ViewModelBase {\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n constructor(model: Delcote10Model) {\r\n super(model);\r\n this.setDecorators(Delcote10Model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n // eslint-disable-next-line prettier/prettier\r\n @computed\r\n public get endlapMeterage(): number {\r\n return this.model.endlapMeterage;\r\n }\r\n\r\n @computed\r\n public get fixingCount(): number {\r\n return this.model.fixingCount;\r\n }\r\n\r\n @computed\r\n public get netRoofSquareMeterage(): number {\r\n return this.model.roofSquareMeterage - this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get netRoofSquareMeterageValidationMessage(): string {\r\n /* const result = this.validateDecorators(\"roofSquareMeterage\");\r\n const retVal: string = this.accountStore.HasSubmitted === true ? (result.isValid === true ? \"\" : result.errorMessage) : \"\";\r\n return retVal; */\r\n // CMR The above works, when I call validate on the whole thing, but returns true always in this context, so hacking it\r\n let message = \"\";\r\n\r\n if (this.accountStore.HasSubmitted === true) {\r\n if (this.netRoofSquareMeterage < 0) {\r\n message = \"Cannot be negative\";\r\n }\r\n }\r\n return message;\r\n }\r\n\r\n @computed\r\n public get colourValidationMessage(): string {\r\n const result = this.validateDecorators(\"topcoatColourSelection\");\r\n return !this.accountStore.HasSubmitted === true ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @computed\r\n public get overlapMeterage(): number {\r\n return this.model.overlapMeterage;\r\n }\r\n\r\n @computed\r\n public get profileCorrectionPercentage(): number {\r\n return this.model.profileCorrectionPercentage;\r\n }\r\n\r\n @computed\r\n public get ridgeFlashingsEtcMeterage(): number {\r\n return this.model.ridgeFlashingsEtcMeterage;\r\n }\r\n\r\n @computed\r\n public get rooflightSquareMeterage(): number {\r\n return this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get roofSquareMeterage(): number {\r\n return this.model.roofSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get topcoatColours(): any[] {\r\n return this.model.topcoatColours;\r\n }\r\n\r\n @computed\r\n public get topcoatColourSelection(): any {\r\n return this.model.topcoatColourSelection;\r\n }\r\n\r\n @action\r\n public setEndlapMeterage = (value: number): void => {\r\n this.model.endlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setFixingCount = (value: number) => {\r\n this.model.fixingCount = value;\r\n };\r\n\r\n @action\r\n public setOverlapMeterage = (value: number): void => {\r\n this.model.overlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setProfileCorrectionPercentage = (value: number): void => {\r\n this.model.profileCorrectionPercentage = value;\r\n };\r\n\r\n @action\r\n public setRidgeFlashingsEtcMeterage = (value: number): void => {\r\n this.model.ridgeFlashingsEtcMeterage = value;\r\n };\r\n\r\n @action\r\n public setRooflightSquareMeterage = (value: number) => {\r\n this.model.rooflightSquareMeterage = value;\r\n };\r\n\r\n @action\r\n public setRoofSquareMeterage = (value: number) => {\r\n this.model.roofSquareMeterage = value;\r\n\r\n // Be aware of the rooflight area exceeding the roof area.\r\n if (this.model.rooflightSquareMeterage > this.model.roofSquareMeterage) {\r\n this.model.rooflightSquareMeterage = this.model.roofSquareMeterage;\r\n }\r\n };\r\n\r\n // #endregion Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\nimport { AccountStore } from \"Custom/Stores/Domain\";\r\nimport { StoresInstance } from \"Core/Base\";\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { Delcote25Model } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProductModels/Delcote25\";\r\n\r\nexport class Delcote25ViewModel extends ViewModelBase {\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n constructor(model: Delcote25Model) {\r\n super(model);\r\n this.setDecorators(Delcote25Model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @computed\r\n // eslint-disable-next-line prettier/prettier\r\n public get basecoatColours(): any[] {\r\n return this.model.basecoatColours;\r\n }\r\n\r\n @computed\r\n public get basecoatColourSelection(): any {\r\n return this.model.basecoatColourSelection;\r\n }\r\n\r\n @computed\r\n public get endlapMeterage(): number {\r\n return this.model.endlapMeterage;\r\n }\r\n\r\n @computed\r\n public get fixingCount(): number {\r\n return this.model.fixingCount;\r\n }\r\n\r\n @computed\r\n public get netRoofSquareMeterage(): number {\r\n return this.model.roofSquareMeterage - this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get netRoofSquareMeterageValidationMessage(): string {\r\n /* const result = this.validateDecorators(\"roofSquareMeterage\");\r\n const retVal: string = this.accountStore.HasSubmitted === true ? (result.isValid === true ? \"\" : result.errorMessage) : \"\";\r\n return retVal; */\r\n // CMR The above works, when I call validate on the whole thing, but returns true always in this context, so hacking it\r\n let message = \"\";\r\n\r\n if (this.accountStore.HasSubmitted === true) {\r\n if (this.netRoofSquareMeterage < 0) {\r\n message = \"Cannot be negative\";\r\n }\r\n }\r\n return message;\r\n }\r\n\r\n @computed\r\n public get colourValidationMessage(): string {\r\n const result = this.validateDecorators(\"topcoatColourSelection\");\r\n return !this.accountStore.HasSubmitted === true ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @computed\r\n public get overlapMeterage(): number {\r\n return this.model.overlapMeterage;\r\n }\r\n\r\n @computed\r\n public get profileCorrectionPercentage(): number {\r\n return this.model.profileCorrectionPercentage;\r\n }\r\n\r\n @computed\r\n public get ridgeFlashingsEtcMeterage(): number {\r\n return this.model.ridgeFlashingsEtcMeterage;\r\n }\r\n\r\n @computed\r\n public get rooflightSquareMeterage(): number {\r\n return this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get roofSquareMeterage(): number {\r\n return this.model.roofSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get topcoatColours(): any[] {\r\n return this.model.topcoatColours;\r\n }\r\n\r\n @computed\r\n public get topcoatColourSelection(): any {\r\n return this.model.topcoatColourSelection;\r\n }\r\n\r\n @action\r\n public setBasecoatColour = (selection: any): void => {\r\n this.model.basecoatColourSelection = selection;\r\n };\r\n\r\n @action\r\n public setEndlapMeterage = (value: number): void => {\r\n this.model.endlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setFixingCount = (value: number) => {\r\n this.model.fixingCount = value;\r\n };\r\n\r\n @action\r\n public setOverlapMeterage = (value: number): void => {\r\n this.model.overlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setProfileCorrectionPercentage = (value: number): void => {\r\n this.model.profileCorrectionPercentage = value;\r\n };\r\n\r\n @action\r\n public setRidgeFlashingsEtcMeterage = (value: number): void => {\r\n this.model.ridgeFlashingsEtcMeterage = value;\r\n };\r\n\r\n @action\r\n public setRooflightSquareMeterage = (value: number) => {\r\n this.model.rooflightSquareMeterage = value;\r\n };\r\n\r\n @action\r\n public setRoofSquareMeterage = (value: number) => {\r\n this.model.roofSquareMeterage = value;\r\n\r\n // Be aware of the rooflight area exceeding the roof area.\r\n if (this.model.rooflightSquareMeterage > this.model.roofSquareMeterage) {\r\n this.model.rooflightSquareMeterage = this.model.roofSquareMeterage;\r\n }\r\n };\r\n\r\n /* @action\r\n public setTopcoatColour = (selection: any): void => {\r\n this.model.topcoatColourSelection = selection;\r\n\r\n let baseIndex: number = -1;\r\n // #5497 Delcote basecoat colour shoula always be \"albany grey\" unless the topcoat is \"albany grey\" in which case it should be \"goosewing grey\"\r\n if (selection.title.toLocaleLowerCase() === \"albany grey\") {\r\n baseIndex = this.model.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"albany grey\");\r\n } else {\r\n baseIndex = this.model.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"goosewing grey\");\r\n }\r\n\r\n if (baseIndex != -1) {\r\n this.model.basecoatColourSelection = this.model.basecoatColours[baseIndex];\r\n } else {\r\n this.model.basecoatColourSelection = this.model.basecoatColours[0];\r\n }\r\n }; */\r\n\r\n // #endregion Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","import { ColourSelection } from \"Custom/Models/ColourSelection\";\r\n// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { DelcoteAsbestosModel } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProductModels/DelcoteAsbestos\";\r\nimport { AccountStore } from \"Custom/Stores/Domain\";\r\nimport { StoresInstance } from \"Core/Base\";\r\n\r\nexport class DelcoteAsbestosViewModel extends ViewModelBase {\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n\r\n constructor(model: DelcoteAsbestosModel) {\r\n super(model);\r\n this.setDecorators(DelcoteAsbestosModel);\r\n }\r\n\r\n // #region Product Properties\r\n @computed\r\n public get basecoatColours() {\r\n return this.model.basecoatColours;\r\n }\r\n\r\n @computed\r\n public get basecoatColourSelection() {\r\n return this.model.basecoatColourSelection;\r\n }\r\n\r\n @computed\r\n public get fixingCount() {\r\n return this.model.fixingCount;\r\n }\r\n\r\n @computed\r\n public get profileCorrectionPercentage(): number {\r\n return this.model.profileCorrectionPercentage;\r\n }\r\n\r\n @computed\r\n public get rooflightSquareMeterage() {\r\n return this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get roofSquareMeterage() {\r\n return this.model.roofSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get topcoatColours() {\r\n return this.model.topcoatColours;\r\n }\r\n\r\n @computed\r\n public get topcoatColourSelection() {\r\n return this.model.topcoatColourSelection;\r\n }\r\n\r\n @computed\r\n public get netRoofSquareMeterage(): number {\r\n return this.model.roofSquareMeterage - this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @computed\r\n public get netRoofSquareMeterageValidationMessage(): string {\r\n /* const result = this.validateDecorators(\"roofSquareMeterage\");\r\n const retVal: string = this.accountStore.HasSubmitted === true ? (result.isValid === true ? \"\" : result.errorMessage) : \"\";\r\n return retVal; */\r\n\r\n // CMR The above works, when I call validate on the whole thing, but returns true always in this context, so hacking it\r\n let message = \"\";\r\n\r\n if (this.accountStore.HasSubmitted === true) {\r\n if (this.netRoofSquareMeterage < 0) {\r\n message = \"Cannot be negative\";\r\n }\r\n }\r\n return message;\r\n }\r\n\r\n @computed\r\n public get colourValidationMessage(): string {\r\n const result = this.validateDecorators(\"topcoatColourSelection\");\r\n return !this.accountStore.HasSubmitted === true ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @action\r\n public setBasecoatColour = (selection: any): void => {\r\n this.model.basecoatColourSelection = selection;\r\n };\r\n\r\n @action\r\n public setFixingCount = (value: number) => {\r\n this.model.fixingCount = value;\r\n };\r\n\r\n @action\r\n public setProfileCorrectionPercentage = (value: number): void => {\r\n this.model.profileCorrectionPercentage = value;\r\n };\r\n\r\n @action\r\n public setRooflightSquareMeterage = (value: number) => {\r\n this.model.rooflightSquareMeterage = value;\r\n };\r\n\r\n @action\r\n public setRoofSquareMeterage = (value: number) => {\r\n this.model.roofSquareMeterage = value;\r\n\r\n // Be aware of the rooflight area exceeding the roof area.\r\n if (this.model.rooflightSquareMeterage > this.model.roofSquareMeterage) {\r\n this.model.rooflightSquareMeterage = this.model.roofSquareMeterage;\r\n }\r\n };\r\n\r\n /* @action\r\n public setTopcoatColour = (selection: ColourSelection): void => {\r\n this.model.topcoatColourSelection = selection;\r\n\r\n let baseIndex: number = -1;\r\n // #5497 Delcote basecoat colour shoula always be \"albany grey\" unless the topcoat is \"albany grey\" in which case it should be \"goosewing grey\"\r\n if (selection.title.toLocaleLowerCase() === \"albany grey\") {\r\n baseIndex = this.model.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"albany grey\");\r\n } else {\r\n baseIndex = this.model.basecoatColours.findIndex((a) => a.title.toLocaleLowerCase() === \"goosewing grey\");\r\n }\r\n\r\n if (baseIndex != -1) {\r\n this.model.basecoatColourSelection = this.model.basecoatColours[baseIndex];\r\n } else {\r\n this.model.basecoatColourSelection = this.model.basecoatColours[0];\r\n }\r\n }; */\r\n\r\n // #endregion Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { DelcoteProductsModel } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/DelcoteProducts\";\r\nimport { Delcote10ViewModel } from \"./DelcoteProductsViewModels/Delcote10ViewModel\";\r\nimport { Delcote25ViewModel } from \"./DelcoteProductsViewModels/Delcote25ViewModel\";\r\nimport { DelcoteAsbestosViewModel } from \"./DelcoteProductsViewModels/DelcoteAsbestosViewModel\";\r\n\r\nexport class DelcoteProductsViewModel extends ViewModelBase {\r\n private delcote10ViewModel: Delcote10ViewModel;\r\n private delcote25ViewModel: Delcote25ViewModel;\r\n private delcoteAsbestosViewModel: DelcoteAsbestosViewModel;\r\n\r\n constructor(model: DelcoteProductsModel) {\r\n super(model);\r\n this.delcote10ViewModel = new Delcote10ViewModel(this.model.Delcote10Model);\r\n this.delcote25ViewModel = new Delcote25ViewModel(this.model.Delcote25Model);\r\n this.delcoteAsbestosViewModel = new DelcoteAsbestosViewModel(this.model.DelcoteAsbestosModel);\r\n }\r\n\r\n // #region Product Selection\r\n public get Delcote10ViewModel(): Delcote10ViewModel {\r\n return this.delcote10ViewModel;\r\n }\r\n\r\n public get Delcote25ViewModel(): Delcote25ViewModel {\r\n return this.delcote25ViewModel;\r\n }\r\n\r\n public get DelcoteAsbestosViewModel(): DelcoteAsbestosViewModel {\r\n return this.delcoteAsbestosViewModel;\r\n }\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.getProductSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string | undefined): void => {\r\n if (value !== undefined) {\r\n const product: any = this.model.products.find((item: any) => {\r\n return item.value.toString() === value;\r\n });\r\n this.model.setProductSelection(product);\r\n } else {\r\n this.model.setProductSelection(undefined);\r\n }\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Metal\r\n\r\n @computed\r\n public get canDisplayMetal10(): boolean {\r\n return !isNullOrUndefined(this.model.getProductSelection) && this.model.getProductSelection.value === \"id_delcotesubstratemetal10\";\r\n }\r\n\r\n @computed\r\n public get canDisplayMetal25(): boolean {\r\n return !isNullOrUndefined(this.model.getProductSelection) && this.model.getProductSelection.value === \"id_delcotesubstratemetal25\";\r\n }\r\n\r\n // #endregion Metal\r\n\r\n // #region Fibre Cement\r\n\r\n @computed\r\n public get canDisplayFibreCement(): boolean {\r\n return !isNullOrUndefined(this.model.getProductSelection) && this.model.getProductSelection.value === \"id_delcotesubstratefibrecement\";\r\n }\r\n\r\n // #endregion Fibre Cement\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { AccountStore } from \"Custom/Stores/Domain\";\r\nimport { StoresInstance } from \"Core/Base\";\r\nimport { Seamsil100Model } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/SeamsilProductModels/Seamsil100\";\r\n\r\nexport class Seamsil100ViewModel extends ViewModelBase {\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n constructor(model: Seamsil100Model) {\r\n super(model);\r\n this.setDecorators(Seamsil100Model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @computed\r\n public get endlapMeterage(): number {\r\n return this.model.endlapMeterage;\r\n }\r\n\r\n @computed\r\n public get overlapMeterage(): number {\r\n return this.model.overlapMeterage;\r\n }\r\n\r\n @computed\r\n public get colours(): any[] {\r\n return this.model.colours;\r\n }\r\n\r\n @computed\r\n public get ridgeFlashingsEtcMeterage(): number {\r\n return this.model.ridgeFlashingsEtcMeterage;\r\n }\r\n\r\n @computed\r\n public get profileCorrectionPercentage(): number {\r\n return this.model.profileCorrectionPercentage;\r\n }\r\n\r\n @computed\r\n public get topcoatColourSelection(): any {\r\n return this.model.topcoatColourSelection;\r\n }\r\n\r\n @computed\r\n public get colourValidationMessage(): string {\r\n const result = this.validateDecorators(\"topcoatColourSelection\");\r\n return !this.accountStore.HasSubmitted === true ? \"\" : result.isValid ? \"\" : result.errorMessage;\r\n }\r\n\r\n @action\r\n public setEndlapMeterage = (value: number): void => {\r\n this.model.endlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setOverlapMeterage = (value: number): void => {\r\n this.model.overlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setProfileCorrectionPercentage = (value: number): void => {\r\n this.model.profileCorrectionPercentage = value;\r\n };\r\n\r\n @action\r\n public setRidgeFlashingsEtcMeterage = (value: number): void => {\r\n this.model.ridgeFlashingsEtcMeterage = value;\r\n };\r\n\r\n @action\r\n public setTopcoatColour = (selection: any): void => {\r\n this.model.topcoatColourSelection = selection;\r\n };\r\n\r\n // #endregion Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { SeamsilProductsModel } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/SeamsilProducts\";\r\nimport { Seamsil100ViewModel } from \"./SeamsilProductsViewModels/Seamsil100ViewModel\";\r\n\r\nexport class SeamsilProductsViewModel extends ViewModelBase {\r\n private seamsil100ViewModel: Seamsil100ViewModel;\r\n\r\n constructor(model: SeamsilProductsModel) {\r\n super(model);\r\n\r\n this.seamsil100ViewModel = new Seamsil100ViewModel(this.model.Seamsil100Model);\r\n }\r\n\r\n // #region Product Selection\r\n\r\n public get Seamsil100ViewModel(): Seamsil100ViewModel {\r\n return this.seamsil100ViewModel;\r\n }\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.productSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string): void => {\r\n this.model.productSelection = this.model.products.find((item: any) => {\r\n return item.value.toString() === value;\r\n });\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Substrate Undefined\r\n\r\n @computed\r\n public get canDisplaySubstrateUndefined(): boolean {\r\n return !isNullOrUndefined(this.model.productSelection) && this.model.productSelection.value === \"id_seamsilsubstrateundefined\";\r\n }\r\n\r\n // #endregion Substrate Undefined\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Custom\r\nimport { ColourSelection } from \"Custom/Models/ColourSelection\";\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { RoofSystemModel } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystem\";\r\n\r\nexport class ProductsCommonViewModel {\r\n private model: RoofSystemModel;\r\n\r\n constructor(model: RoofSystemModel) {\r\n this.model = model;\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @action\r\n public setDelcoteBasecoatColour = (selection: ColourSelection): void => {\r\n this.model.DelcoteProducts.Delcote25Model.basecoatColourSelection = this.model.DelcoteProducts.Delcote25Model.basecoatColours.find((c) => c.value === selection.value);\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.basecoatColourSelection = this.model.DelcoteProducts.DelcoteAsbestosModel.basecoatColours.find(\r\n (c) => c.value === selection.value,\r\n );\r\n };\r\n\r\n @action\r\n public setDelcoteTopcoatColour = (selection: ColourSelection): void => {\r\n this.model.DelcoteProducts.Delcote10Model.setTopcoatColourSelection(this.model.DelcoteProducts.Delcote10Model.topcoatColours.find((c) => c.value === selection.value));\r\n this.model.DelcoteProducts.Delcote25Model.setTopcoatColourSelection(this.model.DelcoteProducts.Delcote25Model.topcoatColours.find((c) => c.value === selection.value));\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.setTopcoatColourSelection(\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.topcoatColours.find((c) => c.value === selection.value),\r\n );\r\n };\r\n\r\n @action\r\n public setDelglazeProductRequired = (value: boolean) => {\r\n this.model.DelglazeModel.productRequired = value;\r\n };\r\n\r\n @action\r\n public setEndlapMeterage = (value: number): void => {\r\n this.model.DelcoteProducts.Delcote10Model.endlapMeterage = value;\r\n this.model.DelcoteProducts.Delcote25Model.endlapMeterage = value;\r\n this.model.SeamsilProducts.Seamsil100Model.endlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setFixingCount = (value: number) => {\r\n this.model.DelcoteProducts.Delcote10Model.fixingCount = value;\r\n this.model.DelcoteProducts.Delcote25Model.fixingCount = value;\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.fixingCount = value;\r\n };\r\n\r\n @action\r\n public setOverlapMeterage = (value: number): void => {\r\n this.model.DelcoteProducts.Delcote10Model.overlapMeterage = value;\r\n this.model.DelcoteProducts.Delcote25Model.overlapMeterage = value;\r\n this.model.SeamsilProducts.Seamsil100Model.overlapMeterage = value;\r\n };\r\n\r\n @action\r\n public setProfileCorrectionPercentage = (value: number): void => {\r\n this.model.DelcoteProducts.Delcote10Model.profileCorrectionPercentage = value;\r\n this.model.DelcoteProducts.Delcote25Model.profileCorrectionPercentage = value;\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.profileCorrectionPercentage = value;\r\n this.model.SeamsilProducts.Seamsil100Model.profileCorrectionPercentage = value;\r\n this.model.DelglazeModel.profileCorrectionPercentage = value;\r\n };\r\n\r\n @action\r\n public setRidgeFlashingsEtcMeterage = (value: number): void => {\r\n this.model.DelcoteProducts.Delcote10Model.ridgeFlashingsEtcMeterage = value;\r\n this.model.DelcoteProducts.Delcote25Model.ridgeFlashingsEtcMeterage = value;\r\n this.model.SeamsilProducts.Seamsil100Model.ridgeFlashingsEtcMeterage = value;\r\n };\r\n\r\n @action\r\n public setRooflightSquareMeterage = (value: number) => {\r\n this.model.DelcoteProducts.Delcote10Model.rooflightSquareMeterage = value;\r\n this.model.DelglazeModel.rooflightSquareMeterage = value;\r\n this.model.DelcoteProducts.Delcote25Model.rooflightSquareMeterage = value;\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.rooflightSquareMeterage = value;\r\n };\r\n\r\n @action\r\n public setRoofSquareMeterage = (value: number) => {\r\n this.model.DelcoteProducts.Delcote10Model.roofSquareMeterage = value;\r\n this.model.DelcoteProducts.Delcote25Model.roofSquareMeterage = value;\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.roofSquareMeterage = value;\r\n\r\n // Be aware of the rooflight area exceeding the roof area.\r\n if (this.model.DelcoteProducts.Delcote10Model.rooflightSquareMeterage > this.model.DelcoteProducts.Delcote10Model.roofSquareMeterage) {\r\n this.model.DelcoteProducts.Delcote10Model.rooflightSquareMeterage = this.model.DelcoteProducts.Delcote10Model.roofSquareMeterage;\r\n this.model.DelglazeModel.rooflightSquareMeterage = this.model.DelcoteProducts.Delcote10Model.roofSquareMeterage;\r\n }\r\n\r\n if (this.model.DelcoteProducts.Delcote25Model.rooflightSquareMeterage > this.model.DelcoteProducts.Delcote25Model.roofSquareMeterage) {\r\n this.model.DelcoteProducts.Delcote25Model.rooflightSquareMeterage = this.model.DelcoteProducts.Delcote25Model.roofSquareMeterage;\r\n this.model.DelglazeModel.rooflightSquareMeterage = this.model.DelcoteProducts.Delcote25Model.roofSquareMeterage;\r\n }\r\n\r\n if (this.model.DelcoteProducts.DelcoteAsbestosModel.rooflightSquareMeterage > this.model.DelcoteProducts.DelcoteAsbestosModel.roofSquareMeterage) {\r\n this.model.DelcoteProducts.DelcoteAsbestosModel.rooflightSquareMeterage = this.model.DelcoteProducts.DelcoteAsbestosModel.roofSquareMeterage;\r\n this.model.DelglazeModel.rooflightSquareMeterage = this.model.DelcoteProducts.DelcoteAsbestosModel.roofSquareMeterage;\r\n }\r\n };\r\n\r\n @computed\r\n public get canDisplayDelglazeRooflightAreaMeterage(): boolean {\r\n return !isNullOrUndefined(this.model.getProductSelection) && this.model.getProductSelection.value === \"id_seamsil\";\r\n }\r\n\r\n // #endregion Product Properties\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { DelglazeModel } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystemSubModels/Delglaze\";\r\n\r\nexport class DelglazeViewModel extends ViewModelBase {\r\n constructor(model: DelglazeModel) {\r\n super(model);\r\n }\r\n\r\n // #region Product Properties\r\n\r\n @computed\r\n public get profileCorrectionPercentage(): number {\r\n return this.model.profileCorrectionPercentage;\r\n }\r\n\r\n @computed\r\n public get productRequired(): boolean {\r\n return this.model.productRequired;\r\n }\r\n\r\n @computed\r\n public get rooflightSquareMeterage(): number {\r\n return this.model.rooflightSquareMeterage;\r\n }\r\n\r\n @action\r\n public setProfileCorrectionPercentage = (value: number): void => {\r\n this.model.profileCorrectionPercentage = value;\r\n };\r\n\r\n @action\r\n public setProductRequired = (value: boolean): void => {\r\n this.model.productRequired = value;\r\n };\r\n\r\n @action\r\n public setRooflightSquareMeterage = (value: number): void => {\r\n this.model.rooflightSquareMeterage = value;\r\n };\r\n\r\n // #endregion Product Properties\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","// Libraries\r\nimport { action, computed } from \"mobx\";\r\n\r\n// Core\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\r\n\r\n// Custom\r\nimport { isNullOrUndefined } from \"Custom/Utils/Utils\";\r\nimport { RoofSystemModel } from \"Custom/Models/Domain/ProductSelector/SubModels/RoofSystem\";\r\n\r\nimport { DelcoteProductsViewModel } from \"./RoofSystemSubViewModels/DelcoteProductsViewModel\";\r\nimport { SeamsilProductsViewModel } from \"./RoofSystemSubViewModels/SeamsilProductsViewModel\";\r\nimport { ProductsCommonViewModel } from \"./RoofSystemSubViewModels/ProductsCommonViewModel\";\r\nimport { DelglazeViewModel } from \"./RoofSystemSubViewModels/DelglazeViewModel\";\r\n\r\nexport class RoofSystemViewModel extends ViewModelBase {\r\n private delglazeViewModel: DelglazeViewModel;\r\n private delcoteProductsViewModel: DelcoteProductsViewModel;\r\n private seamsilProductsViewModel: SeamsilProductsViewModel;\r\n private productsCommonViewModel: ProductsCommonViewModel;\r\n\r\n constructor(model: RoofSystemModel) {\r\n super(model);\r\n\r\n this.delglazeViewModel = new DelglazeViewModel(model.DelglazeModel);\r\n this.delcoteProductsViewModel = new DelcoteProductsViewModel(model.DelcoteProducts);\r\n this.seamsilProductsViewModel = new SeamsilProductsViewModel(model.SeamsilProducts);\r\n this.productsCommonViewModel = new ProductsCommonViewModel(model);\r\n }\r\n\r\n // #region Subviewmodel Properties\r\n\r\n public get DelglazeViewModel(): DelglazeViewModel {\r\n return this.delglazeViewModel;\r\n }\r\n\r\n public get DelcoteProductsViewModel(): DelcoteProductsViewModel {\r\n return this.delcoteProductsViewModel;\r\n }\r\n\r\n public get SeamsilProductsViewModel(): SeamsilProductsViewModel {\r\n return this.seamsilProductsViewModel;\r\n }\r\n\r\n public get ProductsCommonViewModel(): ProductsCommonViewModel {\r\n return this.productsCommonViewModel;\r\n }\r\n\r\n // #endregion Subviewmodel Properties\r\n\r\n // #region Product Selection\r\n\r\n @computed\r\n public get products(): any[] {\r\n return this.model.products;\r\n }\r\n\r\n @computed\r\n public get productSelection(): any {\r\n return this.model.getProductSelection;\r\n }\r\n\r\n @action\r\n public setProductSelection = (value: string): void => {\r\n const item: any = this.model.products.find((item: any) => {\r\n return item.value.toString() === value;\r\n });\r\n\r\n this.model.setProductSelection(item);\r\n\r\n // Prviously, there was only two options,\r\n if (value === \"id_seamsil\") {\r\n this.delcoteProductsViewModel.setProductSelection(undefined);\r\n } else {\r\n this.delcoteProductsViewModel.setProductSelection(value);\r\n }\r\n };\r\n\r\n // #endregion Product Selection\r\n\r\n // #region Seamsil\r\n\r\n @computed\r\n public get canDisplaySeamsil(): boolean {\r\n return !isNullOrUndefined(this.model.getProductSelection) && this.model.getProductSelection.value === \"id_seamsil\";\r\n }\r\n\r\n // #endregion Seamsil\r\n\r\n // #region Delcote\r\n\r\n @computed\r\n public get canDisplayDelcote(): boolean {\r\n const item: any = this.model.getProductSelection;\r\n return (\r\n !isNullOrUndefined(item) &&\r\n (item.value === \"id_delcotesubstratemetal10\" || item.value === \"id_delcotesubstratemetal25\" || item.value === \"id_delcotesubstratefibrecement\")\r\n );\r\n }\r\n\r\n // #endregion Delcote\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","import { QuoteUserDetailsDTO } from \"./../../Models/Domain/UserAccess/QuoteUserDetailsDTO\";\r\nimport { runInAction } from \"mobx\";\r\n// Libraries\r\nimport { action, computed, observable } from \"mobx\";\r\n\r\n// Core\r\nimport { ViewModelBase } from \"Core/ViewModels\";\r\nimport { FieldType } from \"Core/Utils/Utils\";\r\n\r\n// Custom\r\nimport { Server } from \"./../../Globals/AppUrls\";\r\nimport { ProductSelectorModel } from \"Custom/Models/Domain/ProductSelector/ProductSelectorModel\";\r\n\r\nimport { ProductsViewModel } from \"./SubViewModels/ProductsViewModel\";\r\nimport { GuaranteesViewModel } from \"./SubViewModels/GuaranteeViewModel\";\r\nimport { GutterSystemViewModel } from \"./SubViewModels/GutterSystemViewModel\";\r\nimport { QuoteViewModel } from \"./SubViewModels/QuoteViewModel\";\r\nimport { RoofSystemViewModel } from \"./SubViewModels/RoofSystemViewModel\";\r\nimport { StoresInstance } from \"Custom/Stores/Stores\";\r\nimport { AccountStore, ErrorStore } from \"Custom/Stores/Domain\";\r\nimport { QuoteEmailRequest } from \"Custom/Models/Domain/ProductSelector/QuoteEmailRequest\";\r\n\r\nexport class ProductSelectorViewModel extends ViewModelBase {\r\n private guaranteesViewModel: GuaranteesViewModel;\r\n private gutterSystemViewModel: GutterSystemViewModel;\r\n private productViewModel: ProductsViewModel;\r\n private quoteViewModel: QuoteViewModel;\r\n private roofSystemViewModel: RoofSystemViewModel;\r\n private accountStore: AccountStore = StoresInstance.domain.AccountStore;\r\n public errorStore: ErrorStore = StoresInstance.domain.ErrorStore;\r\n\r\n @observable canShowSendEmail: boolean = true;\r\n\r\n constructor() {\r\n super(new ProductSelectorModel());\r\n this.setDecorators(ProductSelectorModel);\r\n\r\n this.productViewModel = new ProductsViewModel(this.model.Products);\r\n\r\n this.roofSystemViewModel = new RoofSystemViewModel(this.model.RoofSystem);\r\n this.gutterSystemViewModel = new GutterSystemViewModel(this.model.GutterSystem);\r\n\r\n this.guaranteesViewModel = new GuaranteesViewModel(this.model);\r\n this.quoteViewModel = new QuoteViewModel(this.model.Quote, this.gutterSystemViewModel);\r\n\r\n this.getProductData();\r\n }\r\n\r\n // #region Subviewmodel Properties\r\n\r\n public get GuaranteesViewModel(): GuaranteesViewModel {\r\n return this.guaranteesViewModel;\r\n }\r\n\r\n public get GutterSystemViewModel(): GutterSystemViewModel {\r\n return this.gutterSystemViewModel;\r\n }\r\n\r\n public get ProductsViewModel(): ProductsViewModel {\r\n return this.productViewModel;\r\n }\r\n\r\n public get QuoteViewModel(): QuoteViewModel {\r\n return this.quoteViewModel;\r\n }\r\n\r\n public get RoofSystemViewModel(): RoofSystemViewModel {\r\n return this.roofSystemViewModel;\r\n }\r\n\r\n // #endregion Subviewmodel Properties\r\n\r\n // #region Other Stuff\r\n\r\n @computed\r\n public get canDisplayResetSection(): boolean {\r\n return StoresInstance.domain.showResetButton;\r\n }\r\n\r\n @computed\r\n public get canDisplayQuoteAndEmail(): boolean {\r\n return this.model.Quote.gutterProducts.length > 0 || this.model.Quote.roofProducts.length > 0;\r\n }\r\n\r\n @computed\r\n public get canDisplayPopup(): boolean {\r\n return this.errorStore.hasError;\r\n }\r\n\r\n @action\r\n private getProductData = async (): Promise => {\r\n try {\r\n const apiResult = await this.Get(Server.Api.Quote.GetProductData);\r\n\r\n if (apiResult.wasSuccessful) {\r\n this.model.GutterSystem.DelcoteProducts.DelcoteGSModel.fromProductDataDto(apiResult.payload.delcoteGSColours);\r\n this.model.RoofSystem.DelcoteProducts.Delcote10Model.fromProductDataDto(apiResult.payload.delcote10TopcoatColours);\r\n this.model.RoofSystem.DelcoteProducts.Delcote25Model.fromProductDataDto(apiResult.payload.delcote25BasecoatColours, apiResult.payload.delcote25TopcoatColours);\r\n this.model.RoofSystem.DelcoteProducts.DelcoteAsbestosModel.fromProductDataDto(\r\n apiResult.payload.delcoteAsbestosBasecoatColours,\r\n apiResult.payload.delcoteAsbestosTopcoatColours,\r\n );\r\n this.model.RoofSystem.SeamsilProducts.Seamsil100Model.fromProductDataDto(apiResult.payload.seamsil100TopcoatColours);\r\n } else {\r\n // Error\r\n this.errorStore.SetErrorMessage(\"Get Product Data\", \"There seem to be an issue getting the product data\", \"Please try again later or talk to support\");\r\n }\r\n } catch (exception) {\r\n // Catch\r\n this.errorStore.SetErrorMessage(\"Get Product Data\", \"There seems to be an issue talking to the server.\", \"Please try again later or talk to support\");\r\n } finally {\r\n // Finally\r\n }\r\n };\r\n\r\n @action\r\n public sendEmail = async (): Promise => {\r\n try {\r\n this.setShowSendEmail(false);\r\n\r\n let userDetails: QuoteUserDetailsDTO | undefined = this.accountStore.getUserDetailsForEmail();\r\n\r\n if (userDetails !== undefined) {\r\n const request: QuoteEmailRequest = {\r\n userDetails: userDetails,\r\n request: this.model.toDto(),\r\n response: this.quoteViewModel.model.toDto(),\r\n };\r\n\r\n const apiResult = await this.Post(Server.Api.Quote.SendEmail, request);\r\n\r\n if (apiResult.wasSuccessful) {\r\n this.errorStore.SetErrorMessage(\"Quotation Request\", \"Successfully sent quotation request.\", \"Please close this window to do another quote.\");\r\n this.setShowSendEmail(true);\r\n this.clearQuote();\r\n } else {\r\n // Error\r\n this.errorStore.SetErrorMessage(\"Quotation Request\", \"There seems to be an issue sending the quotation request\", \"Please try again later or talk to support\");\r\n this.setShowSendEmail(true);\r\n }\r\n }\r\n } catch (exception) {\r\n // Catch\r\n this.errorStore.SetErrorMessage(\"Quotation Request\", \"There seems to be an issue sending the quotation request\", \"Please try again later or talk to support\");\r\n this.setShowSendEmail(true);\r\n } finally {\r\n // Finally\r\n }\r\n };\r\n\r\n @action\r\n private setShowSendEmail = (value: boolean) => {\r\n this.canShowSendEmail = value;\r\n };\r\n\r\n @action\r\n private clearQuote = () => {\r\n this.model.Quote.gutterProducts.clear();\r\n this.model.Quote.roofProducts.clear();\r\n this.accountStore.setSubmitted(false);\r\n };\r\n\r\n // #endregion Other Stuff\r\n\r\n // #region Viewmodel Boilerplate\r\n\r\n public afterUpdate: undefined;\r\n public beforeUpdate: undefined;\r\n\r\n public isFieldValid(fieldName: keyof FieldType): boolean {\r\n return true;\r\n }\r\n\r\n // #endregion Viewmodel Boilerplate\r\n}\r\n","import { makeStyles, lighten, darken } from \"@material-ui/core\";\r\n\r\nexport const BQSAlertDialogStyle = makeStyles((theme) => ({\r\n root: {\r\n minWidth: \"640px\",\r\n },\r\n title: {\r\n borderBottom: \"1px solid #222\",\r\n },\r\n titletext: {\r\n fontSize: \"16px\",\r\n fontWeight: 500,\r\n },\r\n description: {\r\n padding: \"15px\",\r\n },\r\n btn: {\r\n color: \"white\",\r\n backgroundColor: \"#C12631\",\r\n \"&:hover\": {\r\n backgroundColor: lighten(\"#C12631\", 0.2),\r\n },\r\n },\r\n}));\r\n","// Libraries\r\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Box } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\nimport { BQSAlertDialogStyle } from \"./BQSAlertDialogStyle\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n canDisplay: boolean;\r\n displayName: string;\r\n displayContentLine1: string;\r\n displayContentLine2: string;\r\n execute: () => void;\r\n}\r\n\r\nexport const BQSAlertDialog: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n const bqsAlertDialogStyle = BQSAlertDialogStyle();\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n \r\n \r\n {props.displayName}\r\n \r\n \r\n \r\n {props.displayContentLine1}\r\n \r\n \r\n {props.displayContentLine2}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","// Libraries\r\nimport { Box } from \"@material-ui/core\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport React, { useState } from \"react\";\r\n\r\n// Custom\r\nimport { ProductSelectorStyle } from \"./ProductSelectorStyle\";\r\n\r\nimport { Email } from \"./SubViews/Email\";\r\nimport { Reset } from \"./SubViews/Reset\";\r\n//import { Guarantees } from \"./SubViews/Guarantees\";\r\nimport { GutterSystem } from \"./SubViews/GutterSystem\";\r\nimport { Products } from \"./SubViews/Products\";\r\n//import { Quote } from \"./SubViews/Quote\";\r\nimport { RoofSystem } from \"./SubViews/RoofSystem\";\r\n\r\nimport { ProductSelectorViewModel } from \"../../ViewModels/ProductSelector/ProductSelectorViewModel\";\r\nimport { BQSAlertDialog } from \"../Primitives/Dialogs/BQSAlertDialog\";\r\n\r\ninterface IProps {\r\n className?: string;\r\n}\r\n\r\nexport const ProductSelector: React.FC = (props: IProps) => {\r\n // #region Code Behind\r\n\r\n const productSelectorStyle = ProductSelectorStyle();\r\n const [viewModel] = useState(() => new ProductSelectorViewModel());\r\n\r\n // #endregion Code Behind\r\n\r\n // #region Render Result\r\n\r\n return useObserver(() => (\r\n <>\r\n \r\n \r\n {viewModel.ProductsViewModel.canDisplayRoofSystem && }\r\n {viewModel.ProductsViewModel.canDisplayGutterSystem && }\r\n {/* */}\r\n {/* {viewModel.canDisplayQuoteAndEmail && ( */}\r\n \r\n {/* */}\r\n \r\n \r\n {/* )} */}\r\n {viewModel.canDisplayResetSection === true && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n ));\r\n\r\n // #endregion Render Result\r\n};\r\n","import React, { useContext } from \"react\";\r\n\r\nimport { Dot, DotWrapper } from \"Core/Components/Styles/BaseStyles\";\r\nimport styled from \"styled-components\";\r\nimport { UnsupportedBrowser } from \"./UnsupportedBrowser\";\r\nimport { UserPage } from \"./UserAccess/UserPage\";\r\nimport { ProductSelector } from \"./ProductSelector/ProductSelector\";\r\nimport { useObserver } from \"mobx-react-lite\";\r\nimport { Stores, StoresContext } from \"Custom/Stores\";\r\nimport Box from \"@material-ui/core/Box\";\r\n\r\nconst Section1 = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst Section2 = styled.div`\r\n display: flex;\r\n margin: 0 auto;\r\n max-width: 1170px;\r\n`;\r\n\r\nconst FlexContainer = styled(Box)`\r\n display: flex;\r\n`;\r\n\r\nconst H1 = styled.h1`\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n font-size: 1.6rem;\r\n`;\r\n\r\nexport const Home: React.FC = () => {\r\n const storesContext = useContext(StoresContext);\r\n\r\n const getSection1 = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const getSection2 = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return useObserver(() => (\r\n <>\r\n {(window as any).IE11 ? (\r\n \r\n ) : (\r\n <>\r\n {!storesContext.domain.AccountStore.hasUserAccess && getSection1()}\r\n {storesContext.domain.AccountStore.hasUserAccess && getSection2()}\r\n \r\n )}\r\n \r\n ));\r\n};\r\n\r\nexport const Loaders: React.FC = () => {\r\n return (\r\n <>\r\n \r\n Animated Dots\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport \"./Error.scss\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Link from \"@material-ui/core/Link\";\r\n\r\nexport const Container = styled.div``;\r\n\r\nexport const CookieError: React.FC = () => {\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

ERROR

\r\n
\r\n

Sorry, it looks like cookies might be disabled in your browser. If you do not accept cookies, you may not be able to use some portions of this site.

\r\n

In the meantime, you can checkout our:

\r\n \r\n \r\n Privacy policy\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport \"./Error.scss\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport HomeIcon from \"@material-ui/icons/HomeOutlined\";\r\nimport { defaultTheme } from \"../../Custom/StylesAppSpecific/AppStyling\";\r\n\r\nexport const Container = styled.div`\r\n background-color: #d4d9ed;\r\n text-align: center;\r\n height: 100vh;\r\n\r\n .cont_principal {\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n }\r\n .cont_error {\r\n position: absolute;\r\n width: 100%;\r\n height: 300px;\r\n top: 50%;\r\n margin-top: -150px;\r\n }\r\n\r\n .cont_error > h1 {\r\n font-family: \"Lato\", sans-serif;\r\n font-weight: 400;\r\n font-size: 150px;\r\n color: #fff;\r\n position: relative;\r\n left: -100%;\r\n transition: all 0.5s;\r\n }\r\n\r\n .cont_error > p {\r\n font-family: \"Lato\", sans-serif;\r\n font-weight: 300;\r\n font-size: 24px;\r\n letter-spacing: 5px;\r\n color: #9294ae;\r\n position: relative;\r\n left: 100%;\r\n transition: all 0.5s;\r\n transition-delay: 0.5s;\r\n -webkit-transition: all 0.5s;\r\n -webkit-transition-delay: 0.5s;\r\n }\r\n\r\n .cont_aura_1 {\r\n position: absolute;\r\n width: 300px;\r\n height: 120%;\r\n top: 25px;\r\n right: -340px;\r\n background-color: #8a65df;\r\n box-shadow: 0px 0px 60px 20px rgba(137, 100, 222, 0.5);\r\n -webkit-transition: all 0.5s;\r\n transition: all 0.5s;\r\n }\r\n\r\n .cont_aura_2 {\r\n position: absolute;\r\n width: 100%;\r\n height: 300px;\r\n right: -10%;\r\n bottom: -301px;\r\n background-color: #8b65e4;\r\n box-shadow: 0px 0px 60px 10px rgba(131, 95, 214, 0.5), 0px 0px 20px 0px rgba(0, 0, 0, 0.1);\r\n z-index: 5;\r\n transition: all 0.5s;\r\n -webkit-transition: all 0.5s;\r\n }\r\n\r\n .cont_error_active > .cont_error > h1 {\r\n left: 0%;\r\n }\r\n .cont_error_active > .cont_error > p {\r\n left: 0%;\r\n }\r\n\r\n .cont_error_active > .cont_aura_2 {\r\n animation-name: animation_error_2;\r\n animation-duration: 4s;\r\n animation-timing-function: linear;\r\n animation-iteration-count: infinite;\r\n animation-direction: alternate;\r\n transform: rotate(-20deg);\r\n }\r\n .cont_error_active > .cont_aura_1 {\r\n transform: rotate(20deg);\r\n right: -170px;\r\n animation-name: animation_error_1;\r\n animation-duration: 4s;\r\n animation-timing-function: linear;\r\n animation-iteration-count: infinite;\r\n animation-direction: alternate;\r\n }\r\n\r\n @-webkit-keyframes animation_error_1 {\r\n from {\r\n -webkit-transform: rotate(20deg);\r\n transform: rotate(20deg);\r\n }\r\n to {\r\n -webkit-transform: rotate(25deg);\r\n transform: rotate(25deg);\r\n }\r\n }\r\n @-o-keyframes animation_error_1 {\r\n from {\r\n -webkit-transform: rotate(20deg);\r\n transform: rotate(20deg);\r\n }\r\n to {\r\n -webkit-transform: rotate(25deg);\r\n transform: rotate(25deg);\r\n }\r\n }\r\n @-moz-keyframes animation_error_1 {\r\n from {\r\n -webkit-transform: rotate(20deg);\r\n transform: rotate(20deg);\r\n }\r\n to {\r\n -webkit-transform: rotate(25deg);\r\n transform: rotate(25deg);\r\n }\r\n }\r\n @keyframes animation_error_1 {\r\n from {\r\n -webkit-transform: rotate(20deg);\r\n transform: rotate(20deg);\r\n }\r\n to {\r\n -webkit-transform: rotate(25deg);\r\n transform: rotate(25deg);\r\n }\r\n }\r\n`;\r\n\r\nexport const NotFound: React.FC = () => {\r\n return (\r\n \r\n
\r\n
\r\n

Oops

\r\n

The Page you're looking for isn't here.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useContext } from \"react\";\r\nimport { Stores, StoresContext } from \"./Custom/Stores\";\r\n\r\n//import { Samples } from \"./Custom/Views/Samples\";\r\n//import { LogViewer } from \"./Core/Views/LogViewer\";\r\nimport { Route } from \"react-router\";\r\n//import { SessionExpired } from \"./Custom/Views/SessionExpired\";\r\n//import { TestPage } from \"./Core/Views/TestPage\";\r\nimport { Home } from \"./Custom/Views/Home\";\r\nimport { CookieError } from \"./Custom/Views/CookieError\";\r\nimport { Error2 } from \"./Core/Views/Error2\";\r\nimport { NotFound } from \"./Core/Views/NotFound\";\r\n\r\nexport const AppRoutes: React.FC = () => {\r\n const store = useContext(StoresContext);\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n\r\n {/* Delete / comment out these routes later\r\n \r\n \r\n\r\n \r\n */}\r\n \r\n );\r\n};\r\n","// Libraries\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport { StylesProvider, ThemeProvider as MuiThemeProvider } from \"@material-ui/core/styles\";\r\nimport React from \"react\";\r\nimport { hot, setConfig } from \"react-hot-loader\";\r\nimport { Router } from \"react-router-dom\";\r\nimport { ThemeProvider } from \"styled-components\";\r\n\r\n// Core\r\nimport { GlobalHistory } from \"Core/CoreIndex\";\r\n\r\n// Custom\r\nimport { defaultTheme } from \"Custom/StylesAppSpecific/AppStyling\";\r\nimport { Layout } from \"Custom/Views/Layout\";\r\n\r\nimport { AppRoutes } from \"./AppRoutes\";\r\n\r\nsetConfig({\r\n showReactDomPatchNotification: false,\r\n});\r\n\r\nconst App: React.FC = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default hot(module)(App);\r\n","//EN Do not remove default theme from here\r\nimport \"Custom/StylesAppSpecific/AppStyling\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"index.scss\";\r\nimport * as serviceWorker from \"serviceWorker\";\r\nimport { CoreIndex } from \"./Core/CoreIndex\";\r\nimport App from \"./App\";\r\n\r\nconst Init: React.FC = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nReactDOM.render(, document.getElementById(\"root\"));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","export * from \"./IViewModel\";\r\nexport * from \"./ViewModelBase\";\r\n","// AJ: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\r\nexport class HttpError extends Error {\r\n public readonly httpStatusCode: number;\r\n\r\n public constructor(httpStatusCode: number, message: string) {\r\n // AJ: https://stackoverflow.com/questions/47941324/inherited-exceptions-and-instanceof\r\n const targetPrototype = new.target.prototype;\r\n super(message);\r\n Object.setPrototypeOf(this, targetPrototype);\r\n\r\n this.httpStatusCode = httpStatusCode;\r\n }\r\n}\r\n","import { HttpError } from \"./HttpError\";\r\n\r\n//AJ: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403\r\nexport class HttpForbiddenError extends HttpError {\r\n constructor() {\r\n //AJ: https://stackoverflow.com/questions/47941324/inherited-exceptions-and-instanceof\r\n const targetPrototype = new.target.prototype;\r\n super(403, \"Forbidden\");\r\n Object.setPrototypeOf(this, targetPrototype);\r\n }\r\n}\r\n","import { HttpError } from \"./HttpError\";\r\n\r\n//AJ: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401\r\nexport class HttpUnauthorizedError extends HttpError {\r\n constructor() {\r\n //AJ: https://stackoverflow.com/questions/47941324/inherited-exceptions-and-instanceof\r\n const targetPrototype = new.target.prototype;\r\n super(401, \"Unauthorized\");\r\n Object.setPrototypeOf(this, targetPrototype);\r\n }\r\n}\r\n","// Libs\r\nimport * as Axios from \"axios\";\r\n\r\n// App\r\nimport { HttpStatusToError } from \"./HttpStatusToError\";\r\n\r\nexport const CheckHttpStatus: (response: Axios.AxiosResponse) => void = (response) => {\r\n if (response.status !== 200) {\r\n throw HttpStatusToError(response.status, response.statusText);\r\n }\r\n};\r\n","export class RequestError extends Error {\r\n public readonly errorMessages: string[];\r\n\r\n constructor(errorMessages: string[]) {\r\n //AJ: https://stackoverflow.com/questions/47941324/inherited-exceptions-and-instanceof\r\n const targetPrototype = new.target.prototype;\r\n super(\"The request had errors.\");\r\n Object.setPrototypeOf(this, targetPrototype);\r\n\r\n this.errorMessages = errorMessages;\r\n }\r\n}\r\n","// App\r\nimport * as Errors from \"../../Errors\";\r\n\r\nexport const HttpStatusToError: (httpStatusCode: number, httpStatusText: string) => {} = (httpStatusCode, httpStatusText) => {\r\n if (httpStatusCode === 401) {\r\n return new Errors.HttpUnauthorizedError();\r\n } else if (httpStatusCode === 403) {\r\n return new Errors.HttpForbiddenError();\r\n } else {\r\n return new Errors.HttpError(httpStatusCode, httpStatusText);\r\n }\r\n};\r\n","// Libs\r\nimport * as Axios from \"axios\";\r\n\r\n// App\r\nimport { getApiUrl } from \"../Utils\";\r\n\r\nexport const GetDefaultConfig: () => Axios.AxiosRequestConfig = () => {\r\n return {\r\n validateStatus: undefined, // We handle the httpstatus validation throwing some custom errors objects.\r\n baseURL: getApiUrl(),\r\n };\r\n};\r\n","// Libs\r\nimport * as Axios from \"axios\";\r\nimport { merge as _merge } from \"lodash-es\";\r\n\r\n// App\r\nimport { GetDefaultConfig } from \"./GetDefaultConfig\";\r\n\r\nexport const MergeDefaultConfig: (...configs: (Axios.AxiosRequestConfig | undefined)[]) => Axios.AxiosRequestConfig = (...configs) => _merge(GetDefaultConfig(), ...configs);\r\n","export * from \"./CheckHttpStatus\";\r\nexport * from \"./GetDefaultConfig\";\r\nexport * from \"./HttpStatusToError\";\r\nexport * from \"./MergeDefaultConfig\";\r\nexport * from \"./PostFormWithFile\";\r\n","import styled, { keyframes } from \"styled-components\";\r\nimport { Button, Box, Paper, Container } from \"@material-ui/core\";\r\nexport type SuperDivProps = {\r\n pb?: string;\r\n pt?: string;\r\n mt?: string;\r\n mb?: string;\r\n inline?: boolean;\r\n color?: string;\r\n};\r\nexport const SuperDiv = styled.div`\r\n padding-bottom: ${(props) => props.pb};\r\n padding-top: ${(props) => props.pt};\r\n margin-top: ${(props) => props.mt};\r\n margin-bottom: ${(props) => props.mb};\r\n color: ${(props) => props.color};\r\n display: ${(props) => (props.inline ? \"inline\" : \"block\")};\r\n`;\r\n//https://github.com/azz/styled-css-grid\r\nconst autoRows = ({ minRowHeight = \"20px\" }) => `minmax(${minRowHeight}, auto)`;\r\nconst frGetter = (value: number | string) => (typeof value === \"number\" ? `repeat(${value}, 1fr)` : value);\r\nconst gap = ({ gap = \"8px\" }) => gap;\r\nconst flow = ({ flow = \"row\" }) => flow;\r\nconst formatAreas = (areas: string[]) => areas.map((area) => `\"${area}\"`).join(\" \");\r\nexport type CSSGridProps = {\r\n className: string;\r\n columns: string | number;\r\n gap: string;\r\n columnGap: string;\r\n rowGap: string;\r\n height: string;\r\n minRowHeight: string;\r\n flow: string;\r\n rows: string | number;\r\n areas: string[];\r\n justifyContent: string;\r\n alignContent: string;\r\n};\r\nexport const CSSGrid = styled(SuperDiv)>`\r\n display: grid;\r\n height: ${({ height = \"auto\" }) => height};\r\n grid-auto-flow: ${flow};\r\n grid-auto-rows: ${autoRows};\r\n ${({ rows }) => rows && `grid-template-rows: ${frGetter(rows)}`};\r\n grid-template-columns: ${({ columns = 12 }) => frGetter(columns)};\r\n grid-gap: ${gap};\r\n ${({ columnGap }) => columnGap && `column-gap: ${columnGap}`};\r\n ${({ rowGap }) => rowGap && `row-gap: ${rowGap}`};\r\n ${({ areas }) => areas && `grid-template-areas: ${formatAreas(areas)}`};\r\n ${({ justifyContent }) => justifyContent && `justify-content: ${justifyContent}`};\r\n ${({ alignContent }) => alignContent && `align-content: ${alignContent}`};\r\n`;\r\n\r\nexport type CellProps = {\r\n className: string;\r\n width: number;\r\n height: number;\r\n top: number | string;\r\n left: number | string;\r\n middle: boolean;\r\n center: boolean;\r\n area: string;\r\n};\r\nexport const Cell = styled(SuperDiv)>`\r\n height: 100%;\r\n min-width: 0;\r\n grid-column-end: ${({ width = 1 }) => `span ${width}`};\r\n grid-row-end: ${({ height = 1 }) => `span ${height}`};\r\n ${({ left }) => left && `grid-column-start: ${left}`};\r\n ${({ top }) => top && `grid-row-start: ${top}`};\r\n ${({ center }) => center && `text-align: center`};\r\n ${({ area }) => area && `grid-area: ${area}`};\r\n ${/* prettier-ignore */\r\n ({ middle }) => middle && `\r\n display: inline-flex;\r\n flex-flow: column wrap;\r\n justify-content: center;\r\n justify-self: stretch;\r\n `};\r\n`;\r\n\r\nexport const AppHeader: any = styled(Box)`\r\n height: 0;\r\n min-height: 100px;\r\n @media screen and (min-width: 1040px) {\r\n min-height: 100px;\r\n }\r\n\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: calc(10px + 2vmin);\r\n color: white;\r\n background-position: 0 40%;\r\n max-width: 100%;\r\n margin: 0 auto;\r\n`;\r\n\r\nexport const StyledButton = styled.button`\r\n font-size: 1em;\r\n margin: 1em;\r\n padding: 0.25em 1em;\r\n border-radius: 3px;\r\n background-color: cyan;\r\n\r\n /* Color the border and text with theme.main */\r\n color: ${(props) => props.theme.main};\r\n border: 2px solid ${(props) => props.theme.main};\r\n`;\r\n\r\nexport const Uppercase = styled.div`\r\n * {\r\n text-transform: uppercase;\r\n }\r\n`;\r\n\r\nexport const Centered = styled.div`\r\n text-align: center;\r\n`;\r\n\r\nexport interface StyledProps {\r\n pb?: string;\r\n pt?: string;\r\n mt?: string;\r\n mb?: string;\r\n inline?: boolean;\r\n color?: string;\r\n}\r\n//&& bumps up the importance of the style to override global styles. The more you use the higher it will be\r\nexport const Header4 = styled.h4`\r\n text-shadow: rgb(255, 255, 255) 2px 2px 5px;\r\n text-transform: uppercase;\r\n padding-bottom: ${(props) => props.pb};\r\n padding-top: ${(props) => props.pt};\r\n margin-top: ${(props) => props.mt};\r\n margin-bottom: ${(props) => props.mb};\r\n color: ${(props) => props.color};\r\n margin: 0px;\r\n font-size: 52px;\r\n font-weight: 700;\r\n display: ${(props) => (props.inline ? \"inline\" : \"block\")};\r\n`;\r\n\r\nexport const FancyBox = styled(Box)`\r\n display: inline-block;\r\n transition: background-color 0.5s ease-in-out;\r\n &:hover {\r\n background-color: #f2893e;\r\n /* animation: color 4s ease-in-out; */\r\n }\r\n`;\r\n\r\nexport const GridContainer = styled(Box)`\r\n display: grid;\r\n`;\r\n\r\nexport const BoxMiddle = styled(Box)`\r\n text-align: center;\r\n`;\r\n\r\nexport const ShoothillPaper = styled(Box)`\r\n box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12);\r\n /* color: rgba(0, 0, 0, 0.54); */\r\n color: ${(props) => props.theme.palette.text.secondary};\r\n border-radius: 4px;\r\n transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\r\n`;\r\n\r\nexport const PaperMiddle = styled(ShoothillPaper)`\r\n text-align: center;\r\n`;\r\n\r\nexport const PaperFullHeight = styled(Paper)`\r\n height: 90vh;\r\n padding-left: 10px;\r\n`;\r\n\r\nexport const LinkBox = styled(Box)`\r\n padding: 5px;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const RightSide = styled(CSSGrid)`\r\n overflow: auto;\r\n width: 100%;\r\n height: 90vh;\r\n`;\r\n\r\nexport const BounceAnimation = keyframes`\r\n\t0% { margin-bottom: 0; }\r\n\t50% { margin-bottom: 15px }\r\n\t100% { margin-bottom: 0 }\r\n`;\r\n\r\nexport const DotWrapper = styled.div`\r\n display: flex;\r\n align-items: flex-end;\r\n`;\r\n\r\nexport const Dot = styled.div`\r\n background-color: black;\r\n border-radius: 50%;\r\n width: 10px;\r\n height: 10px;\r\n margin: 0 5px;\r\n /* Animation */\r\n animation: ${BounceAnimation} 0.5s linear infinite;\r\n animation-delay: ${(props) => props.delay};\r\n`;\r\n\r\nexport const HeaderStyles: any = styled(Box)`\r\n height: 0;\r\n min-height: 80px;\r\n @media screen and (min-width: 1040px) {\r\n min-height: 80px;\r\n }\r\n\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: calc(10px + 2vmin);\r\n color: white;\r\n background-position: 0 40%;\r\n max-width: 100%;\r\n margin: 0 auto;\r\n`;\r\n\r\nexport const Row1040: any = styled(CSSGrid)`\r\n max-width: 1040px;\r\n margin: 0 auto;\r\n padding: 0;\r\n`;\r\n\r\nexport const BtnGrid: any = styled(CSSGrid)`\r\n margin: 0 auto;\r\n button {\r\n max-width: 295px;\r\n }\r\n`;\r\n\r\nexport const LeftBox: any = styled(Box)`\r\n margin: 20px 22px 20px 61px;\r\n @media (max-width: 1040px) {\r\n margin: 10px auto;\r\n max-width: 295px;\r\n }\r\n`;\r\n\r\nexport const RightBox: any = styled(LeftBox)`\r\n margin: 20px 61px 20px 22px;\r\n`;\r\n\r\nexport const Row1076: any = styled(Row1040)`\r\n max-width: 1076px;\r\n`;\r\n\r\nexport const BRFormBox: any = styled(Box)`\r\n width: 100%;\r\n background-color: rgba(255, 255, 255, 0.5);\r\n border-radius: 16px;\r\n border: none;\r\n margin: 30px auto 200px;\r\n @media screen and (max-width: 1024px) {\r\n margin: 0px auto 60px;\r\n }\r\n`;\r\n"],"sourceRoot":""}